From 26aceb9db6d4872960c37cf8d4e11e6bc912660e Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sat, 7 Mar 2015 19:12:39 -0800 Subject: [PATCH 001/219] [test suite] add more rigorous multi-port tests with per-rule regex search criteria --- test/tests/rijndael.pl | 27 +++++++++++++++++++++++++++ test/tests/rijndael_hmac.pl | 16 ++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/test/tests/rijndael.pl b/test/tests/rijndael.pl index 65c72e96..b7fbd341 100644 --- a/test/tests/rijndael.pl +++ b/test/tests/rijndael.pl @@ -1143,6 +1143,20 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, + { + 'category' => 'Rijndael', + 'subcategory' => 'client+server', + 'detail' => "$FW_TYPE multi port re search (1)", + 'function' => \&spa_cycle, + 'cmdline' => "$fwknopCmd -A tcp/60001,udp/60001 -a $fake_ip -D $loopback_ip --get-key " . + "$local_key_file $verbose_str", + 'fwknopd_cmdline' => "$fwknopdCmd $default_server_conf_args $intf_str", + 'server_positive_output_matches' => [qr/^1\s+ACCEPT\s+tcp.*dpt:60001/, + qr/^2\s+ACCEPT\s+udp.*dpt:60001/], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, + { 'category' => 'Rijndael', 'subcategory' => 'client+server', @@ -1154,6 +1168,19 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, + { + 'category' => 'Rijndael', + 'subcategory' => 'client+server', + 'detail' => "$FW_TYPE multi port re search (2)", + 'function' => \&spa_cycle, + 'cmdline' => "$fwknopCmd -A tcp/22,udp/53,tcp/1234 -a $fake_ip -D $loopback_ip --get-key " . + "$local_key_file $verbose_str", + 'fwknopd_cmdline' => "$fwknopdCmd $default_server_conf_args $intf_str", + 'server_positive_output_matches' => [qr/^1\s+ACCEPT\s+tcp.*dpt:22\s/, + qr/^2\s+ACCEPT\s+udp.*dpt:53\s/, qr/^3\s+ACCEPT\s+tcp.*dpt:1234\s/], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, { 'category' => 'Rijndael', diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index 3a1fe721..ff87cfe0 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -600,6 +600,22 @@ 'fw_rule_removed' => $NEW_RULE_REMOVED, 'key_file' => $cf{'rc_hmac_b64_key'}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "$FW_TYPE multi port re search (1)", + 'function' => \&spa_cycle, + 'cmdline' => "$fwknopCmd -A tcp/60001,udp/60001 -a $fake_ip -D $loopback_ip --rc-file " . + "$cf{'rc_hmac_b64_key'} $verbose_str", + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/^1\s+ACCEPT\s+tcp.*dpt:60001/, + qr/^2\s+ACCEPT\s+udp.*dpt:60001/], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', From 745a442f1830f9b4b36cf9657f518d67395530c4 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sat, 7 Mar 2015 19:36:23 -0800 Subject: [PATCH 002/219] [test suite] add AFL_HARDEN=1 to AFL compilation scripts --- test/afl/compile/afl-compile-no-enable-arg.sh | 2 +- test/afl/compile/afl-compile.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/afl/compile/afl-compile-no-enable-arg.sh b/test/afl/compile/afl-compile-no-enable-arg.sh index de6e38b6..aad12571 100755 --- a/test/afl/compile/afl-compile-no-enable-arg.sh +++ b/test/afl/compile/afl-compile-no-enable-arg.sh @@ -5,6 +5,6 @@ cd ../../ CC=afl-gcc ./extras/apparmor/configure_args.sh $@ make clean -make +AFL_HARDEN=1 make cd test/afl exit $? diff --git a/test/afl/compile/afl-compile.sh b/test/afl/compile/afl-compile.sh index 6e10643b..5dcdcb79 100755 --- a/test/afl/compile/afl-compile.sh +++ b/test/afl/compile/afl-compile.sh @@ -3,6 +3,6 @@ cd ../../ CC=afl-gcc ./extras/apparmor/configure_args.sh --enable-afl-fuzzing $@ make clean -make +AFL_HARDEN=1 make cd test/afl exit $? From cfd1cbf2bfc023e92c92928aafd10ce074b3affa Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sat, 7 Mar 2015 19:45:50 -0800 Subject: [PATCH 003/219] [server] minor macro usage update for 127.0.0.2 --- server/fw_util.h | 1 + server/fw_util_firewalld.h | 6 +++--- server/fw_util_iptables.h | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/server/fw_util.h b/server/fw_util.h index 015b2e63..4e737313 100644 --- a/server/fw_util.h +++ b/server/fw_util.h @@ -39,6 +39,7 @@ #define EXPIRE_COMMENT_PREFIX "_exp_" #define TMP_COMMENT "__TMPCOMMENT__" +#define DUMMY_IP "127.0.0.2" #if FIREWALL_FIREWALLD #include "fw_util_firewalld.h" diff --git a/server/fw_util_firewalld.h b/server/fw_util_firewalld.h index b91131d2..98e9852a 100644 --- a/server/fw_util_firewalld.h +++ b/server/fw_util_firewalld.h @@ -47,9 +47,9 @@ #define FIREWD_FWD_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define FIREWD_DNAT_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s --to-destination %s:%i" SH_REDIR #define FIREWD_SNAT_RULE_ARGS "-t %s -p %i -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s %s" SH_REDIR -#define FIREWD_TMP_COMMENT_ARGS "-t %s -I %s %i -s 127.0.0.2 -m comment --comment " TMP_COMMENT " -j %s" SH_REDIR -#define FIREWD_TMP_CHK_RULE_ARGS "-t %s -I %s %i -s 127.0.0.2 -p udp -j %s" SH_REDIR -#define FIREWD_TMP_VERIFY_CHK_ARGS "-t %s -C %s -s 127.0.0.2 -p udp -j %s" SH_REDIR +#define FIREWD_TMP_COMMENT_ARGS "-t %s -I %s %i -s " DUMMY_IP " -m comment --comment " TMP_COMMENT " -j %s" SH_REDIR +#define FIREWD_TMP_CHK_RULE_ARGS "-t %s -I %s %i -s " DUMMY_IP " -p udp -j %s" SH_REDIR +#define FIREWD_TMP_VERIFY_CHK_ARGS "-t %s -C %s -s " DUMMY_IP " -p udp -j %s" SH_REDIR #define FIREWD_DEL_RULE_ARGS "-t %s -D %s %i" SH_REDIR #define FIREWD_NEW_CHAIN_ARGS "-t %s -N %s" SH_REDIR #define FIREWD_FLUSH_CHAIN_ARGS "-t %s -F %s" SH_REDIR diff --git a/server/fw_util_iptables.h b/server/fw_util_iptables.h index 0c290d57..8609685c 100644 --- a/server/fw_util_iptables.h +++ b/server/fw_util_iptables.h @@ -48,9 +48,9 @@ #define IPT_FWD_ALL_RULE_ARGS "-t %s -s %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define IPT_DNAT_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s --to-destination %s:%i" SH_REDIR #define IPT_SNAT_RULE_ARGS "-t %s -p %i -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s %s" SH_REDIR -#define IPT_TMP_COMMENT_ARGS "-t %s -I %s %i -s 127.0.0.2 -m comment --comment " TMP_COMMENT " -j %s" SH_REDIR -#define IPT_TMP_CHK_RULE_ARGS "-t %s -I %s %i -s 127.0.0.2 -p udp -j %s" SH_REDIR -#define IPT_TMP_VERIFY_CHK_ARGS "-t %s -C %s -s 127.0.0.2 -p udp -j %s" SH_REDIR +#define IPT_TMP_COMMENT_ARGS "-t %s -I %s %i -s " DUMMY_IP " -m comment --comment " TMP_COMMENT " -j %s" SH_REDIR +#define IPT_TMP_CHK_RULE_ARGS "-t %s -I %s %i -s " DUMMY_IP " -p udp -j %s" SH_REDIR +#define IPT_TMP_VERIFY_CHK_ARGS "-t %s -C %s -s " DUMMY_IP " -p udp -j %s" SH_REDIR #define IPT_DEL_RULE_ARGS "-t %s -D %s %i" SH_REDIR #define IPT_NEW_CHAIN_ARGS "-t %s -N %s" SH_REDIR #define IPT_FLUSH_CHAIN_ARGS "-t %s -F %s" SH_REDIR From 59edf64d9cc507047d429ad02b71fc5ad3767878 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sat, 7 Mar 2015 20:09:31 -0800 Subject: [PATCH 004/219] [server] consolidate fw creation, add FORWARD_ALL functionality --- server/fw_util_firewalld.c | 271 +++++++++++++------------------------ server/fw_util_firewalld.h | 1 + server/fw_util_iptables.c | 1 - 3 files changed, 97 insertions(+), 176 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 610f99fd..910b4372 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -962,6 +962,64 @@ create_rule(const fko_srv_options_t * const opts, return res; } +static void +firewd_rule(const fko_srv_options_t * const opts, + const char * const complete_rule_buf, + const char * const fw_rule_macro, + const char * const srcip, const char * const dstip, + const unsigned int proto, const unsigned int port, + struct fw_chain * const chain, + const unsigned int exp_ts, const time_t now, + const char * const msg, const char * const access_msg) +{ + char rule_buf[CMD_BUFSIZE] = {0}; + + if(complete_rule_buf != NULL && complete_rule_buf[0] != 0x0) + { + strlcpy(rule_buf, complete_rule_buf, CMD_BUFSIZE-1); + } + else + { + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, fw_rule_macro, + chain->table, + proto, + srcip, + dstip, + port, + exp_ts, + chain->target + ); + } + + /* Check to make sure that the chain and jump rule exists + */ + mk_chain(opts, chain->type); + + if(rule_exists(opts, chain, rule_buf, + proto, srcip, dstip, port, exp_ts) == 0) + { + if(create_rule(opts, chain->to_chain, rule_buf)) + { + log_msg(LOG_INFO, "Added %s rule to %s for %s -> %s %s, expires at %u", + msg, chain->to_chain, srcip, (dstip == NULL) ? FIREWD_ANY_IP : dstip, + access_msg, exp_ts + ); + + chain->active_rules++; + + /* Reset the next expected expire time for this chain if it + * is warranted. + */ + if(chain->next_expire < now || exp_ts < chain->next_expire) + chain->next_expire = exp_ts; + } + } + + return; +} + /****************************************************************************/ /* Rule Processing - Create an access request... @@ -989,7 +1047,7 @@ process_spa_request(const fko_srv_options_t * const opts, struct fw_chain * const dnat_chain = &(opts->fw_config->chain[FIREWD_DNAT_ACCESS]); struct fw_chain *snat_chain; /* We assign this later (if we need to). */ - int res = 0, is_err, snat_chain_num = 0; + int res = 0, is_err; time_t now; unsigned int exp_ts; @@ -1039,73 +1097,20 @@ process_spa_request(const fko_srv_options_t * const opts, */ while(ple != NULL) { - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_RULE_ARGS, - in_chain->table, - ple->proto, - spadat->use_src_ip, + firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - ple->port, - exp_ts, - in_chain->target - ); - - if(rule_exists(opts, in_chain, rule_buf, - ple->proto, spadat->use_src_ip, spadat->pkt_destination_ip, ple->port, exp_ts) == 0) - { - if(create_rule(opts, in_chain->to_chain, rule_buf)) - { - log_msg(LOG_INFO, "Added Rule to %s for %s, %s expires at %u", - in_chain->to_chain, spadat->use_src_ip, - spadat->spa_message_remain, exp_ts - ); - - in_chain->active_rules++; - - /* Reset the next expected expire time for this chain if it - * is warranted. - */ - if(in_chain->next_expire < now || exp_ts < in_chain->next_expire) - in_chain->next_expire = exp_ts; - } - } + ple->proto, ple->port, in_chain, exp_ts, now, "access", + spadat->spa_message_remain); /* If we have to make an corresponding OUTPUT rule if out_chain target * is not NULL. */ if(strlen(out_chain->to_chain)) { - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_OUT_RULE_ARGS, - out_chain->table, - ple->proto, - spadat->use_src_ip, + firewd_rule(opts, NULL, FIREWD_OUT_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - ple->port, - exp_ts, - out_chain->target - ); - - if(rule_exists(opts, out_chain, rule_buf, - ple->proto, spadat->use_src_ip, spadat->pkt_destination_ip, ple->port, exp_ts) == 0) - { - if(create_rule(opts, out_chain->to_chain, rule_buf)) - { - log_msg(LOG_INFO, "Added Rule in %s for %s, %s expires at %u", - out_chain->to_chain, spadat->use_src_ip, - spadat->spa_message_remain, exp_ts - ); - - out_chain->active_rules++; - - /* Reset the next expected expire time for this chain if it - * is warranted. */ - if(out_chain->next_expire < now || exp_ts < out_chain->next_expire) - out_chain->next_expire = exp_ts; - } - } + ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", + spadat->spa_message_remain); } ple = ple->next; } @@ -1150,89 +1155,42 @@ process_spa_request(const fko_srv_options_t * const opts, if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG) { - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_RULE_ARGS, - in_chain->table, - fst_proto, - spadat->use_src_ip, + firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - nat_port, - exp_ts, - in_chain->target - ); - - /* Check to make sure that the jump rules exist for each - * required chain - */ - mk_chain(opts, FIREWD_INPUT_ACCESS); - - if(rule_exists(opts, in_chain, rule_buf, - fst_proto, spadat->use_src_ip, spadat->pkt_destination_ip, nat_port, exp_ts) == 0) - { - if(create_rule(opts, in_chain->to_chain, rule_buf)) - { - log_msg(LOG_INFO, "Added Rule to %s for %s, %s expires at %u", - in_chain->to_chain, spadat->use_src_ip, - spadat->spa_message_remain, exp_ts - ); - - in_chain->active_rules++; - - /* Reset the next expected expire time for this chain if it - * is warranted. - */ - if(in_chain->next_expire < now || exp_ts < in_chain->next_expire) - in_chain->next_expire = exp_ts; - } - } + fst_proto, nat_port, in_chain, exp_ts, now, "local NAT", + spadat->spa_message_remain); } else if(strlen(fwd_chain->to_chain)) { - /* Make our FORWARD and NAT rules, and make sure the - * required chain and jump rule exists - */ - mk_chain(opts, FIREWD_FORWARD_ACCESS); - - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_FWD_RULE_ARGS, - fwd_chain->table, - fst_proto, - spadat->use_src_ip, - nat_ip, - nat_port, - exp_ts, - fwd_chain->target - ); - - if(rule_exists(opts, fwd_chain, rule_buf, fst_proto, - spadat->use_src_ip, nat_ip, nat_port, exp_ts) == 0) + if(acc->forward_all) { - if(create_rule(opts, fwd_chain->to_chain, rule_buf)) - { - log_msg(LOG_INFO, "Added FORWARD Rule to %s for %s, %s expires at %u", - fwd_chain->to_chain, spadat->use_src_ip, - spadat->spa_message_remain, exp_ts - ); + memset(rule_buf, 0, CMD_BUFSIZE); - fwd_chain->active_rules++; + snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_FWD_ALL_RULE_ARGS, + fwd_chain->table, + spadat->use_src_ip, + exp_ts, + fwd_chain->target + ); - /* Reset the next expected expire time for this chain if it - * is warranted. - */ - if(fwd_chain->next_expire < now || exp_ts < fwd_chain->next_expire) - fwd_chain->next_expire = exp_ts; - } + /* Make a global ACCEPT rule for all ports/protocols + */ + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, + "FORWARD ALL", "*/*"); + } + else + { + /* Make our FORWARD and NAT rules + */ + firewd_rule(opts, NULL, FIREWD_FWD_RULE_ARGS, spadat->use_src_ip, + nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, + "FORWARD", spadat->spa_message_remain); } } if(strlen(dnat_chain->to_chain)) { - /* Make sure the required chain and jump rule exist - */ - mk_chain(opts, FIREWD_DNAT_ACCESS); - memset(rule_buf, 0, CMD_BUFSIZE); snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_RULE_ARGS, @@ -1247,25 +1205,10 @@ process_spa_request(const fko_srv_options_t * const opts, nat_port ); - if(rule_exists(opts, dnat_chain, rule_buf, fst_proto, - spadat->use_src_ip, spadat->pkt_destination_ip, fst_port, exp_ts) == 0) - { - if(create_rule(opts, dnat_chain->to_chain, rule_buf)) - { - log_msg(LOG_INFO, "Added DNAT Rule to %s for %s, %s expires at %u", - dnat_chain->to_chain, spadat->use_src_ip, - spadat->spa_message_remain, exp_ts - ); - - dnat_chain->active_rules++; - - /* Reset the next expected expire time for this chain if it - * is warranted. - */ - if(dnat_chain->next_expire < now || exp_ts < dnat_chain->next_expire) - dnat_chain->next_expire = exp_ts; - } - } + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), + fst_proto, fst_port, dnat_chain, exp_ts, now, "DNAT", + spadat->spa_message_remain); } /* If SNAT (or MASQUERADE) is wanted, then we add those rules here as well. @@ -1280,7 +1223,6 @@ process_spa_request(const fko_srv_options_t * const opts, snat_chain = &(opts->fw_config->chain[FIREWD_SNAT_ACCESS]); snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-source %s:%i", acc->force_snat_ip, fst_port); - snat_chain_num = FIREWD_SNAT_ACCESS; } else if(acc->force_snat && acc->force_masquerade) { @@ -1288,7 +1230,6 @@ process_spa_request(const fko_srv_options_t * const opts, snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-ports %i", fst_port); - snat_chain_num = FIREWD_MASQUERADE_ACCESS; } else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) @@ -1298,7 +1239,6 @@ process_spa_request(const fko_srv_options_t * const opts, snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-source %s:%i", opts->config[CONF_SNAT_TRANSLATE_IP], fst_port); - snat_chain_num = FIREWD_SNAT_ACCESS; } else { @@ -1306,11 +1246,8 @@ process_spa_request(const fko_srv_options_t * const opts, snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-ports %i", fst_port); - snat_chain_num = FIREWD_MASQUERADE_ACCESS; } - mk_chain(opts, snat_chain_num); - memset(rule_buf, 0, CMD_BUFSIZE); snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_RULE_ARGS, @@ -1323,25 +1260,9 @@ process_spa_request(const fko_srv_options_t * const opts, snat_target ); - if(rule_exists(opts, snat_chain, rule_buf, fst_proto, - spadat->use_src_ip, NULL, nat_port, exp_ts) == 0) - { - if(create_rule(opts, snat_chain->to_chain, rule_buf)) - { - log_msg(LOG_INFO, "Added SNAT Rule to %s for %s, %s expires at %u", - snat_chain->to_chain, spadat->use_src_ip, - spadat->spa_message_remain, exp_ts - ); - - snat_chain->active_rules++; - - /* Reset the next expected expire time for this chain if it - * is warranted. - */ - if(snat_chain->next_expire < now || exp_ts < snat_chain->next_expire) - snat_chain->next_expire = exp_ts; - } - } + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, fst_proto, nat_port, snat_chain, exp_ts, now, "SNAT", + spadat->spa_message_remain); } } diff --git a/server/fw_util_firewalld.h b/server/fw_util_firewalld.h index 98e9852a..17564a44 100644 --- a/server/fw_util_firewalld.h +++ b/server/fw_util_firewalld.h @@ -45,6 +45,7 @@ #define FIREWD_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define FIREWD_OUT_RULE_ARGS "-t %s -p %i -d %s -s %s --sport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define FIREWD_FWD_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR +#define FIREWD_FWD_ALL_RULE_ARGS "-t %s -s %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define FIREWD_DNAT_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s --to-destination %s:%i" SH_REDIR #define FIREWD_SNAT_RULE_ARGS "-t %s -p %i -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s %s" SH_REDIR #define FIREWD_TMP_COMMENT_ARGS "-t %s -I %s %i -s " DUMMY_IP " -m comment --comment " TMP_COMMENT " -j %s" SH_REDIR diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 2dee889f..8ed4acdb 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1111,7 +1111,6 @@ process_spa_request(const fko_srv_options_t * const opts, (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", spadat->spa_message_remain); - } ple = ple->next; } From 40c695097ed73d566861ba69c7e812c702aeac7a Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 22:05:10 -0400 Subject: [PATCH 005/219] added spa-pkts-2.6.5.59edf64 AFL test results file --- test/afl/results/spa-pkts-2.6.5.59edf64 | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 test/afl/results/spa-pkts-2.6.5.59edf64 diff --git a/test/afl/results/spa-pkts-2.6.5.59edf64 b/test/afl/results/spa-pkts-2.6.5.59edf64 new file mode 100644 index 00000000..6dec38f6 --- /dev/null +++ b/test/afl/results/spa-pkts-2.6.5.59edf64 @@ -0,0 +1,27 @@ + + american fuzzy lop 1.57b (fwknopd,SPA,encode/decode,59edf64) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 1 days, 2 hrs, 58 min, 13 sec │ cycles done : 41 │ +│ last new path : 0 days, 4 hrs, 48 min, 26 sec │ total paths : 431 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 134 (31.09%) │ map density : 1760 (2.69%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 1.59 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : splice 20 │ favored paths : 140 (32.48%) │ +│ stage execs : 338/500 (67.60%) │ new edges on : 188 (43.62%) │ +│ total execs : 131M │ total crashes : 0 (0 unique) │ +│ exec speed : 1338/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 86/303k, 13/303k, 13/302k │ levels : 14 │ +│ byte flips : 0/38.0k, 0/37.6k, 0/36.7k │ pending : 0 │ +│ arithmetics : 55/2.09M, 0/5106, 0/891 │ pend fav : 0 │ +│ known ints : 5/238k, 0/1.39M, 1/1.84M │ own finds : 428 │ +│ dictionary : 0/0, 0/0, 29/1.79M │ imported : n/a │ +│ havoc : 205/48.4M, 12/74.7M │ variable : 431 │ +│ trim : 2.40%/13.2k, 0.00% ├────────────────────────┘ +└─────────────────────────────────────────────────────┘ [cpu:117%] + + From 95ae8dd1fe494b9f68eb05bb2648ba58ff81f9f1 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 22:20:26 -0400 Subject: [PATCH 006/219] minor ChangeLog update --- ChangeLog | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChangeLog b/ChangeLog index b886b301..bede335b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ fwknop-2.6.6 (02//2015): - [server] Bug fix when compiled with --enable-udp-server to not include pcap.h, which is likely not installed whenever libpcap is also not installed. This bug was reported by Alexander Kozhevnikov. + - Set AFL_HARDEN=1 to AFL fuzzing wrapper scripts. This enables simple + memory bug detection in AFL at the cost of a small performance hit. fwknop-2.6.5 (12/16/2014): - [server] (Grant Pannell) Added a new access.conf variable "DESTINATION" From 3febc74c22a337795eea844d16dcb200842e2243 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 22:34:45 -0400 Subject: [PATCH 007/219] [test suite] extend digest lengths for SPA input packets --- test/afl/test-cases/spa-pkts/spa.start | 2 +- test/afl/test-cases/spa-pkts/spa2.start | 2 +- test/afl/test-cases/spa-pkts/spa3.start | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/test/afl/test-cases/spa-pkts/spa.start b/test/afl/test-cases/spa-pkts/spa.start index 153d2c1d..5b7e5c26 100644 --- a/test/afl/test-cases/spa-pkts/spa.start +++ b/test/afl/test-cases/spa-pkts/spa.start @@ -1 +1 @@ -1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAA \ No newline at end of file +1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa2.start b/test/afl/test-cases/spa-pkts/spa2.start index 7b4f3a9d..3a744068 100644 --- a/test/afl/test-cases/spa-pkts/spa2.start +++ b/test/afl/test-cases/spa-pkts/spa2.start @@ -1 +1 @@ -3145808919615481:root:1397329899:2.0.1:0:127.0.0.2,echo fwknoptest > /tmp/fwknoptest:AAAAA +3145808919615481:root:1397329899:2.0.1:0:127.0.0.2,echo fwknoptest > /tmp/fwknoptest:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa3.start b/test/afl/test-cases/spa-pkts/spa3.start index 14322aed..44079f0b 100644 --- a/test/afl/test-cases/spa-pkts/spa3.start +++ b/test/afl/test-cases/spa-pkts/spa3.start @@ -1 +1 @@ -1716411011200157:root:1397329899:2.0.1:4:127.0.0.2,tcp/22:192.168.10.1,12345:1234:AAAAAA +1716411011200157:root:1397329899:2.0.1:4:127.0.0.2,tcp/22:192.168.10.1,12345:1234:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file From 89d7241a51f102619ec24ac85566730c550e0652 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 22:37:01 -0400 Subject: [PATCH 008/219] [test suite] include all digest lengths for SPA input packets (afl-cmin usage will be next) --- test/afl/test-cases/spa-pkts/spa1_md5.start | 1 + test/afl/test-cases/spa-pkts/{spa.start => spa1_sha256.start} | 0 test/afl/test-cases/spa-pkts/spa1_sha384.start | 1 + test/afl/test-cases/spa-pkts/spa1_sha512.start | 1 + test/afl/test-cases/spa-pkts/spa2_md5.start | 1 + test/afl/test-cases/spa-pkts/{spa2.start => spa2_sha256.start} | 0 test/afl/test-cases/spa-pkts/spa2_sha384.start | 1 + test/afl/test-cases/spa-pkts/spa2_sha512.start | 1 + test/afl/test-cases/spa-pkts/spa3_md5.start | 1 + test/afl/test-cases/spa-pkts/{spa3.start => spa3_sha256.start} | 0 test/afl/test-cases/spa-pkts/spa3_sha384.start | 1 + test/afl/test-cases/spa-pkts/spa3_sha512.start | 1 + 12 files changed, 9 insertions(+) create mode 100644 test/afl/test-cases/spa-pkts/spa1_md5.start rename test/afl/test-cases/spa-pkts/{spa.start => spa1_sha256.start} (100%) create mode 100644 test/afl/test-cases/spa-pkts/spa1_sha384.start create mode 100644 test/afl/test-cases/spa-pkts/spa1_sha512.start create mode 100644 test/afl/test-cases/spa-pkts/spa2_md5.start rename test/afl/test-cases/spa-pkts/{spa2.start => spa2_sha256.start} (100%) create mode 100644 test/afl/test-cases/spa-pkts/spa2_sha384.start create mode 100644 test/afl/test-cases/spa-pkts/spa2_sha512.start create mode 100644 test/afl/test-cases/spa-pkts/spa3_md5.start rename test/afl/test-cases/spa-pkts/{spa3.start => spa3_sha256.start} (100%) create mode 100644 test/afl/test-cases/spa-pkts/spa3_sha384.start create mode 100644 test/afl/test-cases/spa-pkts/spa3_sha512.start diff --git a/test/afl/test-cases/spa-pkts/spa1_md5.start b/test/afl/test-cases/spa-pkts/spa1_md5.start new file mode 100644 index 00000000..a9d66380 --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa1_md5.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa.start b/test/afl/test-cases/spa-pkts/spa1_sha256.start similarity index 100% rename from test/afl/test-cases/spa-pkts/spa.start rename to test/afl/test-cases/spa-pkts/spa1_sha256.start diff --git a/test/afl/test-cases/spa-pkts/spa1_sha384.start b/test/afl/test-cases/spa-pkts/spa1_sha384.start new file mode 100644 index 00000000..ba281f31 --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa1_sha384.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa1_sha512.start b/test/afl/test-cases/spa-pkts/spa1_sha512.start new file mode 100644 index 00000000..99809087 --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa1_sha512.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa2_md5.start b/test/afl/test-cases/spa-pkts/spa2_md5.start new file mode 100644 index 00000000..d5153729 --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa2_md5.start @@ -0,0 +1 @@ +3145808919615481:root:1397329899:2.0.1:0:127.0.0.2,echo fwknoptest > /tmp/fwknoptest:AAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa2.start b/test/afl/test-cases/spa-pkts/spa2_sha256.start similarity index 100% rename from test/afl/test-cases/spa-pkts/spa2.start rename to test/afl/test-cases/spa-pkts/spa2_sha256.start diff --git a/test/afl/test-cases/spa-pkts/spa2_sha384.start b/test/afl/test-cases/spa-pkts/spa2_sha384.start new file mode 100644 index 00000000..de8691b7 --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa2_sha384.start @@ -0,0 +1 @@ +3145808919615481:root:1397329899:2.0.1:0:127.0.0.2,echo fwknoptest > /tmp/fwknoptest:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa2_sha512.start b/test/afl/test-cases/spa-pkts/spa2_sha512.start new file mode 100644 index 00000000..f8a0e3bd --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa2_sha512.start @@ -0,0 +1 @@ +3145808919615481:root:1397329899:2.0.1:0:127.0.0.2,echo fwknoptest > /tmp/fwknoptest:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa3_md5.start b/test/afl/test-cases/spa-pkts/spa3_md5.start new file mode 100644 index 00000000..6d63112e --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa3_md5.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:4:127.0.0.2,tcp/22:192.168.10.1,12345:1234:AAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa3.start b/test/afl/test-cases/spa-pkts/spa3_sha256.start similarity index 100% rename from test/afl/test-cases/spa-pkts/spa3.start rename to test/afl/test-cases/spa-pkts/spa3_sha256.start diff --git a/test/afl/test-cases/spa-pkts/spa3_sha384.start b/test/afl/test-cases/spa-pkts/spa3_sha384.start new file mode 100644 index 00000000..8e24ff4f --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa3_sha384.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:4:127.0.0.2,tcp/22:192.168.10.1,12345:1234:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts/spa3_sha512.start b/test/afl/test-cases/spa-pkts/spa3_sha512.start new file mode 100644 index 00000000..7c6057f4 --- /dev/null +++ b/test/afl/test-cases/spa-pkts/spa3_sha512.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:4:127.0.0.2,tcp/22:192.168.10.1,12345:1234:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file From 104aeca978d323db3e3a9cfb2c543547b32416cb Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 22:48:11 -0400 Subject: [PATCH 009/219] [test suite] switch SPA packets test to use afl-cmin test cases --- .../fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh | 7 +++++++ test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh | 9 ++++++--- test/afl/fuzzing-wrappers/spa-pkts.sh | 2 +- test/afl/test-cases/spa-pkts.cmin/spa1_md5.start | 1 + test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start | 1 + test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start | 1 + test/afl/test-cases/spa-pkts.cmin/spa2_md5.start | 1 + test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start | 1 + test/afl/test-cases/spa-pkts.cmin/spa3_md5.start | 1 + 9 files changed, 20 insertions(+), 4 deletions(-) create mode 100755 test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh create mode 100644 test/afl/test-cases/spa-pkts.cmin/spa1_md5.start create mode 100644 test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start create mode 100644 test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start create mode 100644 test/afl/test-cases/spa-pkts.cmin/spa2_md5.start create mode 100644 test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start create mode 100644 test/afl/test-cases/spa-pkts.cmin/spa3_md5.start diff --git a/test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh b/test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh new file mode 100755 index 00000000..88cd8197 --- /dev/null +++ b/test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh @@ -0,0 +1,7 @@ +#!/bin/sh -x + +TEST_CASES_DIR=test-cases + +LD_LIBRARY_PATH=../../lib/.libs afl-cmin -i $TEST_CASES_DIR/spa-pkts -o $TEST_CASES_DIR/spa-pkts.cmin ../../server/.libs/fwknopd -c ../conf/default_fwknopd.conf -a ../conf/default_access.conf -A -f -t + +exit $? diff --git a/test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh b/test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh index 7cdb2e4c..7da4064f 100755 --- a/test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh +++ b/test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh @@ -1,7 +1,10 @@ #!/bin/sh -x -SPA_PKT="1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAA" +IN_DIR="test-cases/spa-pkts.cmin" -echo -n $SPA_PKT | LD_LIBRARY_PATH=../../lib/.libs ../../server/.libs/fwknopd -c ../conf/default_fwknopd.conf -a ../conf/default_access.conf -A -f -t +for spa_pkt_file in $IN_DIR/* +do + cat $spa_pkt_file | LD_LIBRARY_PATH=../../lib/.libs ../../server/.libs/fwknopd -c ../conf/default_fwknopd.conf -a ../conf/default_access.conf -A -f -t || exit $? +done -exit $? +exit 0 diff --git a/test/afl/fuzzing-wrappers/spa-pkts.sh b/test/afl/fuzzing-wrappers/spa-pkts.sh index d04319f9..6d701a6b 100755 --- a/test/afl/fuzzing-wrappers/spa-pkts.sh +++ b/test/afl/fuzzing-wrappers/spa-pkts.sh @@ -9,7 +9,7 @@ FDIR="spa-pkts.out" OUT_DIR="$TOP_DIR/$FDIR" PREV_OUT_DIR='' -IN_DIR="test-cases/spa-pkts" +IN_DIR="test-cases/spa-pkts.cmin" ### build up our afl-fuzz text banner TSTR="fwknopd,SPA,encode/decode" diff --git a/test/afl/test-cases/spa-pkts.cmin/spa1_md5.start b/test/afl/test-cases/spa-pkts.cmin/spa1_md5.start new file mode 100644 index 00000000..a9d66380 --- /dev/null +++ b/test/afl/test-cases/spa-pkts.cmin/spa1_md5.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start b/test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start new file mode 100644 index 00000000..5b7e5c26 --- /dev/null +++ b/test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start b/test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start new file mode 100644 index 00000000..ba281f31 --- /dev/null +++ b/test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts.cmin/spa2_md5.start b/test/afl/test-cases/spa-pkts.cmin/spa2_md5.start new file mode 100644 index 00000000..d5153729 --- /dev/null +++ b/test/afl/test-cases/spa-pkts.cmin/spa2_md5.start @@ -0,0 +1 @@ +3145808919615481:root:1397329899:2.0.1:0:127.0.0.2,echo fwknoptest > /tmp/fwknoptest:AAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start b/test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start new file mode 100644 index 00000000..de8691b7 --- /dev/null +++ b/test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start @@ -0,0 +1 @@ +3145808919615481:root:1397329899:2.0.1:0:127.0.0.2,echo fwknoptest > /tmp/fwknoptest:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file diff --git a/test/afl/test-cases/spa-pkts.cmin/spa3_md5.start b/test/afl/test-cases/spa-pkts.cmin/spa3_md5.start new file mode 100644 index 00000000..6d63112e --- /dev/null +++ b/test/afl/test-cases/spa-pkts.cmin/spa3_md5.start @@ -0,0 +1 @@ +1716411011200157:root:1397329899:2.0.1:4:127.0.0.2,tcp/22:192.168.10.1,12345:1234:AAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file From ab5c000a32dca8e6584be55d168810f774856b32 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 22:55:50 -0400 Subject: [PATCH 010/219] [test suite] added afl-cmin scripts, and the main test suite configs are referenced --- server/config_init.c | 4 +- .../helpers/afl-cmin/server-access-cmin.sh | 19 +++++++++ .../helpers/afl-cmin/server-conf-cmin.sh | 18 ++++++++ .../helpers/afl-cmin/spa-pkts-cmin.sh | 9 +++- test/afl/fuzzing-wrappers/server-access.sh | 5 ++- test/afl/fuzzing-wrappers/server-conf.sh | 7 +-- .../server-access.cmin/cfb_mode_access.conf | 4 ++ .../server-access.cmin/cmd_access.conf | 4 ++ .../server-access.cmin/cmd_giduid_access.conf | 6 +++ .../server-access.cmin/cmd_setuid_access.conf | 5 +++ .../server-access.cmin/ctr_mode_access.conf | 4 ++ .../server-access.cmin/default_fwknopd.conf | 1 + .../dual_key_legacy_iv_access.conf | 10 +++++ .../server-access.cmin/ecb_mode_access.conf | 4 ++ .../expired_epoch_stanza_access.conf | 4 ++ .../expired_stanza_access.conf | 4 ++ .../server-access.cmin/force_nat_access.conf | 4 ++ .../fuzzing_open_ports_access.conf | 4 ++ .../fuzzing_restrict_ports_access.conf | 5 +++ .../fuzzing_source_access.conf | 4 ++ .../fwknoprc_with_default_key | 2 + .../gpg_no_sig_no_fpr_access.conf | 8 ++++ .../hmac_dual_key_usage_access.conf | 12 ++++++ .../hmac_equal_keys_access.conf | 17 ++++++++ .../hmac_force_masq_access.conf | 6 +++ .../hmac_force_snat_access.conf | 6 +++ .../hmac_fuzzing_access.conf | 5 +++ .../hmac_get_key_access.conf | 4 ++ .../hmac_invalid_type_access.conf | 5 +++ .../hmac_md5_short_key_access.conf | 5 +++ .../hmac_no_b64_cygwin_access.conf | 4 ++ .../hmac_sha1_short_key_access.conf | 5 +++ .../hmac_sha384_access.conf | 5 +++ .../hmac_sha512_short_key2_access.conf | 5 +++ .../hmac_simple_keys_access.conf | 4 ++ .../icmp_pcap_filter_fwknopd.conf | 1 + .../invalid_expire_access.conf | 4 ++ .../invalid_source_access.conf | 6 +++ .../ip_source_match_access.conf | 3 ++ .../ipt_custom_nat_chain_fwknopd.conf | 5 +++ .../ipt_no_flush_init_or_exit_fwknopd.conf | 2 + .../server-access.cmin/ipt_snat_fwknopd.conf | 3 ++ .../legacy_iv_long_key2_access.conf | 4 ++ .../multi_stanzas_access.conf | 12 ++++++ .../multi_stanzas_with_broken_keys.conf | 15 +++++++ .../no_multi_source_match_access.conf | 3 ++ .../server-access.cmin/ofb_mode_access.conf | 4 ++ .../server-conf.cmin/default_fwknopd.conf | 1 + .../server-conf.cmin/fwknoprc_gpg_invalid_exe | 4 ++ .../server-conf.cmin/fwknoprc_hmac_defaults | 40 ++++++++++++++++++ .../fwknoprc_hmac_time_offset_days | 18 ++++++++ .../server-conf.cmin/fwknoprc_stanza_list | 8 ++++ .../server-conf.cmin/fwknoprc_with_named_key | 3 ++ .../server-conf.cmin/gpg_access.conf | 7 +++ .../server-conf.cmin/gpg_dirs_orig.tar.gz | Bin 0 -> 3876 bytes .../icmp_pcap_filter_fwknopd.conf | 1 + .../invalid_ipt_input_chain_3_fwknopd.conf | 1 + .../invalid_ipt_input_chain_4_fwknopd.conf | 1 + .../invalid_ipt_input_chain_5_fwknopd.conf | 1 + .../invalid_ipt_input_chain_fwknopd.conf | 1 + .../ipt_custom_nat_chain_fwknopd.conf | 5 +++ .../ipt_no_flush_init_fwknopd.conf | 1 + .../ipt_output_chain_fwknopd.conf | 2 + .../server-conf.cmin/ipt_snat_fwknopd.conf | 3 ++ .../ipt_snat_no_translate_ip_fwknopd.conf | 2 + .../server-conf.cmin/multi_pkts.pcap | Bin 0 -> 46890 bytes .../server-conf.cmin/override2_fwknopd.conf | 2 + .../override_no_digest_tracking_fwknopd.conf | 1 + .../server-conf.cmin/spa_over_http.pcap | Bin 0 -> 1846 bytes .../spa_over_http_fwknopd.conf | 1 + .../server-conf.cmin/spa_replay.pcap | Bin 0 -> 910 bytes .../var_expansion_fwknopd.conf | 2 + .../var_expansion_invalid_fwknopd.conf | 2 + 73 files changed, 378 insertions(+), 9 deletions(-) create mode 100755 test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh create mode 100755 test/afl/fuzzing-wrappers/helpers/afl-cmin/server-conf-cmin.sh create mode 100644 test/afl/test-cases/server-access.cmin/cfb_mode_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/cmd_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/ctr_mode_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/default_fwknopd.conf create mode 100644 test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/ecb_mode_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/expired_stanza_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/force_nat_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key create mode 100644 test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf create mode 100644 test/afl/test-cases/server-access.cmin/invalid_expire_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/invalid_source_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/ip_source_match_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf create mode 100644 test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf create mode 100644 test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf create mode 100644 test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf create mode 100644 test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf create mode 100644 test/afl/test-cases/server-access.cmin/ofb_mode_access.conf create mode 100644 test/afl/test-cases/server-conf.cmin/default_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe create mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults create mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days create mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list create mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key create mode 100644 test/afl/test-cases/server-conf.cmin/gpg_access.conf create mode 100644 test/afl/test-cases/server-conf.cmin/gpg_dirs_orig.tar.gz create mode 100644 test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/multi_pkts.pcap create mode 100644 test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/spa_over_http.pcap create mode 100644 test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/spa_replay.pcap create mode 100644 test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf create mode 100644 test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf diff --git a/server/config_init.c b/server/config_init.c index db3a62a5..54864227 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -1253,8 +1253,8 @@ usage(void) " --syslog-enable - Allow messages to be sent to syslog even if the\n" " foreground mode is set.\n" " -V, --version - Print version number.\n" - " -A, --afl-fuzzing - Run in American Fuzzy Lop (AFL) fuzzing mode\n" - " plaintext SPA packets are accepted via stdin.\n" + " -A, --afl-fuzzing - Run in American Fuzzy Lop (AFL) fuzzing mode so\n" + " that plaintext SPA packets are accepted via stdin.\n" " -h, --help - Print this usage message and exit.\n" " --dump-serv-err-codes - List all server error codes (only needed by the\n" " test suite).\n" diff --git a/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh b/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh new file mode 100755 index 00000000..a0b08dcc --- /dev/null +++ b/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh @@ -0,0 +1,19 @@ +#!/bin/sh -x + +. ./fuzzing-wrappers/fcns + +### generate test corpus directly from the main test suite +### config files +CONF_DIR=../conf +IN_DIR=$CONF_DIR +OUT_DIR=${IN_DIR}.cmin +OUT_DIR="test-cases/server-access.cmin" +FUZZ_FILE=access_tmp.conf + +LD_LIBRARY_PATH=../../lib/.libs afl-cmin -i $IN_DIR \ + -f $FUZZ_FILE -o $OUT_DIR $SERVER \ + -c $CONF_DIR/ipt_snat_fwknopd.conf \ + -a $FUZZ_FILE -O $CONF_DIR/override_no_digest_tracking_fwknopd.conf \ + -A -f -t --exit-parse-config -v -v -v -r `pwd`/run + +exit $? diff --git a/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-conf-cmin.sh b/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-conf-cmin.sh new file mode 100755 index 00000000..928306c3 --- /dev/null +++ b/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-conf-cmin.sh @@ -0,0 +1,18 @@ +#!/bin/sh -x + +. ./fuzzing-wrappers/fcns + +### generate test corpus directly from the main test suite +### config files +CONF_DIR=../conf +IN_DIR=$CONF_DIR +OUT_DIR="test-cases/server-conf.cmin" +FUZZ_FILE=fwknopd_conf.tmp + +LD_LIBRARY_PATH=../../lib/.libs afl-cmin -i $IN_DIR \ + -f $FUZZ_FILE -o $OUT_DIR $SERVER \ + -a $CONF_DIR/default_access.conf \ + -c $FUZZ_FILE -O $CONF_DIR/override_no_digest_tracking_fwknopd.conf \ + -A -f -t --exit-parse-config -v -v -v -r `pwd`/run + +exit $? diff --git a/test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh b/test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh index 88cd8197..2a3c5411 100755 --- a/test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh +++ b/test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh @@ -1,7 +1,12 @@ #!/bin/sh -x -TEST_CASES_DIR=test-cases +. ./fuzzing-wrappers/fcns +IN_DIR="test-cases/spa-pkts" +OUT_DIR=${IN_DIR}.cmin +CONF_DIR=../conf -LD_LIBRARY_PATH=../../lib/.libs afl-cmin -i $TEST_CASES_DIR/spa-pkts -o $TEST_CASES_DIR/spa-pkts.cmin ../../server/.libs/fwknopd -c ../conf/default_fwknopd.conf -a ../conf/default_access.conf -A -f -t +LD_LIBRARY_PATH=../../lib/.libs afl-cmin -i $IN_DIR \ + -o ${IN_DIR}.cmin $SERVER -c ../conf/default_fwknopd.conf \ + -a $CONF_DIR/default_access.conf -A -f -t exit $? diff --git a/test/afl/fuzzing-wrappers/server-access.sh b/test/afl/fuzzing-wrappers/server-access.sh index 020f1432..c8b08cbb 100755 --- a/test/afl/fuzzing-wrappers/server-access.sh +++ b/test/afl/fuzzing-wrappers/server-access.sh @@ -10,6 +10,7 @@ FDIR="server-access.out" OUT_DIR="$TOP_DIR/$FDIR" PREV_OUT_DIR='' IN_DIR="test-cases/server-access" +FUZZ_FILE=$OUT_DIR/afl_access.conf ### build up our afl-fuzz text banner TSTR="fwknopd,access.conf" @@ -32,9 +33,9 @@ fi ### run afl-fuzz LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ -T $BANNER -t 1000 -i $IN_DIR \ - -o $OUT_DIR -f $OUT_DIR/afl_access.conf $SERVER \ + -o $OUT_DIR -f $FUZZ_FILE $SERVER \ -c ../conf/ipt_snat_fwknopd.conf \ - -a $OUT_DIR/afl_access.conf \ + -a $FUZZ_FILE \ -O ../conf/override_no_digest_tracking_fwknopd.conf \ -A -f -t --exit-parse-config -v -v -v -r `pwd`/run diff --git a/test/afl/fuzzing-wrappers/server-conf.sh b/test/afl/fuzzing-wrappers/server-conf.sh index c8e29c8f..8eb23c50 100755 --- a/test/afl/fuzzing-wrappers/server-conf.sh +++ b/test/afl/fuzzing-wrappers/server-conf.sh @@ -9,7 +9,8 @@ FDIR="server-conf.out" OUT_DIR="$TOP_DIR/$FDIR" PREV_OUT_DIR='' -IN_DIR="test-cases/server-conf" +IN_DIR="test-cases/server-conf.cmin" +FUZZ_FILE=$OUT_DIR/afl_fwknopd.conf ### build up our afl-fuzz text banner TSTR="fwknopd,fwknopd.conf" @@ -30,10 +31,10 @@ fi ./fuzzing-wrappers/helpers/fwknopd-parse-conf.sh || exit $? LD_LIBRARY_PATH=$LIB_DIR afl-fuzz -T $BANNER -t 1000 -i $IN_DIR \ - -o $OUT_DIR -f $OUT_DIR/afl_fwknopd.conf $SERVER \ + -o $OUT_DIR -f $FUZZ_FILE $SERVER \ -O ../conf/override_no_digest_tracking_fwknopd.conf \ -a ../conf/default_access.conf \ - -c $OUT_DIR/afl_fwknopd.conf \ + -c $FUZZ_FILE \ -A -f -t --exit-parse-config -v -v -v -r `pwd`/run exit $? diff --git a/test/afl/test-cases/server-access.cmin/cfb_mode_access.conf b/test/afl/test-cases/server-access.cmin/cfb_mode_access.conf new file mode 100644 index 00000000..23f3c087 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/cfb_mode_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ENCRYPTION_MODE CFB diff --git a/test/afl/test-cases/server-access.cmin/cmd_access.conf b/test/afl/test-cases/server-access.cmin/cmd_access.conf new file mode 100644 index 00000000..232abd46 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/cmd_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ENABLE_CMD_EXEC Y diff --git a/test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf b/test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf new file mode 100644 index 00000000..194c43e7 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +KEY fwknoptest +ENABLE_CMD_EXEC Y +CMD_EXEC_USER nobody +CMD_EXEC_GROUP nobody +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf b/test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf new file mode 100644 index 00000000..a2c2c2bd --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf @@ -0,0 +1,5 @@ +SOURCE ANY +KEY fwknoptest +ENABLE_CMD_EXEC Y +CMD_EXEC_USER nobody +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ctr_mode_access.conf b/test/afl/test-cases/server-access.cmin/ctr_mode_access.conf new file mode 100644 index 00000000..c4f50bd7 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/ctr_mode_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ENCRYPTION_MODE CTR diff --git a/test/afl/test-cases/server-access.cmin/default_fwknopd.conf b/test/afl/test-cases/server-access.cmin/default_fwknopd.conf new file mode 100644 index 00000000..76dda95e --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/default_fwknopd.conf @@ -0,0 +1 @@ +# default config - no variables set to allow defaults to be preserved diff --git a/test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf b/test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf new file mode 100644 index 00000000..6d6024eb --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf @@ -0,0 +1,10 @@ +SOURCE ANY +KEY fwknoptest +OPEN_PORTS tcp/22 +FW_ACCESS_TIMEOUT 2 + +SOURCE ANY +KEY fwknoptest +OPEN_PORTS tcp/22 +FW_ACCESS_TIMEOUT 3 +ENCRYPTION_MODE legacy diff --git a/test/afl/test-cases/server-access.cmin/ecb_mode_access.conf b/test/afl/test-cases/server-access.cmin/ecb_mode_access.conf new file mode 100644 index 00000000..87765dfa --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/ecb_mode_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ENCRYPTION_MODE ECB diff --git a/test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf b/test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf new file mode 100644 index 00000000..db16ed90 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ACCESS_EXPIRE_EPOCH 1111111111; ### very old diff --git a/test/afl/test-cases/server-access.cmin/expired_stanza_access.conf b/test/afl/test-cases/server-access.cmin/expired_stanza_access.conf new file mode 100644 index 00000000..f4ee6713 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/expired_stanza_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ACCESS_EXPIRE 3/10/01; ### very old diff --git a/test/afl/test-cases/server-access.cmin/force_nat_access.conf b/test/afl/test-cases/server-access.cmin/force_nat_access.conf new file mode 100644 index 00000000..7a2b8f8d --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/force_nat_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +FORCE_NAT 192.168.1.123 22 diff --git a/test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf b/test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf new file mode 100644 index 00000000..10e56be3 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf @@ -0,0 +1,4 @@ +SOURCE 4.3.2.0/24, 127.0.0.0/24, 123.123.123.123/24, 23.43.0.0/16, 10.10.10.10 +OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/123453 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf b/test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf new file mode 100644 index 00000000..a73f1219 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf @@ -0,0 +1,5 @@ +SOURCE 4.3.2.0/24, 127.0.0.0/24, 123.123.123.123/24, 23.43.0.0/16, 10.10.10.10 +OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/12345 +RESTRICT_PORTS AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf b/test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf new file mode 100644 index 00000000..46db3f77 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf @@ -0,0 +1,4 @@ +SOURCE 4.3.2.0/24, 127.0.0.0/24, 123.123.123.1234/24, 23.43.0.0/16, A0.10.10.10 +OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/12345 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key b/test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key new file mode 100644 index 00000000..ba6f56d2 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key @@ -0,0 +1,2 @@ +[default] +KEY fwknoptest diff --git a/test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf b/test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf new file mode 100644 index 00000000..3ce6f6a6 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf @@ -0,0 +1,8 @@ +SOURCE ANY +FW_ACCESS_TIMEOUT 3 +#GPG_HOME_DIR conf/server-gpg-no-pw ### for code coverage +GPG_DECRYPT_ID 361BBAD4 +GPG_DISABLE_SIG Y +GPG_REQUIRE_SIG Y +GPG_ALLOW_NO_PW Y +GPG_FINGERPRINT_ID 00CC95F05BC146B6AC4038C9E36F443C6A3FAD56 diff --git a/test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf b/test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf new file mode 100644 index 00000000..3211ff7b --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf @@ -0,0 +1,12 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +OPEN_PORTS tcp/22 +FW_ACCESS_TIMEOUT 2 + +### test comment +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +OPEN_PORTS tcp/80 +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf b/test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf new file mode 100644 index 00000000..5118acb7 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf @@ -0,0 +1,17 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +OPEN_PORTS tcp/22 +FW_ACCESS_TIMEOUT 2 + +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +OPEN_PORTS tcp/80 +FW_ACCESS_TIMEOUT 3 + +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +OPEN_PORTS tcp/80 +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf b/test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf new file mode 100644 index 00000000..9db231a6 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +FORCE_NAT 123.4.4.4 22 +FORCE_MASQUERADE Y diff --git a/test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf b/test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf new file mode 100644 index 00000000..8e597e88 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +FORCE_NAT 123.4.4.4 22 +FORCE_SNAT 33.3.3.3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf b/test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf new file mode 100644 index 00000000..f8dfe29c --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf @@ -0,0 +1,5 @@ +SOURCE ANY +KEY AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +HMAC_KEY BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB +ENABLE_CMD_EXEC Y +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf b/test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf new file mode 100644 index 00000000..ca2da35d --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY rijndaelkey +HMAC_KEY hmackey +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf b/test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf new file mode 100644 index 00000000..b7e29a90 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf @@ -0,0 +1,5 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +HMAC_DIGEST_TYPE invalid +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf b/test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf new file mode 100644 index 00000000..88e32aaa --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf @@ -0,0 +1,5 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 QQBwGf0bkZmBUA== +HMAC_DIGEST_TYPE md5 +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf b/test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf new file mode 100644 index 00000000..46329986 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +HMAC_KEY test +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf b/test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf new file mode 100644 index 00000000..70da6557 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf @@ -0,0 +1,5 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 QQBwGf0bkZmBUA== +HMAC_DIGEST_TYPE sha1 +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf b/test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf new file mode 100644 index 00000000..23af2450 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf @@ -0,0 +1,5 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 4BzQKdhUpy3ijTbjQmrrl4sMX0cOFqUz+Yq/ET3dDuzS1OH7omsFzra649fLuTLEGQy8u9Mt7XKscMIvv6MqmARI892r0U57QYtKWlilbzJhLNKhF6+vpBKC+6ArZD/OzFUHB/oREch8I8QR/nCCpxrzjca5BN/KAdAOi3xvX1Q= +HMAC_DIGEST_TYPE sha384 +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf b/test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf new file mode 100644 index 00000000..8713132c --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf @@ -0,0 +1,5 @@ +SOURCE ANY +KEY_BASE64 dGVzdGtleTE= +HMAC_KEY_BASE64 dGVzdGtleTI= +HMAC_DIGEST_TYPE sha512 +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf b/test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf new file mode 100644 index 00000000..6e887654 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY_BASE64 dGVzdA== +HMAC_KEY_BASE64 dGVzdHRlc3Q= +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf b/test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf new file mode 100644 index 00000000..047cb6cb --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf @@ -0,0 +1 @@ +PCAP_FILTER icmp; diff --git a/test/afl/test-cases/server-access.cmin/invalid_expire_access.conf b/test/afl/test-cases/server-access.cmin/invalid_expire_access.conf new file mode 100644 index 00000000..06c4f6bb --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/invalid_expire_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ACCESS_EXPIRE 3-10-01; ### / separators required diff --git a/test/afl/test-cases/server-access.cmin/invalid_source_access.conf b/test/afl/test-cases/server-access.cmin/invalid_source_access.conf new file mode 100644 index 00000000..771726fe --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/invalid_source_access.conf @@ -0,0 +1,6 @@ +SOURCE :ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +SOURCE ANY +KEY fwknoptest2 +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ip_source_match_access.conf b/test/afl/test-cases/server-access.cmin/ip_source_match_access.conf new file mode 100644 index 00000000..5df1ff8e --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/ip_source_match_access.conf @@ -0,0 +1,3 @@ +SOURCE 127.0.0.1 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf b/test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf new file mode 100644 index 00000000..39b2a3b9 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf @@ -0,0 +1,5 @@ +ENABLE_IPT_FORWARDING Y; + +IPT_INPUT_ACCESS ACCEPT, filter, INPUT, 1, FWKNOP_INPUT_TEST, 1; +IPT_FORWARD_ACCESS ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD_TEST, 1; +IPT_DNAT_ACCESS DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING_TEST, 1; diff --git a/test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf b/test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf new file mode 100644 index 00000000..1bf29978 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf @@ -0,0 +1,2 @@ +FLUSH_IPT_AT_INIT N; +FLUSH_IPT_AT_EXIT N; diff --git a/test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf b/test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf new file mode 100644 index 00000000..9da1b34c --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf @@ -0,0 +1,3 @@ +ENABLE_IPT_FORWARDING Y; +ENABLE_IPT_SNAT Y; +SNAT_TRANSLATE_IP 10.1.2.3; diff --git a/test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf b/test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf new file mode 100644 index 00000000..6ebfc7e0 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY 1234567890123456blah +FW_ACCESS_TIMEOUT 3 +ENCRYPTION_MODE legacy diff --git a/test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf b/test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf new file mode 100644 index 00000000..5df998f2 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf @@ -0,0 +1,12 @@ +SOURCE 4.3.2.0/24, 23.43.0.0/16, 10.10.10.10 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +SOURCE 23.43.0.0/16, 123.123.123.123/255.255.255.255, 10.10.10.10 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +SOURCE 4.3.2.0/24, 127.0.0.0/24, 23.43.0.0/16, 10.10.10.10 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +SOURCE 4.3.2.0/24, 10.10.10.10 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf b/test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf new file mode 100644 index 00000000..0591f6f3 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf @@ -0,0 +1,15 @@ +SOURCE: 4.3.2.0/24, 23.43.0.0/16, 10.10.10.10; +KEY: fwknoptest; +FW_ACCESS_TIMEOUT: 3; +SOURCE: 23.43.0.0/16, 10.10.10.10; +KEY: fwknoptest; +FW_ACCESS_TIMEOUT: 3; +SOURCE: 4.3.2.0/24, 127.0.0.0/24, 23.43.0.0/16, 10.10.10.10; +KEY: badkey123; +FW_ACCESS_TIMEOUT: 3; +SOURCE: 4.3.2.0/24, 127.0.0.0/24, 23.43.0.0/16, 10.10.10.10; +KEY: fwknoptest; +FW_ACCESS_TIMEOUT: 3; +SOURCE: 4.3.2.0/24, 10.10.10.10; +KEY: fwknoptest; +FW_ACCESS_TIMEOUT: 3; diff --git a/test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf b/test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf new file mode 100644 index 00000000..aaacd38f --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf @@ -0,0 +1,3 @@ +SOURCE 4.3.2.0/24, 1.3.4.5, 23.43.0.0/16, 10.10.10.10 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ofb_mode_access.conf b/test/afl/test-cases/server-access.cmin/ofb_mode_access.conf new file mode 100644 index 00000000..61366654 --- /dev/null +++ b/test/afl/test-cases/server-access.cmin/ofb_mode_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +ENCRYPTION_MODE OFB diff --git a/test/afl/test-cases/server-conf.cmin/default_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/default_fwknopd.conf new file mode 100644 index 00000000..76dda95e --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/default_fwknopd.conf @@ -0,0 +1 @@ +# default config - no variables set to allow defaults to be preserved diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe b/test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe new file mode 100644 index 00000000..d1511b5f --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe @@ -0,0 +1,4 @@ +[default] +HMAC_DIGEST_TYPE sha256 +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +GPG_EXE /invalid/gpg/path diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults b/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults new file mode 100644 index 00000000..d35e7bde --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults @@ -0,0 +1,40 @@ +[default] +ACCESS tcp/22 +SPA_SERVER 127.0.0.1 +ALLOW_IP 127.0.0.2 +USE_HMAC Y +HMAC_DIGEST_TYPE sha256 +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +DIGEST_TYPE sha256 +SPA_SERVER_PROTO udp +SPA_SERVER_PORT 62201 +SPOOF_USER mbrtest +VERBOSE Y +RESOLVE_IP_HTTP N +TIME_OFFSET -1s +ENCRYPTION_MODE CBC +USE_GPG N +USE_GPG_AGENT N + +#RAND_PORT +#SPA_SOURCE_PORT +#FW_TIMEOUT +#GPG_RECIPIENT +#GPG_SIGNER +#GPG_HOMEDIR +#GPG_EXE +#GPG_SIGNING_PW +#GPG_SIGNING_PW_BASE64 +#GPG_NO_SIGNING_PW +#SPOOF_SOURCE_IP +#KEY +#HMAC_KEY +#KEY_FILE +#HMAC_KEY_FILE +#RESOLVE_URL +#NAT_ACCESS +#HTTP_USER_AGENT +#NAT_LOCAL +#NAT_RAND_PORT +#NAT_PORT diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days b/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days new file mode 100644 index 00000000..e0917142 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days @@ -0,0 +1,18 @@ +[default] +ACCESS tcp/22 +SPA_SERVER 127.0.0.1 +ALLOW_IP 127.0.0.2 +USE_HMAC Y +HMAC_DIGEST_TYPE sha256 +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +DIGEST_TYPE sha256 +SPA_SERVER_PROTO udp +SPA_SERVER_PORT 62201 +SPOOF_USER mbrtest +VERBOSE 2 +TIME_OFFSET -1D +ENCRYPTION_MODE CBC +USE_GPG N +USE_GPG_AGENT N +RESOLVE_IP_HTTP N diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list b/test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list new file mode 100644 index 00000000..36dcd9f3 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list @@ -0,0 +1,8 @@ +[default] +KEY testkey + +[stanza_1] +KEY testkey_1 + +[stanza_2] +KEY testkey_2 diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key b/test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key new file mode 100644 index 00000000..1f5d710b --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key @@ -0,0 +1,3 @@ +[default] +[testssh] +KEY fwknoptest diff --git a/test/afl/test-cases/server-conf.cmin/gpg_access.conf b/test/afl/test-cases/server-conf.cmin/gpg_access.conf new file mode 100644 index 00000000..b7cfce4c --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/gpg_access.conf @@ -0,0 +1,7 @@ +SOURCE ANY +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +GPG_HOME_DIR conf/server-gpg +GPG_DECRYPT_ID 361BBAD4 +GPG_DECRYPT_PW fwknoptest +GPG_REMOTE_ID 6A3FAD56 diff --git a/test/afl/test-cases/server-conf.cmin/gpg_dirs_orig.tar.gz b/test/afl/test-cases/server-conf.cmin/gpg_dirs_orig.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c853ff3931f43acd64188a5a5dead993eb2eeb3a GIT binary patch literal 3876 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 m000000000000000000000000000013di)Dcq7vf(pa1~6+RBsw literal 0 HcmV?d00001 diff --git a/test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf new file mode 100644 index 00000000..047cb6cb --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf @@ -0,0 +1 @@ +PCAP_FILTER icmp; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf new file mode 100644 index 00000000..cdb73492 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf @@ -0,0 +1 @@ +IPT_INPUT_ACCESS ACCEPT, ffilter, INPUT, 1, FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf new file mode 100644 index 00000000..3020fe54 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf @@ -0,0 +1 @@ +IPT_INPUT_ACCESS ACCEPT, filter, IINPUT, 1, FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf new file mode 100644 index 00000000..0ccbd183 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf @@ -0,0 +1 @@ +IPT_INPUT_ACCESS ACCEPT, filter, INPUT, -1, FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf new file mode 100644 index 00000000..6c3b6afa --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf @@ -0,0 +1 @@ +IPT_INPUT_ACCESS ACCEPT, filter, INPUT, 1 FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf new file mode 100644 index 00000000..39b2a3b9 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf @@ -0,0 +1,5 @@ +ENABLE_IPT_FORWARDING Y; + +IPT_INPUT_ACCESS ACCEPT, filter, INPUT, 1, FWKNOP_INPUT_TEST, 1; +IPT_FORWARD_ACCESS ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD_TEST, 1; +IPT_DNAT_ACCESS DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf new file mode 100644 index 00000000..a2d97df2 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf @@ -0,0 +1 @@ +FLUSH_IPT_AT_INIT N; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf new file mode 100644 index 00000000..f03787e3 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf @@ -0,0 +1,2 @@ +ENABLE_IPT_OUTPUT Y; +IPT_OUTPUT_ACCESS ACCEPT, filter, OUTPUT, 1, FWKNOP_OUTPUT, 1; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf new file mode 100644 index 00000000..9da1b34c --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf @@ -0,0 +1,3 @@ +ENABLE_IPT_FORWARDING Y; +ENABLE_IPT_SNAT Y; +SNAT_TRANSLATE_IP 10.1.2.3; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf new file mode 100644 index 00000000..86df28a8 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf @@ -0,0 +1,2 @@ +ENABLE_IPT_FORWARDING Y; +ENABLE_IPT_SNAT Y; diff --git a/test/afl/test-cases/server-conf.cmin/multi_pkts.pcap b/test/afl/test-cases/server-conf.cmin/multi_pkts.pcap new file mode 100644 index 0000000000000000000000000000000000000000..69c4f67186acdf690a04928b3a559cdb9b06b621 GIT binary patch literal 46890 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 literal 0 HcmV?d00001 diff --git a/test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf new file mode 100644 index 00000000..16cce60a --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf @@ -0,0 +1,2 @@ +ENABLE_PCAP_PROMISC N +PCAP_FILTER udp port 1234 diff --git a/test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf new file mode 100644 index 00000000..71e8e1b5 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf @@ -0,0 +1 @@ +ENABLE_DIGEST_PERSISTENCE N; diff --git a/test/afl/test-cases/server-conf.cmin/spa_over_http.pcap b/test/afl/test-cases/server-conf.cmin/spa_over_http.pcap new file mode 100644 index 0000000000000000000000000000000000000000..7ccf8a7db7d26912c46a4c823a0c02cb28b2b436 GIT binary patch literal 1846 zcmaKsO>7!R6vr3aN~4vqk}6Wu+r;W2jSS23WwYI)VEh3#*w`!(M{V4J9oU6scD=h8 zHdRv}Q$;=J*!1dS)m$p|WU1#KDp^&kN=@Tla?7bwtI#)K94Db3G~&(IZ{GXAH~Y)s zci&EMQ{1Ta`yA(k!B3xjR{Z*pX>Jv4*3Y(!+!Dvhhfi;EH!t*#zJvp;Kksve`;YHE zV>=&B92~q1aoogI|7dFBBJcb4#|v!UH#zwZBR@Qs%yEn?|1ctRh3EYj5B|Lb^y5eG zzD;KI5&0V+FThQ#pKSx5qlbSEeExkzKJob&=$H2|`N}V^gO9$Uzl_R!{TYZYkc9QK zjS+pH9zJ8l?)PJfSAFIF=Ig|jB?SpPUaGeeuPwxSp=>U_RV^5auGNe*Hwx8Aek0LS z11-F*XA(uLy_{dn++MF+n;9#xP!5#x-T6|uSBXXIT6*2mh}BwK_0sF9YIU#J%ypuf zQsDNQwvk$l&E3kEcLIf`S1HHq+YyrP%`IfK)~ZLUo3z&p+mvJry9QBWO>L{%y0yEy zmlf6Y&R(&YDz2$!g>F_7*n&lickM{EhvhE97RN;D{<>!oUkx}6XG{33RVgepXx zMUfCnSvH&#qbL-X#F!L`qLsWd5W@up1Bz$CW|#C_L37*2tA!k)4Of#;Tnzj99CqA5 z-c@DfE(p8xop{iSu*wv3Md7jz?!k`3h`d z+8~aEs-8<6mK6Eg;znB8E-WGDQ<9fQe*~*Aa&^}r$qF%QW}6__9O`gQ7KRJF?6@9m z;1RT{se0)1fystlU1dQ0}$*Af$vs2zOlb)qLFqf$F%e8=iy|teI^*i^{}S zF$E)K>)4n@4yH~3DpIcx4}QVR!pZ%zpbZ^nPOvD%aZbZ5FI&lM9eHL4IRqlobO%|u zL1w`u!{|_#RAG_j9l@&8fl_yzddDz4q*KSmhCx(>smgavyQR}c5G{9XIBuhwN$Yx} zV`EnO?66ICJGxEOpe$HPo?X6d+Q_7aP6<-YTBi+_G29J6xXZFk+eMZ^utVT<9iXns z%NS`e_;^NhT}u*#K{Wef jZS+isU-A9v7Z3Ukc=)w(4_`Q+_}75=WGwN@+r<9>On4UQ literal 0 HcmV?d00001 diff --git a/test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf new file mode 100644 index 00000000..7b005a41 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf @@ -0,0 +1 @@ +ENABLE_SPA_OVER_HTTP Y; diff --git a/test/afl/test-cases/server-conf.cmin/spa_replay.pcap b/test/afl/test-cases/server-conf.cmin/spa_replay.pcap new file mode 100644 index 0000000000000000000000000000000000000000..4c963e94d75ef8bf62c40bf399985e7bb62ce5b7 GIT binary patch literal 910 zcmdVYJ8#oa6bJCjW2krt@i~kX5<8APQ9skzN$bYW^+RHC5+^rylU(Qa#!i+ll~@pb z0S4&C3KJ4cNM&G!1*u;Gi2(_<*q}(AI>TT3OXmz{_(|u>$2YI8gPUNJiwgj*6^jwQ zu)^RL_*~3oFJ}vA0DSm$whgxLKeCRBgR&>zzW)TT&)+jUF=vRGtx6GHTXmTz^_+Jd zPG|-_yRPS(%W2AuSG&0!IkL^{?eY^df}W@>{61d|6457kz*J4j@WjrO(j2*w1w>rC7clA!O>!d zCo2{oG^%avBv7vz_N)^&!ofms!C_V)a=SJTO`2@|jS&m(^W D+zlMs literal 0 HcmV?d00001 diff --git a/test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf new file mode 100644 index 00000000..d69e98d7 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf @@ -0,0 +1,2 @@ +FWKNOP_RUN_DIR /var/run +FWKNOP_PID_FILE $FWKNOP_RUN_DIR/test.pid diff --git a/test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf new file mode 100644 index 00000000..f8f1d320 --- /dev/null +++ b/test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf @@ -0,0 +1,2 @@ +FWKNOP_RUN_DIR /var/run +FWKNOP_PID_FILE $FWKNOP_INVALID_VAR/test.pid From 8ad434aed5dfa18d9e15ce586e0464ddc6bae10f Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 23:02:40 -0400 Subject: [PATCH 011/219] [test suite] the large afl-cmin directories are not used by default --- test/afl/fuzzing-wrappers/server-conf.sh | 2 +- .../server-access.cmin/cfb_mode_access.conf | 4 -- .../server-access.cmin/cmd_access.conf | 4 -- .../server-access.cmin/cmd_giduid_access.conf | 6 --- .../server-access.cmin/cmd_setuid_access.conf | 5 --- .../server-access.cmin/ctr_mode_access.conf | 4 -- .../server-access.cmin/default_fwknopd.conf | 1 - .../dual_key_legacy_iv_access.conf | 10 ----- .../server-access.cmin/ecb_mode_access.conf | 4 -- .../expired_epoch_stanza_access.conf | 4 -- .../expired_stanza_access.conf | 4 -- .../server-access.cmin/force_nat_access.conf | 4 -- .../fuzzing_open_ports_access.conf | 4 -- .../fuzzing_restrict_ports_access.conf | 5 --- .../fuzzing_source_access.conf | 4 -- .../fwknoprc_with_default_key | 2 - .../gpg_no_sig_no_fpr_access.conf | 8 ---- .../hmac_dual_key_usage_access.conf | 12 ------ .../hmac_equal_keys_access.conf | 17 -------- .../hmac_force_masq_access.conf | 6 --- .../hmac_force_snat_access.conf | 6 --- .../hmac_fuzzing_access.conf | 5 --- .../hmac_get_key_access.conf | 4 -- .../hmac_invalid_type_access.conf | 5 --- .../hmac_md5_short_key_access.conf | 5 --- .../hmac_no_b64_cygwin_access.conf | 4 -- .../hmac_sha1_short_key_access.conf | 5 --- .../hmac_sha384_access.conf | 5 --- .../hmac_sha512_short_key2_access.conf | 5 --- .../hmac_simple_keys_access.conf | 4 -- .../icmp_pcap_filter_fwknopd.conf | 1 - .../invalid_expire_access.conf | 4 -- .../invalid_source_access.conf | 6 --- .../ip_source_match_access.conf | 3 -- .../ipt_custom_nat_chain_fwknopd.conf | 5 --- .../ipt_no_flush_init_or_exit_fwknopd.conf | 2 - .../server-access.cmin/ipt_snat_fwknopd.conf | 3 -- .../legacy_iv_long_key2_access.conf | 4 -- .../multi_stanzas_access.conf | 12 ------ .../multi_stanzas_with_broken_keys.conf | 15 ------- .../no_multi_source_match_access.conf | 3 -- .../server-access.cmin/ofb_mode_access.conf | 4 -- .../server-conf.cmin/default_fwknopd.conf | 1 - .../server-conf.cmin/fwknoprc_gpg_invalid_exe | 4 -- .../server-conf.cmin/fwknoprc_hmac_defaults | 40 ------------------ .../fwknoprc_hmac_time_offset_days | 18 -------- .../server-conf.cmin/fwknoprc_stanza_list | 8 ---- .../server-conf.cmin/fwknoprc_with_named_key | 3 -- .../server-conf.cmin/gpg_access.conf | 7 --- .../server-conf.cmin/gpg_dirs_orig.tar.gz | Bin 3876 -> 0 bytes .../icmp_pcap_filter_fwknopd.conf | 1 - .../invalid_ipt_input_chain_3_fwknopd.conf | 1 - .../invalid_ipt_input_chain_4_fwknopd.conf | 1 - .../invalid_ipt_input_chain_5_fwknopd.conf | 1 - .../invalid_ipt_input_chain_fwknopd.conf | 1 - .../ipt_custom_nat_chain_fwknopd.conf | 5 --- .../ipt_no_flush_init_fwknopd.conf | 1 - .../ipt_output_chain_fwknopd.conf | 2 - .../server-conf.cmin/ipt_snat_fwknopd.conf | 3 -- .../ipt_snat_no_translate_ip_fwknopd.conf | 2 - .../server-conf.cmin/multi_pkts.pcap | Bin 46890 -> 0 bytes .../server-conf.cmin/override2_fwknopd.conf | 2 - .../override_no_digest_tracking_fwknopd.conf | 1 - .../server-conf.cmin/spa_over_http.pcap | Bin 1846 -> 0 bytes .../spa_over_http_fwknopd.conf | 1 - .../server-conf.cmin/spa_replay.pcap | Bin 910 -> 0 bytes .../var_expansion_fwknopd.conf | 2 - .../var_expansion_invalid_fwknopd.conf | 2 - 68 files changed, 1 insertion(+), 326 deletions(-) delete mode 100644 test/afl/test-cases/server-access.cmin/cfb_mode_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/cmd_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/ctr_mode_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/default_fwknopd.conf delete mode 100644 test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/ecb_mode_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/expired_stanza_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/force_nat_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key delete mode 100644 test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf delete mode 100644 test/afl/test-cases/server-access.cmin/invalid_expire_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/invalid_source_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/ip_source_match_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf delete mode 100644 test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf delete mode 100644 test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf delete mode 100644 test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf delete mode 100644 test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf delete mode 100644 test/afl/test-cases/server-access.cmin/ofb_mode_access.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/default_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe delete mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults delete mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days delete mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list delete mode 100644 test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key delete mode 100644 test/afl/test-cases/server-conf.cmin/gpg_access.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/gpg_dirs_orig.tar.gz delete mode 100644 test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/multi_pkts.pcap delete mode 100644 test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/spa_over_http.pcap delete mode 100644 test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/spa_replay.pcap delete mode 100644 test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf delete mode 100644 test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf diff --git a/test/afl/fuzzing-wrappers/server-conf.sh b/test/afl/fuzzing-wrappers/server-conf.sh index 8eb23c50..7c11c198 100755 --- a/test/afl/fuzzing-wrappers/server-conf.sh +++ b/test/afl/fuzzing-wrappers/server-conf.sh @@ -9,7 +9,7 @@ FDIR="server-conf.out" OUT_DIR="$TOP_DIR/$FDIR" PREV_OUT_DIR='' -IN_DIR="test-cases/server-conf.cmin" +IN_DIR="test-cases/server-conf" FUZZ_FILE=$OUT_DIR/afl_fwknopd.conf ### build up our afl-fuzz text banner diff --git a/test/afl/test-cases/server-access.cmin/cfb_mode_access.conf b/test/afl/test-cases/server-access.cmin/cfb_mode_access.conf deleted file mode 100644 index 23f3c087..00000000 --- a/test/afl/test-cases/server-access.cmin/cfb_mode_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ENCRYPTION_MODE CFB diff --git a/test/afl/test-cases/server-access.cmin/cmd_access.conf b/test/afl/test-cases/server-access.cmin/cmd_access.conf deleted file mode 100644 index 232abd46..00000000 --- a/test/afl/test-cases/server-access.cmin/cmd_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ENABLE_CMD_EXEC Y diff --git a/test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf b/test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf deleted file mode 100644 index 194c43e7..00000000 --- a/test/afl/test-cases/server-access.cmin/cmd_giduid_access.conf +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE ANY -KEY fwknoptest -ENABLE_CMD_EXEC Y -CMD_EXEC_USER nobody -CMD_EXEC_GROUP nobody -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf b/test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf deleted file mode 100644 index a2c2c2bd..00000000 --- a/test/afl/test-cases/server-access.cmin/cmd_setuid_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE ANY -KEY fwknoptest -ENABLE_CMD_EXEC Y -CMD_EXEC_USER nobody -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ctr_mode_access.conf b/test/afl/test-cases/server-access.cmin/ctr_mode_access.conf deleted file mode 100644 index c4f50bd7..00000000 --- a/test/afl/test-cases/server-access.cmin/ctr_mode_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ENCRYPTION_MODE CTR diff --git a/test/afl/test-cases/server-access.cmin/default_fwknopd.conf b/test/afl/test-cases/server-access.cmin/default_fwknopd.conf deleted file mode 100644 index 76dda95e..00000000 --- a/test/afl/test-cases/server-access.cmin/default_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -# default config - no variables set to allow defaults to be preserved diff --git a/test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf b/test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf deleted file mode 100644 index 6d6024eb..00000000 --- a/test/afl/test-cases/server-access.cmin/dual_key_legacy_iv_access.conf +++ /dev/null @@ -1,10 +0,0 @@ -SOURCE ANY -KEY fwknoptest -OPEN_PORTS tcp/22 -FW_ACCESS_TIMEOUT 2 - -SOURCE ANY -KEY fwknoptest -OPEN_PORTS tcp/22 -FW_ACCESS_TIMEOUT 3 -ENCRYPTION_MODE legacy diff --git a/test/afl/test-cases/server-access.cmin/ecb_mode_access.conf b/test/afl/test-cases/server-access.cmin/ecb_mode_access.conf deleted file mode 100644 index 87765dfa..00000000 --- a/test/afl/test-cases/server-access.cmin/ecb_mode_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ENCRYPTION_MODE ECB diff --git a/test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf b/test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf deleted file mode 100644 index db16ed90..00000000 --- a/test/afl/test-cases/server-access.cmin/expired_epoch_stanza_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ACCESS_EXPIRE_EPOCH 1111111111; ### very old diff --git a/test/afl/test-cases/server-access.cmin/expired_stanza_access.conf b/test/afl/test-cases/server-access.cmin/expired_stanza_access.conf deleted file mode 100644 index f4ee6713..00000000 --- a/test/afl/test-cases/server-access.cmin/expired_stanza_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ACCESS_EXPIRE 3/10/01; ### very old diff --git a/test/afl/test-cases/server-access.cmin/force_nat_access.conf b/test/afl/test-cases/server-access.cmin/force_nat_access.conf deleted file mode 100644 index 7a2b8f8d..00000000 --- a/test/afl/test-cases/server-access.cmin/force_nat_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -FORCE_NAT 192.168.1.123 22 diff --git a/test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf b/test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf deleted file mode 100644 index 10e56be3..00000000 --- a/test/afl/test-cases/server-access.cmin/fuzzing_open_ports_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE 4.3.2.0/24, 127.0.0.0/24, 123.123.123.123/24, 23.43.0.0/16, 10.10.10.10 -OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/123453 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf b/test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf deleted file mode 100644 index a73f1219..00000000 --- a/test/afl/test-cases/server-access.cmin/fuzzing_restrict_ports_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE 4.3.2.0/24, 127.0.0.0/24, 123.123.123.123/24, 23.43.0.0/16, 10.10.10.10 -OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/12345 -RESTRICT_PORTS AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf b/test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf deleted file mode 100644 index 46db3f77..00000000 --- a/test/afl/test-cases/server-access.cmin/fuzzing_source_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE 4.3.2.0/24, 127.0.0.0/24, 123.123.123.1234/24, 23.43.0.0/16, A0.10.10.10 -OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/12345 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key b/test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key deleted file mode 100644 index ba6f56d2..00000000 --- a/test/afl/test-cases/server-access.cmin/fwknoprc_with_default_key +++ /dev/null @@ -1,2 +0,0 @@ -[default] -KEY fwknoptest diff --git a/test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf b/test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf deleted file mode 100644 index 3ce6f6a6..00000000 --- a/test/afl/test-cases/server-access.cmin/gpg_no_sig_no_fpr_access.conf +++ /dev/null @@ -1,8 +0,0 @@ -SOURCE ANY -FW_ACCESS_TIMEOUT 3 -#GPG_HOME_DIR conf/server-gpg-no-pw ### for code coverage -GPG_DECRYPT_ID 361BBAD4 -GPG_DISABLE_SIG Y -GPG_REQUIRE_SIG Y -GPG_ALLOW_NO_PW Y -GPG_FINGERPRINT_ID 00CC95F05BC146B6AC4038C9E36F443C6A3FAD56 diff --git a/test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf b/test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf deleted file mode 100644 index 3211ff7b..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_dual_key_usage_access.conf +++ /dev/null @@ -1,12 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -OPEN_PORTS tcp/22 -FW_ACCESS_TIMEOUT 2 - -### test comment -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -OPEN_PORTS tcp/80 -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf b/test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf deleted file mode 100644 index 5118acb7..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_equal_keys_access.conf +++ /dev/null @@ -1,17 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -OPEN_PORTS tcp/22 -FW_ACCESS_TIMEOUT 2 - -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -OPEN_PORTS tcp/80 -FW_ACCESS_TIMEOUT 3 - -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -OPEN_PORTS tcp/80 -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf b/test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf deleted file mode 100644 index 9db231a6..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_force_masq_access.conf +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -FW_ACCESS_TIMEOUT 3 -FORCE_NAT 123.4.4.4 22 -FORCE_MASQUERADE Y diff --git a/test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf b/test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf deleted file mode 100644 index 8e597e88..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_force_snat_access.conf +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -FW_ACCESS_TIMEOUT 3 -FORCE_NAT 123.4.4.4 22 -FORCE_SNAT 33.3.3.3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf b/test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf deleted file mode 100644 index f8dfe29c..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_fuzzing_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE ANY -KEY AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -HMAC_KEY BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB -ENABLE_CMD_EXEC Y -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf b/test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf deleted file mode 100644 index ca2da35d..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_get_key_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY rijndaelkey -HMAC_KEY hmackey -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf b/test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf deleted file mode 100644 index b7e29a90..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_invalid_type_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -HMAC_DIGEST_TYPE invalid -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf b/test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf deleted file mode 100644 index 88e32aaa..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_md5_short_key_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 QQBwGf0bkZmBUA== -HMAC_DIGEST_TYPE md5 -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf b/test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf deleted file mode 100644 index 46329986..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_no_b64_cygwin_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -HMAC_KEY test -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf b/test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf deleted file mode 100644 index 70da6557..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_sha1_short_key_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 QQBwGf0bkZmBUA== -HMAC_DIGEST_TYPE sha1 -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf b/test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf deleted file mode 100644 index 23af2450..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_sha384_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE ANY -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 4BzQKdhUpy3ijTbjQmrrl4sMX0cOFqUz+Yq/ET3dDuzS1OH7omsFzra649fLuTLEGQy8u9Mt7XKscMIvv6MqmARI892r0U57QYtKWlilbzJhLNKhF6+vpBKC+6ArZD/OzFUHB/oREch8I8QR/nCCpxrzjca5BN/KAdAOi3xvX1Q= -HMAC_DIGEST_TYPE sha384 -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf b/test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf deleted file mode 100644 index 8713132c..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_sha512_short_key2_access.conf +++ /dev/null @@ -1,5 +0,0 @@ -SOURCE ANY -KEY_BASE64 dGVzdGtleTE= -HMAC_KEY_BASE64 dGVzdGtleTI= -HMAC_DIGEST_TYPE sha512 -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf b/test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf deleted file mode 100644 index 6e887654..00000000 --- a/test/afl/test-cases/server-access.cmin/hmac_simple_keys_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY_BASE64 dGVzdA== -HMAC_KEY_BASE64 dGVzdHRlc3Q= -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf b/test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf deleted file mode 100644 index 047cb6cb..00000000 --- a/test/afl/test-cases/server-access.cmin/icmp_pcap_filter_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -PCAP_FILTER icmp; diff --git a/test/afl/test-cases/server-access.cmin/invalid_expire_access.conf b/test/afl/test-cases/server-access.cmin/invalid_expire_access.conf deleted file mode 100644 index 06c4f6bb..00000000 --- a/test/afl/test-cases/server-access.cmin/invalid_expire_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ACCESS_EXPIRE 3-10-01; ### / separators required diff --git a/test/afl/test-cases/server-access.cmin/invalid_source_access.conf b/test/afl/test-cases/server-access.cmin/invalid_source_access.conf deleted file mode 100644 index 771726fe..00000000 --- a/test/afl/test-cases/server-access.cmin/invalid_source_access.conf +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE :ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -SOURCE ANY -KEY fwknoptest2 -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ip_source_match_access.conf b/test/afl/test-cases/server-access.cmin/ip_source_match_access.conf deleted file mode 100644 index 5df1ff8e..00000000 --- a/test/afl/test-cases/server-access.cmin/ip_source_match_access.conf +++ /dev/null @@ -1,3 +0,0 @@ -SOURCE 127.0.0.1 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf b/test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf deleted file mode 100644 index 39b2a3b9..00000000 --- a/test/afl/test-cases/server-access.cmin/ipt_custom_nat_chain_fwknopd.conf +++ /dev/null @@ -1,5 +0,0 @@ -ENABLE_IPT_FORWARDING Y; - -IPT_INPUT_ACCESS ACCEPT, filter, INPUT, 1, FWKNOP_INPUT_TEST, 1; -IPT_FORWARD_ACCESS ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD_TEST, 1; -IPT_DNAT_ACCESS DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING_TEST, 1; diff --git a/test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf b/test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf deleted file mode 100644 index 1bf29978..00000000 --- a/test/afl/test-cases/server-access.cmin/ipt_no_flush_init_or_exit_fwknopd.conf +++ /dev/null @@ -1,2 +0,0 @@ -FLUSH_IPT_AT_INIT N; -FLUSH_IPT_AT_EXIT N; diff --git a/test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf b/test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf deleted file mode 100644 index 9da1b34c..00000000 --- a/test/afl/test-cases/server-access.cmin/ipt_snat_fwknopd.conf +++ /dev/null @@ -1,3 +0,0 @@ -ENABLE_IPT_FORWARDING Y; -ENABLE_IPT_SNAT Y; -SNAT_TRANSLATE_IP 10.1.2.3; diff --git a/test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf b/test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf deleted file mode 100644 index 6ebfc7e0..00000000 --- a/test/afl/test-cases/server-access.cmin/legacy_iv_long_key2_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY 1234567890123456blah -FW_ACCESS_TIMEOUT 3 -ENCRYPTION_MODE legacy diff --git a/test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf b/test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf deleted file mode 100644 index 5df998f2..00000000 --- a/test/afl/test-cases/server-access.cmin/multi_stanzas_access.conf +++ /dev/null @@ -1,12 +0,0 @@ -SOURCE 4.3.2.0/24, 23.43.0.0/16, 10.10.10.10 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -SOURCE 23.43.0.0/16, 123.123.123.123/255.255.255.255, 10.10.10.10 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -SOURCE 4.3.2.0/24, 127.0.0.0/24, 23.43.0.0/16, 10.10.10.10 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -SOURCE 4.3.2.0/24, 10.10.10.10 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf b/test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf deleted file mode 100644 index 0591f6f3..00000000 --- a/test/afl/test-cases/server-access.cmin/multi_stanzas_with_broken_keys.conf +++ /dev/null @@ -1,15 +0,0 @@ -SOURCE: 4.3.2.0/24, 23.43.0.0/16, 10.10.10.10; -KEY: fwknoptest; -FW_ACCESS_TIMEOUT: 3; -SOURCE: 23.43.0.0/16, 10.10.10.10; -KEY: fwknoptest; -FW_ACCESS_TIMEOUT: 3; -SOURCE: 4.3.2.0/24, 127.0.0.0/24, 23.43.0.0/16, 10.10.10.10; -KEY: badkey123; -FW_ACCESS_TIMEOUT: 3; -SOURCE: 4.3.2.0/24, 127.0.0.0/24, 23.43.0.0/16, 10.10.10.10; -KEY: fwknoptest; -FW_ACCESS_TIMEOUT: 3; -SOURCE: 4.3.2.0/24, 10.10.10.10; -KEY: fwknoptest; -FW_ACCESS_TIMEOUT: 3; diff --git a/test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf b/test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf deleted file mode 100644 index aaacd38f..00000000 --- a/test/afl/test-cases/server-access.cmin/no_multi_source_match_access.conf +++ /dev/null @@ -1,3 +0,0 @@ -SOURCE 4.3.2.0/24, 1.3.4.5, 23.43.0.0/16, 10.10.10.10 -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 diff --git a/test/afl/test-cases/server-access.cmin/ofb_mode_access.conf b/test/afl/test-cases/server-access.cmin/ofb_mode_access.conf deleted file mode 100644 index 61366654..00000000 --- a/test/afl/test-cases/server-access.cmin/ofb_mode_access.conf +++ /dev/null @@ -1,4 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -ENCRYPTION_MODE OFB diff --git a/test/afl/test-cases/server-conf.cmin/default_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/default_fwknopd.conf deleted file mode 100644 index 76dda95e..00000000 --- a/test/afl/test-cases/server-conf.cmin/default_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -# default config - no variables set to allow defaults to be preserved diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe b/test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe deleted file mode 100644 index d1511b5f..00000000 --- a/test/afl/test-cases/server-conf.cmin/fwknoprc_gpg_invalid_exe +++ /dev/null @@ -1,4 +0,0 @@ -[default] -HMAC_DIGEST_TYPE sha256 -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -GPG_EXE /invalid/gpg/path diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults b/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults deleted file mode 100644 index d35e7bde..00000000 --- a/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_defaults +++ /dev/null @@ -1,40 +0,0 @@ -[default] -ACCESS tcp/22 -SPA_SERVER 127.0.0.1 -ALLOW_IP 127.0.0.2 -USE_HMAC Y -HMAC_DIGEST_TYPE sha256 -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -DIGEST_TYPE sha256 -SPA_SERVER_PROTO udp -SPA_SERVER_PORT 62201 -SPOOF_USER mbrtest -VERBOSE Y -RESOLVE_IP_HTTP N -TIME_OFFSET -1s -ENCRYPTION_MODE CBC -USE_GPG N -USE_GPG_AGENT N - -#RAND_PORT -#SPA_SOURCE_PORT -#FW_TIMEOUT -#GPG_RECIPIENT -#GPG_SIGNER -#GPG_HOMEDIR -#GPG_EXE -#GPG_SIGNING_PW -#GPG_SIGNING_PW_BASE64 -#GPG_NO_SIGNING_PW -#SPOOF_SOURCE_IP -#KEY -#HMAC_KEY -#KEY_FILE -#HMAC_KEY_FILE -#RESOLVE_URL -#NAT_ACCESS -#HTTP_USER_AGENT -#NAT_LOCAL -#NAT_RAND_PORT -#NAT_PORT diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days b/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days deleted file mode 100644 index e0917142..00000000 --- a/test/afl/test-cases/server-conf.cmin/fwknoprc_hmac_time_offset_days +++ /dev/null @@ -1,18 +0,0 @@ -[default] -ACCESS tcp/22 -SPA_SERVER 127.0.0.1 -ALLOW_IP 127.0.0.2 -USE_HMAC Y -HMAC_DIGEST_TYPE sha256 -KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= -HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== -DIGEST_TYPE sha256 -SPA_SERVER_PROTO udp -SPA_SERVER_PORT 62201 -SPOOF_USER mbrtest -VERBOSE 2 -TIME_OFFSET -1D -ENCRYPTION_MODE CBC -USE_GPG N -USE_GPG_AGENT N -RESOLVE_IP_HTTP N diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list b/test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list deleted file mode 100644 index 36dcd9f3..00000000 --- a/test/afl/test-cases/server-conf.cmin/fwknoprc_stanza_list +++ /dev/null @@ -1,8 +0,0 @@ -[default] -KEY testkey - -[stanza_1] -KEY testkey_1 - -[stanza_2] -KEY testkey_2 diff --git a/test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key b/test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key deleted file mode 100644 index 1f5d710b..00000000 --- a/test/afl/test-cases/server-conf.cmin/fwknoprc_with_named_key +++ /dev/null @@ -1,3 +0,0 @@ -[default] -[testssh] -KEY fwknoptest diff --git a/test/afl/test-cases/server-conf.cmin/gpg_access.conf b/test/afl/test-cases/server-conf.cmin/gpg_access.conf deleted file mode 100644 index b7cfce4c..00000000 --- a/test/afl/test-cases/server-conf.cmin/gpg_access.conf +++ /dev/null @@ -1,7 +0,0 @@ -SOURCE ANY -KEY fwknoptest -FW_ACCESS_TIMEOUT 3 -GPG_HOME_DIR conf/server-gpg -GPG_DECRYPT_ID 361BBAD4 -GPG_DECRYPT_PW fwknoptest -GPG_REMOTE_ID 6A3FAD56 diff --git a/test/afl/test-cases/server-conf.cmin/gpg_dirs_orig.tar.gz b/test/afl/test-cases/server-conf.cmin/gpg_dirs_orig.tar.gz deleted file mode 100644 index c853ff3931f43acd64188a5a5dead993eb2eeb3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3876 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 m000000000000000000000000000013di)Dcq7vf(pa1~6+RBsw diff --git a/test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf deleted file mode 100644 index 047cb6cb..00000000 --- a/test/afl/test-cases/server-conf.cmin/icmp_pcap_filter_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -PCAP_FILTER icmp; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf deleted file mode 100644 index cdb73492..00000000 --- a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_3_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -IPT_INPUT_ACCESS ACCEPT, ffilter, INPUT, 1, FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf deleted file mode 100644 index 3020fe54..00000000 --- a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_4_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -IPT_INPUT_ACCESS ACCEPT, filter, IINPUT, 1, FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf deleted file mode 100644 index 0ccbd183..00000000 --- a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_5_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -IPT_INPUT_ACCESS ACCEPT, filter, INPUT, -1, FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf deleted file mode 100644 index 6c3b6afa..00000000 --- a/test/afl/test-cases/server-conf.cmin/invalid_ipt_input_chain_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -IPT_INPUT_ACCESS ACCEPT, filter, INPUT, 1 FWKNOP_INPUT_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf deleted file mode 100644 index 39b2a3b9..00000000 --- a/test/afl/test-cases/server-conf.cmin/ipt_custom_nat_chain_fwknopd.conf +++ /dev/null @@ -1,5 +0,0 @@ -ENABLE_IPT_FORWARDING Y; - -IPT_INPUT_ACCESS ACCEPT, filter, INPUT, 1, FWKNOP_INPUT_TEST, 1; -IPT_FORWARD_ACCESS ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD_TEST, 1; -IPT_DNAT_ACCESS DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING_TEST, 1; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf deleted file mode 100644 index a2d97df2..00000000 --- a/test/afl/test-cases/server-conf.cmin/ipt_no_flush_init_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -FLUSH_IPT_AT_INIT N; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf deleted file mode 100644 index f03787e3..00000000 --- a/test/afl/test-cases/server-conf.cmin/ipt_output_chain_fwknopd.conf +++ /dev/null @@ -1,2 +0,0 @@ -ENABLE_IPT_OUTPUT Y; -IPT_OUTPUT_ACCESS ACCEPT, filter, OUTPUT, 1, FWKNOP_OUTPUT, 1; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf deleted file mode 100644 index 9da1b34c..00000000 --- a/test/afl/test-cases/server-conf.cmin/ipt_snat_fwknopd.conf +++ /dev/null @@ -1,3 +0,0 @@ -ENABLE_IPT_FORWARDING Y; -ENABLE_IPT_SNAT Y; -SNAT_TRANSLATE_IP 10.1.2.3; diff --git a/test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf deleted file mode 100644 index 86df28a8..00000000 --- a/test/afl/test-cases/server-conf.cmin/ipt_snat_no_translate_ip_fwknopd.conf +++ /dev/null @@ -1,2 +0,0 @@ -ENABLE_IPT_FORWARDING Y; -ENABLE_IPT_SNAT Y; diff --git a/test/afl/test-cases/server-conf.cmin/multi_pkts.pcap b/test/afl/test-cases/server-conf.cmin/multi_pkts.pcap deleted file mode 100644 index 69c4f67186acdf690a04928b3a559cdb9b06b621..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46890 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 diff --git a/test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf deleted file mode 100644 index 16cce60a..00000000 --- a/test/afl/test-cases/server-conf.cmin/override2_fwknopd.conf +++ /dev/null @@ -1,2 +0,0 @@ -ENABLE_PCAP_PROMISC N -PCAP_FILTER udp port 1234 diff --git a/test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf deleted file mode 100644 index 71e8e1b5..00000000 --- a/test/afl/test-cases/server-conf.cmin/override_no_digest_tracking_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -ENABLE_DIGEST_PERSISTENCE N; diff --git a/test/afl/test-cases/server-conf.cmin/spa_over_http.pcap b/test/afl/test-cases/server-conf.cmin/spa_over_http.pcap deleted file mode 100644 index 7ccf8a7db7d26912c46a4c823a0c02cb28b2b436..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1846 zcmaKsO>7!R6vr3aN~4vqk}6Wu+r;W2jSS23WwYI)VEh3#*w`!(M{V4J9oU6scD=h8 zHdRv}Q$;=J*!1dS)m$p|WU1#KDp^&kN=@Tla?7bwtI#)K94Db3G~&(IZ{GXAH~Y)s zci&EMQ{1Ta`yA(k!B3xjR{Z*pX>Jv4*3Y(!+!Dvhhfi;EH!t*#zJvp;Kksve`;YHE zV>=&B92~q1aoogI|7dFBBJcb4#|v!UH#zwZBR@Qs%yEn?|1ctRh3EYj5B|Lb^y5eG zzD;KI5&0V+FThQ#pKSx5qlbSEeExkzKJob&=$H2|`N}V^gO9$Uzl_R!{TYZYkc9QK zjS+pH9zJ8l?)PJfSAFIF=Ig|jB?SpPUaGeeuPwxSp=>U_RV^5auGNe*Hwx8Aek0LS z11-F*XA(uLy_{dn++MF+n;9#xP!5#x-T6|uSBXXIT6*2mh}BwK_0sF9YIU#J%ypuf zQsDNQwvk$l&E3kEcLIf`S1HHq+YyrP%`IfK)~ZLUo3z&p+mvJry9QBWO>L{%y0yEy zmlf6Y&R(&YDz2$!g>F_7*n&lickM{EhvhE97RN;D{<>!oUkx}6XG{33RVgepXx zMUfCnSvH&#qbL-X#F!L`qLsWd5W@up1Bz$CW|#C_L37*2tA!k)4Of#;Tnzj99CqA5 z-c@DfE(p8xop{iSu*wv3Md7jz?!k`3h`d z+8~aEs-8<6mK6Eg;znB8E-WGDQ<9fQe*~*Aa&^}r$qF%QW}6__9O`gQ7KRJF?6@9m z;1RT{se0)1fystlU1dQ0}$*Af$vs2zOlb)qLFqf$F%e8=iy|teI^*i^{}S zF$E)K>)4n@4yH~3DpIcx4}QVR!pZ%zpbZ^nPOvD%aZbZ5FI&lM9eHL4IRqlobO%|u zL1w`u!{|_#RAG_j9l@&8fl_yzddDz4q*KSmhCx(>smgavyQR}c5G{9XIBuhwN$Yx} zV`EnO?66ICJGxEOpe$HPo?X6d+Q_7aP6<-YTBi+_G29J6xXZFk+eMZ^utVT<9iXns z%NS`e_;^NhT}u*#K{Wef jZS+isU-A9v7Z3Ukc=)w(4_`Q+_}75=WGwN@+r<9>On4UQ diff --git a/test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf deleted file mode 100644 index 7b005a41..00000000 --- a/test/afl/test-cases/server-conf.cmin/spa_over_http_fwknopd.conf +++ /dev/null @@ -1 +0,0 @@ -ENABLE_SPA_OVER_HTTP Y; diff --git a/test/afl/test-cases/server-conf.cmin/spa_replay.pcap b/test/afl/test-cases/server-conf.cmin/spa_replay.pcap deleted file mode 100644 index 4c963e94d75ef8bf62c40bf399985e7bb62ce5b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 910 zcmdVYJ8#oa6bJCjW2krt@i~kX5<8APQ9skzN$bYW^+RHC5+^rylU(Qa#!i+ll~@pb z0S4&C3KJ4cNM&G!1*u;Gi2(_<*q}(AI>TT3OXmz{_(|u>$2YI8gPUNJiwgj*6^jwQ zu)^RL_*~3oFJ}vA0DSm$whgxLKeCRBgR&>zzW)TT&)+jUF=vRGtx6GHTXmTz^_+Jd zPG|-_yRPS(%W2AuSG&0!IkL^{?eY^df}W@>{61d|6457kz*J4j@WjrO(j2*w1w>rC7clA!O>!d zCo2{oG^%avBv7vz_N)^&!ofms!C_V)a=SJTO`2@|jS&m(^W D+zlMs diff --git a/test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf deleted file mode 100644 index d69e98d7..00000000 --- a/test/afl/test-cases/server-conf.cmin/var_expansion_fwknopd.conf +++ /dev/null @@ -1,2 +0,0 @@ -FWKNOP_RUN_DIR /var/run -FWKNOP_PID_FILE $FWKNOP_RUN_DIR/test.pid diff --git a/test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf b/test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf deleted file mode 100644 index f8f1d320..00000000 --- a/test/afl/test-cases/server-conf.cmin/var_expansion_invalid_fwknopd.conf +++ /dev/null @@ -1,2 +0,0 @@ -FWKNOP_RUN_DIR /var/run -FWKNOP_PID_FILE $FWKNOP_INVALID_VAR/test.pid From c4048573c6d325cd692c1b58159abca2e68c7b19 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 23:37:04 -0400 Subject: [PATCH 012/219] [test suite] removed SPA packet from afl-cmin corpus --- test/afl/test-cases/spa-pkts.cmin/spa3_md5.start | 1 - 1 file changed, 1 deletion(-) delete mode 100644 test/afl/test-cases/spa-pkts.cmin/spa3_md5.start diff --git a/test/afl/test-cases/spa-pkts.cmin/spa3_md5.start b/test/afl/test-cases/spa-pkts.cmin/spa3_md5.start deleted file mode 100644 index 6d63112e..00000000 --- a/test/afl/test-cases/spa-pkts.cmin/spa3_md5.start +++ /dev/null @@ -1 +0,0 @@ -1716411011200157:root:1397329899:2.0.1:4:127.0.0.2,tcp/22:192.168.10.1,12345:1234:AAAAAAAAAAAAAAAAAAAAAA \ No newline at end of file From 67fefd67ae1a470bf8753811bffa5cdf2f3442e4 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 23:39:16 -0400 Subject: [PATCH 013/219] [test suite] added README for afl-cmin helper scripts --- test/afl/fuzzing-wrappers/helpers/afl-cmin/README | 12 ++++++++++++ .../helpers/afl-cmin/server-access-cmin.sh | 1 - 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 test/afl/fuzzing-wrappers/helpers/afl-cmin/README diff --git a/test/afl/fuzzing-wrappers/helpers/afl-cmin/README b/test/afl/fuzzing-wrappers/helpers/afl-cmin/README new file mode 100644 index 00000000..7a7cf6d1 --- /dev/null +++ b/test/afl/fuzzing-wrappers/helpers/afl-cmin/README @@ -0,0 +1,12 @@ + +Normally the test corpus in the test/afl/test-cases/ directory is sufficient +for effective AFL fuzzing rounds. However, if you want to test with an expanded +set of files that have gone through afl-cmin, then you can leverage the scripts +in this directory. This uses the complete set of main test suite config files +in the test/conf/ directory as the input corpus for afl-cmin. The work flow +would be (for the server-access.sh fuzzing wrapper for example): + +$ cd fwknop.git/test/afl/ +$ ./compile/afl-compile.sh +$ ./fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh +$ ./fuzzing-wrappers/server-access.sh diff --git a/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh b/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh index a0b08dcc..d74d0019 100755 --- a/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh +++ b/test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh @@ -6,7 +6,6 @@ ### config files CONF_DIR=../conf IN_DIR=$CONF_DIR -OUT_DIR=${IN_DIR}.cmin OUT_DIR="test-cases/server-access.cmin" FUZZ_FILE=access_tmp.conf From 56e2e5ca2fa5e2335b5faff194f4e8c4b0f7898d Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Thu, 19 Mar 2015 23:45:22 -0400 Subject: [PATCH 014/219] [test suite] restore digest length calculation for AFL fuzzing, fixes #148 --- lib/fko_decode.c | 6 ------ 1 file changed, 6 deletions(-) diff --git a/lib/fko_decode.c b/lib/fko_decode.c index c680f9c5..9e724df9 100644 --- a/lib/fko_decode.c +++ b/lib/fko_decode.c @@ -124,12 +124,6 @@ verify_digest(char *tbuf, int t_size, fko_ctx_t ctx) static int is_valid_digest_len(int t_size, fko_ctx_t ctx) { -#if AFL_FUZZING - ctx->digest_type = FKO_DIGEST_SHA256; - ctx->digest_len = t_size; - return FKO_SUCCESS; -#endif - switch(t_size) { case MD5_B64_LEN: From c7be9baf9c22757af3e37c70a8d7d23b37c14c97 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 14:46:07 -0700 Subject: [PATCH 015/219] [test suite] better lcov coverage report handling with --initial and --zerocounters --- test/gen-coverage-report.sh | 28 ++++++---------------------- test/init-lcov.sh | 14 ++++++++++++++ test/lcov.env | 5 +++++ test/test-fwknop.pl | 2 ++ 4 files changed, 27 insertions(+), 22 deletions(-) create mode 100755 test/init-lcov.sh create mode 100644 test/lcov.env diff --git a/test/gen-coverage-report.sh b/test/gen-coverage-report.sh index bdd57cfe..4af13b56 100755 --- a/test/gen-coverage-report.sh +++ b/test/gen-coverage-report.sh @@ -1,29 +1,13 @@ #!/bin/sh -x -TOP_DIR="test" -LCOV_INFO="$TOP_DIR/lcov_coverage.info" -LCOV_INFO_FINAL="$TOP_DIR/lcov_coverage_final.info" -LCOV_RESULTS_DIR="$TOP_DIR/lcov-results" +. ./lcov.env cd .. -[ ! -d $TOP_DIR ] && mkdir $TOP_DIR -[ -d $LCOV_RESULTS_DIR ] && rm -rf $LCOV_RESULTS_DIR -[ ! -d $LCOV_RESULTS_DIR ] && mkdir $LCOV_RESULTS_DIR -for d in client server -do - cd $d - gcov -b -u *.gcno - cd .. -done +lcov --rc lcov_branch_coverage=1 --no-checksum --capture --directory . --output-file $LCOV_INFO +lcov --rc lcov_branch_coverage=1 --no-checksum -a $LCOV_BASE -a $LCOV_INFO --output-file $LCOV_INFO_FINAL +lcov --rc lcov_branch_coverage=1 --no-checksum -r $LCOV_INFO /usr/include/\* --output-file $LCOV_INFO_FINAL +genhtml --branch-coverage --output-directory $LCOV_RESULTS_DIR --branch-coverage $LCOV_INFO_FINAL -cd lib -gcov -b -u .libs/*.gcno -cd .. - -lcov --rc lcov_branch_coverage=1 --capture --directory . --output-file $LCOV_INFO -lcov --rc lcov_branch_coverage=1 -r $LCOV_INFO /usr/include/\* --output-file $LCOV_INFO_FINAL -genhtml --rc genhtml_branch_coverage=1 $LCOV_INFO_FINAL --output-directory $LCOV_RESULTS_DIR - -cd test +cd $TOP_DIR exit diff --git a/test/init-lcov.sh b/test/init-lcov.sh new file mode 100755 index 00000000..16ef265d --- /dev/null +++ b/test/init-lcov.sh @@ -0,0 +1,14 @@ +#!/bin/sh -x + +. ./lcov.env + +cd .. +[ ! -d $TOP_DIR ] && mkdir $TOP_DIR +[ -d $LCOV_RESULTS_DIR ] && rm -rf $LCOV_RESULTS_DIR +[ ! -d $LCOV_RESULTS_DIR ] && mkdir $LCOV_RESULTS_DIR + +lcov --rc lcov_branch_coverage=1 --no-checksum --zerocounters --directory . +lcov --rc lcov_branch_coverage=1 --no-checksum --capture --initial --directory . --output-file $LCOV_BASE + +cd $TOP_DIR +exit diff --git a/test/lcov.env b/test/lcov.env new file mode 100644 index 00000000..90373197 --- /dev/null +++ b/test/lcov.env @@ -0,0 +1,5 @@ +TOP_DIR="test" +LCOV_BASE="$TOP_DIR/lcov_coverage.base" +LCOV_INFO="$TOP_DIR/lcov_coverage.info" +LCOV_INFO_FINAL="$TOP_DIR/lcov_coverage_final.info" +LCOV_RESULTS_DIR="$TOP_DIR/lcov-results" diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index e62811b1..2cb7e516 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -217,6 +217,7 @@ my $enable_profile_coverage_check = 0; my $disable_profile_coverage_init = 0; my $profile_rm_prev_sh = 'rm-coverage-files.sh'; my $profile_gen_report_sh = 'gen-coverage-report.sh'; +my $profile_init_sh = 'init-lcov.sh'; my $enable_make_distcheck = 0; my $enable_perl_module_checks = 0; my $enable_perl_module_fuzzing_spa_pkt_generation = 0; @@ -6740,6 +6741,7 @@ sub init() { print "[-] Warning: -fprofile-args -ftest-coverage not ", "found, use ./configure --enable-profile-coverage?\n"; } + &run_cmd($profile_init_sh, $cmd_out_tmp, $curr_test_file); } push @tests_to_exclude, qr/distcheck/; } From d058493d3b0e6b8b073f7d4ebe09236dcc4ea109 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 17:41:26 -0700 Subject: [PATCH 016/219] [test suite] handle versions of lcov that don't have the --rc option --- ChangeLog | 8 ++++++-- Makefile.am | 2 ++ test/gen-coverage-report.sh | 8 ++++---- test/init-lcov.sh | 4 ++-- test/lcov.env | 9 +++++++++ 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index bede335b..4ff89420 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,8 +2,12 @@ fwknop-2.6.6 (02//2015): - [server] Bug fix when compiled with --enable-udp-server to not include pcap.h, which is likely not installed whenever libpcap is also not installed. This bug was reported by Alexander Kozhevnikov. - - Set AFL_HARDEN=1 to AFL fuzzing wrapper scripts. This enables simple - memory bug detection in AFL at the cost of a small performance hit. + - [test suite] Set AFL_HARDEN=1 to AFL fuzzing wrapper scripts. This + enables simple memory bug detection in AFL at the cost of a small + performance hit. + - [test suite] Handle versions of lcov that don't have the --rc argument + which is normally used to force the creation branch coverage stats when + code coverage reports are created. fwknop-2.6.5 (12/16/2014): - [server] (Grant Pannell) Added a new access.conf variable "DESTINATION" diff --git a/Makefile.am b/Makefile.am index ee125ebe..4cd3ec05 100644 --- a/Makefile.am +++ b/Makefile.am @@ -424,6 +424,8 @@ EXTRA_DIST = \ test/configure_max_coverage.sh \ test/rm-coverage-files.sh \ test/gen-coverage-report.sh \ + test/init-lcov.sh \ + test/lcov.env \ test/configure_max_coverage.sh \ test/README \ VERSION \ diff --git a/test/gen-coverage-report.sh b/test/gen-coverage-report.sh index 4af13b56..cee1586a 100755 --- a/test/gen-coverage-report.sh +++ b/test/gen-coverage-report.sh @@ -4,10 +4,10 @@ cd .. -lcov --rc lcov_branch_coverage=1 --no-checksum --capture --directory . --output-file $LCOV_INFO -lcov --rc lcov_branch_coverage=1 --no-checksum -a $LCOV_BASE -a $LCOV_INFO --output-file $LCOV_INFO_FINAL -lcov --rc lcov_branch_coverage=1 --no-checksum -r $LCOV_INFO /usr/include/\* --output-file $LCOV_INFO_FINAL -genhtml --branch-coverage --output-directory $LCOV_RESULTS_DIR --branch-coverage $LCOV_INFO_FINAL +lcov $LCOV_RC_BC --no-checksum --capture --directory . --output-file $LCOV_INFO +lcov $LCOV_RC_BC --no-checksum -a $LCOV_BASE -a $LCOV_INFO --output-file $LCOV_INFO_FINAL +lcov $LCOV_RC_BC --no-checksum -r $LCOV_INFO /usr/include/\* --output-file $LCOV_INFO_FINAL +genhtml $GENHTML_USE_BC --output-directory $LCOV_RESULTS_DIR --branch-coverage $LCOV_INFO_FINAL cd $TOP_DIR exit diff --git a/test/init-lcov.sh b/test/init-lcov.sh index 16ef265d..8d454ff5 100755 --- a/test/init-lcov.sh +++ b/test/init-lcov.sh @@ -7,8 +7,8 @@ cd .. [ -d $LCOV_RESULTS_DIR ] && rm -rf $LCOV_RESULTS_DIR [ ! -d $LCOV_RESULTS_DIR ] && mkdir $LCOV_RESULTS_DIR -lcov --rc lcov_branch_coverage=1 --no-checksum --zerocounters --directory . -lcov --rc lcov_branch_coverage=1 --no-checksum --capture --initial --directory . --output-file $LCOV_BASE +lcov $LCOV_RC_BC --no-checksum --zerocounters --directory . +lcov $LCOV_RC_BC --no-checksum --capture --initial --directory . --output-file $LCOV_BASE cd $TOP_DIR exit diff --git a/test/lcov.env b/test/lcov.env index 90373197..4f893aa3 100644 --- a/test/lcov.env +++ b/test/lcov.env @@ -3,3 +3,12 @@ LCOV_BASE="$TOP_DIR/lcov_coverage.base" LCOV_INFO="$TOP_DIR/lcov_coverage.info" LCOV_INFO_FINAL="$TOP_DIR/lcov_coverage_final.info" LCOV_RESULTS_DIR="$TOP_DIR/lcov-results" + +### check to see if lcov offers the --rc option +LCOV_RC_BC="" +GENHTML_USE_BC="" +if `lcov -h | grep -q "\-\-rc"`; +then + LCOV_RC_BC="--rc lcov_branch_coverage=1" + GENHTML_USE_BC="--branch-coverage" +fi From 211f1fb5a2b3597cbdfd5016b2d22de9d891f3ed Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 22:00:21 -0400 Subject: [PATCH 017/219] [test suite] update afl-compile-code-coverage.sh to not use afl-gcc --- Makefile.am | 1 - test/afl/compile/afl-compile-code-coverage.sh | 17 ++++++++++++----- test/afl/compile/afl-gen-code-coverage.sh | 13 ------------- 3 files changed, 12 insertions(+), 19 deletions(-) delete mode 100755 test/afl/compile/afl-gen-code-coverage.sh diff --git a/Makefile.am b/Makefile.am index 4cd3ec05..2b9672a5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -360,7 +360,6 @@ EXTRA_DIST = \ test/afl/compile/afl-compile-code-coverage.sh \ test/afl/compile/afl-compile-no-enable-arg.sh \ test/afl/compile/afl-compile.sh \ - test/afl/compile/afl-gen-code-coverage.sh \ test/afl/doc/AFL_status_screen.png \ test/afl/README \ test/afl/fuzzing-wrappers/client-rc.sh \ diff --git a/test/afl/compile/afl-compile-code-coverage.sh b/test/afl/compile/afl-compile-code-coverage.sh index 6c2d9376..a8c0b7b7 100755 --- a/test/afl/compile/afl-compile-code-coverage.sh +++ b/test/afl/compile/afl-compile-code-coverage.sh @@ -1,9 +1,16 @@ #!/bin/sh -x +# +# Recompile fwknop with AFL code enabled, but without using afl-gcc. The +# purpose of this is to allow the generated fuzzing corpus under an AFL +# fuzzing run to be sent back through the fwknop code to see which +# functions/lines were executed by AFL. This can be used to help tune the +# original test case inputs. +# -cd .. -./rm-coverage-files.sh -cd afl - -./compile/afl-compile.sh --enable-profile-coverage +cd ../../ +./extras/apparmor/configure_args.sh --enable-afl-fuzzing --enable-profile-coverage $@ +make clean +make +cd test/afl exit $? diff --git a/test/afl/compile/afl-gen-code-coverage.sh b/test/afl/compile/afl-gen-code-coverage.sh deleted file mode 100755 index 747f42c1..00000000 --- a/test/afl/compile/afl-gen-code-coverage.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -x - -RESULTS_DIR=afl-lcov-results -[ -d $RESULTS_DIR ] && rm -rf $RESULTS_DIR - -cd .. -./gen-coverage-report.sh -mv lcov-results afl/$RESULTS_DIR -cd afl - -echo "[+] Code coverage available in the $RESULTS_DIR/ directory" - -exit $? From 2414393c94a75661949fd76ebd5f0bc0618a22f7 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 22:02:12 -0400 Subject: [PATCH 018/219] added the extras/patches/ directory (initial patch to link against pthreads for libfiu support) --- extras/patches/libfiu_add_pthreads.patch | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 extras/patches/libfiu_add_pthreads.patch diff --git a/extras/patches/libfiu_add_pthreads.patch b/extras/patches/libfiu_add_pthreads.patch new file mode 100644 index 00000000..b04f7b39 --- /dev/null +++ b/extras/patches/libfiu_add_pthreads.patch @@ -0,0 +1,13 @@ +diff --git a/configure.ac b/configure.ac +index 8fadbfb..87d5ffb 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -150,7 +150,7 @@ AC_ARG_ENABLE([libfiu-support], + if test "x$want_libfiu_support" = "xyes"; then + AC_DEFINE([HAVE_LIBFIU], [1], [Define for fault injection testing support]) + FKO_CHECK_COMPILER_ARG([-DFIU_ENABLE]) +- FKO_CHECK_COMPILER_ARG_LDFLAGS_ONLY([-lfiu]) ++ FKO_CHECK_COMPILER_ARG_LDFLAGS_ONLY([-pthread -lfiu -ldl]) + fi + + dnl Decide whether or not to enable C unit testing From f87e18635c9c37f13f864939cc6830fcf266201a Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 22:06:19 -0400 Subject: [PATCH 019/219] update Makefile.am for latest AFL scripts and test cases --- Makefile.am | 65 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/Makefile.am b/Makefile.am index 2b9672a5..477ad786 100644 --- a/Makefile.am +++ b/Makefile.am @@ -361,31 +361,50 @@ EXTRA_DIST = \ test/afl/compile/afl-compile-no-enable-arg.sh \ test/afl/compile/afl-compile.sh \ test/afl/doc/AFL_status_screen.png \ - test/afl/README \ - test/afl/fuzzing-wrappers/client-rc.sh \ - test/afl/fuzzing-wrappers/fcns \ - test/afl/fuzzing-wrappers/helpers/fwknop-rc-hangs.sh \ - test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-digest-cache.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access-hangs.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf-hangs.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-hangs.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh \ - test/afl/fuzzing-wrappers/helpers/fwknopd-enc-pkt-file.sh \ - test/afl/fuzzing-wrappers/server-access.sh \ - test/afl/fuzzing-wrappers/server-conf.sh \ - test/afl/fuzzing-wrappers/server-digest-cache.sh \ - test/afl/fuzzing-wrappers/spa-pkts.sh \ - test/afl/fuzzing-wrappers/server-enc-pkts.sh \ + test/afl/README.md \ + test/afl/fuzzing-wrappers/client-rc.sh + test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-enc-pkt-file.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-digest-cache.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh + test/afl/fuzzing-wrappers/helpers/fwknop-rc-hangs.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access-hangs.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-hangs.sh + test/afl/fuzzing-wrappers/helpers/afl-cmin/server-conf-cmin.sh + test/afl/fuzzing-wrappers/helpers/afl-cmin/README + test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh + test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf-hangs.sh + test/afl/fuzzing-wrappers/server-digest-cache.sh + test/afl/fuzzing-wrappers/spa-pkts.sh + test/afl/fuzzing-wrappers/server-access.sh + test/afl/fuzzing-wrappers/server-enc-pkts.sh + test/afl/fuzzing-wrappers/fcns + test/afl/fuzzing-wrappers/server-conf.sh test/afl/test-cases/client-rc/fwknoprc \ - test/afl/test-cases/server-access/access.conf \ - test/afl/test-cases/server-conf/fwknopd.conf \ - test/afl/test-cases/spa-pkts/spa.start \ - test/afl/test-cases/spa-pkts/spa2.start \ - test/afl/test-cases/spa-pkts/spa3.start \ + test/afl/test-cases/server-digest-cache/digest.cache \ + test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start \ + test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start \ + test/afl/test-cases/spa-pkts.cmin/spa1_md5.start \ + test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start \ + test/afl/test-cases/spa-pkts.cmin/spa2_md5.start \ test/afl/test-cases/enc-pkts/spa.enc \ + test/afl/test-cases/server-access/access.conf \ + test/afl/test-cases/spa-pkts/spa1_sha384.start \ + test/afl/test-cases/spa-pkts/spa3_sha384.start \ + test/afl/test-cases/spa-pkts/spa3_sha256.start \ + test/afl/test-cases/spa-pkts/spa3_sha512.start \ + test/afl/test-cases/spa-pkts/spa1_sha256.start \ + test/afl/test-cases/spa-pkts/spa1_sha512.start \ + test/afl/test-cases/spa-pkts/spa3_md5.start \ + test/afl/test-cases/spa-pkts/spa1_md5.start \ + test/afl/test-cases/spa-pkts/spa2_sha256.star \t + test/afl/test-cases/spa-pkts/spa2_sha512.start \ + test/afl/test-cases/spa-pkts/spa2_sha384.start \ + test/afl/test-cases/spa-pkts/spa2_md5.start \ + test/afl/test-cases/server-conf/fwknopd.conf \ test/tests/build_security.pl \ test/tests/preliminaries.pl \ test/tests/code_structure.pl \ From ea7f22f8421420205d4ff759ca51b3ecb2c571b5 Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 22:12:37 -0400 Subject: [PATCH 020/219] fix line separators --- Makefile.am | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/Makefile.am b/Makefile.am index 477ad786..5a8bd4e7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -362,27 +362,27 @@ EXTRA_DIST = \ test/afl/compile/afl-compile.sh \ test/afl/doc/AFL_status_screen.png \ test/afl/README.md \ - test/afl/fuzzing-wrappers/client-rc.sh - test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-enc-pkt-file.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-digest-cache.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh - test/afl/fuzzing-wrappers/helpers/fwknop-rc-hangs.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access-hangs.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-hangs.sh - test/afl/fuzzing-wrappers/helpers/afl-cmin/server-conf-cmin.sh - test/afl/fuzzing-wrappers/helpers/afl-cmin/README - test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh - test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf-hangs.sh - test/afl/fuzzing-wrappers/server-digest-cache.sh - test/afl/fuzzing-wrappers/spa-pkts.sh - test/afl/fuzzing-wrappers/server-access.sh - test/afl/fuzzing-wrappers/server-enc-pkts.sh - test/afl/fuzzing-wrappers/fcns - test/afl/fuzzing-wrappers/server-conf.sh + test/afl/fuzzing-wrappers/client-rc.sh \ + test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-enc-pkt-file.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-digest-cache.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh \ + test/afl/fuzzing-wrappers/helpers/fwknop-rc-hangs.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access-hangs.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-hangs.sh \ + test/afl/fuzzing-wrappers/helpers/afl-cmin/server-conf-cmin.sh \ + test/afl/fuzzing-wrappers/helpers/afl-cmin/README \ + test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh \ + test/afl/fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh \ + test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf-hangs.sh \ + test/afl/fuzzing-wrappers/server-digest-cache.sh \ + test/afl/fuzzing-wrappers/spa-pkts.sh \ + test/afl/fuzzing-wrappers/server-access.sh \ + test/afl/fuzzing-wrappers/server-enc-pkts.sh \ + test/afl/fuzzing-wrappers/fcns \ + test/afl/fuzzing-wrappers/server-conf.sh \ test/afl/test-cases/client-rc/fwknoprc \ test/afl/test-cases/server-digest-cache/digest.cache \ test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start \ @@ -400,7 +400,7 @@ EXTRA_DIST = \ test/afl/test-cases/spa-pkts/spa1_sha512.start \ test/afl/test-cases/spa-pkts/spa3_md5.start \ test/afl/test-cases/spa-pkts/spa1_md5.start \ - test/afl/test-cases/spa-pkts/spa2_sha256.star \t + test/afl/test-cases/spa-pkts/spa2_sha256.start \ test/afl/test-cases/spa-pkts/spa2_sha512.start \ test/afl/test-cases/spa-pkts/spa2_sha384.start \ test/afl/test-cases/spa-pkts/spa2_md5.start \ From 5aacd6ae213d3a7ece43e51b732b28b55933f7ea Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 22:18:04 -0400 Subject: [PATCH 021/219] added convenience script to create a ramdisk for AFL fuzzing runs --- extras/ramdisk/ramdisk-create.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100755 extras/ramdisk/ramdisk-create.sh diff --git a/extras/ramdisk/ramdisk-create.sh b/extras/ramdisk/ramdisk-create.sh new file mode 100755 index 00000000..09b96f04 --- /dev/null +++ b/extras/ramdisk/ramdisk-create.sh @@ -0,0 +1,8 @@ +#!/bin/sh -x + +RAMDISK=/tmp/afl-ramdisk +mkdir $RAMDISK && chmod 777 $RAMDISK +mount -t tmpfs -o size=768M tmpfs $RAMDISK + +git clone . $RAMDISK/fwknop.git +exit $? From 90fb4c9aca0e10b75394a5cf5fa60e03df3e293e Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Sun, 22 Mar 2015 22:26:29 -0400 Subject: [PATCH 022/219] minor comment addition --- test/afl/fuzzing-wrappers/helpers/afl-cmin/README | 1 + 1 file changed, 1 insertion(+) diff --git a/test/afl/fuzzing-wrappers/helpers/afl-cmin/README b/test/afl/fuzzing-wrappers/helpers/afl-cmin/README index 7a7cf6d1..d7c9b6c2 100644 --- a/test/afl/fuzzing-wrappers/helpers/afl-cmin/README +++ b/test/afl/fuzzing-wrappers/helpers/afl-cmin/README @@ -9,4 +9,5 @@ would be (for the server-access.sh fuzzing wrapper for example): $ cd fwknop.git/test/afl/ $ ./compile/afl-compile.sh $ ./fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh + $ ./fuzzing-wrappers/server-access.sh From 08bc2aa60301912716acc882b918d73fcbfbdafb Mon Sep 17 00:00:00 2001 From: Michael Rash Date: Mon, 23 Mar 2015 17:55:59 -0700 Subject: [PATCH 023/219] [test suite] rely exclusively on tarball for gpg keyrings --- Makefile.am | 12 ------------ test/conf/client-gpg-no-pw/pubring.gpg | Bin 2480 -> 0 bytes test/conf/client-gpg-no-pw/secring.gpg | Bin 1274 -> 0 bytes test/conf/client-gpg-no-pw/trustdb.gpg | Bin 1360 -> 0 bytes test/conf/client-gpg/pubring.gpg | Bin 2480 -> 0 bytes test/conf/client-gpg/secring.gpg | Bin 1350 -> 0 bytes test/conf/client-gpg/trustdb.gpg | Bin 1360 -> 0 bytes test/conf/server-gpg-no-pw/pubring.gpg | Bin 2480 -> 0 bytes test/conf/server-gpg-no-pw/secring.gpg | Bin 1276 -> 0 bytes test/conf/server-gpg-no-pw/trustdb.gpg | Bin 1360 -> 0 bytes test/conf/server-gpg/pubring.gpg | Bin 2480 -> 0 bytes test/conf/server-gpg/secring.gpg | Bin 1352 -> 0 bytes test/conf/server-gpg/trustdb.gpg | Bin 1360 -> 0 bytes test/test-fwknop.pl | 4 ++++ 14 files changed, 4 insertions(+), 12 deletions(-) delete mode 100644 test/conf/client-gpg-no-pw/pubring.gpg delete mode 100644 test/conf/client-gpg-no-pw/secring.gpg delete mode 100644 test/conf/client-gpg-no-pw/trustdb.gpg delete mode 100644 test/conf/client-gpg/pubring.gpg delete mode 100644 test/conf/client-gpg/secring.gpg delete mode 100644 test/conf/client-gpg/trustdb.gpg delete mode 100644 test/conf/server-gpg-no-pw/pubring.gpg delete mode 100644 test/conf/server-gpg-no-pw/secring.gpg delete mode 100644 test/conf/server-gpg-no-pw/trustdb.gpg delete mode 100644 test/conf/server-gpg/pubring.gpg delete mode 100644 test/conf/server-gpg/secring.gpg delete mode 100644 test/conf/server-gpg/trustdb.gpg diff --git a/Makefile.am b/Makefile.am index 5a8bd4e7..852f8631 100644 --- a/Makefile.am +++ b/Makefile.am @@ -122,18 +122,6 @@ EXTRA_DIST = \ python/fkomodule.c \ python/fko.py \ test/conf/gpg_dirs_orig.tar.gz \ - test/conf/client-gpg/pubring.gpg \ - test/conf/client-gpg/secring.gpg \ - test/conf/client-gpg/trustdb.gpg \ - test/conf/client-gpg-no-pw/pubring.gpg \ - test/conf/client-gpg-no-pw/secring.gpg \ - test/conf/client-gpg-no-pw/trustdb.gpg \ - test/conf/server-gpg/pubring.gpg \ - test/conf/server-gpg/secring.gpg \ - test/conf/server-gpg/trustdb.gpg \ - test/conf/server-gpg-no-pw/pubring.gpg \ - test/conf/server-gpg-no-pw/secring.gpg \ - test/conf/server-gpg-no-pw/trustdb.gpg \ test/conf/hmac_android_access.conf \ test/conf/android_access.conf \ test/conf/android_legacy_iv_access.conf \ diff --git a/test/conf/client-gpg-no-pw/pubring.gpg b/test/conf/client-gpg-no-pw/pubring.gpg deleted file mode 100644 index 615e12f6ebbba9257d6f5502dce8ceae20ef3686..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2480 zcmbuObD2U|DlBS~tTi2-_nhZFf4%>_fBl~4_x%3*eV%Wz02yqP^cgA*2F#jYJ0$Lt zrvr6Dc9uznfM0`M?SwQh&l&id*Q?ZaIezZHo-T=EzIt0)MFJzrFp!Z!rOhdoM9Qgg zotWOW#a{K4t1_MeM+G#T^oP>?cq%N-fWaKJ_h1JixC(WoaC@n3RYs3T+%x&h- z_n<3VH*%vWA73&@LR|f#yi6WM&qdAwuNKmjkD8aP%ewU?&E?FKr)Z7nu{_bJx|%q> zn1K)_hvTMc{tGaE^3s4bWB6P30 zR&Vdm+N!dS+MeZqd_bUgx6g(yR?6sc?}Y1|1|6GapbxFcH2?vi4xsoCQDRb1z_0bi z&1q9k!s>wKRp#hBjm-Y0NqW^VWgoTqi0rX2QI2woG|WC$^8286QE7bMq*_ms@##(0 z7kzutcj4;SfLh6;&Zqefijorh2AzLzE?jFDQgOlRYJCX4%QJosEWQ`3xUXyLirAO) z;#(472d-u**geJ;;OuHtpNL*)9O7z5N-0sZH32DaC$9i8-+GE&A0#}^RNj#!9oC8q{+ zm9{x`G}9Mm(czY7mV!NO)1Lk+Xg87VC4{3kW^b+M-Ar&L$F(@YtrB~n>1`R$d^C@7 zvoGbib}et)qhDMxOS0oBr6pIA8KKFG58e0780l2S zIC{yf`Mr&^wuqo;!c|yu}o)w8HXA!ue~(&dWsKYfGY#aS44EJ z+xZsE6ZP-YWDT)1QJtQ+?`=;??Cqs&Md~k@!t|Q6T&>tyDbWYA=>`fwWev-WB8gxw zZhk@k8~F(XpGPW+I9WuJHfeWhW%|QR?3#45jgEVt*Mk5m^JbBuW3doJ5%;or_xnye z=szCWgZOfrt_idyD>rFs_RZo!$2ys=ok_Y&G_jB);n!gX3g&vnwPt^t=GLB_&bc+t zb7bSewGHcAfwP>uw{=g&IJz9k$-n++?c%^*AkB?G;bz@vA^QcpJaSCq;X#2O7D=li z%$T9P6Sf}Q;9(x5klC-8Bwb*T8<|mR_i2sz>v_OY~n{7D?dz;tie*dM1^*VCPTgd?Nh!8P)Qo!t#p6!Vw9n~ZQ9Z> zugGzsBf>nBHgc8~pv4#0S8tS@c#hZ?SkDRYqw5*vTio_1u=%-hxk=mvub}ZeKWS0z zT{^7ir>`s&D3sCU`k9~Jzurkb-SA+pLS%27d$-tuZEDXisp7b!$*CT1n=jUNB7Re0 z@as%$HD*k>zf^dGcz1z#V#)@qe6i1fMGx|b`GoJa>GGQ;dcMU3OSROZaLA{s+O>}ChkB?*aSkzHbg-=P40y4(;3Bei!P((mP--!Id}=Ji=*3_8)9uxu%Mem) zMO=KV!^sgcIT_~3wKlZQj@yEB&()`k@(GwN{H{}Ph?MRX#y%Nw!T3&Iu_6Nj`T)193JVv8!1%rgV&$J7I}&Q diff --git a/test/conf/client-gpg-no-pw/secring.gpg b/test/conf/client-gpg-no-pw/secring.gpg deleted file mode 100644 index e84fd95c7496ab361b7515b661dca267121adbde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1274 zcmVNJ-VC_Yy{r~SxW{XWZg4jLa!REyifJT zjDrt9*2#4faQ|xXzdT$dB358Uy6ucD=7f_ znu9>EVma=1F$*hr@o2N_zer<@_EU`4%w?juJf-FZGal{&*0&6 zU&95)>ov`SgZ8)!^e)I|0L{laF>2!^wMB=oKdG?EhTi!KNW#`=WS?)pv!{mawQvm` zO~4Hxcc-~l_|_jsWj`Ic*6ihs|A->i-=@6LN?Q!d-QcB5o+ktVn%E|S+3al&M-tU8 zZJs`L>SgR}F^QoO*s3#|o0i?NWoUCkN8L)H2f_Gm9)`uT)zhWQrYOF%G7~j$3-cL(5g$!? z5C6y}n45c))f~WnI85~H_c2Wi=W!j20waIUQ%wC%7Y`07$Wza=m+QC&8dPg8BkgLP z`#8n|nW1?XD7^NB4EI(I_6~3>hlv(TyK9zhOR5{a3s7`}=j0D$BbN+A4G zrxG}-e0h>*M;3{Q;A%>$V9G6Y^QJc;DQmu*^BUMwHg}FQT9`?1Y|s_h6jvI;zeBJY z5Az1ugMzhOaDfznrr?2Iv>lHJ%$kwsY`0Ep`_8pqKU`(JlFkc2KSp7LY|z~DRO1JS zASDS0c23S1BLD*h2mU-}qG$nc}hH@eMdv7ShI6YCN*fe25v*<@tCJF@$uuwA8&Jfc%DxBQoK1mTT6yJd+Be^@% z+{;fr8voPt`;PztR1N^oJg()yUu0V6761Sl&|8{HX1St3ewbKB3L;B3+3+)T9g$Yp zxDbV!Z diff --git a/test/conf/client-gpg-no-pw/trustdb.gpg b/test/conf/client-gpg-no-pw/trustdb.gpg deleted file mode 100644 index 58ec2d6dbf204edd880308798a9b72d7f7d66d15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmZQfFGy!*W@Ke#U|?{s@3{e_umMIckf=e(T&GFURn0 z;-<>JZ8pcoObD2U|DlBS~tTi2-_nhZFf4%>_fBl~4_x%3*eV%Wz02yqP^cgA*2F#jYJ0$Lt zrvr6Dc9uznfM0`M?SwQh&l&id*Q?ZaIezZHo-T=EzIt0)MFJzrFp!Z!rOhdoM9Qgg zotWOW#a{K4t1_MeM+G#T^oP>?cq%N-fWaKJ_h1JixC(WoaC@n3RYs3T+%x&h- z_n<3VH*%vWA73&@LR|f#yi6WM&qdAwuNKmjkD8aP%ewU?&E?FKr)Z7nu{_bJx|%q> zn1K)_hvTMc{tGaE^3s4bWB6P30 zR&Vdm+N!dS+MeZqd_bUgx6g(yR?6sc?}Y1|1|6GapbxFcH2?vi4xsoCQDRb1z_0bi z&1q9k!s>wKRp#hBjm-Y0NqW^VWgoTqi0rX2QI2woG|WC$^8286QE7bMq*_ms@##(0 z7kzutcj4;SfLh6;&Zqefijorh2AzLzE?jFDQgOlRYJCX4%QJosEWQ`3xUXyLirAO) z;#(472d-u**geJ;;OuHtpNL*)9O7z5N-0sZH32DaC$9i8-+GE&A0#}^RNj#!9oC8q{+ zm9{x`G}9Mm(czY7mV!NO)1Lk+Xg87VC4{3kW^b+M-Ar&L$F(@YtrB~n>1`R$d^C@7 zvoGbib}et)qhDMxOS0oBr6pIA8KKFG58e0780l2S zIC{yf`Mr&^wuqo;!c|yu}o)w8HXA!ue~(&dWsKYfGY#aS44EJ z+xZsE6ZP-YWDT)1QJtQ+?`=;??Cqs&Md~k@!t|Q6T&>tyDbWYA=>`fwWev-WB8gxw zZhk@k8~F(XpGPW+I9WuJHfeWhW%|QR?3#45jgEVt*Mk5m^JbBuW3doJ5%;or_xnye z=szCWgZOfrt_idyD>rFs_RZo!$2ys=ok_Y&G_jB);n!gX3g&vnwPt^t=GLB_&bc+t zb7bSewGHcAfwP>uw{=g&IJz9k$-n++?c%^*AkB?G;bz@vA^QcpJaSCq;X#2O7D=li z%$T9P6Sf}Q;9(x5klC-8Bwb*T8<|mR_i2sz>v_OY~n{7D?dz;tie*dM1^*VCPTgd?Nh!8P)Qo!t#p6!Vw9n~ZQ9Z> zugGzsBf>nBHgc8~pv4#0S8tS@c#hZ?SkDRYqw5*vTio_1u=%-hxk=mvub}ZeKWS0z zT{^7ir>`s&D3sCU`k9~Jzurkb-SA+pLS%27d$-tuZEDXisp7b!$*CT1n=jUNB7Re0 z@as%$HD*k>zf^dGcz1z#V#)@qe6i1fMGx|b`GoJa>GGQ;dcMU3OSROZaLA{s+O>}ChkB?*aSkzHbg-=P40y4(;3Bei!P((mP--!Id}=Ji=*3_8)9uxu%Mem) zMO=KV!^sgcIT_~3wKlZQj@yEB&()`k@(GwN{H{}Ph?MRX#y%Nw!T3&Iu_6Nj`T)193JVv8!1%rgV&$J7I}&Q diff --git a/test/conf/client-gpg/secring.gpg b/test/conf/client-gpg/secring.gpg deleted file mode 100644 index 153a8acf07c52f4cffef2e040f712c30c70263ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcmV-M1-bf_0pSEke)R|u1OVJZi!BXclqm>NJ-VC_Yy{r~SxW{XWZg4jLa!REyifJT zjDrt9*2#4faQ|xXzdT$dB358Uy6ucD=7f_ znu9>EVma=1F$*hr@o2N_zer<@_EU`4%w?juJf-FZGal{&*0&6 zU&95)>ov`SgZ8)!^e)I|0L{laF>2!^wMB=oKdG?EhTi!KNW#`=WS?)pv!{mawQvm` zO~4Hxcc-~l_|_jsWj`Ic*6ihs|A->i-=@6LN?Q!d-QcB5o+ktVn%E|S+3al&M-tU8 zZJs`L>SgR}F^QoO*s3#|o0i?NWoUCkN8L)H2Cbz^jCZ*CxDWpHe7d2MBGbaN?)Uj!2o0stQc z0!M!J2m%`e1`7!Y2Ll2G6#@tY0~P`S0v-VZ7k~f?2@vCNL_BIgtyZ@70H1N12BEX8 zFC`}?8xv0^U7phIJW2qcal*-1pb{_nl5r_a12x>(N-gOWumS)8odRP7M}GAT5C{OM zubH!g)=>!^0OjiA&gUM6#j@4YrOKu#zOynDHE;{_8GsQVO?eOh$R?PZdz952z71$J48p6Lruo(~Y2HAsxwOnw46o97S zfnKy7j|a?}k>_l;PHX$lwO&75WxSHk3qU_cVS{YY-11c82Ztaf2?usg&KM&A0|f{E zJZ7S3`AF-y4(mezyYhdfxy56T<EqIlDFv#UkW-|v@D+YE)n5=d8EXl9mUDtKLk#wR zfok~}`17sIK+8dQaYRt!YFtTz!KejG)QVmPZN9OJ_U@FAd|9G;v{4{MeZUBVwuQoA zAvO7mVUAh6<@ilX%Y;FGMaAtcCfPm-8cT7tTW@EpqKkc^y!+R(YwrLseu#zGOGG?v zoqu?unje@0xtQJuy=M9!FB3UpDt$lO*($qD9L_B7P6&I_fnC-k6q<%|A^Ur8D8e{B zQKi^4VL`L#M^h#W1q-lHGStox(>W@f+~Yn;5ib<qfhHrlJJa0DPdys{)ARd}{sRL7 zfK`><Qr&c-U@)A6jSzI2CBz#%qBrJjOGFCHv(1GjLvSm4v<)HzeKC@*Ddrq2$uZFm z?iZ?jvx2CKN!pSDO*N&BU@5RUlr*J{SV(v3#psAh1Q-zl00{*GM}GAT0vikf3JDP7 zZ$vz5Kdn~Lr2wFU5bZF&%hU0v_4fkJVb!(xTSJ`yprMu*KPJz;B36-tf2{SOa=n!u Iv9JOF06tx7*Z=?k diff --git a/test/conf/client-gpg/trustdb.gpg b/test/conf/client-gpg/trustdb.gpg deleted file mode 100644 index 58ec2d6dbf204edd880308798a9b72d7f7d66d15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmZQfFGy!*W@Ke#U|?{s@3{e_umMIckf<D*lmZ$b$OWsz6vhx4RfiEIV1dza84VXu z2#lr!?CF4qf#J;5577tRwyklnIQcl=#U{&sZ5SIwu{=T#FT-ZB6Jn>=e(T&GFURn0 z;-<DVmR|><>JZ8pco<k#-CXDNI7o4whu;RRHJ|*=q<39`Do{iy<YjPPf2wjuN6d<8 XOa9+%njbkOaE^2WD@XyT=!63REom-( diff --git a/test/conf/server-gpg-no-pw/pubring.gpg b/test/conf/server-gpg-no-pw/pubring.gpg deleted file mode 100644 index b0aa06e852738c2aa9e929aaf20178d4ecfa7211..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2480 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 diff --git a/test/conf/server-gpg-no-pw/secring.gpg b/test/conf/server-gpg-no-pw/secring.gpg deleted file mode 100644 index c3a465a5cc9d44d625253ead0021e8d1fcaebed4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1276 zcmV<Y1Oxk(0lNf8e*HWV1OTcK{&ls$$IK(K8)dp@&8M_PgYx&$2sY*G+CW~xZgAKH zpl6=x3NA*t{X^qAujqmkHfz~-x?OGmw!NB7O%O>6uU9}HFSChRMe>P&cPon1GZq3F z9z=zh4r=*r-rzC(qP^H|l!%yeKA4CRJGfM}<7OW_OR_GCH#uKcF9!gil-xaU(0K<o z3R|4sTclC`O47GY1N{{AS$xdmMOqQQijSGdPpuNX{?*e|cXXHY4r94N18VtRdbNuD z*ZHhc*N%|U`%m(21gx;`_GsMmoslj`cu!O^j+KnJ>sZGn0?b<d)LKTdLlgIF<;^u7 zt1JP)?1&?<a5&f*{&4PUuv|iE7KX(aei4>4lXZogOY!S;s8$31BLkpRr56Y((^v!Q z(1{+lQ3K>6zHWm%v%8{MZ>2b2{z`*-%--o4Q!{#>P&kudd0K@%J!-FRzT#sgiIdeF za+Q-%aa4V*GGZ!iTYdBe2*nfB#W9TeL|5atd-&B5bU7IU2Lfx?QP@>BmDsnLbfT8N zQ9;OH8kXm0#z~|T005m5|5J3q3$u&0mJMi~mbQYUXY#KLRkTQEcWZ8MaAY7TW_N3D zZ*XKFb7gXNWpW^NWpi{OYh`&mAVg0fPES-IRZ~SEW^ZyJaB^>Cbz^jCZ*CxDWpHe7 zd2MBGbaN?)Uj!2o0stQc0!M!RJOUd71`7!Y2Ll2G6#@tY0~P`S0v-VZ7k~f?2@oo* z@=rD!y3~Xr0G>Yw_F+Eq2!OwPZ=3InYfA8)gi`>XG&>F?rrZq~FmATwE~*$C<{#$i zumS)8odP`sM}GZJ5C{OKHow)=y!GwdBH_xFi#B+#mqEQ93n${iDIX288TBE@lhxO3 z@W5I^{0PnR6QEnm%g)#?_&~I<-WT&!(>!ope(#Ru76_SG?&^)2I>tOGXs`2UW797; zl|zwcbMpO@dXs+nd|qkMk|ZO(O;ou?-q(cSmKL1M6vgB5=->W<Ot7ilp9&?mTfYn| z_`blSfemdme}P=)vskUVJgyqp{jEDm9@#tjqn}>``<()Abb#;dp5eqZ?9*vnc=2w- zN4#U)bY13UY7n%nKW#n18~JC%hHk6k*grakbN;?9v=`kx$2TmTu}}oz!<JY*tl(2l z=V^hN^3m4Ng*VFp0|f{EF2f$v5_5s93RGgJaiVe(j)g*htVhhcxse6k#vKvxCJpKW z5>26vKkwaKoJaX3<v)hO>G{SJjJ(C}vKF43b}+DhPBuqoY}XO{I+PZ|>_-f@1Y*9f zdg1+2(NUGVYkY{m-$oU1JyQYVQ64njcvZ3V@|qd_{YL5v4`nXb8Z*wh2{xAmA~()R z=%yExRXsnAV~Nz>g^yypkXrlh!*lAXe3UmXYwY3CvrL}vG3)y*lzqUIMI6Kg9QUBB zL)dCt^2E3SmC^E-_m;N$bMyo1X;&)`;@K}<XUb-Nv2JY@5@}Z)AJ0Evrk1)2Qay-U z2?9M1UCHBm@ns9|00C15)Fo__R(0DfnMm}rlTL9T&NhalX-AXWS7Kc{RnZuPj&mzT z>O->ad(jmGh)Dz(5dr`S1p-HY{Z9fL3;+rV5Gt(lPc|F6)H-zlpI`bhU0Q7IPt6CO myJYd^Z%hjHWB{K?G(V8^TrttuN<j+YA=f}gJnE&e0ssJfY*o+z diff --git a/test/conf/server-gpg-no-pw/trustdb.gpg b/test/conf/server-gpg-no-pw/trustdb.gpg deleted file mode 100644 index d5b5b60cd9b030059937355993c0f0602d20d90f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmZQfFGy!*W@Ke#U|?{s=lltzumMIckf;KhlpGo#$OWsz6vhx4RfiEIV1dza84VXu z2#lr!?CF4qfo0Xrbxx0i6xVt9ZO~ft$=^(R*A+I1VtIrfUIyp&rz&T3#H^UM<p0g4 z`H@os=SU|&)ghEI@Gvl(nff96pxd@J4i+aL=eyWs*{=<QDo{iy<Ym|_c0%m*+HalP X<K-B>P2AL$#`5bRD@XyT=!63RE@mzq diff --git a/test/conf/server-gpg/pubring.gpg b/test/conf/server-gpg/pubring.gpg deleted file mode 100644 index b0aa06e852738c2aa9e929aaf20178d4ecfa7211..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2480 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 diff --git a/test/conf/server-gpg/secring.gpg b/test/conf/server-gpg/secring.gpg deleted file mode 100644 index b3a10cbab8a57f11cbb8882d51f16dd861163d63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1352 zcmV-O1-JT@0pSEke*HWV1OTcK{&ls$$IK(K8)dp@&8M_PgYx&$2sY*G+CW~xZgAKH zpl6=x3NA*t{X^qAujqmkHfz~-x?OGmw!NB7O%O>6uU9}HFSChRMe>P&cPon1GZq3F z9z=zh4r=*r-rzC(qP^H|l!%yeKA4CRJGfM}<7OW_OR_GCH#uKcF9!gil-xaU(0K<o z3R|4sTclC`O47GY1N{{AS$xdmMOqQQijSGdPpuNX{?*e|cXXHY4r94N18VtRdbNuD z*ZHhc*N%|U`%m(21gx;`_GsMmoslj`cu!O^j+KnJ>sZGn0?b<d)LKTdLlgIF<;^u7 zt1JP)?1&?<a5&f*{&4PUuv|iE7KX(aei4>4lXZogOY!S;s8$31BLkpRr56Y((^v!Q z(1{+lQ3K>6zHWm%v%8{MZ>2b2{z`*-%--o4Q!{#>P&kudd0K@%J!-FRzT#sgiIdeF za+Q-%aa4V*GGZ!iTYdBe2*nfB#W9TeL|5atd-&B5bU7IU2Lfx?QP@>BmDsnLbfT8N zQ9;OH8kXm0#z~|T{sRL7ir8TXa_%tcV6AsqAg9T{kk92?QL}!v*1<#gS?u6TF9C|{ z-jA-B;!IS8>0YB4)Dj1|mudBb%pUW!NM?6yZf|g8ASh;cYi@6FWFT{8a&~2MAarGO zbRcVGc{?CPPasZDR3KGTMIdHxav*SWZ)A02bZKvHAY^55Y;SpOWo~qHDTrSL6A=Oc z9|ZzOe*HWG8v_Ol2?z%R0t6KT2m=Ea0s#UZ0Rk6*0162ZDy;HPHXFLsgdqT)KL_?< zKJo~Fzk6?+?~7|n@STKH0G>2E4kV`B4H+<Qw&X6V7#rpv=IO8k005l=V+2Qj{Z9}G z0H!v-)ziH7?b{;Z%9V>Yc(0d1y&VfD;=w5&4YC>aA;*)|*KF{>T0;B?&GHkVTg%JN z*e>`$w6NY6^HkG3a9w`yj^!2znON@XjhZ^fJSb?d^JinzFE^D#k!Ex9{gZl=e))V} zY0;7-Bfd>kxkldCgy5DIoXix(<MHU<{((%esokFnCAM3?3@iA)z@vc;Z8U#@T;{V_ zt-3s}8rc1<J4qhdJNcuZUjzG{0&aAG@9du8#53&EX<T^mZo@~sW88FI=4EOSw5&gE zJ;59KXT*kXtK!%{I)-!pzAdyD-8{!PES#}W1mVM$SUs%ZQ%>h;ftm8r*3gAF%K!rf z2mUU@9@7$YfvgHtVyAJUauSY(LVv7B%(}Ue1>MFS5%4Ar>H-o?p^ZQ9-CUeU`6cB) zhQaCi#uJRZ#qP2eo||?suzpT9M`mo-5&Jrn7Q*aD47UVgzOH)V{Zi3UmAh+vh`--P z6>vRM0pd{}G~ResvGnqq8U6i6>Ix5KF4r0}&bbLTmjog=&PeE{7nD^!KaFFF)ZT@U zV!M!9`|iVY>ZyE`H!f@J;nA~9p6@a1`z(}wz?4NC!~`7opsPdJYFqNexB->X@|X9P zw)%7Q1L|p4D-Yt?FI{KKW`415Z50w}R~#SDKVYVox(ZS~h+7E)Jq}&T<9hLB3-A5| z0|JWJVFz;VFzH}FvbX~qKl+&t(fWIVRrrs++&U&xD(^$TPEAm2Krt%8!<D6RqAR#L zjB-Ti0h=^MFdl{AoS;(rAYHpF%!x9?Huq+z@q{FCh)Dz(5dr`S1p-HY{Z9fL3;+rV z5Gt(lPc|F6)H-zlpI`bhU0Q7IPt6COyJYd^Z%hjHWB{K?G(V8^TrttuN<j+YA=f}g KJnE&e0ssIYsDIc1 diff --git a/test/conf/server-gpg/trustdb.gpg b/test/conf/server-gpg/trustdb.gpg deleted file mode 100644 index d5b5b60cd9b030059937355993c0f0602d20d90f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmZQfFGy!*W@Ke#U|?{s=lltzumMIckf;KhlpGo#$OWsz6vhx4RfiEIV1dza84VXu z2#lr!?CF4qfo0Xrbxx0i6xVt9ZO~ft$=^(R*A+I1VtIrfUIyp&rz&T3#H^UM<p0g4 z`H@os=SU|&)ghEI@Gvl(nff96pxd@J4i+aL=eyWs*{=<QDo{iy<Ym|_c0%m*+HalP X<K-B>P2AL$#`5bRD@XyT=!63RE@mzq diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 2cb7e516..4cd12d7e 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -6548,6 +6548,10 @@ sub init() { unlink $init_file if -e $init_file; unlink $logfile if -e $logfile; + ### always restore the gpg directories before tests are + ### executed + &restore_gpg_dirs(); + if ($test_include) { for my $re (split /\s*,\s*/, $test_include) { push @tests_to_include, qr/$re/; From ce0bb64830dbd782aadd9e932aa117a70b64643d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 23 Mar 2015 18:07:13 -0700 Subject: [PATCH 024/219] [test suite] restructured AFL results directory to results/version/commit/ --- .../67f969f/server-access} | 0 .../67f969f/server-access-plot}/exec_speed.png | Bin .../67f969f/server-access-plot}/high_freq.png | Bin .../67f969f/server-access-plot}/index.html | 0 .../67f969f/server-access-plot}/index.html.orig | 0 .../67f969f/server-access-plot}/low_freq.png | Bin .../67f969f/server-access-plot}/plot_data | 0 .../7a2763a/spa-pkts} | 0 .../aeac6a4/server-conf} | 0 .../aeac6a4/server-digest-cache} | 0 .../aeac6a4/server-enc-pkts} | 0 .../db8b5e4/server-access} | 0 .../db8b5e4/server-access-plot}/exec_speed.png | Bin .../db8b5e4/server-access-plot}/high_freq.png | Bin .../db8b5e4/server-access-plot}/index.html | 0 .../db8b5e4/server-access-plot}/index.html.orig | 0 .../db8b5e4/server-access-plot}/low_freq.png | Bin .../59edf64/spa-pkts} | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename test/afl/results/{server-access-2.6.5.67f969f => 2.6.5/67f969f/server-access} (100%) rename test/afl/results/{plot-2.6.5.67f969f => 2.6.5/67f969f/server-access-plot}/exec_speed.png (100%) rename test/afl/results/{plot-2.6.5.67f969f => 2.6.5/67f969f/server-access-plot}/high_freq.png (100%) rename test/afl/results/{plot-2.6.5.67f969f => 2.6.5/67f969f/server-access-plot}/index.html (100%) rename test/afl/results/{plot-2.6.5.67f969f => 2.6.5/67f969f/server-access-plot}/index.html.orig (100%) rename test/afl/results/{plot-2.6.5.67f969f => 2.6.5/67f969f/server-access-plot}/low_freq.png (100%) rename test/afl/results/{plot-2.6.5.67f969f => 2.6.5/67f969f/server-access-plot}/plot_data (100%) rename test/afl/results/{spa-pkts-2.6.5.7a2763a => 2.6.5/7a2763a/spa-pkts} (100%) rename test/afl/results/{server-conf-2.6.5.aeac6a4 => 2.6.5/aeac6a4/server-conf} (100%) rename test/afl/results/{server-digest-cache-2.6.5.aeac6a4 => 2.6.5/aeac6a4/server-digest-cache} (100%) rename test/afl/results/{server-enc-pkts-2.6.5.aeac6a4 => 2.6.5/aeac6a4/server-enc-pkts} (100%) rename test/afl/results/{server-access-2.6.5.db8b5e4 => 2.6.5/db8b5e4/server-access} (100%) rename test/afl/results/{plot-2.6.5.db8b5e4 => 2.6.5/db8b5e4/server-access-plot}/exec_speed.png (100%) rename test/afl/results/{plot-2.6.5.db8b5e4 => 2.6.5/db8b5e4/server-access-plot}/high_freq.png (100%) rename test/afl/results/{plot-2.6.5.db8b5e4 => 2.6.5/db8b5e4/server-access-plot}/index.html (100%) rename test/afl/results/{plot-2.6.5.db8b5e4 => 2.6.5/db8b5e4/server-access-plot}/index.html.orig (100%) rename test/afl/results/{plot-2.6.5.db8b5e4 => 2.6.5/db8b5e4/server-access-plot}/low_freq.png (100%) rename test/afl/results/{spa-pkts-2.6.5.59edf64 => 2.6.6/59edf64/spa-pkts} (100%) diff --git a/test/afl/results/server-access-2.6.5.67f969f b/test/afl/results/2.6.5/67f969f/server-access similarity index 100% rename from test/afl/results/server-access-2.6.5.67f969f rename to test/afl/results/2.6.5/67f969f/server-access diff --git a/test/afl/results/plot-2.6.5.67f969f/exec_speed.png b/test/afl/results/2.6.5/67f969f/server-access-plot/exec_speed.png similarity index 100% rename from test/afl/results/plot-2.6.5.67f969f/exec_speed.png rename to test/afl/results/2.6.5/67f969f/server-access-plot/exec_speed.png diff --git a/test/afl/results/plot-2.6.5.67f969f/high_freq.png b/test/afl/results/2.6.5/67f969f/server-access-plot/high_freq.png similarity index 100% rename from test/afl/results/plot-2.6.5.67f969f/high_freq.png rename to test/afl/results/2.6.5/67f969f/server-access-plot/high_freq.png diff --git a/test/afl/results/plot-2.6.5.67f969f/index.html b/test/afl/results/2.6.5/67f969f/server-access-plot/index.html similarity index 100% rename from test/afl/results/plot-2.6.5.67f969f/index.html rename to test/afl/results/2.6.5/67f969f/server-access-plot/index.html diff --git a/test/afl/results/plot-2.6.5.67f969f/index.html.orig b/test/afl/results/2.6.5/67f969f/server-access-plot/index.html.orig similarity index 100% rename from test/afl/results/plot-2.6.5.67f969f/index.html.orig rename to test/afl/results/2.6.5/67f969f/server-access-plot/index.html.orig diff --git a/test/afl/results/plot-2.6.5.67f969f/low_freq.png b/test/afl/results/2.6.5/67f969f/server-access-plot/low_freq.png similarity index 100% rename from test/afl/results/plot-2.6.5.67f969f/low_freq.png rename to test/afl/results/2.6.5/67f969f/server-access-plot/low_freq.png diff --git a/test/afl/results/plot-2.6.5.67f969f/plot_data b/test/afl/results/2.6.5/67f969f/server-access-plot/plot_data similarity index 100% rename from test/afl/results/plot-2.6.5.67f969f/plot_data rename to test/afl/results/2.6.5/67f969f/server-access-plot/plot_data diff --git a/test/afl/results/spa-pkts-2.6.5.7a2763a b/test/afl/results/2.6.5/7a2763a/spa-pkts similarity index 100% rename from test/afl/results/spa-pkts-2.6.5.7a2763a rename to test/afl/results/2.6.5/7a2763a/spa-pkts diff --git a/test/afl/results/server-conf-2.6.5.aeac6a4 b/test/afl/results/2.6.5/aeac6a4/server-conf similarity index 100% rename from test/afl/results/server-conf-2.6.5.aeac6a4 rename to test/afl/results/2.6.5/aeac6a4/server-conf diff --git a/test/afl/results/server-digest-cache-2.6.5.aeac6a4 b/test/afl/results/2.6.5/aeac6a4/server-digest-cache similarity index 100% rename from test/afl/results/server-digest-cache-2.6.5.aeac6a4 rename to test/afl/results/2.6.5/aeac6a4/server-digest-cache diff --git a/test/afl/results/server-enc-pkts-2.6.5.aeac6a4 b/test/afl/results/2.6.5/aeac6a4/server-enc-pkts similarity index 100% rename from test/afl/results/server-enc-pkts-2.6.5.aeac6a4 rename to test/afl/results/2.6.5/aeac6a4/server-enc-pkts diff --git a/test/afl/results/server-access-2.6.5.db8b5e4 b/test/afl/results/2.6.5/db8b5e4/server-access similarity index 100% rename from test/afl/results/server-access-2.6.5.db8b5e4 rename to test/afl/results/2.6.5/db8b5e4/server-access diff --git a/test/afl/results/plot-2.6.5.db8b5e4/exec_speed.png b/test/afl/results/2.6.5/db8b5e4/server-access-plot/exec_speed.png similarity index 100% rename from test/afl/results/plot-2.6.5.db8b5e4/exec_speed.png rename to test/afl/results/2.6.5/db8b5e4/server-access-plot/exec_speed.png diff --git a/test/afl/results/plot-2.6.5.db8b5e4/high_freq.png b/test/afl/results/2.6.5/db8b5e4/server-access-plot/high_freq.png similarity index 100% rename from test/afl/results/plot-2.6.5.db8b5e4/high_freq.png rename to test/afl/results/2.6.5/db8b5e4/server-access-plot/high_freq.png diff --git a/test/afl/results/plot-2.6.5.db8b5e4/index.html b/test/afl/results/2.6.5/db8b5e4/server-access-plot/index.html similarity index 100% rename from test/afl/results/plot-2.6.5.db8b5e4/index.html rename to test/afl/results/2.6.5/db8b5e4/server-access-plot/index.html diff --git a/test/afl/results/plot-2.6.5.db8b5e4/index.html.orig b/test/afl/results/2.6.5/db8b5e4/server-access-plot/index.html.orig similarity index 100% rename from test/afl/results/plot-2.6.5.db8b5e4/index.html.orig rename to test/afl/results/2.6.5/db8b5e4/server-access-plot/index.html.orig diff --git a/test/afl/results/plot-2.6.5.db8b5e4/low_freq.png b/test/afl/results/2.6.5/db8b5e4/server-access-plot/low_freq.png similarity index 100% rename from test/afl/results/plot-2.6.5.db8b5e4/low_freq.png rename to test/afl/results/2.6.5/db8b5e4/server-access-plot/low_freq.png diff --git a/test/afl/results/spa-pkts-2.6.5.59edf64 b/test/afl/results/2.6.6/59edf64/spa-pkts similarity index 100% rename from test/afl/results/spa-pkts-2.6.5.59edf64 rename to test/afl/results/2.6.6/59edf64/spa-pkts From 17382953e86b7f3a5fad1ba4de36a2805f52442e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 24 Mar 2015 21:44:38 -0400 Subject: [PATCH 025/219] [test suite] minor usage update --- test/test-fwknop.pl | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 4cd12d7e..7dfbacb8 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -7475,10 +7475,8 @@ sub usage() { --enable-profile-coverage - Generate profile coverage stats with an emphasis on finding functions that the test suite does not call. - --profile-coverage-preserve - In --enable-profile-coverage mode, - preserve previous coverage files. - --profile-coverage-init - Remove old .gcno, .gcda, and .gcov files - and recompile fwknop. + --disable-profile-coverage-init - Do not remove old .gcno, .gcda, and + .gcov files or recompile fwknop. --enable-recompile - Recompile fwknop sources and look for compilation warnings. --enable-configure-args-checks - Run the autoconf configure script with From 1594194e7335ce660e1b73302711677f0c67762a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 24 Mar 2015 22:01:55 -0400 Subject: [PATCH 026/219] [test suite] added new gpg keyrings for large key tests (4096 bits) --- test/conf/gpg_dirs_orig.tar.gz | Bin 3876 -> 12472 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/test/conf/gpg_dirs_orig.tar.gz b/test/conf/gpg_dirs_orig.tar.gz index c853ff3931f43acd64188a5a5dead993eb2eeb3a..592324cfa4c89cca5dd35795de72cf1a90ad6a8b 100644 GIT binary patch literal 12472 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 zOa3CgEF~KURPp~p6$bzS0000000000000000000000000006-MDSrd=ZZgII@BjeT C{k8i5 literal 3876 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 m000000000000000000000000000013di)Dcq7vf(pa1~6+RBsw From 59d0ef0b17e8fb8c6c05b8de07de0767b76823e1 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 24 Mar 2015 22:03:21 -0400 Subject: [PATCH 027/219] [test suite] minor file rename --- Makefile.am | 2 +- test/conf/{gpg_dirs_orig.tar.gz => gpg_dirs.tar.gz} | Bin test/test-fwknop.pl | 6 +++--- 3 files changed, 4 insertions(+), 4 deletions(-) rename test/conf/{gpg_dirs_orig.tar.gz => gpg_dirs.tar.gz} (100%) diff --git a/Makefile.am b/Makefile.am index 852f8631..22f695db 100644 --- a/Makefile.am +++ b/Makefile.am @@ -121,7 +121,7 @@ EXTRA_DIST = \ python/setup.py \ python/fkomodule.c \ python/fko.py \ - test/conf/gpg_dirs_orig.tar.gz \ + test/conf/gpg_dirs.tar.gz \ test/conf/hmac_android_access.conf \ test/conf/android_access.conf \ test/conf/android_legacy_iv_access.conf \ diff --git a/test/conf/gpg_dirs_orig.tar.gz b/test/conf/gpg_dirs.tar.gz similarity index 100% rename from test/conf/gpg_dirs_orig.tar.gz rename to test/conf/gpg_dirs.tar.gz diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 7dfbacb8..9cb70c98 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -31,7 +31,7 @@ my $key_tmp = 'key.tmp'; my $enc_save_tmp = 'openssl_save.enc'; my $test_suite_path = 'test-fwknop.pl'; my $username = ''; -my $gpg_dir_orig_tar = 'gpg_dirs_orig.tar.gz'; +my $gpg_dirs_tar = 'gpg_dirs.tar.gz'; our $gpg_client_home_dir = "$conf_dir/client-gpg"; our $gpg_client_home_dir_no_pw = "$conf_dir/client-gpg-no-pw"; our $replay_pcap_file = "$conf_dir/spa_replay.pcap"; @@ -6876,8 +6876,8 @@ sub restore_gpg_dirs() { chdir $conf_dir or die $!; - if (-e $gpg_dir_orig_tar) { - system "tar xfz $gpg_dir_orig_tar > /dev/null"; + if (-e $gpg_dirs_tar) { + system "tar xfz $gpg_dirs_tar > /dev/null"; } chdir $curr_pwd or die $!; From 91a4e82f237a6df4233d1f4830ad2b647aa7759c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 24 Mar 2015 22:38:41 -0400 Subject: [PATCH 028/219] [test suite] added 4096-bit signing key test --- test/conf/gpg_large_signing_key_access.conf | 6 ++++++ test/test-fwknop.pl | 10 ++++++++++ test/tests/gpg_no_pw.pl | 12 ++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 test/conf/gpg_large_signing_key_access.conf diff --git a/test/conf/gpg_large_signing_key_access.conf b/test/conf/gpg_large_signing_key_access.conf new file mode 100644 index 00000000..c18ebcf5 --- /dev/null +++ b/test/conf/gpg_large_signing_key_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +FW_ACCESS_TIMEOUT 3 +GPG_HOME_DIR conf/server-gpg-client-large-no-pw +GPG_DECRYPT_ID EF5AF06A +GPG_ALLOW_NO_PW Y +GPG_REMOTE_ID 31415ADE diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 9cb70c98..3a6674ae 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -34,6 +34,7 @@ my $username = ''; my $gpg_dirs_tar = 'gpg_dirs.tar.gz'; our $gpg_client_home_dir = "$conf_dir/client-gpg"; our $gpg_client_home_dir_no_pw = "$conf_dir/client-gpg-no-pw"; +our $gpg_client_4096_bit_key_no_pw = "$conf_dir/client-gpg-large-no-pw"; our $replay_pcap_file = "$conf_dir/spa_replay.pcap"; our $multi_pkts_pcap_file = "$conf_dir/multi_pkts.pcap"; our $fcs_pcap_file = "$conf_dir/fcs_spa.pcap"; @@ -57,6 +58,8 @@ our $fwknopdCmd = '../server/.libs/fwknopd'; our $gpg_server_key = '361BBAD4'; our $gpg_client_key = '6A3FAD56'; +our $gpg_server_key2 = 'EF5AF06A'; +our $gpg_client_large_key = '31415ADE'; our $loopback_ip = '127.0.0.1'; our $fake_ip = '127.0.0.2'; @@ -445,6 +448,7 @@ our %cf = ( 'gpg_no_pw_hmac_sha512_access' => "$conf_dir/gpg_no_pw_hmac_sha512_access.conf", 'gpg_no_sig_verify_access' => "$conf_dir/gpg_no_sig_verify_access.conf", 'gpg_invalid_sig_id_access' => "$conf_dir/gpg_invalid_sig_id_access.conf", + 'gpg_large_signing_key_access' => "$conf_dir/gpg_large_signing_key_access.conf", 'tcp_server' => "$conf_dir/tcp_server_fwknopd.conf", 'udp_server' => "$conf_dir/udp_server_fwknopd.conf", 'spa_over_http' => "$conf_dir/spa_over_http_fwknopd.conf", @@ -670,6 +674,12 @@ our $default_client_gpg_args_no_pw = "$default_client_args_no_get_key " . "--gpg-signer-key $gpg_client_key " . "--gpg-home-dir $gpg_client_home_dir_no_pw"; +our $client_gpg_large_key_args_no_pw = "$default_client_args_no_get_key " . + "--gpg-no-signing-pw " . + "--gpg-recipient-key $gpg_server_key2 " . + "--gpg-signer-key $gpg_client_large_key " . + "--gpg-home-dir $gpg_client_4096_bit_key_no_pw"; + our $default_server_conf_args = "-c $cf{'def'} -a $cf{'def_access'} " . "-d $default_digest_file -p $default_pid_file"; diff --git a/test/tests/gpg_no_pw.pl b/test/tests/gpg_no_pw.pl index 01c6e038..61afd19e 100644 --- a/test/tests/gpg_no_pw.pl +++ b/test/tests/gpg_no_pw.pl @@ -33,6 +33,18 @@ "-d $default_digest_file -p $default_pid_file", 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, }, + { + 'category' => 'GPG (no pw)', + 'subcategory' => 'client+server', + 'detail' => '4096-bit signing key', + 'function' => \&spa_cycle, + 'cmdline' => $client_gpg_large_key_args_no_pw, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} " . + "-a $cf{'gpg_large_signing_key_access'} $intf_str " . + "-d $default_digest_file -p $default_pid_file", + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, { 'category' => 'GPG (no pw)', From edd57f48de63d4ebd6fcaa8842ced82017b3b664 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 24 Mar 2015 22:45:07 -0400 Subject: [PATCH 029/219] add test/conf/gpg_large_signing_key_access.conf --- Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.am b/Makefile.am index 22f695db..a8b4dc35 100644 --- a/Makefile.am +++ b/Makefile.am @@ -164,6 +164,7 @@ EXTRA_DIST = \ test/conf/gpg_no_sig_no_fpr_access.conf \ test/conf/gpg_no_sig_verify_access.conf \ test/conf/gpg_invalid_sig_id_access.conf \ + test/conf/gpg_large_signing_key_access.conf \ test/conf/fwknoprc_gpg_invalid_exe \ test/conf/fwknoprc_hmac_defaults \ test/conf/fwknoprc_hmac_time_offset_mins \ From 0f86406afb37fc571d97d383bb7db5b3fa250419 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 26 Mar 2015 22:01:02 -0400 Subject: [PATCH 030/219] [test suite] added gpg subkey signing test --- test/conf/gpg_dirs.tar.gz | Bin 12472 -> 20585 bytes test/conf/gpg_subkey_access.conf | 6 ++++++ test/test-fwknop.pl | 19 +++++++++++++++++++ test/tests/gpg_no_pw.pl | 12 ++++++++++++ 4 files changed, 37 insertions(+) create mode 100644 test/conf/gpg_subkey_access.conf diff --git a/test/conf/gpg_dirs.tar.gz b/test/conf/gpg_dirs.tar.gz index 592324cfa4c89cca5dd35795de72cf1a90ad6a8b..9f98c63496c229460469e15433ca35fbc701b3b9 100644 GIT binary patch literal 20585 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 I8~|tm0F|^TO#lD@ literal 12472 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 zOa3CgEF~KURPp~p6$bzS0000000000000000000000000006-MDSrd=ZZgII@BjeT C{k8i5 diff --git a/test/conf/gpg_subkey_access.conf b/test/conf/gpg_subkey_access.conf new file mode 100644 index 00000000..3e4822d1 --- /dev/null +++ b/test/conf/gpg_subkey_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +FW_ACCESS_TIMEOUT 3 +GPG_HOME_DIR conf/server-gpg-subkeys-no-pw +GPG_DECRYPT_ID EF5AF06A +GPG_ALLOW_NO_PW Y +GPG_REMOTE_ID 9CF38326 diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 3a6674ae..3319f289 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -35,6 +35,7 @@ my $gpg_dirs_tar = 'gpg_dirs.tar.gz'; our $gpg_client_home_dir = "$conf_dir/client-gpg"; our $gpg_client_home_dir_no_pw = "$conf_dir/client-gpg-no-pw"; our $gpg_client_4096_bit_key_no_pw = "$conf_dir/client-gpg-large-no-pw"; +our $gpg_client_subkey_no_pw = "$conf_dir/client-gpg-subkeys-no-pw"; our $replay_pcap_file = "$conf_dir/spa_replay.pcap"; our $multi_pkts_pcap_file = "$conf_dir/multi_pkts.pcap"; our $fcs_pcap_file = "$conf_dir/fcs_spa.pcap"; @@ -61,6 +62,17 @@ our $gpg_client_key = '6A3FAD56'; our $gpg_server_key2 = 'EF5AF06A'; our $gpg_client_large_key = '31415ADE'; +#gpg --homedir ./client-gpg-subkeys-no-pw/ --list-keys +#./client-gpg-subkeys-no-pw//pubring.gpg +#--------------------------------------- +#pub 4096R/31415ADE 2015-03-23 +#uid fwknop project (client multi subkeys, TESTING ONLY) +#sub 4096R/82E1000B 2015-03-23 +#sub 2048R/8377E3D8 2015-03-25 +#sub 2048R/9CF38326 2015-03-25 + +our $gpg_client_subkey = '9CF38326'; ### last subkey in the keyring as shown above, + ### and GPG_REMOTE_ID must match in access.conf our $loopback_ip = '127.0.0.1'; our $fake_ip = '127.0.0.2'; our $spoof_ip = '1.2.3.4'; @@ -449,6 +461,7 @@ our %cf = ( 'gpg_no_sig_verify_access' => "$conf_dir/gpg_no_sig_verify_access.conf", 'gpg_invalid_sig_id_access' => "$conf_dir/gpg_invalid_sig_id_access.conf", 'gpg_large_signing_key_access' => "$conf_dir/gpg_large_signing_key_access.conf", + 'gpg_subkey_access' => "$conf_dir/gpg_subkey_access.conf", 'tcp_server' => "$conf_dir/tcp_server_fwknopd.conf", 'udp_server' => "$conf_dir/udp_server_fwknopd.conf", 'spa_over_http' => "$conf_dir/spa_over_http_fwknopd.conf", @@ -680,6 +693,12 @@ our $client_gpg_large_key_args_no_pw = "$default_client_args_no_get_key " . "--gpg-signer-key $gpg_client_large_key " . "--gpg-home-dir $gpg_client_4096_bit_key_no_pw"; +our $client_gpg_subkey_args_no_pw = "$default_client_args_no_get_key " . + "--gpg-no-signing-pw " . + "--gpg-recipient-key $gpg_server_key2 " . + "--gpg-signer-key $gpg_client_subkey " . + "--gpg-home-dir $gpg_client_subkey_no_pw"; + our $default_server_conf_args = "-c $cf{'def'} -a $cf{'def_access'} " . "-d $default_digest_file -p $default_pid_file"; diff --git a/test/tests/gpg_no_pw.pl b/test/tests/gpg_no_pw.pl index 61afd19e..77ec04d5 100644 --- a/test/tests/gpg_no_pw.pl +++ b/test/tests/gpg_no_pw.pl @@ -45,6 +45,18 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, + { + 'category' => 'GPG (no pw)', + 'subcategory' => 'client+server', + 'detail' => '4096-bit signing key with subkey', + 'function' => \&spa_cycle, + 'cmdline' => $client_gpg_subkey_args_no_pw, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} " . + "-a $cf{'gpg_subkey_access'} $intf_str " . + "-d $default_digest_file -p $default_pid_file", + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, { 'category' => 'GPG (no pw)', From 9de2a61d040f7fce247ef47de36214ac26b919c2 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 26 Mar 2015 22:01:52 -0400 Subject: [PATCH 031/219] add subkey gpg access.conf file --- Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.am b/Makefile.am index a8b4dc35..0057ab4c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -165,6 +165,7 @@ EXTRA_DIST = \ test/conf/gpg_no_sig_verify_access.conf \ test/conf/gpg_invalid_sig_id_access.conf \ test/conf/gpg_large_signing_key_access.conf \ + test/conf/gpg_subkey_access.conf \ test/conf/fwknoprc_gpg_invalid_exe \ test/conf/fwknoprc_hmac_defaults \ test/conf/fwknoprc_hmac_time_offset_mins \ From 1dc4a47357347cec43590086df0b98dfc5ff0d93 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 26 Mar 2015 22:04:20 -0400 Subject: [PATCH 032/219] [libfko] minor update to make process_sigs() static --- lib/gpgme_funcs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/gpgme_funcs.c b/lib/gpgme_funcs.c index eb50f6d7..bb5379e4 100644 --- a/lib/gpgme_funcs.c +++ b/lib/gpgme_funcs.c @@ -107,7 +107,7 @@ my_passphrase_cb( /* Verify gpg signatures in a verify_result set. */ -int +static int process_sigs(fko_ctx_t fko_ctx, gpgme_verify_result_t vres) { unsigned int sig_cnt = 0; From 60d982a1034dd3519fc0d682e6c1050454e0c570 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 28 Mar 2015 07:54:30 -0400 Subject: [PATCH 033/219] [test suite] added GPG 4096-bit key combination tests --- Makefile.am | 1 + test/conf/gpg_dirs.tar.gz | Bin 20585 -> 29331 bytes test/conf/gpg_server_large_key_access.conf | 6 ++++++ test/test-fwknop.pl | 14 +++++++++++++ test/tests/gpg_no_pw.pl | 22 +++++++++++++++++++++ 5 files changed, 43 insertions(+) create mode 100644 test/conf/gpg_server_large_key_access.conf diff --git a/Makefile.am b/Makefile.am index 0057ab4c..6bc51b8b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -166,6 +166,7 @@ EXTRA_DIST = \ test/conf/gpg_invalid_sig_id_access.conf \ test/conf/gpg_large_signing_key_access.conf \ test/conf/gpg_subkey_access.conf \ + test/conf/gpg_server_large_key_access.conf \ test/conf/fwknoprc_gpg_invalid_exe \ test/conf/fwknoprc_hmac_defaults \ test/conf/fwknoprc_hmac_time_offset_mins \ diff --git a/test/conf/gpg_dirs.tar.gz b/test/conf/gpg_dirs.tar.gz index 9f98c63496c229460469e15433ca35fbc701b3b9..1cb8aba284457d7ed3b53758682d142d2f1bc7e5 100644 GIT binary patch literal 29331 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 M<KjaQosba!3o^{&3jhEB literal 20585 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 I8~|tm0F|^TO#lD@ diff --git a/test/conf/gpg_server_large_key_access.conf b/test/conf/gpg_server_large_key_access.conf new file mode 100644 index 00000000..590d8965 --- /dev/null +++ b/test/conf/gpg_server_large_key_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +FW_ACCESS_TIMEOUT 3 +GPG_HOME_DIR conf/server-gpg-large-no-pw +GPG_DECRYPT_ID 40051F51 +GPG_ALLOW_NO_PW Y +GPG_REMOTE_ID 9CF38326 diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 3319f289..d71a7b4a 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -61,6 +61,7 @@ our $gpg_server_key = '361BBAD4'; our $gpg_client_key = '6A3FAD56'; our $gpg_server_key2 = 'EF5AF06A'; our $gpg_client_large_key = '31415ADE'; +our $gpg_server_large_key = '40051F51'; #gpg --homedir ./client-gpg-subkeys-no-pw/ --list-keys #./client-gpg-subkeys-no-pw//pubring.gpg @@ -462,6 +463,7 @@ our %cf = ( 'gpg_invalid_sig_id_access' => "$conf_dir/gpg_invalid_sig_id_access.conf", 'gpg_large_signing_key_access' => "$conf_dir/gpg_large_signing_key_access.conf", 'gpg_subkey_access' => "$conf_dir/gpg_subkey_access.conf", + 'gpg_server_large_key_access' => "$conf_dir/gpg_server_large_key_access.conf", 'tcp_server' => "$conf_dir/tcp_server_fwknopd.conf", 'udp_server' => "$conf_dir/udp_server_fwknopd.conf", 'spa_over_http' => "$conf_dir/spa_over_http_fwknopd.conf", @@ -699,6 +701,18 @@ our $client_gpg_subkey_args_no_pw = "$default_client_args_no_get_key " . "--gpg-signer-key $gpg_client_subkey " . "--gpg-home-dir $gpg_client_subkey_no_pw"; +our $client_gpg_server_4096_args_no_pw = "$default_client_args_no_get_key " . + "--gpg-no-signing-pw " . + "--gpg-recipient-key $gpg_server_large_key " . + "--gpg-signer-key $gpg_client_subkey " . + "--gpg-home-dir $gpg_client_subkey_no_pw"; + +our $client_and_server_gpg_4096_args_no_pw = "$default_client_args_no_get_key " . + "--gpg-no-signing-pw " . + "--gpg-recipient-key $gpg_server_large_key " . + "--gpg-signer-key $gpg_client_large_key " . + "--gpg-home-dir $gpg_client_4096_bit_key_no_pw"; + our $default_server_conf_args = "-c $cf{'def'} -a $cf{'def_access'} " . "-d $default_digest_file -p $default_pid_file"; diff --git a/test/tests/gpg_no_pw.pl b/test/tests/gpg_no_pw.pl index 77ec04d5..3745734e 100644 --- a/test/tests/gpg_no_pw.pl +++ b/test/tests/gpg_no_pw.pl @@ -57,6 +57,28 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, + { + 'category' => 'GPG (no pw)', + 'subcategory' => 'client+server', + 'detail' => '4096 enc key, 2048 signing subkey', + 'function' => \&spa_cycle, + 'cmdline' => $client_gpg_server_4096_args_no_pw, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} " . + "-a $cf{'gpg_server_large_key_access'} $intf_str " . + "-d $default_digest_file -p $default_pid_file", + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, + { + 'category' => 'GPG (no pw)', + 'subcategory' => 'client+server', + 'detail' => '4096 enc key, 4096 signing subkey', + 'function' => \&spa_cycle, + 'cmdline' => $client_and_server_gpg_4096_args_no_pw, + 'positive_output_matches' => [qr/FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL/], + 'function' => \&generic_exec, + 'exec_err' => $YES, + }, { 'category' => 'GPG (no pw)', From cb089c550d994708154b8265027b1afe46efbe92 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 29 Mar 2015 08:00:03 -0400 Subject: [PATCH 034/219] [test suite] added server-access AFL results run --- test/afl/results/2.6.6/ea7f22f/server-access | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 test/afl/results/2.6.6/ea7f22f/server-access diff --git a/test/afl/results/2.6.6/ea7f22f/server-access b/test/afl/results/2.6.6/ea7f22f/server-access new file mode 100644 index 00000000..646ac8ec --- /dev/null +++ b/test/afl/results/2.6.6/ea7f22f/server-access @@ -0,0 +1,26 @@ + + american fuzzy lop 1.57b (fwknopd,access.conf,ea7f22f) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 6 days, 9 hrs, 18 min, 38 sec │ cycles done : 118 │ +│ last new path : 0 days, 8 hrs, 38 min, 31 sec │ total paths : 1487 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 1172* (78.82%) │ map density : 1463 (2.23%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 4.48 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : splice 14 │ favored paths : 142 (9.55%) │ +│ stage execs : 492/1500 (32.80%) │ new edges on : 200 (13.45%) │ +│ total execs : 1.11G │ total crashes : 0 (0 unique) │ +│ exec speed : 2086/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 104/16.0M, 12/16.0M, 12/16.0M │ levels : 18 │ +│ byte flips : 0/2.01M, 0/1.98M, 0/1.99M │ pending : 0 │ +│ arithmetics : 33/107M, 0/8.28M, 0/126k │ pend fav : 0 │ +│ known ints : 15/11.6M, 2/73.2M, 2/99.3M │ own finds : 1439 │ +│ dictionary : 0/0, 0/0, 104/98.0M │ imported : n/a │ +│ havoc : 1085/285M, 59/375M │ variable : 0 │ +│ trim : 13.44%/752k, 2.21% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:111%] + From 244d2692f284034fa75ea37be4ea21e303abb1eb Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 29 Mar 2015 08:04:55 -0400 Subject: [PATCH 035/219] [test suite] added server-access plot data --- .../ea7f22f/server-access-plot/exec_speed.png | Bin 0 -> 22475 bytes .../ea7f22f/server-access-plot/high_freq.png | Bin 0 -> 22220 bytes .../2.6.6/ea7f22f/server-access-plot/index.html | 10 ++++++++++ .../ea7f22f/server-access-plot/low_freq.png | Bin 0 -> 10671 bytes 4 files changed, 10 insertions(+) create mode 100644 test/afl/results/2.6.6/ea7f22f/server-access-plot/exec_speed.png create mode 100644 test/afl/results/2.6.6/ea7f22f/server-access-plot/high_freq.png create mode 100644 test/afl/results/2.6.6/ea7f22f/server-access-plot/index.html create mode 100644 test/afl/results/2.6.6/ea7f22f/server-access-plot/low_freq.png diff --git a/test/afl/results/2.6.6/ea7f22f/server-access-plot/exec_speed.png b/test/afl/results/2.6.6/ea7f22f/server-access-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..1712951a2a1076af3f0d44836bb7271c6574f497 GIT binary patch literal 22475 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 Ljw_}UE&To)43}|n literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/ea7f22f/server-access-plot/high_freq.png b/test/afl/results/2.6.6/ea7f22f/server-access-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac196b615cccf743b8fec860bea6096ff814363 GIT binary patch literal 22220 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 E@0weqCjbBd literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/ea7f22f/server-access-plot/index.html b/test/afl/results/2.6.6/ea7f22f/server-access-plot/index.html new file mode 100644 index 00000000..ab453562 --- /dev/null +++ b/test/afl/results/2.6.6/ea7f22f/server-access-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,access.conf,ea7f22f</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Sun Mar 29 07:58:27 EDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.6/ea7f22f/server-access-plot/low_freq.png b/test/afl/results/2.6.6/ea7f22f/server-access-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..e159bda1483881c272c023a788272e469940b8b2 GIT binary patch literal 10671 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 R`Un%L;vzD_+4pr{{0}<o5>EgC literal 0 HcmV?d00001 From a18b3e90272709bf1660b97421dd208e72af0bff Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 29 Mar 2015 18:15:11 -0700 Subject: [PATCH 036/219] [server] minor code coverage update for firewalld systems --- server/fw_util_firewalld.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 910b4372..f71f48cc 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -88,6 +88,17 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, fwc->to_chain ); +#if CODE_COVERAGE + int pid_status = 0; + /* If we're maximizing code coverage, then exercise the run_extcmd_write() + * function which is normally only used for the PF firewall. This is to + * maximize code coverage in conjunction with the test suite, and is never + * compiled in for a production release of fwknop. + */ + if(run_extcmd_write("/bin/grep -v test", "/bin/echo test", &pid_status, opts) != 0) + log_msg(LOG_WARNING, "Code coverage: Could not execute command"); +#endif + if(proto == IPPROTO_TCP) snprintf(proto_search, CMD_BUFSIZE-1, " tcp "); else if(proto == IPPROTO_UDP) From c4ffd4b00a86d46ebf3cc3fcd65e6e841d7bb899 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 30 Mar 2015 21:38:31 -0400 Subject: [PATCH 037/219] [extras] minor ramdisk creation bug fix --- extras/ramdisk/ramdisk-create.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/ramdisk/ramdisk-create.sh b/extras/ramdisk/ramdisk-create.sh index 09b96f04..40620da4 100755 --- a/extras/ramdisk/ramdisk-create.sh +++ b/extras/ramdisk/ramdisk-create.sh @@ -4,5 +4,5 @@ RAMDISK=/tmp/afl-ramdisk mkdir $RAMDISK && chmod 777 $RAMDISK mount -t tmpfs -o size=768M tmpfs $RAMDISK -git clone . $RAMDISK/fwknop.git +cd ../.. && git clone . $RAMDISK/fwknop.git exit $? From ca467b9030705189499001cf53d7068c1a5d4561 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 31 Mar 2015 19:58:18 -0400 Subject: [PATCH 038/219] [test suite] added AFL results for spa-pkts and server-digest-cache fuzzing runs --- test/afl/results/2.6.6/a18b3e9/spa-pkts | 26 ++++++++++++++++++ .../a18b3e9/spa-pkts-plot/exec_speed.png | Bin 0 -> 15670 bytes .../2.6.6/a18b3e9/spa-pkts-plot/high_freq.png | Bin 0 -> 23913 bytes .../2.6.6/a18b3e9/spa-pkts-plot/index.html | 10 +++++++ .../2.6.6/a18b3e9/spa-pkts-plot/low_freq.png | Bin 0 -> 10437 bytes .../results/2.6.6/c4ffd4b/server-digest-cache | 26 ++++++++++++++++++ .../server-digest-cache-plot/exec_speed.png | Bin 0 -> 14618 bytes .../server-digest-cache-plot/high_freq.png | Bin 0 -> 22748 bytes .../server-digest-cache-plot/index.html | 10 +++++++ .../server-digest-cache-plot/low_freq.png | Bin 0 -> 8961 bytes 10 files changed, 72 insertions(+) create mode 100644 test/afl/results/2.6.6/a18b3e9/spa-pkts create mode 100644 test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/exec_speed.png create mode 100644 test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/high_freq.png create mode 100644 test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/index.html create mode 100644 test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/low_freq.png create mode 100644 test/afl/results/2.6.6/c4ffd4b/server-digest-cache create mode 100644 test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/exec_speed.png create mode 100644 test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/high_freq.png create mode 100644 test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/index.html create mode 100644 test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/low_freq.png diff --git a/test/afl/results/2.6.6/a18b3e9/spa-pkts b/test/afl/results/2.6.6/a18b3e9/spa-pkts new file mode 100644 index 00000000..5ac035ac --- /dev/null +++ b/test/afl/results/2.6.6/a18b3e9/spa-pkts @@ -0,0 +1,26 @@ + + american fuzzy lop 1.58b (fwknopd,SPA,encode/decode,a18b3e9) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 1 days, 4 hrs, 16 min, 38 sec │ cycles done : 54 │ +│ last new path : 0 days, 6 hrs, 22 min, 53 sec │ total paths : 451 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 278 (61.64%) │ map density : 1770 (2.70%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 1.58 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : havoc │ favored paths : 150 (33.26%) │ +│ stage execs : 4929/5000 (98.58%) │ new edges on : 187 (41.46%) │ +│ total execs : 167M │ total crashes : 0 (0 unique) │ +│ exec speed : 1570/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 89/437k, 11/437k, 11/436k │ levels : 9 │ +│ byte flips : 0/54.7k, 0/54.3k, 0/53.4k │ pending : 0 │ +│ arithmetics : 48/3.01M, 0/58.2k, 0/1348 │ pend fav : 0 │ +│ known ints : 7/338k, 0/2.01M, 0/2.67M │ own finds : 446 │ +│ dictionary : 0/0, 0/0, 33/2.56M │ imported : n/a │ +│ havoc : 222/61.6M, 12/93.7M │ variable : 451 │ +│ trim : 3.46%/22.0k, 0.00% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:107%] + diff --git a/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/exec_speed.png b/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..29f515bcc9831ddce8bbe82b3ad06ec816394491 GIT binary patch literal 15670 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 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/high_freq.png b/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..2ff9dc5a7f8ba7787d9857e7624fbe716e2d0d5d GIT binary patch literal 23913 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 N8%qa^I|q(m{1-@55=#I8 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/index.html b/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/index.html new file mode 100644 index 00000000..8599c875 --- /dev/null +++ b/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,SPA,encode/decode,a18b3e9</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Tue Mar 31 16:09:00 EDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/low_freq.png b/test/afl/results/2.6.6/a18b3e9/spa-pkts-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..3cea3ad800e48ca945b1ddabf36780faa1be53d9 GIT binary patch literal 10437 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 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/c4ffd4b/server-digest-cache b/test/afl/results/2.6.6/c4ffd4b/server-digest-cache new file mode 100644 index 00000000..f8108dcc --- /dev/null +++ b/test/afl/results/2.6.6/c4ffd4b/server-digest-cache @@ -0,0 +1,26 @@ + + american fuzzy lop 1.58b (fwknopd,digest.cache,c4ffd4b) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 0 days, 2 hrs, 28 min, 11 sec │ cycles done : 48 │ +│ last new path : 0 days, 1 hrs, 9 min, 43 sec │ total paths : 73 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 40 (54.79%) │ map density : 777 (1.19%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 1.20 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : splice 10 │ favored paths : 6 (8.22%) │ +│ stage execs : 105/500 (21.00%) │ new edges on : 10 (13.70%) │ +│ total execs : 21.0M │ total crashes : 0 (0 unique) │ +│ exec speed : 2838/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 7/467k, 2/467k, 2/467k │ levels : 5 │ +│ byte flips : 0/58.5k, 0/58.4k, 1/58.3k │ pending : 0 │ +│ arithmetics : 0/3.22M, 0/834k, 0/197k │ pend fav : 0 │ +│ known ints : 1/313k, 0/2.08M, 0/2.87M │ own finds : 72 │ +│ dictionary : 0/0, 0/0, 0/67.2k │ imported : n/a │ +│ havoc : 42/3.63M, 17/6.22M │ variable : 0 │ +│ trim : 40.63%/28.8k, 0.00% ├────────────────────────┘ +└─────────────────────────────────────────────────────┘ [cpu:124%] + diff --git a/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/exec_speed.png b/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..275adc172ce29abe6f5d4bdf815a99497e9aa9dc GIT binary patch literal 14618 zcmch;1z1#T`#w4rASFnHICO^s(jg!*bO<OdASK-m3W$J6cXxwGcZmv;A|TC>(j5cC za9(il{eA!cZ=dVLb*{6naZNa^^{(|k@AKTxecuzTq9lWZNsbADKyYBPPt+ig8^6Kp zZy49X{vc476g=IwlYQ<8f#80={C6#u6_)}6p@P7kh(C2p*_`%OAv8-9+X<5WoOmeX zlacj;aqV`&`+Hl|a5ei!l{SkV6-4jNo^jsI)UDY1BG7X}E9LGuI&xpez2M;of;;%r zBJ_nnsRb07Y{r)CI3HEt;)udoueb+irF}tl3+)-&JJsbgnH9m*w8XTu#I3}YRrl7O zPkAfD!^7!5r(eyI@*5X~@87uwh6#Z*h}_*IyL#o<rc!s~^3?-KpwQJPH~zo;;4z|O zdefy9b-MmNo^x!~$-=^7r9X8+Qe9m==nhl~1{+#+S|2TKblFVW@jpB~TwPtgefxH? zR=JJ2c?8+zt%bb1wHu;bQBd&vZ1%!OMkYwVe0y_~os~5?F_D>_eMw?`e4L$~Jvca6 z*WAsmuC6Wt@5kt<X~na(wY8Sx=51#ur;T3~#^aw}g7ZY<US0p^cl_aBvo{DY_Qft7 z_m}%BP5b82^f<IkO_v7;@u+h$GvQq%1`4vWa}uuGGkx9Nh>gkt4C=0~E&%}nU2kO! z_p{B~$;rw3%EP<Vmt*uJ&GgbrWY?+L(Ga3GF*RjiW)Ak$Q&DNt+6;)OcU;*kr^F5F zHkn6PWQgvBW03y2F#I+B6p!OAz0fW-ef=$N?dQ**KYjYS`93MBtdi2QB$|KwsuLRa zpAlm$oz?Bn&(C8}H@a^7EX8UyWt;V<)VuGS8XME{@e2qP4zHdRDCH-orQ!a4c$PH# zV>e;fttm1}%4R$G8zv{@iG5J#(63+Lj#Gx#55XiLF>Gpe%E!?EJ`2%69f3re&*^GX zQc`cP!q(`+fQX8Uhn3?gk&*U@y_fI=H2=)jRxx_|Knf?pR5X8TL)i~+D2(BGm&2^c zd9m=ueBip@ogR`cFg#{vX1Gx8`|xlvw;eyvO_xSK+Zn5B?fw0IsdSI6`W0}JleMP8 zLW|)%#cPsWL#+s+Dbj3T2LHgEXRrT$z&V*y_Cnu_omGmRZQA-$Y}OmT-wX7Vm;b)F zX!7C(JWDDxMac}@J1MDKBrKeqe93(?U=}`G@vbZ{lZSmNDJdBp9W5#<T3%lEyP7RS zB^@0dQ&ZEbl{X?ivtPZfta>f0TaITukGH0Esx3#9eNWX})Y2cl8tv_UZ;tHm?>{(j zlK2(`^>O<>n3<NA_VedYaJ<XuUXTsA{$mk#IiD)GS%NT5R(w$_i;Ih?Lax%D(xlnQ zu0kwgHh$-|nD0xcd*3<5P$$N4#36`%k0v`XN;*!??c>&q^LPUvL^oslJ2}T-JP2g4 z#F}XWB$5{7hMCyeu-N(Vw%3XfSUX~8;~)-gYCXTlvHKzypa}afU%vS4_(SWaZG55l zN}G+d=UYwg`>1(N)cmlr*wPHL6N>uy@_XD@sIOQ1n_B~77f8l*ua0ov^HXOOv&h|S z#F=!u0SQ49t3{Z5;Y*&0O1xiS@L3{QJ(6lAkJU;Hc?w6x3z@QEFz|jSo{%6`GNDYr zxxs1mhXHb)gn)nmtUeGF_4VTmyH!<HV6pi_t<R1&TTzGQxnlFXZZp0Y=P4;ETU%S* z-QAUD1EOael~ZS6*}61(J2*Iac_I7wW_!E4;WOzeDLmw1$l4Q%zFEH0vxaAW9jTZP zt0hgyql|7vWuarbTE8pINhrA2VZxO-<GC&3^RcYVX0pb5>Q&{quDbfdu3LYah>oTv z!wM}!bTH?9;PODan5gL1If~O~H&n#)=;pn@j-25Ib)Cq_C;#@7_sJ;dha&}uIc^P` zp%U9u+;B0Jo2~8kLbzBz4lWMPOEa_M!$W+Dyu3Ux+Me&<Sy@>ranXI#9|woC>DGO0 zY)rnhtM9%P`}Mvj8zZ9`$R}VDToK22prR>>iHHU0#WN2c-`U^W>qf8lTx0DUr!|WY zdtzDr{r%DW;cc&Ph#|U_Pt3i&n@21+S681`7)gOmTwFW>L~91IVBHNzBa__Jgao(w zV8(#$-bC&o&&=V~8rxa@r%z3)wFAS;;!nPvoSYyL`^~LO^If4D8XB>&v6qPg9!O%v zJDHB`PREldGicS<)Fih1GZvE&A)-B*SU93_P^=h)DL5sV#q4ZjFdu6p#ad;$h%w)D zEsmd8$#lczY-h*L*}1yQsNQ*9lb`zC`)9vGgB{)n#)#hxD@&`%EWg<G$GeuK+n=Ps z!qViKzoT3TB`5zhxe3C9gj4?>IeFB6Bx9PJk(bxhnU0g-^z6m?>;?Re@9)*s!h!;~ z!x639)U>p;pkB$xu|?ijoToVV)?-s?v74<l3m>=A|7h5r9WI&_7pJMC^Qv0AK4RLY zR=bpf&n5+AmA5z)U}iR5Jo%{;n`#~5)Sp){EF(^cw>TA@Fzd5&1qvgmnKh}HErXA! zCuHU57IO%NNtu0gvGQ}Xbga>xcfwMkXdon^-UpEb5nV>(AWqXS5b01MmtLcaZ-{S2 z8pS^Q$+NOv(|b$b$4Z_LkB`GJENpC!j_DNP=67dFch;*EHkA&}&(F!o$fnjoirCt+ z5&bzbQf=CoWGCU!^plIFfv3oMP;%zrOqnNdU~I<!M_r^2dMj!rY$DX>#C_RJ$7lX0 z13iru<xuj>Gnib<s5lP8((RVqrdmZ`omYevBWfMZL3Vr&yT`NIA2aEtbcWvrq{O^= zrN<wwhU6#mQR^^{Nb#=jwLMk}N%mpWO_})lv&yIob1O6P#*G_GOH00pc;D4sH_?+h ze<D^*1!ZN&?AVwXubp=EA5gdi7&s^vi76>1g@xTcJ@YdcsN+`K%JDB>zvk!X&wA}E zMt3jnx*ctd(>5*soCR0?C#KD&0=H(GUsXH<Q&8Xj`t@s&m_;ogkb<<#PmMU49kkDv zJ!(`l{*rpSoPPWyptUQ|*nw6asTPmIzc?6HmJeLT+i=Ht8#Rw=6}ju?#Sn!_3>Lg3 zEZBvlBkWaQ^em=5jM+0!V2x2x(wtf20;A;H%|KY-QT(q6GunVVJxC16$(Z>Xt8q0| z)fc?UP|uADki4B-T_>%0YbVe7eE0bnl~QCuJ(u=eFRcZ+yY8&+42dCDeSUT<2GUU| zF}ug{v@54x!{=t-`Om=(4GlS0+xl4f*y!k81G6db4-C6us1^?50ynM1x;lP|Z(Gxi z1F1q^o4H?&mVktg`PKbkNT&64tvEu`fpChH)u7rB?~{*x45y4aJ97CE!SS=X@6S<> z8+|H9ZSbgjBhS*mD;ZnJ&2fjN#x(DKb%WoXn|VL}@-Elvo8ZYHyz*NVc83IER1ZbP zylXTq;0}!<68bs>qd8B$3;dGGG<1At%3MW^Z<Co-Ix@=>xQ+hEbLxP#p~_c_%rGXz zY)a%l7@e!Mj0~r4U0ZYZ*g9gJ^s;t<avwy18S>H6mK_A5$Pcqq3xY#+O?*5o0ST2S zT?9Aj7uBcRedPL2tgNTA>WR)(X$n?Pn(|mv5^uXJ(Fg<@YTXWQ#ki)TgqRe^6gfW_ ze)Q;3VqzjdM*(>L?Sr$k=}}P~QmIP$?S^yuLBvt3hG#da0Sua&8wul(XlaRaA6%jd zpkqgv?yP;WMaz}nET(8Zd@kTDz^C*IK1T9+$2TY2I%2ZW9?LAu5PqOI%jjsH*u8@; zReJH+dn_X~qD!7m^n0r$4D$spYAbXcCLecjc<3#<Vo~O8k-#d2Cbdcb@RObOissuI z>QCkk+rej*2+CVHWU8Vkh>K0KCfA}Vs$-JUmX?-wPSgFN@?_YI{*rbO>w^6*%PAry zzdpJ!EApbzlmF$6){o>$4}YW(oJ|n^ZAy^r#PgQCT3t$@POY8Vlz^#?Rzy0Ylwn`r z$=lm|>H<k(A3g6vi_D>01{c||OoJr3H6@01ESpuo_aVf^z~7*kIE+o3UpMBv_hNYX z-6+|cj3@d%bPy-CmST|D&E(|dPAGh5nmv!l&C<c1gF2_G>Zdu+)?{rsR;sZ3r`p=% zgVkZ`pvAeyo}EDFkNG2kzR6fC>K#4$PFTt|L8J$+1z!wW#Lr8kYjU1ES<wv4ucP~s zBg`z&MBzH*1l1CJ@UxtX3c*gVO_jwSU-VL9WsTAC_?xQ~fpaX}hcD`J=tN^>Kx^9F z4wS99^NNbfw_>QWsTR#P2kSkb^yTI@dQCT<$kP;@7iu%!^51HYQ?hX7XNC{P>_pFM z-8ku6_#z7kKDhExOMJeK$>>ws*>zszWsPG&ak~8AT#ccj2a+2jw$QJK)Oq%-&U}a_ zfB3nkrlzWDdtk4rqm513ka=%UkEOMBX;G1-jSVj26YgzF#aD1Xp<7#KA_gs?M{kFS z_ULP92sKGj?@$l=3@X;9iLvSF(OsQv?Zui+m8#67EMCMZI%QcOVp*;t)=};0wnqZ? zzGt12v}%n#1;<|RY~*1%oc0|wh6nosJtnz7r5SgPzj!X6!!MYqOD3+F=XpVo0X9XU zP#YT?i2W5?05P^_nuT1q7A0Pdm6ev2@h10yj^pLam(|tP0GGi75@^??xA$ir4dpiX zXNy`;1r9Qe#A@zm=_7_XjVL0YjJc2UnLJuf*KuC5ozP8`_bS~-3cctzOJMYG`U+>= zAQdpYhQaLn#T$UMe5F)D=N?z_r1;A%-;n9LkBbicRN8GV)h*RKoMvN=Do?g#=fW1d z)e?zmCX>0LB#jEzzzl3+dNQs0#6KWHuNC{%my=5Q9uA$vFnYo8`>r9n$jtEfF6Uf! z<yxy^RPXZ8+Ay6tm2UagiF|NHDE%&&Bf@v^)vZ3m3RD*y9PfU{;2RwN9y^+mfL4gJ z2&*zTPJO&l!$+;^oH=|!&!QS9Qaqj&wzKF+-6HnBwJ3C=NW@ScF-a;}W<&IuGJyl7 zf<$F}ACZoeJrIibk$HMgK4u!3U)O}x7#ZI_O?!9DwK%&gT8G`BE7kz_JiL)XfO%{_ zZ|O87s>M&*O(PoMz&kkfCh@w~$fVy7&X;LZ`84LYLwyajk3_jAW0ZYP@#JF_XQYzR zYBYnLISbNhijKOM<B(m@(^Ptd@79h$I#Og5sn<)jFKvw^{8oDh)*-MmmNhDI*L7`O z;~nd~lt$xDiuM%qW{S)Wc5(Rq1P?~%I?AAdy;OqNG->_Zj`+mAyW7b<!KK~}1Cv~K z>ou+WsS3vHcW8fMFD=w+`V4G%lgE0dX%iOKo_0Uic+zV9gs7%~pvm=|eG2M8&&el_ zGA*2u;uXWUnV-VgvyHqLaa{fg<&Vmn+ZPt$`!t|_I3=Xu+VTeUj&RXOkDL#F53y>M z9ULE*Ygey9FLt4zPeS}I_c<))n{msotQ<Dy(R}(8xf3*td{oxbGGkeNbZ}7etRf3+ z85xh2-Z>+cB8somb69=NOyzaZ4k(=$b-CH3tu*fMy2z)Wt10~Qf+KT-%m@|3uCvIg zw)LCJS1kLfvHS62%&=Y78OI65>+<(6%dpeHmB#;8t1t`}{XV6AvqAyU(Ogi#BqY?B zn@j)jVMT3iZApohn_Ge>WLRjs$#JPCwxL1LzkSY0aMo=h?6Suwzc?+wO>J#$O&pqA zR<`9id!{cV^YsIzP#ox*Y^DWQBY5ATRG5V4)$~iwCdUJ(B=t7W%+7>979NwBC9)T| zcyDvtr#w@W`&=`Oae@1^iBA=j2Iu5~{Up)tHFgKjCteJ(lWqulN%uQUHb*fN@Ndj~ zfuTvBoBIR!9WHRxF~@8!?EPwGE6#D=!9gy;L7F7|M0EBT;XKof(7}R9ktj8SOymnu zmz3-b<!niah-kwBd6$ooaiwxVls14(zv<*?b5dCpaY!u8!xNL3xav^<HwTcLo2&bK zvv$_T)>h1QE5%9n!w$5K@R~md$?*e$;B_ty7Th=5<a-zIzllh2{%R#D)~*XWB4o#Z zp{9y>PBc;RM9>wr)>a@U`B?mJaeD6~>L@<vxbYJFMqcgay)jSdyzSw>R^2}I&acO% zftX@`!Ed>lbz_;mVu*GR=jhU0;Yvt@meuph5Kqd9nzjq2{cf{wo@fCUr^!jb$Mt_0 z(4EqL83`-%tc-W#%nIQU_PfoLizIVZ6^pwfBjP#qPUqVFZCivyMK76(O*?)7-4GGo zCZEQwu1RX&-O0%MQto?*J76toqPhdc$5GRl>9N4?3O|4=M0BK=L=tutg=VU|TBcXv z?r#fsgrf`7mxQgX+IdTzd{`|ynm!&AoKmLRqRtLD;V3yzMSP&~4HO;gdwZrQz9r*T z1L?><?J5L43g|kfUKNjMtEugc>ezzVC~0l=y+EDIe7Faf0GJhYj38^Y@LZGJ8}e#M zeX_dtxH^1LPQ+9hUyhz)1EG{iq+?<!cj5dVjZ-OXQ8A20GrrinL4@U8!E5V$aRByF zM9`e-;=!W#9!<f7p3|1F!i+{^L~9P6%@Wy0YzF4h*1`&}MR$~^+XVRosp*b$P=zm9 z3M;EcG%QR^Pz5y0bh~l3CaTw$;tiJdm6ep%oCHz+f~hth9)gCl#!r-o2O)9}nN5?d zxAXS0;o*l5-w0I=f4nXO>6?6)ve(}j-soz3vJ;5JVn=orZ`8XWh(7L&iik2dE(d5P z?H`+mk77ffM1=&N?Jj%;q!I-M1p>8&gM$NFiPY58!oorT$_4D^+Q3rV2hC&xUe?%p zeqP?mb-=8xA9`$6KauS;_rXy8Xh6q^pR|rvbW=wVgM>}TjGky^`-t%22h_{E4(wgW z_A3oZcGDTO%DeRUv{QRjVC3D;!?vs?uSsOc!9{s_O?i{KxwtqCTG+fU1~VmbgN)%F zfdLUQF)<Sp6B`>=Wp;d|*kDkA)tO3A${#j-U{_8r!9{76PPMpRb_9YSA88*~Bfj<f z$JiL(Nte~9lXY_g11LT+Rv6hnup&%3q3{8@tBS%;7Wd|z)5Y<5IC)m7I|MatY2APH zGST0A_*hDPnX$|*yMTvD_oEiyX@7j9U<Ab?M^qk5;2?l?OU*nndaubSvE8*Yeq@+4 zNS?4ETHmMDZIe6U`)~?!aS6L!upYV;p<D>Z1Ut0(!4VO>^J)>Yvz~_xm6GGNXJ<4v zGSngzS?!ULFC^ZzX1`5=?J5#?c+fMRM@GV9+zoIVT7vI`O9~J!J0JFMV_Di}SpdY9 z^~7bTU2D6-_WV;0=#qEm%auLqbjwOg*tXtsgM1*JZ9m)Mt^0eiJG!~KIbS(F4!65~ zTI21W=vG#c&wl(_fs+r@BKKo)XBZ&^ed@c<$bi<H9Rkzz-dbd*-M!PEhr^KVI81BB z3`+~9y3--Ytm%~x5*|lhGoGJU(4}g1f}g$GV<%d6h;vjXqH)(EOI+NTtdGN7W1{l- zrH)~+wypn=t981OvDy61#k5Eh^`oJ)%DQ4~6?p{r7HIuUE5{ox83UebYJ$Gy7%-w! zumi~;Tn$Z42Wmj?B`3e)A+P-ONn1y!xTq*8Ir+w09@;39eCZ88#m;^HPKD9N^gEIo zjb1!eG4nj*Y9Vw|%H92{o`<1wEg?@gBkA&q<7d^pO79)Y{PG}p)Dx|IT5yG=;5L=x zfNOKvoS^rrtgPe~5jn3O)As~a1|TqIMn>p83f3m7UlkV@_nA5>D=S-C0`O<8t*zaL zcaydE2JD;O9eR%jZYL{aEaDQpI5hO{)J7i*65CY9d?6q90?#^w?$Bo;5C~D_F9Z^M zSKAw$*IsP*WjpF+<GZ{p9(OnUJ%0Y{9u2HhUg(!xd`%DkFHe>0gUgZT0}#9p1K2{~ zYI7?Sb9()Qcq-o|vZXiLA5ofOdAD^!>PLFh2Q^!3sEgwLjxL`yqC!0C3!CF;$Q3cG zZ~{F`G7#TN-#+`U_57Jf((AnU_^KA>x6aCkM~UwHX){d~W^{kAY>Ez9>|4<2_)H(( zo>#sZs$TuH9<BOR)h8>Jq+@Mmdx{$e;jo|4ZOvk+)=oUDdO>l0$Xxz)O{U$LC^@dF zXm`p(%N3}fQc29lgnt(<#8SP*E<Gtp(CfrbPA)_#U#He)y86{vz>u=oIggl_?@W_B z76}I%2Zu}Jv{yk(i>Qc*2sQPK!?h8RQ#zDk0X)jaGH)<)vMcC`*>Zo3eKGneO)MVV z9>bjZB`P1e@%BxA?+E{yQYV==q>I_0j)aJao`IpJs_OlR52GU^<5o4`@OGIM6&2Q# zHGn<9#>Jg!@t!n%urXd4gaz>Mb2j3}X;EQeT|GVPif1;{4MY!e$kz0r1YOy6PHOMt zNJ?~5$O#qo({j7xqLf002sV>+&w1hq$IzuIV8KQ1)^xWXN+CMD0bC#sT`J5^n^%e$ z`}y;pfI|QlID1D&$D22AE(uXE4zGnUKA(eZs6BP#v`w`(pUo7%?MxF61#e7z{N(15 zA9aNEimL8NeHQo2cOePdWJWB{5j=K!itjt$+`?0BvEyW7x}*irfhh64)yB$ds>z*O ztYCN*@OeaA)t&GMi3(odOt=K@eek31Q&~7oDA?Yni^6o7$x6ct-wRcj)KNichop7g zzuu$6!Xp}Obnrw-`Gyv{2d6I%-4YJ$+Ti2EP<6l<hK7XHjp^y>rTd}~r-$p#g45gs z!uz{lq5Ii5*w}Q8jQfBLyyE-2F!I8CA_H#S60X)lBiG~|m3OgzOfU#>jSl#giHuec z>`xK66fM4dk+!h|WZmzfY~EycTH5U5;#Z(@+BP3*g33f~;^3f`KfDY5x#|QcwW(LZ zcqat@U!zDBp5K&zZ2gq|MUkoWbL`x_qmucD=@6={d9ve$ui--XK7ix4tSEp34`s`w zyDyW0^al7uzz}*g`&e3rT$D_1j;<eGlT4ysq0Zh@b@(;BC?%HEw5Xbu%k(_{P3~Ma zYklQJOv>c4rkI?mG&6N=%*U);>(}NE+d(-H^FOtw#&M+|a0WmW!a8eY1RFj5u79y+ z>Duq#bNUq6Z&4^8(M2ag95l(c2nF;>#*;CBj(9uCT$2bd&ttgAr;qv@>+8{^O{3yc z(lg_M0xwZ*8{FQaMf%b|LPgg6r|!NRKk&wtwz3X?Cf#~wbX1MYQezYALI|%iG%zp- zNLJVkvl(0>CnM9e=wa)B`+4r$w~uPkg1<zmOUNMR1S`94F{xRTn=@4w(Ib|90|O+1 zK6}yWB><Qojv1_=O-@XJPF)nSNFX6=VNp0_K2>WAB@uMrGXcc$>TrJU-wY7d*>pL& z4pwImN608=+#_;pvou1wiknaSw3nm8IoPi0f98FS!AXo`J0WZn`8IC#wClB4fnl^% zo&eJ-3#}tBjc{#8dGyKJ;Brycs}i8D44UCSe$;bp&-stgVFD(dA=&~6T%1ii65#v* z#eVPUsf!r5>hJ4&L>>mDk<!vqFo%78eb*$Z?qUVG*j6M~<Hh;aWO`fp69<#Z`7}TV zC4p3DTG`jzyD?EMe`0E8X6E5>3Yg&awKd#({5xyK<z?XVKL-;4d@sz`@$Wf1Li1K* zafj+nzw8QYapP6<8|1ejS+a<Zb9iUa-Jul_{k5&<r2{JZSKCKwYf`6riMnLArLW<G zQBi}uiwm67`1%-tOsSft5=PSFea!XZaPMJmIh9It{ccIcY%3c=B#Y^Xwl;%%m+&)* za?IE|WGE|9QIb2@T-k~jN3a+&cq34V$OJWSww{3hdYClQfNDZ$T8Za$<FRyfl#L45 zeNj={<EzDBBue}+hg}`xm85`KrFh7g|KstE+L&v$R_E_uP@c;tqXe*JZ!nvaYNLa& z{nMkJ?7(AU2)CH!$IA5f1ttJDurNO#u>Esv3^1gObaW*^8Oh8PH^nf*{E(UfBlpa^ z3xO0o`O`pw)+smlrIS-tSy{hnrCyz#I8XltYWw28fWwm$ph+cn8C6Vfc6N4-jEsQH zH(IK5xyn2+gLw;*o>mpzgF8OUQYs9js?0SnWAoPkN)|?TTU&)*h!u7#FgWLp9wJsQ zq^N(1r}pVLtdQj#h?g25&nt|Bx{Tb{3iIm-76DP0MSfmf-ZBBSfn53c0NaU8m*SBI z`-Ly=`^(n9K4vyGP1)35s)0}BPg+gPQS3ReOm;gSf~)Xo&d8vmrhW}g5ppdvzX|@% zd3_X$oI~&6`(M?~AJ~fe&}@A*RpAdm9PNwVV7)#Z8Cc265H1`%{i2fg)cmLX+R?k~ z1h=gvCFLt5qG7LV3VpN^dwP1ZvS@sEzJyWW1}%Vn)({#RT2yp2Lj0<?yz!O_4Zfj8 zSm7q=I$?Or6oZ_V>8bO^wLunVtYdDoevrE>D=H!>kn^FOF55Hb?dVXqa3I)TDx>15 zN_-+Bln-(=ex1MO`AHyLLwrle5v!z)`UaItft%2`|H^&6m-O4#baGtWvdAa>a!_mM z(Sg>WUw()5&y{uO6g2Q_Feh0tPeiFLwmht&&&9Be#>{UnP-MAx8JtCgTgJx5fGz_1 zPrVo7)5q4eUR_2AgtYC_3vlMS-RwHo_PXvu5+gV?RLE_Iiu$wR1JL;I8w;i?`M0+< z$6*8-4ldobDTu+2vfUPCN-TbWE;X*orA2+`=<x7%@evcQ{`$M+A9F=ya&cd(anVM@ zUQu%7CcQWJmZ8>mYOi_21i&!cL#{p@GPEUZxhh+Je~?9SYn1UI+FkC#_h07!{u|T+ zmf?n%>lELtzP7d{5Bc%t<X4=uf0)J})B>0`@0({U{5-?ZABdY1Zv3M3;oB{6t<A_! z7CH~5S#$grcNiM0Yb2V^$YQoBRs2wVdEZFVv&2ej>{;iRThzToeiJd<3t++9@Fw5T z+@vwB6yW0<Gv_e{>{(5XriR8NK0Xj~55%9M2dFn@=gg_LFfpZzKp=*Zdx4F8ra<T) zuYMK3)AvV+4OTAIYpiK#n6TnKJ~+t9%LD4}o*tZD0>Tr`G@Z~Qf;G$yy~Z@2_;&dQ zBnbc*F|QMq<%BGKLHDao^lJ=;MQ6tM+~&q^ORhoykXCi-zl*I6tD`>sQo9!KSQVvK zy<uFDdtHsQ5KmB+>4e9qijaUOk<dJO?bsfDuqoosQTyoDK?+vRiWa)aZwpEc9Bn+v z?;s#nCLz1ZyK_#4H{~c7EDHP{jjKf}uo&HfYRifA@Y2x3n6UsP08Wd?ct4qjOh&i( zDP<X}upp2p@Ar=F{{_`824GPCPg}%0$kwXBTC6!6v9D^1nFle6h+`Jckan863{I!< zOL5~E&MAO5?h+8_Xlnxj0Az3=0tRA{Tz?BXIX2?ZX&dPM`(<TiHP6@pc*F!@J)|yM zbq#h)s=-O+EJ}tb|2{p)v#QE+VPULmu)=GXIObmw8J*!bpeU4%hEeeKC-d2MzQqBp zhD)P}A;x3*1fk9RH3MqM8wXFi808nY&>%HT08SDT($UfF_yYhCOW?qN59qW|o<s%Q zAX-CNZXS1U>?q9F16&fD6EwX!zu9IhPAh0aV1>0aS-CWiBSjxn(ci+00AV2uxK~wG z)waR5w#N<*Tu?4jY^8i|a9U3$wl_-|m0svTM!)O4&EmM+n+Qh6%gc*~t$5YEixv&9 z=H=(#cnjfyxuuiU6uq#q$@cM=e<$9a=KJ#1_v?_k0=F;cC%X%{LD>}*s=q|O7|527 zDJv@O(gK~mSsx1UY*Ldb8Z3}DN+WO{R_H-+KQX#%?Q2K@UGC9QV4P7PL-ciP^;|nB z1;r#_TzY$Zm%hgX#<4Y`-SGGJ_6quyI)Xup*`D#8eoBRzjBa+uTZK#O1#ZZvY?Crl z@<q$pf&u9hW}s_;ZFlGadZFBd4*#1%nDl7RXG<Owtj)C_1^aIj-1O75zaK6$&fGA) zrI^h7ymS<a^g?9*_@S0PRA)OYYP0j-4XLV~@y7XwTT|<!9fJ<n{p^@We9=ViQQcc7 zF(!J`#?tVGoR{O>kuKx}$m7R*dk&T38+u9dLI29k1DA<r#+lF{L_-MjKoK;Vz(tdk zn26sDWK>{5;=rc~@H&A91>sVzt**ip6#=0?@#!U&*oP-fRH*ktO0_psXj1kl1LNOL z-*0#1c#X-wfcq0vtb81Tz_UNglZILI32Px<k1Ik$NIQh6BZo)5?o~@JPp5$z)6{G2 zqS>#MkT%AtQ%Yd7V!CX%nukem!YXJRV1-XxvUC4<NFe5Z9h8u)J7%-MqH-Oa;9r(m zz|iUG>A}H4KtKSHzWI1~0-)C+eJY3Dion=W0vaw(78W@L1uF{+V5KQ7F0LH6BH_@T zlei){yKHLj+_|HrrKQ6b2b!@!g1?tj#hZ?t4$fI-1s1PM)Dl8;g){zj9f8i~-zsqs z!F31@LF_g^!5s+Xp%Q=*|0%&77ZY&11O*14!K?nnP9iC@d)+vKkd;Z9rK)l}hLMQ8 zk1;pQQ#^{)oVjn%L@mR*$ROokO-64CuKSU`9^M2OyIZ96-xL@?=FWnY(2=Vq0v-Uq z0D%|<0Ch1ODz;_EPY$@MH10o*0kr*+jynC%IKWW;Jg!nFOW@hBU%&cOh0IJ%FFB@- zZJP(Ar)Osf@%&+n2c#Xh|4%9&>1V3O%ecojQdw#T0T0R;2BdUe_<r~&b*IMZWM1n} z+NGfX&r<mZi1WGaEq2e$%nau%2i=Rxp8N9aj1mijx-{^`3K|%{w${+2(U11xRV&xq z(1EQAXe`NnrrSlSct*U*j*gCD(#AlMdiClRfXv`6|CMLx(&6<#sSNMUiE04WOe^aF z`g`;Ulrvs-_Am<SDq!M)KpwwWX(`6GPWa8j{oBD}+vd}sDEPBSMM-FpWyD=pl*{k> z?PS{Jzd2Ge#-r=PrR&1{^H5~CHSrci@8uV+F-?I01|Z_HgW}>+)78C4Lb5`6I#TXa z?Q`yts#NQ9erkZ)i|<eY@Y%z|Lqehhz;_CAa+9}J;s=Cxt$~~8pT|`^0GHOvK>7fv ztNr~)xXt_hLS_SLAiOEAf?UY+Xal6JdX;}irk7)ZJd^+;a0_zpJ8!aecND$7{d_Rz zKg2m5AOHU)agNJigMJ$vD5h<b>a})Hx_x<hxxxGj*Cv3cqQEr<1@19rIk|a#p?kQ| z-JgRL{ucusel!1wWpx~|Fr2RD1HTPu3MYYcBa&98?ytfime+1*CzyIo^3QN-vI0GU zv&O+;4;XM378c^!b$ESINMOH8#QIYmd=&nIii9dth2;h+Gs@D@V_&H*%_Dz3%(<8c zYu*w6hoU{+p55NsY5`V3K+$#v9(bJp{7ER5_gA0%&xy}6C4)Hhn-bE}P`|Uo^Kx>4 zwPsK6B{rI*udkR`-ta09DK_A_0iQaj4|K5(gI|~E?_w+8q^#o};Y*or-9UkFVy59m z^_Y$k@+@nWnHz>bqUd>g-+sDWAkt_R*@iC%J!R}adcWZ$g)rqH^<K6lR*mVsjAMKL zV`!+tZPy4iy$+yqdLNCO1w{N)BsiS@SupZJ*9SV8_tcgz*9_A(%cVCorcLjqpZ0Df z@)LmQ02|*Ia(OQl>;t@TJw0+9CjYi*+WxZu6s9iln;8O{jwW8w)6-AZ+WKx(e60c8 z5l~W7g<Ksn0ePjVrIp;b{Q2|ePoF*khyrY6fNsG%Z+=GcPZ9wyuJXv9*;MY?%;L)B zc7_em2H0*<{N)q{@j!%x?d^YK$-A=q{MU@}5^i111omS%?&XU%hz90yWMt(0yb&tt zY3Bc3@~leyU!s9`3F~-&WdO9yVDk(Do;+}UnrdoX{QPcbN7nxBAI%2t|GSgwpBsg` zroh>X{M2Wv^T{Om_(lS1H66t)DvH{HcTUX#HxZ~y27r{3khQnBS5i{4uwW+f_~Swa zHV;NhOpH5*;3oKG%w1D>%)T^GH#RoLx$BtdVr;yy+?R|14bWGO%>cZh&KF#XCqU@| z(CeDyHFwkpJPDQRD+lm8jfcIZmev^P(p#<)%5g9EfERN2tCzW<A(enYA`}GZ709~0 ze^k;>s_dXpsF=q=L7yq;Cue|X3ao?+VAD<e-`7$O8A#jz@f7~aLRTpWpM44}!|?ke zr{HA2oi1BSkal-T^4AVe3k#Wj6ly0+$JPN>yWETd_DJ%5xGl;<)z#J1fB~=>eBIt3 z_*j7$KSfCmh^|>+HUu3y$AK6y_kv)%Sd3QAxng6~=`Qo=JN!C+qThtjZqCUn3w1|F zZi6~k7nibU6>mJxryK`BhrB!DuC5LYsma&hF1FQNC1-NHp$_l=XEe*zctLh7;}V4? z^!R@FJs<O><hPpxk|LnF1nuWP?+=I#gzv+Hp!Wrx3jUN2V0i$>P6vsrKdyM(CHg01 zGh*J&Xk1n<2t>mFf3F6Y;0A2}DG&ehfrt|b8j$Ia$xg#BPVS`N$-)eo-1Ip=9E;~P zC>vh=@#6<5%wL0~rKLkcLpv`pZDm<*%E~eSXOBtsLm00J%&?h>iLl#Fn@~)2G-$a~ z9^|)zDd3y+a&&S!K%JifhO@rD9#oM-H(_uuSv5;OPHtNAK%+3PMX6!_XMg?OgA%XI zWD!r77cX7_v&ZjqAbnd+H#`y*O{3TV{%$rl1qB6=`+?+STImivgA2RBt_EmAZ(y<l z-%SzmtT{eNPD%<8$^(uwsZe5f;j~hnT3l>wH{tuSF7IS9VbsiYfjJR`Q6VO35Uv+X zSktuO!ax2v;)b?S0F(o&)2Fk)yW1U@!rlf2ZO^vO4iAIKQUf;ZOY3MW$Wj1D08_f3 z!5Hv0MMhG4$%J{MM@guOQeQd>>6QqhFcSgTkGRch@VictkCs;Qr19d?+88FC{q^Fl zHz1Zje}3YFIaY2Ezptm1?+9Gz+bw5h$Jk6*u-yp4JFvhTe?3b^!>)Y`h~;#e%JW?P zksHgZwby!fsmSRyEJjX!MBq`II5|D-C&8Bh?8c_8ASM`v85-<rAnDxxIT264feh)V zP*<!_hlzy+6?U^*{Xs7w>+OAha^m*lMW$T<$S`|Q6dVeurDL!#80hGFlOD;F>U}g6 zZ!6#VZ?E_#?(I9^GKJ}KF~Ci9la<2<;Fap5`MJ>`#Ag-I@L+fz!fEf{V>eE7gtQ#| zkOz5qdU|?_ehnl6#y8OOy;d71CnrElikdwZ2eW|)$dP!P6A_~<%VGkK^_T$!zyjYi zP<X-Q0U3$`P{3LZJ3|7F%V6qv(i=Pui+a6-K>weTvIrU`GY5xH17s?AQS)M8R%2)) z2rn+@moT$C2V&CELm~*zI~z_%JuM&8($w^j;pXPvbU9mG%o$#-n%rcF?gk9Y!GYU# zYa}r92)S$|46ml7r2$j2&u$lqFKR#iEcse46*FCzxSE`}nrw)FPE6K+j_e6oRp4rb zcX4=CH8-CFbJocEAxJtvzXp6A5fPC`^9+Ic0+f=n`WYJx2Ak?+04C`k<#7sd6aNlH zQbo+idHmt&&iI!r7V`UbW6#x#|93yVXfy(jWL)4ej*7|}UIjDix;gPkl;>|`$S86P zSRYT<%Q+2Nbn}OSLJ5kk5@~69IS|>DWo4f=dpJu<`m+eQ-4<ic1l0@c>qT+vX>pyc zPK#H4l;d^~5Xqws8HVmXt$wNkL%dRV(Fw`4W+{l9S8Y**ar)wG))Zz$8NE!7N+*<@ ze5%6Um2HxIeTQ{I+3yGL7IimJia|cEwVk~*AzQwBC2}8h(0w69tQ#(#ZMm13`(M(= zk_4ct<>NW5L8k?UUL2PDrlzD!&CHZ}$jQ-lt#559$;sXQ&<fbf{(dEmWu2(j9Axvh zVwQmUD`o@?R>j=N-ZjWeFUEZTd@|<q9?1*yKf{Yb=8#V0Ei!gxn}IQ+2R0g&>DF_J zi1ghNOzj6y6NK_#$pa~D{QSfeQ~-bUJ13WBRuG-`<>21ZPc8h~JeqEFWlep32hP}4 z?|aeGZPMU#-tZtMHg?HLP$SV6hKkxd7M0;&x!WhMBj2qom!&vv&HT0ojLkmbR~}tl zYtXp0oR1o|wfbJP(bd?3imWl)poCkN^{(4#J9X=kdJB7?EduMlZVYJuU`cru0A;5y z=@Dk11)hY`S{UEV$8oEyK>%Q7WMniF`sUmim-fBkDe^q%)$HI^V&7LA`QQf?iU=<Q zipdx|glE+!MHn6ZE<+<b{X>RzcBy^dTWyk1*J>aJ6B7~Ly4Sa`d*XEgbYbAuX=+NL zxcBE5DA`wv6bo0n_-*z=V6^7H_o4NCvXv-|S5WYDNCpZBW6-?i=I38bww@<P?Xx7e z<~-TPijFeJ?a`5=VZOal6N9HS8RMkJW}}|9q|8&H2xFvwJslTC8oe5q<&}K>M7ql7 zp*iTjxDypR#Ae*-l(pa4DbgZo7eK0}A!ig7741#L)-;EK+inYNMxeaREQlRXIRZN` z>Aia?2?=!osQ}4XQ88@3lD*GN?e4ZCU6TJqT$G!^=f=yMe;-(bKcC$ru4Ud{;_R5` zC3?UNPsnopWz8J?5d3#fEi;6gaH|K1-V=Z-KNjaJNQVK##dwW1g|G9(RJ|i;ff2s} zGzISZ&U6iggpwuraRb084qq<%Y<()N#y{Daay`46c;zgC0_#FQ*zWZjW=VGX&pnrC z17{8&1CeN-ymwPB<m({sQe<k(al%FoVc#U79|oo?eb|Q&Ex<Mm^v-=UoTF`u?CfkL zt`V5=juwBget5~ls0YkGR^ltEiC*+O&b3|Je#pqcaNyB=-I2||H76%}3C4pS$WG7A ztl!4_vLLrf49qZiS5w10#E%NOfAxHgRe<60J=b@2aLwTJs4PdY6mEM@5ncKlfNJV} zb_8PnEpH$w><WPF@&~}|&VAuI{mUD!sHo^w@aLC0FM3OK;f(a!@H$u2k^w3ZkBf(g z?p|ecvk0j8NO#<C25NiJvF5lF+AK(7I<{Jn9sVpo5dN1&ZQzdmIQeG@WZ8is$d?-2 ztoUkFq1)u9YIHMQUgw0tm0LT1SU^MsME^Np^HInZu@#Bdv+3<P4!wz~DPd7j(CZ$8 zb-UNR`xN-z?`E!~dD;MkHr3}UcKSP8qgZnnQPg9g_M;nfMfdOQ(9~@s|FB9ia8PZA zdO};y2;rG94RXTO!T?!=NJ8E{C~HIwg37Sd>ZJ`oIoX#oGs{2NriZT&4XK89Ma9JM zfS&mM`}g1nYMA*KKwv0&UTF&a@Y2~8g@wVfIZpyI+uPf<47{B|0SAq!lA>ZPDlmh} z7l!bh_3Rgk>J!)aue4B@p(#c!vCB)}jJ%!v*G&RB3Jm4v+6pIOY25W4#(vuE8I7wl pfhYBQ;jh-^fAli{zkJ|#afj7-zw^G6F4g6LU{Xp?$|MZm{2#zMwln|$ literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/high_freq.png b/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..96e125f3191b812d6ae14d9e67bfb677581a69f8 GIT binary patch literal 22748 zcmb@ubySpXyEi<Fgmg%VgouD564I?8DIu+-C?#FeDJ38vQqm0~0wN&b(4`<P-5ml$ zN!NFb_kBP6+53I=`^UH5S>w`$!(4NnaU8!oC-|X~3;`}RE&_odkdwWyia=m2ArR-- zaL&U|CRqpt;IE6evX31Q2*M`xpK~#{2(KUzR}pge@2R^at&Mv>x-?iVzTsCpAa!mw zgF&ofhU4MAYZNzl?Nv%QwSIr#y2upxP8W~Qd0tiWeOwX4ga|xh^LZGqga+P!5Vm8= z7@Vz`!F6p@B2!xN!v)#<@;LV}D%kcJw@#kDT{d!Zem9;xob0fB;^yJ;j$YV7%)!J- z+<iCca&1kG82VEp5F>nbqnLmG<#WnlhmHPM8iLgM&rfi#{y+SIPebt0(RwXCC1vj5 z%IwU{gy){#bcP=`k+ih*FUPNWYPob`9*>4k{(P)YR&QR8x@~vx6VVElns(7;_6+s) zmD<g=eEIU_8@+cDv8s+vVtjn1X;(@-w`q#7GdnLYFB=;hGqZGkH3s^_bG8>16)ERg zjk~W`r+V(j*FTwJu01_mxy)_ivD2^R|0XxZjg^6cfsxTq=l8Gtq7*>~lW*a)@@v%S z-}bSRcZz|RwkHca@3-Fb!wT^CxAoT2(qds@*$#ah6_uZ#Pd>(reko!!T48K^Yb(X; za5*qAaJ}XT)fRJWd3iaJ&uWIEthCfWFmTJl-t+mTe|x>w$44a8)I!gDv(WDy5P*q= zC3d{gICd?+|HI(Q0q>5Rr;Sa~OC%Qh0#6d(1|Ll~1|=pYa_CpNtPB)<{rYufu&DN6 zA#v=QxA$2}3Y}L63T5r>?TzV7fc}*_J|^s3r4*6MuV3Bz-m8qwm01kV%+6k+rp952 zjEwX?-A-juPHDe=_)YwDb15@Izryz3LabKOlKO`?=-($LWWjVr;vjZ!x(dsNHrwx^ z^t`qP3UoZY-wl_TYH4b21-ly?&nF2wB#j7=YxRVXC96mO#KZ}c{?{{HLQ*GP!OKgY z@6^qHR$c9LzJj6Q^w$?FVrR$OiTpNvJUs6davB;WtV#CvHfO)tj8$x&9<5W7lgBGC z|9u;z6l{;urp!aO2fUUuj6#p1l*I(?=f2C(d;adtexR14;JVpN8ON^Ib~{1L)9v~5 zyjG(RMMXqJL>#wng}!?A&~^}gGgs4VYV_;-FD(|FsOCgq{SaT;a3X=9`*?oLp^*$C zoF}dQ_>s*zeAqID=XviN21#bcgi@PHF=Re3A74&Z)&*>AB5I!RW;_WBIfaGn)`~KM za|Jr(fkgEB8XCOMT3$0q2EruA#>Q?vptX8fItg>?xj!A$)6*jvh#wptUgNTPtv296 z9J}cLlpmw?YaD$1ByQ8rgYCr_@ki9sGL+Y}4~O(B?TyDO>?YU)Sc$2_{`I5@kbclM zectffrufOSGK||qwY#&ry1J+5$*=x=1CPyS@3TE`%7WdJ)Dt$?1n}VG{FIlMmzFlw znJkQSTD$gkyc?U4MgTtO+qZ9*mX=`k^yh2YOjI32%FspD-b+^Eci&x|nVI?Y>C<hU zFX~!awP&YCV;QNZzjG}HK0Yon>40s}*4DO*8b9ihp>Gw(DJv^urxC(zZf>sJw!e;& z->T;qz`Dvq&G6@W@WiY%i-w)pq{U&ev!k{3aj6*z|G{AGDX+Nr*<5SX{X2}c_Ve<V zmaF`e9*orqsi~8`7})zk2gmaq-ZyXDnBrr1@bmKW($LT#64^j7%#D;;kTEMPtsZ-I z+dh2w(80ms?p>c-L5N_aDW?bdIhaZ(&Ln#r?pb$K<>C*HT729?vEI(kPPieP+LPGd z&N7r<d5$v^6BE{)R28l8GpCW#=LViTF~<al2M0U5yT2TTM&F9>4n2eEk(HHwC+>YZ zRQxRYRVuNB_e|lOo-ukM-92KXz)LM7lYptWE`DUGg>>Csz~iVQCL?>sN#!UsUgwKp zZ0+6jiliaTpw?@Am|*KM^7|E=D%k7Vj~-D`P<%1#xrTDRSA!8Oj9!2?7xD4uMg|4- z^z?jveZS;qXJw65I+#w@c!q_AQG^C~iz(Oo8(_eMz4Y@NAG@ktG$;<cCyv9Qu&9XR z#*IhSZe=ApY1E|7Ot5^KN2MO(No11z>)Dvz$_2Cj;RCDJXD9?MuP=Ye*U;2lSXhA4 zAb8`3*~V0TOiaw3asxfR+sDEpB4Zr{Bh=zv$EDAIvg=nZZBdx{H_`stDe39y^xnsI z%F09xO-6UDhCZc3CC<%VoQ)8NarRn>H?`DCykp#k8b`XjxfSYHA3{x~prpJK*5c)! zi%-S*WP70lO3v!?vY`8}rIM18lM`RL>{Gvn6M0#AdAIo(Eo)f)@S?TR@^9b1AzdFW zy{ykekNV^@fq9p`apy|p4X=}(LH{?CXQz8QUo4+nTk}ze2?`3<!m_c_5_aGH*lHx? zj7qAlJ)3C`Ew>)m*49R^t?}{Oq5@?w3b$^pz<<=&*B=}lD2p9j|Lgi8eC$cb`?C?; z+}vHs!u&?x-$03ri;fm}G0QlDoqO$158S6yCESynjB7!fDUV^_)F4EEGQ@2MZkt`9 z-*#H0jf{H#+OqHuDnbIPz&}HWxRg2UbqBxOn&mo!qX4=!5#4P&ryWS~cZ+>u%L;`^ zzxDuuaFMJi$3sjJYmdb=ZOBskOEdaQXATT#+ECuRjV`MMJm0&zx<;iosF}!|#ohO_ zv5Dwjzkc1f?5LKjB<ivM>E#h7;vr4K=sARL$&>o?VK#5{p^cG*Ih>rVd&3-eoap^u z+NOoCS{Et<y?~_BE8j4cmzCwIkTUqy+pdl9mhD|5B_*Ai7Ik}lgU6Y$Nb7_2%k{nl ziW?e7)c9eScXoEDC$Cob{bE&v3#6tR=<2pBCUh)RRaIqWW%>B{G&MDijp>#Qf9x$h zcURbae$$DI_6`;P1p9e}51A8Oz-e^|UM3Yv!OO#A%Pr;kprRFB>zpS&bCr@4L|i{B z<(3EsjZU5HO^RC%eR}okl^)W`j@t&d%B1IBvWV+jolBII&eIK;){*)}HkOvZx3`aW zio9>Lj>3Y%IDcL#S%{pBEc54bOE@j^**8M3WlAWXp$5lKp+5o&q2sq6JKR};E@bHJ z=Z8fw<5ci-83lz<S^Px3NAmr1a{?v3a%(*ml^)T(u|`ErEv?0cg{=osQBe=%<<&=c z5iWtTWY!1-{qF%C8>`8h6R01sYmm<CN)H|gzxWlM8S_FYx!?RYJNxPA<SCy?I~CG_ zm6g@r!C}&6HVmpPdX|(QJm97dgR)60;$jPULtkIt)%C#tBH0(q;kWVeuE+a!60*w5 z5vi#s$S@*0ks<Rk6B82{>VMVs2r8}_sOt>=SvlxOY;^PmEG#}=Uh+$qpx?r%4O`pR z`J98%W#`}^!o!<&I)S$PL*#ySb#*6=$~*zBP+xLfzCHb(^Mor42gf>W@rA_;7cP{R zl`ZeMS%1#WHT}KRGe&t+(5y1=SIjM~`^jYQS}nD8bRM5*kfir~=T6`3SW8)rnHDZv zun)p6)IanrU_t(LsTmNVNXAl@jW6CqCS-Qwew<d%qH*egPx3QI5pJ2hgOaJ{I16?x zU^bY1k?CvGNl;;-*M>j%c#*-T=3pURGH7>wva8@=I*6W`nVD3gP!GumFbYcg019=V zNzitxu8~N*UGem<RwCfKm9>_jRj3;r7Iw0bXtNqy`{BbcUu?Q5CsD%&|ISXO_@Gz2 zO?okfchE2l6SF~3Ge4$l<RXJx^~4G`dYk(&Eq0}*ay<)F<A67bdFQau9uKX1JF2y{ z6}s&g3u^qp@NmL-cj)PaXU-B5FEdY9W?RB6Y;4xchp_z8^Yb4p6kbmAm^p2xG~nUo z4Q@F*JUZI@{d*&7e0==$^fY9BWaS1m-V$3uS;Y+;7{Tp=M7mK*bH#gf`2u~^Vejw@ z^7C(Ta(3s%UBC?X)+g>Pe#FKo6Fz4{PDM(3t%}R%lcHt~38VCeHxa$qF)ZV;Nf<wm z=>W>7PoLsr`6=aI5wJ~blHO<EuaQ1zI{6;ScuTABQU?!pSVu?4v5}fuRF9dXdC4s$ zNBc7z1{f}qiRQ;8QRL+0$3_+w`5Upt@8(ztu>2@OeB~766|~tXri1*Y<pboF<wBb? z0-g#8w|Wo1(I0+VY?j+@uI#q(Y^IW%0!5!b43|2x@}l6&+JzhV1h84TE-!ABsfrKz zr>Rxes;R1?#wtr-C%3dnhc>?~yzF#y@|$N*hSc!zaKovp{~M@r@87@QSs8SQ8vSBr zVQJ}cFdt`Z9Th8vy4LP!s}<2+^8umHU|!T5{DE!I?fDOSm%GcOp{leMkFVisu1Vg1 zLBCh&u(&Wc$EIB>%Oif{#u8wJIqS>zzxwi^)^B@`Nx7z(b!JF~-r?r9;x|L)*s6Yw zIO@riIUvwfSGOGh8gm7W%ST5?g9xs)aA<$Aj32j`SC-#C+&kB?V^{04IRh>8KDQ#X z8erW231*v}*Iu|JFrqPC6={O$p<dcRbbz)4nMCG~mar>OcU<P%Vp3942KC*cID{vP z!wQSjcgutJ+7N)}>gu}X@C^WJRIB4mQ!u=)sOIq3*-7nLx#M!LmjO97_2K3>`cbRI zMQa>~t+`fsMTuz_+^vzRsY7UvLi}g<Jrw*fUkm+<`GDD^Gb53i*-coUVF2TGbgrD` zW7{15Ue3<WW{$ckARut-Rz6(s+BJzyJq*2lB6a#IjW0xj_*b)fnS5^Hd5pcp#N)FZ z;sk66L$p4QEU&6cN`#v4G50+(l2Hb#j`c*<V=wW2OgswPa$_2<r%f<CzkdCi8|y@V z{AfA++1Sv~@JlFaq8j;PWq{xc-)kB{d-y2~hVEyhi)SCUwzj6GrqI+5a6Qy`;5?z> z;jt5GMJn@7Z$c!sE;C;gf9ko&Zy>S8u`l-Bn&MT6n*R?iUq`LWhU+**V;w&|msp?S z=@~zoQ7@<9?Viw(F2LsWO?>CAw%ZZNHTgP0HJml{z#>ZY{T;+qWjw!oGV7il_R9sQ zPre^%?`q)dKE?M(AU;UU6kgB9$~E7p))~Ghl7QQdF&hON%IZ6v0FDA-^^6NYkH!jN z8M;+721@?C!|G;caT)0Ii|4;|aLH|(?%E0DAr=vz&IKdi?z7~6{i!USxTmeManZqP zcI)Y<U!o#i){;n;o_*cB@iOfz>3Lcu`b3JNf7<<BwKo;Fh^j|@%~sth$*WF9zdd%0 ziFG~E#Quecpz=Ys-DvOln0ydHv4C-1p=oJ{*!BuBLi@dAS=%Jr1p8RiWNOa}zj<kP z{WVuwz!d&0xxF~E)~<o{@73urpU?TL&pvv7orm`iY@bYzyyRN{5_5w6Wlnmto*a}s z=iDwD@{3WzLxgW8mX>Y{`lxmD;H7y&um9&o_z{lx%zAZyc=mU`W0K&;d9RHXW47q8 zevB|@;c5QE1=hcM9y#5;TL<(WN)bS0=!(v(L-icvz)1gFGvDN>1nvyLwDopKXeiQl z`lW5+(cXGQXz0(C9XmTa;Cv+FlU-fP3lxNOB2d?js`XRfz1wePNyWdy*FOB#8@OQY zelv%37&WiU#uSJJ1qQXJu*3X`tMw;`hL#o=_f`zf5{U1Zbzd!{5=urv-#h#LQ~BVw zZjA@}=J&=Nlpj9q1_&<2WJE>k-2A==ncSPz#;zF@-V<}An*7m%BAf;B-Ux8BW<D=B z_fJbc!1?HM3cCtEEQ>!dv$=%@3UYE_NHMXo3-j}|;$BJaa{sh)R~?;Ez@UIN4+uah zKmrmKc1Bs+*l@71@x&`QIkOfAoE+`h06kfssJ61Qf*r}klwDpvnD>@ULRC%8v?Jlg zaxYVUzuW2%SAKt6Ojd4g5OMF|V7b*OpTu{ca~OO!6T15Pz;$XYhwm72_4fA0au`g& zUt?oc9tT^$e>*aT^J6Y8?bOcPU!2amY7^JMAZ5)syHt`IPwzB;o!=2NU-s)l{F~?P zY}M{}1l*gJgkF^S2sg0P@Yk5%FDgq`o=yC4+&I&0EuNv5uR_{m_huq9^L&MF=Xr~Y z992Sb@mdUQLJ_o{F=ueP75DPx%P1D*PU!RFUtdIsY~k>qb?{G$I4%*#T|PQEKvU)5 z;9&nZ7K4R~2|UZAHnsDbI-iYN0|~AybR>RLtl91qCKCPqW^GD6`1W;XX6upC;Pv3s zwp&H-6qu2%S($G~3tgdv4h;<fL}>X!^*3+SdVP_M+0n_#J`_GdLSiDIKwZHc9?4MT zTV1;4jFYOij(Z~7gxvw%X3tA=+?HZ~lMHB^;ieF2<0;<5QB2^Q)Ocv2&1u?6bGq*D zf1!|a9}3b!S1PPQC8ff=ylIwa&z@C^<6}w6$Y296JJ>$HCh>iBxP*4CuZQB-$_g1N z>3-|{k2ql+d!2s(0Tpn)<KqB4N)uC4v>v5Zq#ttw;m#>QUUzZi*a*|OQsn8qABvTT zyG8%r(EW)+oA21q$xfT21&gzRl^rMk{(%9COTUXI$$*Zc%yPrObWgyxfBF02IV2N{ z|5%l431|SYHWd{WDMIH#3<&>{_H%i)(|b0IKO`gs7Y}c+Q158Uj|ecLLXv<=#&wa} z$=1gY^gPez4=sA2@(oIVeHe*%$D^DkKE0>6js1Re_pL#w7wEFVZban2P_RcI)|Wti z1GnR8@rJkaix-&K*klstF)*OJA6}>+oaqfDq-`U>n8!)%H72!6FDU33Mz7=l-t(W9 z$5ruE>jSgxGN|#Wtf{F<OM9~OtH0CQR~459ML<9R+6e&;4i&F?pPI60|M++Zhmgz0 z6C<N6rQAfJ7r#Ipiy1GXoEFRruizw9O^h%8a1+TVxoeE-!!cK5rn!O01yuv@jF5<k z#lPv>H!TefL1Z3)il4d4+fhJ)JFOW+M06_xs@?bGKU$X0jd_8_0Cbh+(j^|a5M@aH zm4BzjOBqI5@xXgE@-^q@=hw!OgXU#0h_DsUHY2>R`}YkD04hfTwg9ZS*qQu5QIP-- zFElt<#dbaVtwRxch?lqN^7gyzM*uHX$C5Q*2I;O`abNDuPD)D3$hamUtEoA_-6f)? zsYyXkKiSixqN-|tdVB!0wp<{(-OdfP7p@FlG*>y5osEr#v#yeF?Dy~AfG0qNqz-Gz zl!<`$I*K0czaapx#XxC!dF{#WD5yc4)L}5JWGqVf1Oz8QesdKQ7v2{UvfRA63<{6p zg9lgc7=7Pe8=ak<HIAK3wr15%GYWN=larH|Zwn#61zVHPyzf0+ja}!<YaJuLL{LCM zT{?gMJSiC&j9rIG$xGxeg^Gi)6r)}e6D@T=|K(DGu!%?aJ$C&a<BxVwrxXt@=+gEv z3zNGq<qlhPc$W5!j3b?awtqEj3<MYf?`#RX=0PkQgFoA&Pibjsbw+o>sJNa&ZG7?K z1rrm~iS-&FpGm+LAQ1Wa`8n9zx0{rFGOePyeEBjcu-l7WL>Dg(1NH;a44dHdB<||_ zIsZ4GKY#wu_+o(q<S$T>6~0pGz~?A2RR$?YR`xs45s*9=)Gz&3{oH)A)RW0k{hL%g zZ*Ya)eU%Hf4!{P;t(S_u{pX~gp|094i}u)S^X1L@_ti637Mba?n|E<(ZVgT)w+)JH z)L}Rs&5ME1<dMO2{i|T6*%mOF1)CmOoN0GnJgumq23R$)FB2mp>lO8DJciA9gmkvv zy?X~7|Kj5D9$M{#Cz*s7Xt-zaTrH;(KWJ6Hud_iS|E0p<t7Be4L6|$uptASjPY^l$ z4f=X}NvWyZlwnci<bbkTKyoR}(Jq#g=fmirm0f!AC6WlDj!{gN6zahQX~O7;sxVHh z^qyDK-Rdz>Q6<JdVqu|=mfLu5wX(pN0w|wgk0w&NV+Z#=QswF(C)Wzlyd3bmVI$V* zbg5>(#*mg=(IArZ<vT9wR?@j=YzB*5moK?ccHUT%q&-(*0*wvkZ+dzf)@Uav8eLsy z{Y75$YZ3><OvpBTY92F?fzWE_MFuV|E-5J~xa=6wWgtqTqM{zCiShBZ_4T5uLf^|N z$ICRSV|9(K;A3Q!v5Z~84;(b`*6U2rz9o1i+R~1QfPnmTgU7fn8tA2+H;7RS3npGF zKzHs(+(2q3EzO;hNEGT;+RwL<dqtKr-(qF;m(&3!JFg6a;B<%LZHmw)s4)(%GV+S{ zn6U;X&dj33B!g|%2fiaD&$GO$$<wG=FwSaChzQRV>uyng<YUqCuHz_s#KzkH1c(#M zq{DqKR`Qok#i|?Kf(dh-hNIb}-yYXLb-8-?)EgDC*!if!`@-GE<4eb4zke8<+P6jD z>=HX-<A1E9a|F=Dpu*Od_-$k)2>=SO6F2LgFIJ<}SFRX%9T>;!=-Xv%+p0c1TXBtD za|s2Z=s<bf&fGwszBc>k^7WLW95$j0w?s}ULYtqZ3udT(AG;{`Lg#ZPBjcHNlw`H! zoJ0rfm4uv)^ov9lB|)#e3zh=DY|pFbtHz~VD_gk1<CS-Vr)-k7QgkGc`B1N~ELASs zfC=}ZTSPct|GIg&c|jd@VSO})PbSntC<oVBSb_oq&<Zzbmw?xQw6)Dp#4F@LtCN<J zYHn#6=<B;gPEITAq)@MC;V=IfN#P<|ra{!0&h_R@@KDy|Dv!)x5*k`O%Yioq%m^hk z7kUBc4L~+-va%jVob3}?_xxV|`QX6=U|Y7fwwjunj~_q2f8QV6k~a}897<_)8eP~) zmUl6EmDH1t@i(@&$xhOvy^m+<q1wlJHIWWw8-)rp7y;`9Nwaud3M$OBP1X7jGY^i; z;&ue$q#<nX+}uNtch4mx8UT&lKC{cMQ~TUJo;&23=3~1bs`uNZu3=ine0xJ>%gBsw zVEv*TN4CUvUF*Us`$G#J2{WFj0z6@W?$$xMg?b3OPx%iC`s=8aS*4J>HZ4Sm3a>JS zA7z>IpM3|%YdnRoUY+X8Q-j4Wlx)2^R4nYYIu(Z+DO&-6O3!Ec=>GjCkU93_#y}2( zrZh(ZXw%M_czSKJHr4&LiLUM#I3i75i^#U$$N<o?07O478f0N+_JTdz7)U@yj&@Ei z^OzBrD_WPJJp&G}%}|w0X#zSC7f@Z%UJ}4%*gB#hpLB_zC3#OTrh1D3iUvRxNNj(w zH4jv7%%My4-o1Nhr6$JLN_H&fI#+MN#GXOn9Dc-9pM)7}G95lqHQfE5X99rmC;9ye z@$t|35{m#P133hb0l+Pp#9y*kXh_J&$cX%d2hcmh>BT#%vq0tG;3xvsu%N(dbEY{y zKK>XB<h}9Z<703jzLb|!QcxrS<`a$?YB)VP;<p+pbzYzN@`W#|HTvz_r$?n7;4r4H zxcnR({B{zVkRSxB2B5>^f`Mn>!XFoC0)<|$-s?=@U0ExiTrhBfbu~9P2LnMO@gHC^ zCeg<h2D`lrZY55;Y3%PCrDKXoFcD^L(50Zmd4uDEX0GlV^A9+x@8jHLM?X#vy1d0e zpaj_ytgVva_Ub0{vYP#wP*{8DsWdTRKC7ZdX+VFOPv~9jNZgwV<ro>yYogG1Th4~@ zNj;upId|?{gy`<OR->=(d)Boo9>05JV2b#u@L_IK1niyyx(DKYks)8RfRq`9b~DV) zS@-s`AH-=E=@$&H0MI>MsXcwLKa1FYQ;|<dKZHPtESKLesxq9>qh8|u8`1h79=b_< z|No0=X^9yA!n7>@A9X7~gQ|w6T5nJ&5KT|kL0+00cwAv?=;XA!QdH};^Gk!$=^k&u zI_vB#m6v@;P^#)&tB$DI^f?7q!+rlOE}nQ(-mvsm|86t?ZXRo}P>v@XgNT4!2{AN1 zEe3r+wPK_@UGkuocHF<Xpy2k6B?IM@xBEtpr2)IUPSX@dbQ3@@C@x(BB_S&>uk~p$ z(72#PaS)cl$5q$V6x;gF=zTOg2>_m+n7Hn?+y8=sJ8N(lSdLF+77~8R{c^9LAIxZ` z%}Qgyy?d`B4G|q+A@B06w6L&nYU+uE?2{)?fY_zpRaRE6O{5lbyfIkSLBf~)<NAmM z=-^3O|HIFb8oKQTJVn<g9y(tKX;Az>S%9q*BODMMPY)JTYdsF^Jv}||-Kz(CFZniW zHD~~>yFapDuHT&Sbbnf=n7~O(jS(gnj)viaJp7YS%4iZ2Md%a038@vUSoHVzH`F#Z zHeO`d+}s2n)M*WS?HAO`V<ThZ>=GRuA|gs_L+HTv`WlZP$0sHVyKc<^w5s>R#@j=h z_kREcTm$Z(OgPQsDwpCli*FJ1;;_v^DLI66)ZNna@%M>umv>Cv;}knjPJocV%=x4a zNLtYU1N^!${(s_EozDFKD|$^5u$zg#sb+6)Pv^G8Fs(Ql_4X~D=kK1<(o!&GEhlTn z^RNXge=17hb<Y%1_|>P)^QaJx{2*$t%Ufc6cM#lr>jrLoMuz#=e?p#PjK3(^9)aKZ z<W9WwYbq`n2B_zNa=prT0WzaG`r1et*hv7!O-ddQaqEYJR0%f$>Tr<1|0*m%80fLv zquIbPV&dYkv9Y_71h-)_j&|3e0O&b7@{~LFf6y@POd{EhV(<r{@kLjPD5MhL0fkB* zW=L&5D<O3zqFAF5Joccdmxl&jel((jF=xw)Vf@TQ{CyWCH;!?Xcwd(3+#I=_^uYz% zd~1to*3#4s-Vg0M*fJS~!&IE6apPpFE;lNqdMVGJ+4q=d92E9{{4tnzt<2;~!p7d^ zp2?;O65GmSCxagyr38wlpEFP7qh-Ek9ElQUNI}215v1+c_T|;JxEaLg<u%ea)0rZA zg_aiD#a-*It@$6YJgm*kHmvig{3x71b*&7i4B{cu=#nN7bt%AT09FGJpQ!Of_aQlD z<*v@oU8nR%eqt#3r)9~nIYnPaO?Oj?F_8Rie19*8vc9^yy0NhV<J6HVj(%`)^^68Q zB_MT9aIt)JC91<$0SohY!wn6BjC|EnUG1t#x4@jkR$>W!tVXCfs5MniLbPpLC;6u9 z9HIgP1ULY8)p{2&1*q$n58k>2I!UOB<QmTU&%Gifypld#V8<s>f|uTdlYY)D1QHjF z5h62t&t|_xEXF~b<h*l7HTS1tve3@PbR#Z`@=-vG;1fC}`+|F60+>N~b&b)hvlBf% zcF?xIf0rGV0{sWt7x?P&f({G7KtQ@_Y-j)t?9v#Lf|Ikixd+MF$S81`FwB>%m*kJv z$LPOMqFz0iHDGNdN5Z5tCM+ZbOnQy|PGSd$z`(trFMv=|Sy>6ItzHiU@vzN#gw2yh z_4YF)#ZWk*j|-b!QDGr?s|ze(OZ|zcl&wEp*9-QQsXmXWAX@iFq&)^g4RrzD$E{lI z&YdkH?|qEg_u1J@JUr2<;0J(MfQ!;*G^1I5y6^kjeB^R{o<N{v=B9siaB;Uk<<)2D z7pJu|BgeaS_pLMQizEvQ3aHs)uKiCB&jYeMps>NxIK~A#p=a4~(qlVpd}qyi<G+KN z12D7oKRu}jQ;iJBwliuBkCI)0wHMkugoJ*(dH#iNuIr*hI%r@6laM0fdUkp;)()&> z@^47AdxescWuzkW8kcfwlP92PU>HDi&1`JEm$T!xwzm!3*LbZX`_21Tc8(L=s%y&2 zwa`Pj{pjS?{3lx4O<%-0o|%I3i4j<&#m~M0FagypB{mjKa{<Dl`})G*0T_3?-I7G0 zFt(u%GtlP1e^C2$qGMyffYJtm5U|=o|H;kG9lhO)T(1FZv=-pg?(QytgQ(Ufj>Df2 zvgm!lu?9FdGjkT*;0_LKs&^<D&>AC1MKJNe^FarM9oE_29<6qLAx}VH>g;s=3`7(F z7I+e}ckkW>5kD2_?CczInLDSXL~S7lxQ$5Cr7TrJJ#b`iRljsgRc#ZqlRQez32Dkd z;dBiVR|&`%I%?jn?^$hhyfnS^5HE9KAX1F**y(<L@B-4HB&CROwA(-85h)!F68ql5 z_Pf<WX78Nww?m!<_cya{X`kAC5`MmCBO_dP<=J1AK@A!~`SYJSu-b7=A<X6SBlfn3 z+8)?(RVEz?fKG(8Q*l}%{*w?m$U}GOQs3AZ4KeXmy)32&u>heAC#qb>=7iU)wqeBW zuA~Y(TPrD{O_~ZR?~@gS?d@%45R1vD;Qi-Ps@<Rz%SADJ9<7yoybcd(5+P4bq9!K? zjjZLwiiaAqQ|Q2xA{e2U!=!V+e3@z5dwe>bl?FhCSOSpCw+<DX&lwpnaj;SxYN<w) z>}{~eit3JU%l9QZs^bqb1BS<L`xxoMOB%_t5{Dy($xC{bFg#PvuYO}WH<k5D+5odv zqm7jn`R#c*t@shGaz`!^Tic2~(;BJ_)nN+NiqClT7q$#6j`GsK7xykZqCGY`g6YcX z&i>n;3mZ{g$p>Pw?m5IClEuBfAgPfN50d9YH@8DA1J4(LfdK_OLym12#ABubN+Ga_ zKyN%~1^5agjJ-F9ZUv{XurLFIA*e(Ec4Ka+T3WJ+qq7#L>#*cH5_m&X6=Y>AAc`d3 zTHE%7)6voK`%ThqV995PD@EvT;|1nX6cjB8)iL=S85!M|k^%)iMW@ti^h--iOPqn% z<AvDj{+S7z5}|L6VNPat&c3^ibH(HDSD6=x2phvtePtDUI;719E}_D;=e5Vivwkjr z)Lem7jMVmEkpVq9c}!&FCg@AFLXJzIL>2r#^awqgs`pzTt7O#Waa`(#Bpce^R#s6_ zft3##CqE*wN2;oK>}KvGrM|juGm9ULJ5Lf&^Sqke2VXxR6fG}ykc{6^6}YLA<(0e< zH99USD(6|4`b2)$&Y;Y^zXa%X7v$YwZ9<YjURinalOaa=ccVMx6cluz>A}>m*PeN) zs6>7WisEZ+9|;iQ{@r#f534b=jf${i5UZW5?g=O7<%A7WIcBcM7Bv3S$skTSy?8O) z31<B$1lr((fZKWubbSvg#__ky>7yLE<94#$CGHL6>G1FnBxnd-jgB|K9*2-Yy)y1- zCk6(_0U@XV8wi!j?6E{YzP@mCSYrW(3q%%xZ)<C7An-xCR~Fg4P;T~*Lzf5HO%ai* zzZ|-Hy$22qnAnJo5Fl_D6LS!VBuL>zqjk;d7FV!MAj-fBqTbTdJE0fmwJY0@0?hyL z;kxEk|JU^5r!XoF`s@-g+@K?(Yh0%y@ae5kllFHi8XC<zU%=7O(t5Br8fkD{^JaVn z+L>?Axf{av81(tKOt>f|KPoRQ7RZdacVW(X4{BcLDcFgc#-|rc>TgQ^YN2SdNY*e@ z*0QZ&re8_*xS$LcD>#!1kc|ZH1>JEN*zcrAJQPeY`T-_<*G&aIcBh@YD>^2o`P(;V zN5|;s=p=FPlq(nBMMwXJtYS`fHo@gPMu4GUjGRJ$!)sv|M90N}{E#f>`SsH$$TzIJ zdqCO&_?f@IKdfWeIHoYDP+U)1ZooqM0}0h>l5o>-4pNg5mUV(eQ|I|hye&NT_q;u) zydGCQ2R{gU8)V-=-jkP=y}`k;NXc~l`XjbjP<>l<Qw`Gp2$BG}4~~wyQpIbtvix;Q z!Om=NZwJT&@UuNd6x_~s>qt89<4p)I0EgcNObB5I?!*r0a&r^~kBT#Z%YeaCSqVZP zj11Z}v485QetqHK;Y@g!L~3?NpoWZX#`*f^2+N++#Esg|P7-K>B9vzx=Lz&a)niL; z^Z-5u1PV(F2$3sz*nwzy5ltZ1u)MdTQj>&U$SXzCdF>k-N`rRRah41T(8x%`BhsF6 zwfj-%S_xs%^No^4Aiq4Kb(4BW7&cAzwx!$1BndzDP0eNM{>Ml?Xtk%{o@qaPI3--J zXcR+KR#9@Hzz)&gXiS*)C7+DI|9Ax%@2yD7;Qy$Rw#G*r*c%ZcA^VLRZ+?<smf{2a zGNW;0a!~vw5fw4r{r7d^$$ED~vANTSpYHn`36$0upDnCib0N%^obV(jbxuPh(D^Q^ zvG^%t=0Bb&z)ZquBi%8kJgljty*oOjFlJ>lhU)xIRb_MDr+n%J`;sqNu*W1<3t`sk zT@rjH4bm{lA|na2l&n5lDh~(s%WFI?608B!-DZLeYc=JvwbR|C2|RxFJ|Ag^>Yjum zKX=LXpDKQY?629a9U=8|+56#Kn)M1|YJ<y;a5FN^=k<o<#$q}K=gCZVQ)t}gr-?`d zWn#E!sQ;7-^qBntvC9M<)?~;}p2^c>q*N`kT9<8%*ANIgpVU*t82^`Z1uJ(&owUdL zeTW{c)hYMaZFfY~^Jfka(s*aTKdfi{${~D^9!#6MP>26jXUxKTYVD;*#B{nAIKq~% zSxZ9yTmn!dTrH!UhCuv<Kl(D##xtlrVVgLByR+TqI8&F#xUhyK4YV$cS;S3tql%S< z17*Hm<snj=b9Qx;iP?d-DRq?)`hh~SucgcB#=ty-?cB*yu~aPYu}8JcuQH-6yP+6e zR<ZpUDNQ|IJ&Fii;71tv<xjBFP#7#&5?w}o$cw3{-5s%jpk{;M|BRv?Azu}RJ9sl9 z5RUiW;ywu@T09*#SzDsRuvBBRLmNGy-CR#Xr^Wv0Ly)WhK@Xk4OA%dJHQ@!X$#*)E zT^mO++d~R3J<mTw#kdo?COFU9z!NUxbo3yJ8wV4xBpn?6c8duHlfF(fVz6A_zdBF0 z2e7b6r@XMLN>>03+Qs>KunI6QTma_~;8;S3NwYJ7(mf<CBHMQJJWhHHtw#{VAV5=r z*ft0<EJ=^`^pca3+Lf7ESb*Ilt3neVPZB-o*S5L*XAr4fJ=Npgs0w-gbL^aIdAU3a zzz!R&;X37g!Cv|quh>rFWs%B$;T;yGr1yn|Vs<nBW?pb}W@b0Up92s{NQfTiMfj{g zS#Z7Eeqlz>@(jmsIu{`VfFJG6fGrNVafJP|c7a=UN^0NA4&<_MQ6r|sCnjsN4=b+{ znBsh@58xi2*K|URKuLyM1<T|G2?@!U(BqR6NMG)^{*?vK<?D=4m_KSYBZhP$4`~8* ze2BD!nxuurt^7*b#<IZf(yraly;C?!*)Ci>%||V-I2|NjDuc2=S#D$C<n(2d2!{bC zw@Y-7hM~!fhmW6s+u|?$6z6>1js7`+ozCLqOZrJCg=|TskJx&P$l1xOF<<HDPh_c) z$YIMiU!RE)m-F(_Hotx?n;GIm!r0$-5BtAgCs}efo*sWOCPJMO@3=d+h_PD!wOYg2 zoQ4J!>iZ-2hWE#P4yuA(G3<lv48>(fp`OuKO*vTxE0+5Wa-%3N(p$nWibwT^pKyve zw=|qEBB&Pz2M2Qpa!yXmHvgBjka=@(r+6yf%;|#m*nwf5J@wRqGfl3WD(<K{P4z>( zj(B!wqJD{Ky(x*RXlePe_que|#XqJOHVtQ|%u4(OoGlMN%h8+nm^ZxIr`u={zh881 zccQSrP?whwnR$ceM3II@Xw<LeY|V_fCx@nb3{^u@t(oECgvX(MFS=rTFRU2(+0k$n z)z@>6(f`t;Mj{qW5`?0vi|q$S=BVe>4FS-Ci;IgPPX>MmoI}`dFFfZ#aV7YsY~z$t zQJtZdAFo&v@l*2l&7!;`hU!>1h7TAXLE6en<njL`-*E{EJKNeI<XSRHK7px?WV~)h z@Ky`WQJ?rwmxtG9pIcSovZH*_fbQM7sa|e?iJ%LCwN}>=X5sMa!+Y-!rY;L%t+&!$ z17jr}O6<|f67&QrLdCwDNlg0qifcOGI6WlJH;VLWNE7gum{%_B?*9@fn%mrGT_@j{ zyHrOpIvBt=X*n#mKv(zTH3Q*c3&KZ_?icIqZMvG%%U<|b04Z#za~+)P(l6NTzfPNA zWz`m+NrDpBR~O=$R;46-c^tQ4vE}_rB5Ejl&4Nkb7uBq~BPxjq%g?vkg23Zk^KI1J zw=mQ(O;IckqE5IQfv@fKBEy#$<G}9d>nmtK<%9@<2JKMcmJjEBx_T}Bc=B!QjP3hs z*gbMc=>l=DV($ba?~@@HCsi-gEx$yojenl?dF-~VYU_I#;{nPZfy%N^sK)h-1w2rw z@!}5%gnkeqciL4H!^gt1mz$o?{F7+iLne6;_m`~goE_!9X?<&5=bjxodO5BYEd5pC z<GZ>O2g4&2rS#(j>ZVM~ss!AQSmAne5gum{?QUL4kX98cq(TuX^|K91sLkfAhCJKX z#t7_5uE6k#_$j-ab5nphO%cioIv%_8PJWDcRI&vl4At2nBaCSDI5@vIKU9tSbsv_5 z?$8)Jjn}W{m*+VB@|wn1{2BG`w|>QPaL(lvd4-MEGJ0f9%=(NcbY*O9;v{ZwNoHoa zzlO?5&H1{lNv|XfH5bIbKEaNO*uU_r*Wd{eOxTU^0A$;%4Q1nmM_lQK&ofz^t(>zS zH1<jx*03LsHa0s14Pb5Fa9P1G2*|k#!Ud+}&k<S^^$)zaJ)}10>+`-iM@+jn+nT0Q zuzqI`oRs!4#AilHklkYLYu`Fuq=-u!<trcUv=fXO9APPyHrvI(xa1#2Ulr~f)m=vX zeuWO>t}q{&b4|~<&Z<+eU3AUfk%WZCsK||Q-y}p8CJWK~CTe<X=NfOt<h8ZYb9ZlA zGNbNy-wWuP5`A-|%@zw;fCsq?4Nt$XZ?PBWnA*Fs^AN3m-+n~U@r3geHML>+01jEY z;9>TUXX&o<#ls=qGWHC(2gYw|?T|!IK3kbBrhc4T<$Ad6s$f4br!0HShj+=4&#rtv z-kLiDUq>kai{7t>C5`$At5upmGGCml!{}Zjywlolux7HxdI=k``VgE^6sq&b4`Iip zhhPErn6-CyqSL6Y9HQWeK%f_B4Fq~|ad9<2K1!b|<ZU=<xh@l2^P@boc+~iNfMv=q z^WBT+1X#yS>eg`;3!WLQ+%3k31uvyC?!E6btQhbylxIdgfByVz*XGO#H6{p0fPkNU z{P+>V#wJEa#1iHf7SK!gR)@KPCj$G+&dCW32xx9<x>4aQIFmoCZsn`FZXH2-dyjpU zr$#8;S81ENRmw+o-;U<ew_k~G$4TBV{UDqohs*qBqtgr6US+s`?OFz;_kf)0&RGBB z_~S7ABT2bJ*}_HXeP5w(O;HF9IQo3jzJa=`hv<63Yp6<07#Zuj$^D~DFT$#B_`(#e zyqFIfV(SicR=V%8d!G%W<AHNVXcyi7#f!3+$S*&vcR%W1`%&&;@qr6zqFJy+&p$cr z<QAC98T9wIeeduh<DSbN)mg$<fB^e+cS5!|D5;QT3p;`0i09^_f{-D}2SN)JYRu@b z7F^p0jf|H!uhfEQHYG@YmQm$7TS-@g>BR~n(@5-3j&JNDoDc-6Om=(Q+YrQtkgdmR z@wW;H1#1)yZr@tkIh>f#=XJV0bI@X=$Xh--ug&2dh`sqILpSKcUvR%bC9GQK+rC7> zId^rrv7^Jon&Yh>;o;$6t|ceVuCGu2{MlI4{g;K^QpmJ%v&^m9xHPrQK^Mgdrvof! zzkb{3STlEyIETo6->+c;_8bJnz_O#Pl!H@nV`J?cR_5k+sKeN8sz75bE7N$Y>g6n% zti+=Gxb$Xd^R;62KFNis%Ef?Nq53PutzJaowr`IGocA>2^-_4K@O#ghr@v`a64I!p zzR67(p2J)z?VKAPQxcUSuky)D>OtA#bfILWM<zu{Q72xpf^G#?dsL<t-FYs_xCW;d z*~$_!rmGI7Y+cF4RY(1|&!-uBfm<POwGyMH?|QhLd%(^GiKb-8ngH9q$N)JEXl!6! zEmDApP*7aFIUi>bTRBh8B6Q}#{_03)=x1Y(C#k<UwgJ*9EVasMje2sd(`qq@rFy59 zWHh@WI?lqP+-xc`Xp25^vCmBVw!cZ7W0jJqi1KXG*I*1vf!pbob=GF=G}j2W?iS>E zN)k`&6mAFz<A&XeSkqxYJ7qhRtVodlrE)2uL}rK&w}&MzQ?hMcw)DI=B0C~$?c60M z)Uzvvp77Cu6E)=|%td$aGBs^tJJwo0D?ic>wtq`c&s8|!FXNYZwyMzxdAa!P^BbH@ zHrNOC*z}JI27sP|8OP7dYiw)`8GGAM1?Ha++s(|#c>3&_g}FH-t-@)A7Zy-FTV9Gq zf!SfYD6!(F=Wi!_AnH6Tc&`tARvfk(w3~iLnc9bFQ~jLZ4oNMLs~~v;`hZq}b{W7s zmK2wlIy|0-zk7RCqgpS~&?Lpgz)2no5)vpN0a=sG`&jP0ZeM?nejQ#9vs)r4Fevq3 zXjr6&(LtnFw%%HfUhkuRG5n#4z-WI|s3Zu@8FC=d18K)~uRY}C3Ch_CeA2&3eWx+H zw|~^j!+zB}s@uW;)uEzxnE=j)&Xu$T>8y2pQ&Ty|^Pr$UZ(_z$IOs>YhT(!28^MDs zQt?81<=MG~#&~xbdA!!ls$B3tSs5>)==`pHN0?o<2u3Otj{itvIlfO~Qr%#;;<(K3 znaf}5_4lbUb+bOtP2z=>hK5k<`wPsNM4?BCzzZ(~9+=H24OPcg3a=YG{d6vWaAAs} zFI!$eh;hO1e))5mTfzuEk6U(HM`|Hqk?a}2lYfjq$5%9Y@slb+0m>*HVMkP@uzAPI zb*ywD^qHcB8J%F^?<@+F%fEIA5owqsXZIRwb2>+*5QxQxu@%T+{_&mxOB;flCxI({ znW68Q&D~@UQF<d?7(UW%DOv&#$^!FA3WM;)qgLoLH```X7jY0GZKTeWE?Z&2t&!|b z*ahaSe$FK!@gI2!{~X4OY>{+G55iX-uFp%z*wn`O6nfI6N1Yne=1mvXl6a%9`%~#A zY*{I8-gosFJ{BGuRvp}>u20C988SP%5$|&6Fy5I_8qhA9Xwihdc2t>lT>wJ5STi?d z@~c6RXP35Dwji$_TT*RyZjaNZKLMLCnJDE=hy$M<h3L~@r2A{No!995e%W*)qfGQd z+}Sk6w&}x~YL5c-whID*>ALwNOIXwhaX0Zz1(}3w$4Bi0J!2on<oZ!|2~wgoJN#q) zb2QTe>M3Y?FFSv3X<@~4%=L@&JCfb$1@GkO)A+YQ)=1Os_`^#*U7}un@SGW6wpvas zlNJViFenjqu)Cu70kV~5?|<VqFv3~6`vhypjIp}HK0?Wzc{|mriiP9efzuXnXo_Ob zdwO(yHh=bh`MvuV#R~RxRUsxW&S{F5)C0&A2zq5S`V}Y(R+W0T;v^A-YQe~taY+^g zjSxk)yUjDo@+oAf^S1|Ugf<+5Q;Tq`L=H--MMz7KeJMk7685u)`R8D%n0+7d#Z_QJ zp&a^#J)buFCp_jUlW;Be{YE0_Ig=eH6!UZT_K<0M2Nl&+gD_QK#`*p8Oh*-PUgLOy zzcwDuBIy@J1P4QWkeD6a(f>V#NIq8d+21+lo(v)H_f;~R&~+x8y;S*Z%#C~d6Zrx} z^r}**K0*X_7HmB@oaW(ij7{%BOhYp^H1sYerhj7M6!MKE|JU}7+28(Qe$wb5QL3#{ zEvxyd;f|J6j6_MtxSmqIl{ahTK{Mj7G`fF|01CzR#o1izlYy`~!Cf^trmUu>M#-Vy z9(FesLX%KtAfQ^&H2x1qCXx6jySEJ$3w$cP?hje_NQb|a2v&E6v$g~ipd=$0*CZ#Y z5cF9_Gc`|}ai_C3LM_2+v9@Lxk55X{RaMQHD%4=Ibc|EFaQPHf7|?xKJ)UKe*e_wG z6q%}`LYd%U9hft}&Nq_B+w9=H1|L!|{ieN0krI!s)i0-#UHXL4`QDWs2zvFd?7I}4 zGYbpxQ^Ui<``O!DQLCe^?eCny`^TjEwWcj9Hu@^x6Y5R?eTZ(?<vvOTr{9ACshdcE zhOxD;aED`~V&7tz1!)sKL7y)?J>9E?L$C3PrP>7zi;RD@@))OrKrb7M_xD^RFQf)U z8Qc_jJ7QQKOzZb>t-%!!A1zi)o}EkrI04IkOIde&Z;$enZt$=E{k=xS$#YluP7LP> z6(8tYu6uG4hGtuTm9tj-jxwT;U%5_09ADcJpeNvx(ilkesV+0YfYVMPD0)eZ1yn!a z)g3*FhX@3f6Z(4rwxhs;lg{i3SQB?{k-!0#4Uc)#5N61tZJ1wDlrLhd?u#{($&ey# z-WbXf{ua_Ar{Z&s`exR*UvWc88DhM0%dN^6N*}WN)nE0zJ}&;rLuh5yBJcgf;5$DA z9W$amEgN}JlcK4*c9m41aBgWaTUUh%lrfIBf|78Ng(<ur4qPR%#=NJf$X@q)5qczp z;Q9M7{R?O3u6S-Z6lMcS)eNcs>h8>tJ|7qw+TZ%Y@ndWYoN8||%KKhps~xq2+oFl{ zJSI5Ed!yF%PLWFi8SaGURcED{z7O%wUf&S8y#K{1Oe+d6E2x4?w{~lq_~wJt_wv)l z)lO>(?UJ{()fVvPZ489xJjOOGOPr8b9Cxp7a71zo^e59+%BhP4pT`-D7K@v^j^Cxv zOQVEqpF4;6rDAVuZf#xIYV^4S4s!iReywIZNY^-Nh*cU<#D=eei3oe+U~_pioGWFS z90M_u3+XfP`2of3p9}$2mdE)&S@z%O%f$k|YD%Xi2Pq30h&5W3>~2uxkMo|Z!v<x> z8!Q`7zH5w(mDvz6I{<$GmY*wdeaKSXs4!R~-og7VgeiVpN|EpqX!aq*W80NW$`(!; zVsOGH4rktLS?JqX46a^W77LWb2+VV#cXpHW_D?Ivm+IERLX=K@TU!!8d{sP}gxc|- zMU-9yjg<;GHZ=VWO9^cWhjS8{kwE0Phf}o)6`7Ic#@GFcpY9K2Vs6r4nRk$&-;}}5 z8FR$?=1Xa3#HV=y%snxlatt3v*|BqoyX^c|#zpTYUaquaNA-ohzISs(-1l78f%Qyb zi+eV@@Z|D;kc_f+%oXB!4sCXXsAInG8%BCwa+$C>-k?`OB|h3nUuQ;%oiD(nF+?f7 zTUzx`SfeB)k=<}}zLb=Tm^$A==A281w<yM1gGBDCVUVZGkxdYOM|t{EeP58Gde19E zoZws;>&SX#q(2x-0-w5)36H#NfqFzTYX5ttD9?uC>UGo-GY(BK_q{{Sl&$rxR{ap7 zG_0M8*s|fsag08Tu$gi;2TD|2lM`O==%o}TYgF=Nbdb&-V(gpJ4B=JmI0vLFi&t<Q zV=gxR^mGc{7Wa#yJ>N*8YGXv*<5Fgn{&RzM=UnJ6hHN~BZXH26-yO>CU)i*#>v~jh zk%8y7E#G?d<pe9n_n9BZYjczsYs=h<2l~X$UrK({`S}qWTEe@(BK**Ipo#Xb-By(4 z!Ofbr1hco;51WRtN;Q$PjFV1?I!wsYWp$WbG|YeZV|{Q0Uy+2}pE=TFFY%|ly)K)1 zSW6*}V}F90%uqo0eXF&EHLO|tg6HBvIV=8-xQ*%O8mW}WHcKd7-rc~A8|GWr&UK|O zQAHehI9*`1-MC2jBy_Wh)+5U4E9*$kc;{|boPMnd1*!AKod{3gK1&B-gwMCDaDsW% z&xJVQ+Ul1yqzF4-jgXSSWA1!SfnaE)Vd<NdNXKtPGU>rJ&j-UcS(*$g8ioQb;DqGv zkBaee*Lim&9Q9n)BVigSt<KIY;dd<^KZT?HjR6bq?M0oAWaH=d#7GI0Fw@SHIzM?M z4K>~&_h;2Zj~7WdoUzkFGf`Z9dVO0vR}yS7<0AaVDR+g{o;r8NHaU3;Iv80i4mX}p zGscJ>9|LhT#qHNk2!o7D{ZGaD^HD#}uaVX{NwbOGPo*j|scVM~d@f-@3xxhTy!Hu# zdU#<Wba$c$5@>M#YKD*qDBDLrT>eRGn3Pn4*jif3!_B=7$2jiruk0b$&o&g)GIqc1 zBYj%ae27)K^JCAxb*aw<{%)^pUFTw_{{<ypi-o$vdn^e^XodImZOwUH9K>BwCbB)~ z8JZdzC%?36KkNN38Tl4d?tSLz_=qvu_lyby=R`0rVmwrA6+^-8IhMZv`c;UZKQ2{4 zNs0aDO%>ZgdAn`596R-Rz_qx5(GLpmfUe?kXHSGXJ@}Kl#kF?-1$${FsYxml6Y~xV z35@Pb0Y??WkZt_81bEl#2)oBLmgdFL@pW;!wdS`z91g4&L^j1+p3ltMN6IiHZ%f(! zq<Rt&MCzR1&syaLAq@C35>ux&Iec$t8M9JODtuPaAPqIDd|rk?$&zM;oKD*U1|Eds zX7}3FlfNYBv1%l8baK+*kZCLZfaY$N;d92p4ggyh48G6aBMA8|X3EHcjp)W9VnRu0 z7FSk63axeQ?{lb5jKD65CA@?kTtGij%AKvfrNc&XZT}aW=rH6(FI0+^M+1huu79gq z{U~aTOtnfMUx8H&{*RiJv_Ub1oq%L5dblxathGz;2$ED|^XogRmE3YYK1zZlavwz? zw3N%&+;V+zR;shj!{MFTGBiAY+KTaE_1dWRK9$UQWT;g+j?b3^IO}$^Rz-Z%g!|5& zjEszdB7-hP>;K}hWo46*^W11AD?8*m2!cE^VlQgDU0jd~EiLjq_+9Ec{k(lrC$L)D z+0;VOC0hL?EIcE61mk|k8oRCqyNGqvS2z>csPc(jgtNaV;UsV&27^7yarl1v<}Gpe zep`W?-^u1NY*T`?#}xk~tBlvf_!Q<nQgxxgc*AL3Gf#T>!t>v?ThGU+beVtK8@`R* zwnQw&y$wcg_~so?>i#_XS8^IyyNip<KgsC<oDWy5vjMnlijKQx$Td3{JEQ2=)tx<R z20Tgv5__W)rY*vJyJ?KK@%<NY&@~6pWVZYGfBC?VsituiK6i`<SW?Pmb<(-KCo9KO zxx6IbaZ@qx+$9FfPMM!#KGbO8SnW+F2Dg{2dG?{N$6cZ1p(nA8`HgvN6_OeFoijhp zB6jSs>9+U~h~|T*Glg_vL=KLN4(hY%m6EgRJ^d4_u6J}Q=3igv#tBP(gSu<R^NXLy ztu}>A*P@Q|Itnonw5r>X^t5$USY7ru`OeqiqHwZ_B>0LZAND>LROgp#`G>az8z;wk zuOyJ(ESlEA#GRqlb?2TvxqDsB;kh^}PTZH6)POcOQfEaV1AQt5I-6s_g1Y=&Ei(ko zFEVE-&UY(Al08HTX1)up%eW1D7=~L4v7IG)RChviThH&~<cjUwIDB=%Ah0Rf?z>N( zk4|Jods(Tz1^*Wy&~N<OKy~d1(Z9SrGn-d=bd#fTHi|fblVi~<8VobC!nFDUXE^Z< z2dajhjDfARD2DKmQv0aAR~YkrQ)Iko=8M&AM;nr5V@U*G)MP9>W*nK!Z(;q8@y?VN z*VxR<?$w#Zp-O!HjGpm;OOq$N?(k-RBzyw2N9grphQ30)g->MKx92*w&6>11;S@7c zZ$i)F-JXI&&A`_^p8*$(q-@(-{hJtA@6K<-Wn-k8XHVWF`|*U(ac0qe88<PzTpCh@ z?f<qMzU;slL~DcO{h(q3<%-HksD%FeaJE0GFCO?HTEQ$Z(6u&C#6~97m-PASZ>C5H zFg*9~M(_lnn#Mh;*Re1Vxb}{ctSUv$&J~mLw^`!5R|hesea`U&l{Br?+Dti~pW1hu zVOMhr)#yybf_XzH1QTRyTZ3-+?a3REnA$kx(KXl7P5Eb$psU@a{20^7;L*y(Osy(T z2)j|QPpn-od_iU(jhcM}5jY#4a=a-Xi({2R{a5;2b$lIS?-YbLERd9nAKzU~9`?ht zmB-kp?qWih-~aa28m3NeU^ASt6ep<eS;Fc25K9?97*}{M5hyAp3guS{SC<WN_+zEr z1iRxeU-LhGJ5_)3h~j|WkDi_n=SCKHdY&OjE0Jr-{2ISR{POP-w9{x*DW6{x>H9Bz z_1{lanL6Fh+8zJ@Iyv`vsM9@;k5!@~R7fbb6}2d5RJ2jkWs=;I)M%)7t6$BE+{SU4 zYIh{rE{86fR=L$tniK|^7)cw&nki<4F49HDoiWJN`3%mUJ?H$h=lH{T4Q9T--}5}* z=b7*K{rL!gZ(NieAV#Y$PVF5x#fGa1l3{a-o_tJ?WNmAEH$A=Vx<%v}nZwqI-gkXF z9zBaAk#biBH%D5%?=bjg5{ca7_6E|>KkN<{vlO$Xhfg?^2i_KnB0Iz6ncfZp|Ks^i zDHGY(qVfb^tfz7;@TuOO+^|m^ewi^o;B3by3ir<H0sD$=#Ot}=o-Od^ZY}!k%iJ>B zyR`PbR3oQ!$GV6rF-vwN4NS1LqAE`vV#1WkJo;qMdQ}IKSt;DQs#W<K>goi8(HtZP zMh@$m;LsD#4pG6fRdVLuxmQ>9239{LZ3?2Z`(@hO_RXZa4=H-gk+SHw5Ck902KY^o zA4j%p2wZwp%s;Q%J>4%PQTb2dNnM|=q!;VoqfaEQK#b@!^Ru(#T^koITJ)jv;@n=I zW7O(0*Hk}~Dm3d!$p+uICvV3{2I064{O|mQ3y($=Ea_LTLcs!Ue5vY~IoA<vlaz8` zYCtYMe0^t`nD}hjk_-El>Nb7666uJ_WhWe`@l~?NBs_4T@+T#Zsx$yX?d43th+UZ* z>CZgT-P?;pi=@pmT*}RdD59~E#bnBXIIUm}hZXtE($N9BsKpYEos;CuCUr{C42p;9 zzrL$>aqO=sO>STqg2Hm0CD;}NyWosV4Zbj-0x(3SKEifrNiWO|XetHTB$vtBL9LXs zH9(yf(N+<bYls7X_)dEHV{ev!`59Alb90nHQwL+TjA>9*C9nRepaN|P)JGxZhb0!c zyM&4wkSgfaHZ;uC)!pprX#?vHkTP`#1=-n~2lVhM-#Wan1p-jmisa?y_Q_<|hty(( z+J=-hgt}&mDY-pHZT5uU1jQ<<YGC?Z5*M%T(^TSe)YB&KtVDo)l*S1~MGAP8Ve^J} zOE8UQm~XataR4}L2$OKWQ*_+Ad)L;^j<%dy#8hD)6AryFrg)6QJ19D|Qp|sB5|ZAQ z49XSj42+E}hSd(gE;$ONsQsf0Eg;}#7#UUiHx<cWCgfzn=Kx{C@ko+K!X25T?mRBV ze0)mmY_bmf+BAH+I-~mGm0W)p3|!J369)XdU<d}7Gb;Xqnc%qgQ<2DYAC-LuV`W!= z>WwxhO~2oi%)VyEe%}%ug^M*mF%k)VPw|EL_&}&gdwK#X<pA}etp)qZUIc}2Z?wM8 z@z~fU29u#2LZGErA<$8Dq-JGx!s4Q>r6mlGN#`u?k#U)A6ygN#VwEL|E(oqACck(I zG2yWG#*G_ccvd5k=o=gRExokP2}JJYOP9R8ydG&T6@*CjbRwfJ2>9q>+`he-Ki<tq zd8hDNs|cibb!VN)qeF6-&fc0C0;&r>DmZivCr)R51nXv@H|fg_v{A|<_07!9@6fnP zw-FCi0$+S(riB6ZR(ICK#XhGH2X-zelWYS%D_Z7MR#(gAa!BHH>2}}!IyvY04?G&c ziORiDcxH=;o47n_r?n68zVjB|91bTuB0}2Qst0#G2xh3`-SiM*o;Jr2^Cl-+SW^-} zkOE&1e-f<=Qw+(3Lbs;d2oAy*V5#pqJ7=Mse*U}|jUB*E=+H=B?P(N={&w-=3>+s{ zE`0+D_3(K=jLosJiC8rOWBVYh`u<1tkwsj8l>d0-hd;N9NB;B=3!lFYM7%$%_fkc| z0;y~WT2IJ)e_zD-u=CL(n8|eb)RqGnT_TkM^?*X`zl)EavG-NvYo>-HL$IX|kh`!P zmLf0AbF!*%Cv;64;xi02#T<_m+Z(?1jFW|os_V37_d{GqNwhj$g6Bmc+=?k<&+l(V zmAbmY^~h7Bjzf=N5`%@K#7~txCZx%*8$eqT^7_Q8_pB-PAZOy@;=rpbNfeZZkTDOw zDo*m=;^6@g#l$K01Id}0Qh>Tp8?Ov{|8uLUqC_DKL*WoJrBnv9iNoD*)_Fd*_$f_j zRFyx^-KPGg&0vaSja55u{R`fF2eOHUgtL}@+>JRJqBD!Ap)-2cH1BUmoRebtb>QnT z3kEB&D6w%Mad06@f}=_G{b%vfe?gW9WBR}qIpt@Qm7Grz;9*PUS~<_raiU$F8&Iwg zE(b=l(Zz)Y5|$l@)(z&{7W4ecrzk<>D|5dQtgR(-#BXEfy9;t9h9MHpuyFY_Izu-^ zL>*Md*Ln-_x{pMccAueHV)=E4qJX6+>`LIdhK4?296X5i^Zqjg=vkSW&HD7h;Qf$~ zOgvY!-!di-=w^Jpt|%4!a!7D+hTA5ux?_8p#kYrbJ=3~rIV*hkdOr1G%)$GGe#i;t zYDiO0a~aNa$gvl5C7d$O4>g?rEE|&6P=P!ROVq-G`>GbiY1?mtaM=Oq&{3RS_Iz}c zw;C;;o`6^5t>{qL$>6N;Ww`pwG_DvLb5GB6iHR8!>0C%eyJ8&7wr^cvJJFf!Yrt7s z>*mhTO>s;v60?bW;`B9Xa@y3|@w-}R30lrywe#lRnXk%Q|B$EFwbDQ8yJQN)3RtOK z`wHwU)~oAus82dfHd?&%2$6(+;O_Pfk^;SYh=vz9b6{aJuR#XlxCrDVB&=}{dtOF# zM#scpxIDUdKiRd696M+fdqWh)b*$9C!&S~)DrUrzD{DG=d%gAN^!YFp$L8<wAjkC6 z61FAu)6(A1R9~a4g`90>V^iDzUF~)M6%fq6yWyER(7g|hlYAth&2bNP4GdaX?n&<g ziPQE&1OVV)WUg22jrH{2yO`3O&B)Z=zmD90=`ym9K;}f}YG8rLW*QbrXjh!+$AuAG znM~jCbRmQ58cO6bFhcbLF^PSqpaFUQPPnWUIBOlfwXJ%Zv9a;+ReQgB@-E*JrMh?F z!pH9d3rnhmZJ&vRq$EH7wTHXA<#Mm&vTWRMyYDY!vgL`tKlZCMpLIRcron4J6uUDF zPf9q1G1Xj4`IyAYS$5)<jmXY=s>ed*<0;Cs9-i9HNl}dt3;BGks4qZe?cr#0%dZK& zS+wz+7GUFm==FhOCBWOqk2kX1M=d-X&29!YPH_(I4+vsGAg4<y{yfBJ;y{(8F=Yx< zP-%^zSmn4ERkR?%QVqq}lEjpcE!0lwpe4-Wj2lTPSe2Y2F{#Z%I#Y!QD<$}vX~s@( zGa)x^>d4DRSsO_NYaUVt=<%23w}4=WJ)v!A+cqyRiPG~6o@m9sNfQcYamrF5gZHny zeUyLkpr>aoG+qN4D@)vor>2vhSp73SRHhe+Gx*{i88!{;kT7BkThfM=(Uff(&2Q1P z9QxZAV+rDjN+>HD_<L%f#H8sJh6G>$vd^ePr+wht;{l(br0j>8z_H0Qbf-^;JnrM& zlC$d0YYQ@Xybz!Sh!x!NhOn@LzGdSc+D@zzMK<)v9k-rTW8lhlWlj-XWB}U`%0!(i zU&hmr)kHBe#%TV+&HB5`25Q_rZw4uJP*%Y|H+^Iq2-6w*Uk-r(xpn+Mhsb|_jn`jP Y3rs4{3CzDPSN_6roy*!=l$}5R15S|#rT_o{ literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/index.html b/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/index.html new file mode 100644 index 00000000..90442f2b --- /dev/null +++ b/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,digest.cache,c4ffd4b</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Tue Mar 31 19:49:12 EDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/low_freq.png b/test/afl/results/2.6.6/c4ffd4b/server-digest-cache-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..100773cf1b7c60af6e564c59eccff490f78b573c GIT binary patch literal 8961 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 literal 0 HcmV?d00001 From c25f34e7a2808c276364532f6e0f8fd98e6c1b61 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 6 Apr 2015 01:24:55 -0700 Subject: [PATCH 039/219] [server] update firewalld for FORWARD_ALL NAT operations --- server/fw_util_firewalld.c | 502 +++++++++++++++++++++++-------------- server/fwknopd_common.h | 3 - 2 files changed, 310 insertions(+), 195 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index f71f48cc..d690c438 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -481,7 +481,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) fprintf(stdout, "Listing all firewalld rules in applicable tables...\n"); fflush(stdout); - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') @@ -515,7 +515,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) fprintf(stdout, "Listing rules in fwknopd firewalld chains...\n"); fflush(stdout); - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') @@ -559,7 +559,7 @@ delete_all_chains(const fko_srv_options_t * const opts) { int i, res, cmd_ctr = 0; - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') continue; @@ -687,7 +687,7 @@ create_fw_chains(const fko_srv_options_t * const opts) { int i, got_err = 0; - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') continue; @@ -810,7 +810,6 @@ set_fw_chain_conf(const int type, const char * const conf_str) int fw_config_init(fko_srv_options_t * const opts) { - memset(&fwc, 0x0, sizeof(struct fw_config)); /* Set our firewall exe command path (firewall-cmd or iptables in most cases). @@ -835,7 +834,7 @@ fw_config_init(fko_srv_options_t * const opts) if(set_fw_chain_conf(FIREWD_INPUT_ACCESS, opts->config[CONF_FIREWD_INPUT_ACCESS]) != 1) return 0; - /* The FWKNOP_OUTPUT_ACCESS requires ENABLE_FIREWD_OUTPUT_ACCESS be Y + /* The FWKNOP_OUTPUT_ACCESS requires ENABLE_FIREWD_OUTPUT_ACCESS == Y */ if(strncasecmp(opts->config[CONF_ENABLE_FIREWD_OUTPUT], "Y", 1)==0) if(set_fw_chain_conf(FIREWD_OUTPUT_ACCESS, opts->config[CONF_FIREWD_OUTPUT_ACCESS]) != 1) @@ -851,32 +850,20 @@ fw_config_init(fko_srv_options_t * const opts) if(set_fw_chain_conf(FIREWD_DNAT_ACCESS, opts->config[CONF_FIREWD_DNAT_ACCESS]) != 1) return 0; - /* SNAT (whichever mode) requires ENABLE_FIREWD_SNAT = Y + /* Requires ENABLE_FIREWD_SNAT = Y */ if(strncasecmp(opts->config[CONF_ENABLE_FIREWD_SNAT], "Y", 1)==0) { - if(opts->config[CONF_SNAT_TRANSLATE_IP] == NULL - || ! is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) - { - fwc.use_masquerade = 1; - if(set_fw_chain_conf(FIREWD_MASQUERADE_ACCESS, opts->config[CONF_FIREWD_MASQUERADE_ACCESS]) != 1) - return 0; - } - else - { - if(is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) - { - if(set_fw_chain_conf(FIREWD_SNAT_ACCESS, opts->config[CONF_FIREWD_SNAT_ACCESS]) != 1) - return 0; - } - else - { - return 0; - } - } + if(set_fw_chain_conf(FIREWD_MASQUERADE_ACCESS, + opts->config[CONF_FIREWD_MASQUERADE_ACCESS]) != 1) + return 0; + + if(set_fw_chain_conf(FIREWD_SNAT_ACCESS, + opts->config[CONF_FIREWD_SNAT_ACCESS]) != 1) + return 0; } } - + if(strncasecmp(opts->config[CONF_ENABLE_DESTINATION_RULE], "Y", 1)==0) { fwc.use_destination = 1; @@ -1031,6 +1018,228 @@ firewd_rule(const fko_srv_options_t * const opts, return; } +static void forward_access_rule(const fko_srv_options_t * const opts, + const acc_stanza_t * const acc, + struct fw_chain * const fwd_chain, + const char * const nat_ip, + const unsigned int nat_port, + const unsigned int fst_proto, + const unsigned int fst_port, + spa_data_t * const spadat, + const unsigned int exp_ts, + const time_t now) +{ + char rule_buf[CMD_BUFSIZE] = {0}; + + log_msg(LOG_DEBUG, + "forward_access_rule() forward_all: %d, nat_ip: %s, nat_port: %d", + acc->forward_all, nat_ip, nat_port); + + if(acc->forward_all) + { + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_FWD_ALL_RULE_ARGS, + fwd_chain->table, + spadat->use_src_ip, + exp_ts, + fwd_chain->target + ); + + /* Make a global ACCEPT rule for all ports/protocols + */ + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, + "FORWARD ALL", "*/*"); + } + else + { + /* Make the FORWARD access rule + */ + firewd_rule(opts, NULL, FIREWD_FWD_RULE_ARGS, spadat->use_src_ip, + nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, + "FORWARD", spadat->spa_message_remain); + + } + return; +} + +static void dnat_rule(const fko_srv_options_t * const opts, + const acc_stanza_t * const acc, + struct fw_chain * const dnat_chain, + const char * const nat_ip, + const unsigned int nat_port, + const unsigned int fst_proto, + const unsigned int fst_port, + spa_data_t * const spadat, + const unsigned int exp_ts, + const time_t now) +{ + char rule_buf[CMD_BUFSIZE] = {0}; + + log_msg(LOG_DEBUG, "dnat_rule() forward_all: %d, nat_ip: %s, nat_port: %d", + acc->forward_all, nat_ip, nat_port); + + if(acc->forward_all) + { + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_ALL_RULE_ARGS, + dnat_chain->table, + spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), + exp_ts, + dnat_chain->target, + nat_ip + ); + + /* Make a global DNAT rule for all ports/protocols + */ + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, ANY_PROTO, ANY_PORT, dnat_chain, exp_ts, now, + "DNAT ALL", "*/*"); + } + else + { + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_RULE_ARGS, + dnat_chain->table, + fst_proto, + spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), + fst_port, + exp_ts, + dnat_chain->target, + nat_ip, + nat_port + ); + + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), + fst_proto, fst_port, dnat_chain, exp_ts, now, "DNAT", + spadat->spa_message_remain); + } + return; +} + +static void snat_rule(const fko_srv_options_t * const opts, + const acc_stanza_t * const acc, + const char * const nat_ip, + const unsigned int nat_port, + const unsigned int fst_proto, + const unsigned int fst_port, + spa_data_t * const spadat, + const unsigned int exp_ts, + const time_t now) +{ + char rule_buf[CMD_BUFSIZE] = {0}; + char snat_target[SNAT_TARGET_BUFSIZE] = {0}; + struct fw_chain *snat_chain = NULL; + + log_msg(LOG_DEBUG, "snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d", + acc->forward_all, nat_ip, nat_port); + + if(acc->forward_all) + { + /* Add SNAT or MASQUERADE rules. + */ + if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[FIREWD_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s", acc->force_snat_ip); + } + else if(acc->force_snat && acc->force_masquerade) + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); + } + else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) + && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[FIREWD_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s", opts->config[CONF_SNAT_TRANSLATE_IP]); + } + else + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); + } + + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_ALL_RULE_ARGS, + snat_chain->table, + spadat->use_src_ip, + exp_ts, + snat_chain->target, + snat_target + ); + + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, ANY_PROTO, ANY_PORT, snat_chain, exp_ts, now, + "SNAT ALL", "*/*"); + } + else + { + /* Add SNAT or MASQUERADE rules. + */ + if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[FIREWD_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s:%i", acc->force_snat_ip, fst_port); + } + else if(acc->force_snat && acc->force_masquerade) + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-ports %i", fst_port); + } + else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) + && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[FIREWD_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s:%i", opts->config[CONF_SNAT_TRANSLATE_IP], + fst_port); + } + else + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-ports %i", fst_port); + } + + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_RULE_ARGS, + snat_chain->table, + fst_proto, + nat_ip, + nat_port, + exp_ts, + snat_chain->target, + snat_target + ); + + firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, fst_proto, nat_port, snat_chain, exp_ts, now, "SNAT", + spadat->spa_message_remain); + } + return; +} + /****************************************************************************/ /* Rule Processing - Create an access request... @@ -1039,16 +1248,8 @@ int process_spa_request(const fko_srv_options_t * const opts, const acc_stanza_t * const acc, spa_data_t * const spadat) { - char nat_ip[MAX_IPV4_STR_LEN] = {0}; - char snat_target[SNAT_TARGET_BUFSIZE] = {0}; - char rule_buf[CMD_BUFSIZE] = {0}; - char *ndx; - - unsigned int nat_port = 0; - - acc_port_list_t *port_list = NULL; - acc_port_list_t *ple = NULL; - + char nat_ip[MAX_IPV4_STR_LEN] = {0}; + unsigned int nat_port = 0; unsigned int fst_proto; unsigned int fst_port; @@ -1056,8 +1257,11 @@ process_spa_request(const fko_srv_options_t * const opts, struct fw_chain * const out_chain = &(opts->fw_config->chain[FIREWD_OUTPUT_ACCESS]); struct fw_chain * const fwd_chain = &(opts->fw_config->chain[FIREWD_FORWARD_ACCESS]); struct fw_chain * const dnat_chain = &(opts->fw_config->chain[FIREWD_DNAT_ACCESS]); - struct fw_chain *snat_chain; /* We assign this later (if we need to). */ + acc_port_list_t *port_list = NULL; + acc_port_list_t *ple = NULL; + + char *ndx = NULL; int res = 0, is_err; time_t now; unsigned int exp_ts; @@ -1089,78 +1293,58 @@ process_spa_request(const fko_srv_options_t * const opts, time(&now); exp_ts = now + spadat->fw_access_timeout; - /* For straight access requests, we currently support multiple proto/port - * request. + /* If the access stanza mandates a NAT operation, deal with + * that first regardless of what the SPA packet requested. */ - if((spadat->message_type == FKO_ACCESS_MSG - || spadat->message_type == FKO_CLIENT_TIMEOUT_ACCESS_MSG) && !acc->force_nat) + if(acc->force_nat) { + strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); + nat_port = acc->force_nat_port; - /* Check to make sure that the jump rules exist for each - * required chain + /* FORWARD access rule */ - mk_chain(opts, FIREWD_INPUT_ACCESS); + if(strlen(fwd_chain->to_chain)) + forward_access_rule(opts, acc, fwd_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); - if(strlen(out_chain->to_chain)) - mk_chain(opts, FIREWD_OUTPUT_ACCESS); - - /* Create an access command for each proto/port for the source ip. + /* DNAT rule */ - while(ple != NULL) - { - firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - ple->proto, ple->port, in_chain, exp_ts, now, "access", - spadat->spa_message_remain); + if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + dnat_rule(opts, acc, dnat_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); - /* If we have to make an corresponding OUTPUT rule if out_chain target - * is not NULL. - */ - if(strlen(out_chain->to_chain)) - { - firewd_rule(opts, NULL, FIREWD_OUT_RULE_ARGS, spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", - spadat->spa_message_remain); - } - ple = ple->next; - } - } - /* NAT requests... */ + /* SNAT rule if required - we only allow this for FORCE_NAT + * access stanzas for now until a new SPA packet type is added. + */ + if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_FIREWD_SNAT], "Y", 1) == 0) + snat_rule(opts, acc, nat_ip, nat_port, + fst_proto, fst_port, spadat, exp_ts, now); + + } /* deal with SPA packets that themselves request a NAT operation */ else if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_NAT_ACCESS_MSG - || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG - || acc->force_nat) + || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) { - /* Parse out the NAT IP and Port components. - */ - if(acc->force_nat) + ndx = strchr(spadat->nat_access, ','); + if(ndx != NULL) { - strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); - nat_port = acc->force_nat_port; - } - else - { - ndx = strchr(spadat->nat_access, ','); - if(ndx != NULL) + strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); + if (! is_valid_ipv4_addr(nat_ip)) { - strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); - if (! is_valid_ipv4_addr(nat_ip)) - { - log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); - free_acc_port_list(port_list); - return res; - } + log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); + free_acc_port_list(port_list); + return res; + } - nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_INFO, "Invalid NAT port in SPA message"); - free_acc_port_list(port_list); - res = is_err; - return res; - } + nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, + NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_INFO, "Invalid NAT port in SPA message"); + free_acc_port_list(port_list); + res = is_err; + return res; } } @@ -1173,107 +1357,41 @@ process_spa_request(const fko_srv_options_t * const opts, } else if(strlen(fwd_chain->to_chain)) { - if(acc->forward_all) - { - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_FWD_ALL_RULE_ARGS, - fwd_chain->table, - spadat->use_src_ip, - exp_ts, - fwd_chain->target - ); - - /* Make a global ACCEPT rule for all ports/protocols - */ - firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, - "FORWARD ALL", "*/*"); - } - else - { - /* Make our FORWARD and NAT rules - */ - firewd_rule(opts, NULL, FIREWD_FWD_RULE_ARGS, spadat->use_src_ip, - nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, - "FORWARD", spadat->spa_message_remain); - } - } - - if(strlen(dnat_chain->to_chain)) - { - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_RULE_ARGS, - dnat_chain->table, - fst_proto, - spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - fst_port, - exp_ts, - dnat_chain->target, - nat_ip, - nat_port - ); - - firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - fst_proto, fst_port, dnat_chain, exp_ts, now, "DNAT", - spadat->spa_message_remain); - } - - /* If SNAT (or MASQUERADE) is wanted, then we add those rules here as well. - */ - if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_FIREWD_SNAT], "Y", 1) == 0) - { - /* Add SNAT or MASQUERADE rules. + /* FORWARD access rule */ - if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) - { - /* Using static SNAT */ - snat_chain = &(opts->fw_config->chain[FIREWD_SNAT_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-source %s:%i", acc->force_snat_ip, fst_port); - } - else if(acc->force_snat && acc->force_masquerade) - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-ports %i", fst_port); - } - else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) - && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) - { - /* Using static SNAT */ - snat_chain = &(opts->fw_config->chain[FIREWD_SNAT_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-source %s:%i", opts->config[CONF_SNAT_TRANSLATE_IP], - fst_port); - } - else - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-ports %i", fst_port); - } + forward_access_rule(opts, acc, fwd_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); + } - memset(rule_buf, 0, CMD_BUFSIZE); + /* DNAT rule + */ + if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + dnat_rule(opts, acc, dnat_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); - snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_RULE_ARGS, - snat_chain->table, - fst_proto, - nat_ip, - nat_port, - exp_ts, - snat_chain->target, - snat_target - ); + } + else /* Non-NAT request - this is the typical case. */ + { + /* Create an access command for each proto/port for the source ip. + */ + while(ple != NULL) + { + firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), + ple->proto, ple->port, in_chain, exp_ts, now, "access", + spadat->spa_message_remain); - firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, fst_proto, nat_port, snat_chain, exp_ts, now, "SNAT", + /* We need to make a corresponding OUTPUT rule if out_chain target + * is not NULL. + */ + if(strlen(out_chain->to_chain)) + { + firewd_rule(opts, NULL, FIREWD_OUT_RULE_ARGS, spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), + ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", spadat->spa_message_remain); + } + ple = ple->next; } } diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index 05a50dea..7b191041 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -449,9 +449,6 @@ typedef struct acc_stanza struct fw_chain chain[NUM_FWKNOP_ACCESS_TYPES]; char fw_command[MAX_PATH_LEN]; - /* Flag for firewalld SNAT vs. MASQUERADE usage - */ - unsigned char use_masquerade; /* Flag for setting destination field in rule */ unsigned char use_destination; From ef6c0549a58aff051ff796b215223b8590aa0078 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 6 Apr 2015 01:33:18 -0700 Subject: [PATCH 040/219] [test suite] added --prefer-iptables to exclude firewalld --- test/test-fwknop.pl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index cde5460e..e92c0e08 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -90,6 +90,7 @@ our $invalid_key_file3 = 'invalid2.key'; our $FW_TYPE = 'iptables'; ### default to iptables our $FW_PREFIX = 'IPT'; our $fw_conf_prefix = 'ipt'; +my $prefer_iptables = 0; our $spoof_user = 'testuser'; @@ -325,6 +326,7 @@ exit 1 unless GetOptions( 'fuzzing-pkts-append' => \$fuzzing_pkts_append, 'fuzzing-test-tag=s' => \$fuzzing_test_tag, 'fuzzing-class=s' => \$fuzzing_class, + 'prefer-iptables' => \$prefer_iptables, 'enable-recompile-check' => \$enable_recompilation_warnings_check, 'enable-configure-args-checks' => \$enable_configure_args_checks, 'enable-profile-coverage-check' => \$enable_profile_coverage_check, @@ -6854,10 +6856,12 @@ sub os_fw_detect() { close UNAME; if ($platform eq $LINUX) { - if (&find_command('firewalld')) { - $FW_TYPE = 'firewalld'; - $FW_PREFIX = 'FIREWD'; - $fw_conf_prefix = 'firewd'; + unless ($prefer_iptables) { + if (&find_command('firewalld')) { + $FW_TYPE = 'firewalld'; + $FW_PREFIX = 'FIREWD'; + $fw_conf_prefix = 'firewd'; + } } } else { push @tests_to_exclude, qr/NAT\b/; From 80106900394505e6932e7f55a49ddae9b22a3d5c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 6 Apr 2015 11:47:07 -0700 Subject: [PATCH 041/219] [server] add missing #define's for firewalld --- server/fw_util_firewalld.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/fw_util_firewalld.h b/server/fw_util_firewalld.h index 17564a44..861ee323 100644 --- a/server/fw_util_firewalld.h +++ b/server/fw_util_firewalld.h @@ -47,7 +47,9 @@ #define FIREWD_FWD_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define FIREWD_FWD_ALL_RULE_ARGS "-t %s -s %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define FIREWD_DNAT_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s --to-destination %s:%i" SH_REDIR +#define FIREWD_DNAT_ALL_RULE_ARGS "-t %s -s %s -d %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s --to-destination %s" SH_REDIR #define FIREWD_SNAT_RULE_ARGS "-t %s -p %i -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s %s" SH_REDIR +#define FIREWD_SNAT_ALL_RULE_ARGS "-t %s -s %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s %s" SH_REDIR #define FIREWD_TMP_COMMENT_ARGS "-t %s -I %s %i -s " DUMMY_IP " -m comment --comment " TMP_COMMENT " -j %s" SH_REDIR #define FIREWD_TMP_CHK_RULE_ARGS "-t %s -I %s %i -s " DUMMY_IP " -p udp -j %s" SH_REDIR #define FIREWD_TMP_VERIFY_CHK_ARGS "-t %s -C %s -s " DUMMY_IP " -p udp -j %s" SH_REDIR From 8e6db3a5da1d2624a10929742aa1b58f374b7949 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 6 Apr 2015 20:04:33 -0400 Subject: [PATCH 042/219] [server] extend FORWARD_ALL to apply to NAT operations This is a significant commit to allow all ports and protocols to be NAT'd in conjunction with FORWARD ACCEPT rules. This commit is in support of 6b7a3bbdae295c29a15a59385e637bd391858bc2 to allow fwknopd to function as an SPA gateway. --- server/access.c | 6 +- server/fw_util_iptables.c | 500 +++++++++++------- server/fw_util_iptables.h | 2 + server/fwknopd.conf | 8 +- server/fwknopd_common.h | 5 +- test/conf/hmac_force_masq_no_dnat_access.conf | 7 + test/conf/hmac_forward_all_access.conf | 8 + test/test-fwknop.pl | 2 + test/tests/rijndael_hmac.pl | 46 +- 9 files changed, 379 insertions(+), 205 deletions(-) create mode 100644 test/conf/hmac_force_masq_no_dnat_access.conf create mode 100644 test/conf/hmac_forward_all_access.conf diff --git a/server/access.c b/server/access.c index 106e9be6..3ad6cc5d 100644 --- a/server/access.c +++ b/server/access.c @@ -754,7 +754,7 @@ free_acc_stanza_data(acc_stanza_t *acc) free(acc->source); free_acc_int_list(acc->source_list); } - + if(acc->destination != NULL) { free(acc->destination); @@ -1140,10 +1140,10 @@ acc_data_is_valid(struct passwd *user_pw, acc_stanza_t * const acc) } if((acc->force_snat == 1 || acc->force_masquerade == 1) - && acc->force_nat == 0 && acc->disable_dnat == 0) + && acc->force_nat == 0) { log_msg(LOG_ERR, - "[*] FORCE_SNAT/FORCE_MASQUERADE implies FORCE_NAT or DISABLE_DNAT must also be used for stanza source: '%s'", + "[*] FORCE_SNAT/FORCE_MASQUERADE implies FORCE_NAT must also be used for stanza source: '%s'", acc->source ); return(0); diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 8ed4acdb..fd235e06 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -484,7 +484,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) fprintf(stdout, "Listing all iptables rules in applicable tables...\n"); fflush(stdout); - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') @@ -518,7 +518,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) fprintf(stdout, "Listing rules in fwknopd iptables chains...\n"); fflush(stdout); - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') @@ -562,7 +562,7 @@ delete_all_chains(const fko_srv_options_t * const opts) { int i, res, cmd_ctr = 0; - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') continue; @@ -689,7 +689,7 @@ create_fw_chains(const fko_srv_options_t * const opts) { int i, got_err = 0; - for(i=0; i<(NUM_FWKNOP_ACCESS_TYPES); i++) + for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { if(fwc.chain[i].target[0] == '\0') continue; @@ -812,7 +812,6 @@ set_fw_chain_conf(const int type, const char * const conf_str) int fw_config_init(fko_srv_options_t * const opts) { - memset(&fwc, 0x0, sizeof(struct fw_config)); /* Set our firewall exe command path (iptables in most cases). @@ -830,7 +829,7 @@ fw_config_init(fko_srv_options_t * const opts) if(set_fw_chain_conf(IPT_INPUT_ACCESS, opts->config[CONF_IPT_INPUT_ACCESS]) != 1) return 0; - /* The FWKNOP_OUTPUT_ACCESS requires ENABLE_IPT_OUTPUT_ACCESS be Y + /* The FWKNOP_OUTPUT_ACCESS requires ENABLE_IPT_OUTPUT_ACCESS == Y */ if(strncasecmp(opts->config[CONF_ENABLE_IPT_OUTPUT], "Y", 1)==0) if(set_fw_chain_conf(IPT_OUTPUT_ACCESS, opts->config[CONF_IPT_OUTPUT_ACCESS]) != 1) @@ -846,32 +845,20 @@ fw_config_init(fko_srv_options_t * const opts) if(set_fw_chain_conf(IPT_DNAT_ACCESS, opts->config[CONF_IPT_DNAT_ACCESS]) != 1) return 0; - /* SNAT (whichever mode) requires ENABLE_IPT_SNAT = Y + /* Requires ENABLE_IPT_SNAT = Y */ if(strncasecmp(opts->config[CONF_ENABLE_IPT_SNAT], "Y", 1)==0) { - if(opts->config[CONF_SNAT_TRANSLATE_IP] == NULL - || ! is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) - { - fwc.use_masquerade = 1; - if(set_fw_chain_conf(IPT_MASQUERADE_ACCESS, opts->config[CONF_IPT_MASQUERADE_ACCESS]) != 1) - return 0; - } - else - { - if(is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) - { - if(set_fw_chain_conf(IPT_SNAT_ACCESS, opts->config[CONF_IPT_SNAT_ACCESS]) != 1) - return 0; - } - else - { - return 0; - } - } + if(set_fw_chain_conf(IPT_MASQUERADE_ACCESS, + opts->config[CONF_IPT_MASQUERADE_ACCESS]) != 1) + return 0; + + if(set_fw_chain_conf(IPT_SNAT_ACCESS, + opts->config[CONF_IPT_SNAT_ACCESS]) != 1) + return 0; } } - + if(strncasecmp(opts->config[CONF_ENABLE_DESTINATION_RULE], "Y", 1)==0) { fwc.use_destination = 1; @@ -1028,6 +1015,228 @@ ipt_rule(const fko_srv_options_t * const opts, return; } +static void forward_access_rule(const fko_srv_options_t * const opts, + const acc_stanza_t * const acc, + struct fw_chain * const fwd_chain, + const char * const nat_ip, + const unsigned int nat_port, + const unsigned int fst_proto, + const unsigned int fst_port, + spa_data_t * const spadat, + const unsigned int exp_ts, + const time_t now) +{ + char rule_buf[CMD_BUFSIZE] = {0}; + + log_msg(LOG_DEBUG, + "forward_access_rule() forward_all: %d, nat_ip: %s, nat_port: %d", + acc->forward_all, nat_ip, nat_port); + + if(acc->forward_all) + { + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, IPT_FWD_ALL_RULE_ARGS, + fwd_chain->table, + spadat->use_src_ip, + exp_ts, + fwd_chain->target + ); + + /* Make a global ACCEPT rule for all ports/protocols + */ + ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, + "FORWARD ALL", "*/*"); + } + else + { + /* Make the FORWARD access rule + */ + ipt_rule(opts, NULL, IPT_FWD_RULE_ARGS, spadat->use_src_ip, + nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, + "FORWARD", spadat->spa_message_remain); + + } + return; +} + +static void dnat_rule(const fko_srv_options_t * const opts, + const acc_stanza_t * const acc, + struct fw_chain * const dnat_chain, + const char * const nat_ip, + const unsigned int nat_port, + const unsigned int fst_proto, + const unsigned int fst_port, + spa_data_t * const spadat, + const unsigned int exp_ts, + const time_t now) +{ + char rule_buf[CMD_BUFSIZE] = {0}; + + log_msg(LOG_DEBUG, "dnat_rule() forward_all: %d, nat_ip: %s, nat_port: %d", + acc->forward_all, nat_ip, nat_port); + + if(acc->forward_all) + { + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, IPT_DNAT_ALL_RULE_ARGS, + dnat_chain->table, + spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), + exp_ts, + dnat_chain->target, + nat_ip + ); + + /* Make a global DNAT rule for all ports/protocols + */ + ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, ANY_PROTO, ANY_PORT, dnat_chain, exp_ts, now, + "DNAT ALL", "*/*"); + } + else + { + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, IPT_DNAT_RULE_ARGS, + dnat_chain->table, + fst_proto, + spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), + fst_port, + exp_ts, + dnat_chain->target, + nat_ip, + nat_port + ); + + ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), + fst_proto, fst_port, dnat_chain, exp_ts, now, "DNAT", + spadat->spa_message_remain); + } + return; +} + +static void snat_rule(const fko_srv_options_t * const opts, + const acc_stanza_t * const acc, + const char * const nat_ip, + const unsigned int nat_port, + const unsigned int fst_proto, + const unsigned int fst_port, + spa_data_t * const spadat, + const unsigned int exp_ts, + const time_t now) +{ + char rule_buf[CMD_BUFSIZE] = {0}; + char snat_target[SNAT_TARGET_BUFSIZE] = {0}; + struct fw_chain *snat_chain = NULL; + + log_msg(LOG_DEBUG, "snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d", + acc->forward_all, nat_ip, nat_port); + + if(acc->forward_all) + { + /* Add SNAT or MASQUERADE rules. + */ + if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[IPT_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s", acc->force_snat_ip); + } + else if(acc->force_snat && acc->force_masquerade) + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); + } + else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) + && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[IPT_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s", opts->config[CONF_SNAT_TRANSLATE_IP]); + } + else + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); + } + + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, IPT_SNAT_ALL_RULE_ARGS, + snat_chain->table, + spadat->use_src_ip, + exp_ts, + snat_chain->target, + snat_target + ); + + ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, ANY_PROTO, ANY_PORT, snat_chain, exp_ts, now, + "SNAT ALL", "*/*"); + } + else + { + /* Add SNAT or MASQUERADE rules. + */ + if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[IPT_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s:%i", acc->force_snat_ip, fst_port); + } + else if(acc->force_snat && acc->force_masquerade) + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-ports %i", fst_port); + } + else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) + && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) + { + /* Using static SNAT */ + snat_chain = &(opts->fw_config->chain[IPT_SNAT_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-source %s:%i", opts->config[CONF_SNAT_TRANSLATE_IP], + fst_port); + } + else + { + /* Using MASQUERADE */ + snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, + "--to-ports %i", fst_port); + } + + memset(rule_buf, 0, CMD_BUFSIZE); + + snprintf(rule_buf, CMD_BUFSIZE-1, IPT_SNAT_RULE_ARGS, + snat_chain->table, + fst_proto, + nat_ip, + nat_port, + exp_ts, + snat_chain->target, + snat_target + ); + + ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, + NULL, fst_proto, nat_port, snat_chain, exp_ts, now, "SNAT", + spadat->spa_message_remain); + } + return; +} + /****************************************************************************/ /* Rule Processing - Create an access request... @@ -1036,16 +1245,8 @@ int process_spa_request(const fko_srv_options_t * const opts, const acc_stanza_t * const acc, spa_data_t * const spadat) { - char nat_ip[MAX_IPV4_STR_LEN] = {0}; - char snat_target[SNAT_TARGET_BUFSIZE] = {0}; - char rule_buf[CMD_BUFSIZE] = {0}; - char *ndx; - - unsigned int nat_port = 0; - - acc_port_list_t *port_list = NULL; - acc_port_list_t *ple = NULL; - + char nat_ip[MAX_IPV4_STR_LEN] = {0}; + unsigned int nat_port = 0; unsigned int fst_proto; unsigned int fst_port; @@ -1053,8 +1254,11 @@ process_spa_request(const fko_srv_options_t * const opts, struct fw_chain * const out_chain = &(opts->fw_config->chain[IPT_OUTPUT_ACCESS]); struct fw_chain * const fwd_chain = &(opts->fw_config->chain[IPT_FORWARD_ACCESS]); struct fw_chain * const dnat_chain = &(opts->fw_config->chain[IPT_DNAT_ACCESS]); - struct fw_chain *snat_chain; /* We assign this later (if we need to). */ + acc_port_list_t *port_list = NULL; + acc_port_list_t *ple = NULL; + + char *ndx = NULL; int res = 0, is_err; time_t now; unsigned int exp_ts; @@ -1086,71 +1290,58 @@ process_spa_request(const fko_srv_options_t * const opts, time(&now); exp_ts = now + spadat->fw_access_timeout; - /* For straight access requests, we currently support multiple proto/port - * request. + /* If the access stanza mandates a NAT operation, deal with + * that first regardless of what the SPA packet requested. */ - if((spadat->message_type == FKO_ACCESS_MSG - || spadat->message_type == FKO_CLIENT_TIMEOUT_ACCESS_MSG) && !acc->force_nat) + if(acc->force_nat) { + strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); + nat_port = acc->force_nat_port; - /* Create an access command for each proto/port for the source ip. + /* FORWARD access rule */ - while(ple != NULL) - { - ipt_rule(opts, NULL, IPT_RULE_ARGS, spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - ple->proto, ple->port, in_chain, exp_ts, now, "access", - spadat->spa_message_remain); + if(strlen(fwd_chain->to_chain)) + forward_access_rule(opts, acc, fwd_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); - /* If we have to make an corresponding OUTPUT rule if out_chain target - * is not NULL. - */ - if(strlen(out_chain->to_chain)) - { - ipt_rule(opts, NULL, IPT_OUT_RULE_ARGS, spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", - spadat->spa_message_remain); - } - ple = ple->next; - } - } - /* NAT requests... */ + /* DNAT rule + */ + if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + dnat_rule(opts, acc, dnat_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); + + /* SNAT rule if required - we only allow this for FORCE_NAT + * access stanzas for now until a new SPA packet type is added. + */ + if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_IPT_SNAT], "Y", 1) == 0) + snat_rule(opts, acc, nat_ip, nat_port, + fst_proto, fst_port, spadat, exp_ts, now); + + } /* deal with SPA packets that themselves request a NAT operation */ else if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_NAT_ACCESS_MSG - || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG - || acc->force_nat) + || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) { - /* Parse out the NAT IP and Port components. - */ - if(acc->force_nat) + ndx = strchr(spadat->nat_access, ','); + if(ndx != NULL) { - strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); - nat_port = acc->force_nat_port; - } - else - { - ndx = strchr(spadat->nat_access, ','); - if(ndx != NULL) + strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); + if (! is_valid_ipv4_addr(nat_ip)) { - strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); - if (! is_valid_ipv4_addr(nat_ip)) - { - log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); - free_acc_port_list(port_list); - return res; - } + log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); + free_acc_port_list(port_list); + return res; + } - nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, - NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_INFO, "Invalid NAT port in SPA message"); - free_acc_port_list(port_list); - res = is_err; - return res; - } + nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, + NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_INFO, "Invalid NAT port in SPA message"); + free_acc_port_list(port_list); + res = is_err; + return res; } } @@ -1163,108 +1354,41 @@ process_spa_request(const fko_srv_options_t * const opts, } else if(strlen(fwd_chain->to_chain)) { - if(acc->forward_all) - { - - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, IPT_FWD_ALL_RULE_ARGS, - fwd_chain->table, - spadat->use_src_ip, - exp_ts, - fwd_chain->target - ); - - /* Make a global ACCEPT rule for all ports/protocols - */ - ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, - "FORWARD ALL", "*/*"); - } - else - { - /* Make our FORWARD and NAT access rules - */ - ipt_rule(opts, NULL, IPT_FWD_RULE_ARGS, spadat->use_src_ip, - nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, - "FORWARD", spadat->spa_message_remain); - } - } - - if(!acc->disable_dnat && strlen(dnat_chain->to_chain)) - { - memset(rule_buf, 0, CMD_BUFSIZE); - - snprintf(rule_buf, CMD_BUFSIZE-1, IPT_DNAT_RULE_ARGS, - dnat_chain->table, - fst_proto, - spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - fst_port, - exp_ts, - dnat_chain->target, - nat_ip, - nat_port - ); - - ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, - (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - fst_proto, fst_port, dnat_chain, exp_ts, now, "DNAT", - spadat->spa_message_remain); - } - - /* If SNAT (or MASQUERADE) is wanted, then we add those rules here as well. - */ - if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_IPT_SNAT], "Y", 1) == 0) - { - /* Add SNAT or MASQUERADE rules. + /* FORWARD access rule */ - if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) - { - /* Using static SNAT */ - snat_chain = &(opts->fw_config->chain[IPT_SNAT_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-source %s:%i", acc->force_snat_ip, fst_port); - } - else if(acc->force_snat && acc->force_masquerade) - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-ports %i", fst_port); - } - else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) - && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) - { - /* Using static SNAT */ - snat_chain = &(opts->fw_config->chain[IPT_SNAT_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-source %s:%i", opts->config[CONF_SNAT_TRANSLATE_IP], - fst_port); - } - else - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, - "--to-ports %i", fst_port); - } + forward_access_rule(opts, acc, fwd_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); + } - memset(rule_buf, 0, CMD_BUFSIZE); + /* DNAT rule + */ + if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + dnat_rule(opts, acc, dnat_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); - snprintf(rule_buf, CMD_BUFSIZE-1, IPT_SNAT_RULE_ARGS, - snat_chain->table, - fst_proto, - nat_ip, - nat_port, - exp_ts, - snat_chain->target, - snat_target - ); + } + else /* Non-NAT request - this is the typical case. */ + { + /* Create an access command for each proto/port for the source ip. + */ + while(ple != NULL) + { + ipt_rule(opts, NULL, IPT_RULE_ARGS, spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), + ple->proto, ple->port, in_chain, exp_ts, now, "access", + spadat->spa_message_remain); - ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, fst_proto, nat_port, snat_chain, exp_ts, now, "SNAT", + /* We need to make a corresponding OUTPUT rule if out_chain target + * is not NULL. + */ + if(strlen(out_chain->to_chain)) + { + ipt_rule(opts, NULL, IPT_OUT_RULE_ARGS, spadat->use_src_ip, + (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), + ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", spadat->spa_message_remain); + } + ple = ple->next; } } diff --git a/server/fw_util_iptables.h b/server/fw_util_iptables.h index 8609685c..223c4d1b 100644 --- a/server/fw_util_iptables.h +++ b/server/fw_util_iptables.h @@ -47,7 +47,9 @@ #define IPT_FWD_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define IPT_FWD_ALL_RULE_ARGS "-t %s -s %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s" SH_REDIR #define IPT_DNAT_RULE_ARGS "-t %s -p %i -s %s -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s --to-destination %s:%i" SH_REDIR +#define IPT_DNAT_ALL_RULE_ARGS "-t %s -s %s -d %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s --to-destination %s" SH_REDIR #define IPT_SNAT_RULE_ARGS "-t %s -p %i -d %s --dport %i -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s %s" SH_REDIR +#define IPT_SNAT_ALL_RULE_ARGS "-t %s -s %s -m comment --comment " EXPIRE_COMMENT_PREFIX "%u -j %s %s" SH_REDIR #define IPT_TMP_COMMENT_ARGS "-t %s -I %s %i -s " DUMMY_IP " -m comment --comment " TMP_COMMENT " -j %s" SH_REDIR #define IPT_TMP_CHK_RULE_ARGS "-t %s -I %s %i -s " DUMMY_IP " -p udp -j %s" SH_REDIR #define IPT_TMP_VERIFY_CHK_ARGS "-t %s -C %s -s " DUMMY_IP " -p udp -j %s" SH_REDIR diff --git a/server/fwknopd.conf b/server/fwknopd.conf index 29ec9e2d..1c2621a2 100644 --- a/server/fwknopd.conf +++ b/server/fwknopd.conf @@ -153,11 +153,11 @@ # ENABLE_PCAP_ANY_DIRECTION N; # Controls whether fwknopd will set the destination field on the firewall -# rule to the destination address specified on the incoming SPA packet. +# rule to the destination address specified on the incoming SPA packet. # This is useful for interfaces with multiple IP addresses hosting separate -# services. If ENABLE_IPT_OUTPUT is set to "Y", the source field of -# the firewall rule is set. FORWARD and SNAT rules are not affected however, -# DNAT rules will also have their destination field set. The default is +# services. If ENABLE_IPT_OUTPUT is set to "Y", the source field of +# the firewall rule is set. FORWARD and SNAT rules are not affected however, +# DNAT rules will also have their destination field set. The default is # "N", which sets the destination field to 0.0.0.0/0 (any). # # ENABLE_DESTINATION_RULE Y; diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index 3f62cbe2..05a50dea 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -395,8 +395,8 @@ typedef struct acc_stanza char *force_nat_ip; char *force_nat_proto; unsigned int force_nat_port; - unsigned char disable_dnat; unsigned char forward_all; + unsigned char disable_dnat; unsigned char force_snat; char *force_snat_ip; unsigned char force_masquerade; @@ -499,9 +499,6 @@ typedef struct acc_stanza struct fw_chain chain[NUM_FWKNOP_ACCESS_TYPES]; char fw_command[MAX_PATH_LEN]; - /* Flag for iptables SNAT vs. MASQUERADE usage - */ - unsigned char use_masquerade; /* Flag for setting destination field in rule */ unsigned char use_destination; diff --git a/test/conf/hmac_force_masq_no_dnat_access.conf b/test/conf/hmac_force_masq_no_dnat_access.conf new file mode 100644 index 00000000..53f0c4f1 --- /dev/null +++ b/test/conf/hmac_force_masq_no_dnat_access.conf @@ -0,0 +1,7 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +FORCE_NAT 123.4.4.4 22 +FORCE_MASQUERADE Y +DISABLE_DNAT Y diff --git a/test/conf/hmac_forward_all_access.conf b/test/conf/hmac_forward_all_access.conf new file mode 100644 index 00000000..4ff14398 --- /dev/null +++ b/test/conf/hmac_forward_all_access.conf @@ -0,0 +1,8 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +FORCE_NAT 0.0.0.0 0 +FORCE_SNAT 123.4.4.4 +DISABLE_DNAT Y +FORWARD_ALL Y diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index d71a7b4a..cde5460e 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -428,6 +428,8 @@ our %cf = ( 'hmac_force_nat_access' => "$conf_dir/hmac_force_nat_access.conf", 'hmac_force_snat_access' => "$conf_dir/hmac_force_snat_access.conf", 'hmac_force_masq_access' => "$conf_dir/hmac_force_masq_access.conf", + 'hmac_force_masq_no_dnat_access' => "$conf_dir/hmac_force_masq_no_dnat_access.conf", + 'hmac_forward_all_access' => "$conf_dir/hmac_forward_all_access.conf", 'cmd_access' => "$conf_dir/cmd_access.conf", 'cmd_setuid_access' => "$conf_dir/cmd_setuid_access.conf", 'cmd_giduid_access' => "$conf_dir/cmd_giduid_access.conf", diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index ff87cfe0..c72c5cfc 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -1383,7 +1383,6 @@ 'subcategory' => 'client+server', 'detail' => "force NAT $force_nat_host (tcp/22)", 'function' => \&spa_cycle, - 'cmdline' => $default_client_args, 'cmdline' => "$default_client_args_no_get_key --rc-file " . $cf{'rc_hmac_b64_key'}, 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'hmac_force_nat_access'} / . @@ -1400,7 +1399,6 @@ 'subcategory' => 'client+server', 'detail' => "force SNAT $force_snat_host (tcp/22)", 'function' => \&spa_cycle, - 'cmdline' => $default_client_args, 'cmdline' => "$default_client_args_no_get_key --rc-file " . $cf{'rc_hmac_b64_key'}, 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat"} -a $cf{'hmac_force_snat_access'} / . @@ -1419,7 +1417,6 @@ 'subcategory' => 'client+server', 'detail' => "force SNAT $force_snat_host (ipt flush)", 'function' => \&spa_cycle, - 'cmdline' => $default_client_args, 'cmdline' => "$default_client_args_no_get_key --rc-file " . $cf{'rc_hmac_b64_key'}, 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat"} -a $cf{'hmac_force_snat_access'} / . @@ -1434,12 +1431,31 @@ 'key_file' => $cf{'rc_hmac_b64_key'}, 'iptables_rm_chains_after_server_start' => $YES, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "FORWARD_ALL", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + $cf{'rc_hmac_b64_key'}, + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_no_translate_ip"} -a $cf{'hmac_forward_all_access'} / . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/\sSNAT\s.*all.*\sto:$force_nat_host2/], + 'server_negative_output_matches' => [qr/DNAT\s.*\*\/\sto\:/, + qr/\*\/\sto\:$internal_nat_host\:22/i, + qr/\*\/\sto\:$force_nat_host\:22/i], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'server_conf' => $cf{"${fw_conf_prefix}_snat_no_translate_ip"}, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', 'detail' => "force MASQ $force_snat_host (tcp/22)", 'function' => \&spa_cycle, - 'cmdline' => $default_client_args, 'cmdline' => "$default_client_args_no_get_key --rc-file " . $cf{'rc_hmac_b64_key'}, 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_no_translate_ip"} -a $cf{'hmac_force_masq_access'} / . @@ -1453,12 +1469,31 @@ 'server_conf' => $cf{"${fw_conf_prefix}_snat_no_translate_ip"}, 'key_file' => $cf{'rc_hmac_b64_key'}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "force MASQ no DNAT", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + $cf{'rc_hmac_b64_key'}, + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_no_translate_ip"} -a $cf{'hmac_force_masq_no_dnat_access'} / . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/MASQUERADE\s.*\s$force_nat_host2\s.*\smasq\sports\:\s22/], + 'server_negative_output_matches' => [qr/DNAT\s.*\*\/\sto\:/, + qr/\*\/\sto\:$internal_nat_host\:22/i, + qr/\*\/\sto\:$force_nat_host\:22/i], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'server_conf' => $cf{"${fw_conf_prefix}_snat_no_translate_ip"}, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', 'detail' => "force MASQ $force_snat_host (ipt flush)", 'function' => \&spa_cycle, - 'cmdline' => $default_client_args, 'cmdline' => "$default_client_args_no_get_key --rc-file " . $cf{'rc_hmac_b64_key'}, 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_no_translate_ip"} -a $cf{'hmac_force_masq_access'} / . @@ -1478,7 +1513,6 @@ 'subcategory' => 'client+server', 'detail' => "force NAT ($FW_TYPE flush)", 'function' => \&spa_cycle, - 'cmdline' => $default_client_args, 'cmdline' => "$default_client_args_no_get_key --rc-file " . $cf{'rc_hmac_b64_key'}, 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'hmac_force_nat_access'} / . From 37c9f38565c48244fe4606f87b93ba2b3db28f6d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 6 Apr 2015 21:20:31 -0400 Subject: [PATCH 043/219] [test suite] FORCE_SNAT requires FORCE_NAT test --- test/conf/require_force_nat_access.conf | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 test/conf/require_force_nat_access.conf diff --git a/test/conf/require_force_nat_access.conf b/test/conf/require_force_nat_access.conf new file mode 100644 index 00000000..02114702 --- /dev/null +++ b/test/conf/require_force_nat_access.conf @@ -0,0 +1,8 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +#FORCE_NAT 0.0.0.0 0 +FORCE_SNAT 123.4.4.4 +DISABLE_DNAT Y +FORWARD_ALL Y From 3d8b524019f7bfdfe409196f65877b6975117bb1 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 7 Apr 2015 08:23:55 -0400 Subject: [PATCH 044/219] [test suite] FORCE_SNAT requires FORCE_NAT test --- Makefile.am | 3 +++ test/test-fwknop.pl | 1 + test/tests/rijndael_hmac.pl | 10 ++++++++++ 3 files changed, 14 insertions(+) diff --git a/Makefile.am b/Makefile.am index 6bc51b8b..d077fbf5 100644 --- a/Makefile.am +++ b/Makefile.am @@ -216,6 +216,8 @@ EXTRA_DIST = \ test/conf/hmac_force_snat_access.conf \ test/conf/hmac_force_masq_access.conf \ test/conf/hmac_no_b64_cygwin_access.conf \ + test/conf/hmac_forward_all_access.conf \ + test/conf/hmac_force_masq_no_dnat_access.conf \ test/conf/multi_pkts.pcap \ test/conf/fwknoprc_default_hmac_base64_key \ test/conf/fwknoprc_hmac_nat_rand_base64_key \ @@ -257,6 +259,7 @@ EXTRA_DIST = \ test/conf/fwknoprc_stanza_list \ test/conf/icmp_pcap_filter_fwknopd.conf \ test/conf/invalid_expire_access.conf \ + test/conf/require_force_nat_access.conf \ test/conf/invalid_source_access.conf \ test/conf/ipt_output_chain_fwknopd.conf \ test/conf/firewd_output_chain_fwknopd.conf \ diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index cde5460e..de2e4eaa 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -416,6 +416,7 @@ our %cf = ( 'future_exp_access' => "$conf_dir/future_expired_stanza_access.conf", 'exp_epoch_access' => "$conf_dir/expired_epoch_stanza_access.conf", 'invalid_exp_access' => "$conf_dir/invalid_expire_access.conf", + 'require_force_nat_access' => "$conf_dir/require_force_nat_access.conf", "${fw_conf_prefix}_output_chain" => "$conf_dir/${fw_conf_prefix}_output_chain_fwknopd.conf", "invalid_${fw_conf_prefix}_input_chain" => "$conf_dir/invalid_${fw_conf_prefix}_input_chain_fwknopd.conf", "invalid_${fw_conf_prefix}_input_chain2" => "$conf_dir/invalid_${fw_conf_prefix}_input_chain_2_fwknopd.conf", diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index c72c5cfc..a37d2514 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -1450,6 +1450,16 @@ 'server_conf' => $cf{"${fw_conf_prefix}_snat_no_translate_ip"}, 'key_file' => $cf{'rc_hmac_b64_key'}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'server', + 'detail' => 'FORCE_SNAT requires FORCE_NAT', + 'function' => \&generic_exec, + 'cmdline' => "$fwknopdCmd -c $cf{'ipt_nat'} -a $cf{'require_force_nat_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'positive_output_matches' => [qr/implies FORCE_NAT must also be used/i], + 'exec_err' => $YES, + }, { 'category' => 'Rijndael+HMAC', From 7a21494f3913142885c0744e18443f8528105d3d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 7 Apr 2015 16:32:44 -0700 Subject: [PATCH 045/219] added --enable-asan-support for Google's Address Sanitizer compiler flags --- ChangeLog | 3 +++ configure.ac | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/ChangeLog b/ChangeLog index 4ff89420..28f18c5d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -8,6 +8,9 @@ fwknop-2.6.6 (02//2015): - [test suite] Handle versions of lcov that don't have the --rc argument which is normally used to force the creation branch coverage stats when code coverage reports are created. + - [build] Add --enable-asan-support to autoconf configure script to enable + Google's Address Sanitizer (ASan) support. This feature is used during + the testing phase for new fwknop releases. fwknop-2.6.5 (12/16/2014): - [server] (Grant Pannell) Added a new access.conf variable "DESTINATION" diff --git a/configure.ac b/configure.ac index 8fadbfb1..ca1b4fa1 100644 --- a/configure.ac +++ b/configure.ac @@ -170,6 +170,19 @@ fi AM_CONDITIONAL([WANT_C_UNIT_TESTS], [test "$want_c_unit_tests" = yes]) +dnl Decide whether or not to enable address sanitizer support +dnl +want_asan_support=no +AC_ARG_ENABLE([asan-support], + [AS_HELP_STRING([--enable-asan-support], + [Build fwknop binaries with address sanitizer support @<:@default is to disable@:>@])], + [want_asan_support=$enableval], + []) + +if test "x$want_asan_support" = "xyes"; then + FKO_CHECK_COMPILER_ARG([-fsanitize=address -fno-omit-frame-pointer]) +fi + dnl Decide whether or not to compile in certain features that enable fuzzing dnl of fwknop code - this is for testing purposes only. dnl From 0fa42ae11781c1347c183473c47c3005bf4ca2e9 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 7 Apr 2015 16:34:49 -0700 Subject: [PATCH 046/219] [server] allow DISABLE_DNAT to not require FORCE_NAT --- server/access.c | 23 ++++++---- server/fw_util_firewalld.c | 57 +++++++++++++------------ server/fw_util_iptables.c | 57 +++++++++++++------------ test/conf/require_force_nat_access.conf | 2 +- test/tests/basic_operations.pl | 10 +++++ test/tests/rijndael_hmac.pl | 10 ----- 6 files changed, 84 insertions(+), 75 deletions(-) diff --git a/server/access.c b/server/access.c index 3ad6cc5d..532dc969 100644 --- a/server/access.c +++ b/server/access.c @@ -1077,7 +1077,7 @@ set_acc_defaults(fko_srv_options_t *opts) /* Perform some sanity checks on an acc stanza data. */ static int -acc_data_is_valid(struct passwd *user_pw, acc_stanza_t * const acc) +acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t * const acc) { if(acc == NULL) { @@ -1142,11 +1142,18 @@ acc_data_is_valid(struct passwd *user_pw, acc_stanza_t * const acc) if((acc->force_snat == 1 || acc->force_masquerade == 1) && acc->force_nat == 0) { - log_msg(LOG_ERR, - "[*] FORCE_SNAT/FORCE_MASQUERADE implies FORCE_NAT must also be used for stanza source: '%s'", - acc->source - ); - return(0); + if(acc->disable_dnat == 1) + { + add_acc_force_nat(opts, acc, "0.0.0.0 0"); + } + else + { + log_msg(LOG_ERR, + "[*] FORCE_SNAT/FORCE_MASQUERADE requires either FORCE_NAT or DISABLE_DNAT: '%s'", + acc->source + ); + return(0); + } } if(acc->require_source_address == 0) @@ -1284,7 +1291,7 @@ parse_access_file(fko_srv_options_t *opts) * stanza for the minimum required data. */ if(curr_acc != NULL) { - if(!acc_data_is_valid(user_pw, curr_acc)) + if(!acc_data_is_valid(opts, user_pw, curr_acc)) { log_msg(LOG_ERR, "[*] Data error in access file: '%s'", opts->config[CONF_ACCESS_FILE]); @@ -1746,7 +1753,7 @@ parse_access_file(fko_srv_options_t *opts) /* Sanity check the last stanza */ - if(!acc_data_is_valid(user_pw, curr_acc)) + if(!acc_data_is_valid(opts, user_pw, curr_acc)) { log_msg(LOG_ERR, "[*] Data error in access file: '%s'", diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index d690c438..60a9472d 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -1293,35 +1293,9 @@ process_spa_request(const fko_srv_options_t * const opts, time(&now); exp_ts = now + spadat->fw_access_timeout; - /* If the access stanza mandates a NAT operation, deal with - * that first regardless of what the SPA packet requested. + /* deal with SPA packets that themselves request a NAT operation */ - if(acc->force_nat) - { - strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); - nat_port = acc->force_nat_port; - - /* FORWARD access rule - */ - if(strlen(fwd_chain->to_chain)) - forward_access_rule(opts, acc, fwd_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - - /* DNAT rule - */ - if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) - dnat_rule(opts, acc, dnat_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - - /* SNAT rule if required - we only allow this for FORCE_NAT - * access stanzas for now until a new SPA packet type is added. - */ - if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_FIREWD_SNAT], "Y", 1) == 0) - snat_rule(opts, acc, nat_ip, nat_port, - fst_proto, fst_port, spadat, exp_ts, now); - - } /* deal with SPA packets that themselves request a NAT operation */ - else if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG + if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) @@ -1369,6 +1343,33 @@ process_spa_request(const fko_srv_options_t * const opts, dnat_rule(opts, acc, dnat_chain, nat_ip, nat_port, fst_proto, fst_port, spadat, exp_ts, now); + if(acc->force_snat) + snat_rule(opts, acc, nat_ip, nat_port, + fst_proto, fst_port, spadat, exp_ts, now); + } + else if(acc->force_nat) /* handle force NAT scenarios */ + { + strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); + nat_port = acc->force_nat_port; + + /* FORWARD access rule + */ + if(strlen(fwd_chain->to_chain)) + forward_access_rule(opts, acc, fwd_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); + + /* DNAT rule + */ + if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + dnat_rule(opts, acc, dnat_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); + + /* SNAT rule if required - we only allow this for FORCE_NAT + * access stanzas for now until a new SPA packet type is added. + */ + if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_FIREWD_SNAT], "Y", 1) == 0) + snat_rule(opts, acc, nat_ip, nat_port, + fst_proto, fst_port, spadat, exp_ts, now); } else /* Non-NAT request - this is the typical case. */ { diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index fd235e06..6a976dcf 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1290,35 +1290,9 @@ process_spa_request(const fko_srv_options_t * const opts, time(&now); exp_ts = now + spadat->fw_access_timeout; - /* If the access stanza mandates a NAT operation, deal with - * that first regardless of what the SPA packet requested. + /* deal with SPA packets that themselves request a NAT operation */ - if(acc->force_nat) - { - strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); - nat_port = acc->force_nat_port; - - /* FORWARD access rule - */ - if(strlen(fwd_chain->to_chain)) - forward_access_rule(opts, acc, fwd_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - - /* DNAT rule - */ - if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) - dnat_rule(opts, acc, dnat_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - - /* SNAT rule if required - we only allow this for FORCE_NAT - * access stanzas for now until a new SPA packet type is added. - */ - if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_IPT_SNAT], "Y", 1) == 0) - snat_rule(opts, acc, nat_ip, nat_port, - fst_proto, fst_port, spadat, exp_ts, now); - - } /* deal with SPA packets that themselves request a NAT operation */ - else if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG + if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) @@ -1366,6 +1340,33 @@ process_spa_request(const fko_srv_options_t * const opts, dnat_rule(opts, acc, dnat_chain, nat_ip, nat_port, fst_proto, fst_port, spadat, exp_ts, now); + if(acc->force_snat) + snat_rule(opts, acc, nat_ip, nat_port, + fst_proto, fst_port, spadat, exp_ts, now); + } + else if(acc->force_nat) /* handle force NAT scenarios */ + { + strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); + nat_port = acc->force_nat_port; + + /* FORWARD access rule + */ + if(strlen(fwd_chain->to_chain)) + forward_access_rule(opts, acc, fwd_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); + + /* DNAT rule + */ + if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + dnat_rule(opts, acc, dnat_chain, nat_ip, + nat_port, fst_proto, fst_port, spadat, exp_ts, now); + + /* SNAT rule if required - we only allow this for FORCE_NAT + * access stanzas for now until a new SPA packet type is added. + */ + if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_IPT_SNAT], "Y", 1) == 0) + snat_rule(opts, acc, nat_ip, nat_port, + fst_proto, fst_port, spadat, exp_ts, now); } else /* Non-NAT request - this is the typical case. */ { diff --git a/test/conf/require_force_nat_access.conf b/test/conf/require_force_nat_access.conf index 02114702..23f71e21 100644 --- a/test/conf/require_force_nat_access.conf +++ b/test/conf/require_force_nat_access.conf @@ -4,5 +4,5 @@ HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGobl FW_ACCESS_TIMEOUT 3 #FORCE_NAT 0.0.0.0 0 FORCE_SNAT 123.4.4.4 -DISABLE_DNAT Y +#DISABLE_DNAT Y FORWARD_ALL Y diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index a5fc6b34..bd29dd47 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -3072,6 +3072,16 @@ ], 'positive_output_matches' => [qr/Invalid\sIPv4/], }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => 'FORCE_SNAT -> FORCE_NAT/DISABLE_DNAT', + 'function' => \&generic_exec, + 'cmdline' => "$fwknopdCmd -c $cf{'ipt_nat'} -a $cf{'require_force_nat_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str --exit-parse-config", + 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/i], + 'exec_err' => $YES, + }, { 'category' => 'basic operations', diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index a37d2514..c72c5cfc 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -1450,16 +1450,6 @@ 'server_conf' => $cf{"${fw_conf_prefix}_snat_no_translate_ip"}, 'key_file' => $cf{'rc_hmac_b64_key'}, }, - { - 'category' => 'Rijndael+HMAC', - 'subcategory' => 'server', - 'detail' => 'FORCE_SNAT requires FORCE_NAT', - 'function' => \&generic_exec, - 'cmdline' => "$fwknopdCmd -c $cf{'ipt_nat'} -a $cf{'require_force_nat_access'} " . - "-d $default_digest_file -p $default_pid_file $intf_str", - 'positive_output_matches' => [qr/implies FORCE_NAT must also be used/i], - 'exec_err' => $YES, - }, { 'category' => 'Rijndael+HMAC', From ab2d9c0aec1fbd6bc226181ac5c1bee3ad8f173c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 7 Apr 2015 16:35:07 -0700 Subject: [PATCH 047/219] [test suite] minor path bug fix --- test/test-fwknop.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index dc379658..8068d846 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1645,7 +1645,7 @@ sub config_recompile() { chdir 'test' or die $!; ### we're recompiling, so remove any existing profile coverage ### files since they will be invalidated by the recompile - &run_cmd("./test/$profile_rm_prev_sh", $cmd_out_tmp, $curr_test_file); + &run_cmd($profile_rm_prev_sh, $cmd_out_tmp, $curr_test_file); chdir '..' or die $!; } From 429881703f7afbd92a803a16a4afb88a2350ff2d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 8 Apr 2015 18:24:26 -0700 Subject: [PATCH 048/219] [test suite] minor uninitialized var bug fix --- test/tests/basic_operations.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index bd29dd47..ba294f2b 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -3077,7 +3077,7 @@ 'subcategory' => 'server', 'detail' => 'FORCE_SNAT -> FORCE_NAT/DISABLE_DNAT', 'function' => \&generic_exec, - 'cmdline' => "$fwknopdCmd -c $cf{'ipt_nat'} -a $cf{'require_force_nat_access'} " . + 'cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'require_force_nat_access'} / . "-d $default_digest_file -p $default_pid_file $intf_str --exit-parse-config", 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/i], 'exec_err' => $YES, From 1e33119b04a583fbf18b5b562edb14301a2ca7d6 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 8 Apr 2015 18:29:03 -0700 Subject: [PATCH 049/219] [server] use 'success' string for firewalld as returned firewall-cmd for command success --- server/fw_util_firewalld.c | 46 +++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 60a9472d..31efd191 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -299,6 +299,9 @@ comment_match_exists(const fko_srv_options_t * const opts) log_msg(LOG_DEBUG, "comment_match_exists() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); + if(strncmp(err_buf, "success", strlen("success")) != 0) + log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); + zero_cmd_buffers(); snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " FIREWD_LIST_RULES_ARGS, @@ -311,9 +314,6 @@ comment_match_exists(const fko_srv_options_t * const opts) WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(cmd_out); - if(!EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); - ndx = strstr(cmd_out, TMP_COMMENT); if(ndx == NULL) res = 0; /* did not find the tmp comment */ @@ -342,7 +342,7 @@ comment_match_exists(const fko_srv_options_t * const opts) static int add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0; + int res = 0, rv = 0; zero_cmd_buffers(); @@ -360,14 +360,17 @@ add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) log_msg(LOG_DEBUG, "add_jump_rule() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) == 0) + { log_msg(LOG_INFO, "Added jump rule from chain: %s to chain: %s", fwc.chain[chain_num].from_chain, fwc.chain[chain_num].to_chain); + rv = 1; + } else log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - return res; + return rv; } static int @@ -390,7 +393,7 @@ chain_exists(const fko_srv_options_t * const opts, const int chain_num) log_msg(LOG_DEBUG, "chain_exists() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) == 0) log_msg(LOG_DEBUG, "'%s' table '%s' chain exists", fwc.chain[chain_num].table, fwc.chain[chain_num].to_chain); @@ -503,7 +506,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) cmd_buf, res); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(!EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); got_err++; @@ -541,7 +544,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) cmd_buf, res); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(!EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); got_err++; @@ -587,7 +590,7 @@ delete_all_chains(const fko_srv_options_t * const opts) cmd_buf, res, err_buf); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) != 0) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); cmd_ctr++; @@ -611,7 +614,7 @@ delete_all_chains(const fko_srv_options_t * const opts) cmd_buf, res, err_buf); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) != 0) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); zero_cmd_buffers(); @@ -630,7 +633,7 @@ delete_all_chains(const fko_srv_options_t * const opts) cmd_buf, res, err_buf); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) != 0) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); } @@ -640,7 +643,7 @@ delete_all_chains(const fko_srv_options_t * const opts) static int create_chain(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0; + int res = 0, rv = 0; zero_cmd_buffers(); @@ -660,10 +663,12 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) cmd_buf, res, err_buf); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) != 0) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + else + rv = 1; - return res; + return rv; } static void @@ -697,14 +702,14 @@ create_fw_chains(const fko_srv_options_t * const opts) /* Create the chain */ - if(! EXTCMD_IS_SUCCESS(create_chain(opts, i))) + if(! create_chain(opts, i)) got_err++; /* Then create the jump rule to that chain if it * doesn't already exist (which is possible) */ if(jump_rule_exists(opts, i) == 0) - if(! EXTCMD_IS_SUCCESS(add_jump_rule(opts, i))) + if(! add_jump_rule(opts, i)) got_err++; } } @@ -949,7 +954,7 @@ create_rule(const fko_srv_options_t * const opts, log_msg(LOG_DEBUG, "create_rule() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) == 0) { log_msg(LOG_DEBUG, "create_rule() Rule: '%s' added to %s", fw_rule, fw_chain); res = 1; @@ -1447,7 +1452,8 @@ check_firewall_rules(const fko_srv_options_t * const opts) WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(cmd_out); - log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)", + log_msg(LOG_DEBUG, + "check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)", cmd_buf, res, cmd_out); if(!EXTCMD_IS_SUCCESS(res)) @@ -1559,7 +1565,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(EXTCMD_IS_SUCCESS(res)) + if(strncmp(err_buf, "success", strlen("success")) == 0) { log_msg(LOG_INFO, "Removed rule %s from %s with expire time of %u", rule_num_str, ch[i].to_chain, rule_exp From 547dbb66b3314206b9b1db619e512a687a18a94c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 8 Apr 2015 18:30:03 -0700 Subject: [PATCH 050/219] [server] minor return value handling update for create_chain() and add_jump_rule() --- server/fw_util_iptables.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 6a976dcf..2d42d07b 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -346,7 +346,7 @@ comment_match_exists(const fko_srv_options_t * const opts) static int add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0; + int res = 0, rv = 0; zero_cmd_buffers(); @@ -365,13 +365,16 @@ add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) cmd_buf, res, err_buf); if(EXTCMD_IS_SUCCESS(res)) + { log_msg(LOG_INFO, "Added jump rule from chain: %s to chain: %s", fwc.chain[chain_num].from_chain, fwc.chain[chain_num].to_chain); + rv = 1; + } else log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - return res; + return rv; } static int @@ -642,7 +645,7 @@ delete_all_chains(const fko_srv_options_t * const opts) static int create_chain(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0; + int res = 0, rv = 0; zero_cmd_buffers(); @@ -662,10 +665,12 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) cmd_buf, res, err_buf); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(EXTCMD_IS_SUCCESS(res)) + rv = 1; + else log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - return res; + return rv; } static void @@ -699,14 +704,14 @@ create_fw_chains(const fko_srv_options_t * const opts) /* Create the chain */ - if(! EXTCMD_IS_SUCCESS(create_chain(opts, i))) + if(! create_chain(opts, i)) got_err++; /* Then create the jump rule to that chain if it * doesn't already exist (which is possible) */ if(jump_rule_exists(opts, i) == 0) - if(! EXTCMD_IS_SUCCESS(add_jump_rule(opts, i))) + if(! add_jump_rule(opts, i)) got_err++; } } From ca41ce6e7592de7aed1137014b39a1cd0fac1d5d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 8 Apr 2015 18:40:44 -0700 Subject: [PATCH 051/219] [test suite] restore FORCE_SNAT test passing result --- test/tests/basic_operations.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index ba294f2b..1464bc90 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -3675,7 +3675,7 @@ 'server_conf_file' => [ "ENABLE_${FW_PREFIX}_FORWARDING Y" ], - 'positive_output_matches' => [qr/must\salso\sbe\sused/], + 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/], }, { 'category' => 'basic operations', From 2d0b623a9a12e6f75339c94650a84185d017cdcc Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 8 Apr 2015 18:50:26 -0700 Subject: [PATCH 052/219] [test suite] more FORCE_NAT tests --- test/tests/basic_operations.pl | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index 1464bc90..3b308d93 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -3677,6 +3677,25 @@ ], 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/], }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => "$FW_TYPE FORCE_SNAT and 0.0.0.0 0", + 'function' => \&server_conf_files, + 'fwknopd_cmdline' => "$server_rewrite_conf_files --exit-parse-config", + 'exec_err' => $YES, + 'server_access_file' => [ + 'SOURCE any', + 'KEY testtest', + 'FORCE_SNAT 1.2.3.4', + 'DISABLE_DNAT Y' + ], + 'server_conf_file' => [ + "ENABLE_${FW_PREFIX}_FORWARDING Y" + ], + 'positive_output_matches' => [qr/FORCE_NAT.*0\.0\.0\.0/], + }, + { 'category' => 'basic operations', 'subcategory' => 'server', @@ -3692,7 +3711,7 @@ 'server_conf_file' => [ "ENABLE_${FW_PREFIX}_FORWARDING Y" ], - 'positive_output_matches' => [qr/must\salso\sbe\sused/], + 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/], }, { From 1986c9aaf94dfc76ebc7c669a61df0c289dbda91 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 9 Apr 2015 20:01:59 -0400 Subject: [PATCH 053/219] [test suite] added AFL results for client-rc fuzzing --- test/afl/results/2.6.6/c4ffd4b/client-rc | 25 ++++++++++++++++++ .../c4ffd4b/client-rc-plot/exec_speed.png | Bin 0 -> 36489 bytes .../c4ffd4b/client-rc-plot/high_freq.png | Bin 0 -> 20967 bytes .../2.6.6/c4ffd4b/client-rc-plot/index.html | 10 +++++++ .../2.6.6/c4ffd4b/client-rc-plot/low_freq.png | Bin 0 -> 12932 bytes 5 files changed, 35 insertions(+) create mode 100644 test/afl/results/2.6.6/c4ffd4b/client-rc create mode 100644 test/afl/results/2.6.6/c4ffd4b/client-rc-plot/exec_speed.png create mode 100644 test/afl/results/2.6.6/c4ffd4b/client-rc-plot/high_freq.png create mode 100644 test/afl/results/2.6.6/c4ffd4b/client-rc-plot/index.html create mode 100644 test/afl/results/2.6.6/c4ffd4b/client-rc-plot/low_freq.png diff --git a/test/afl/results/2.6.6/c4ffd4b/client-rc b/test/afl/results/2.6.6/c4ffd4b/client-rc new file mode 100644 index 00000000..b883680c --- /dev/null +++ b/test/afl/results/2.6.6/c4ffd4b/client-rc @@ -0,0 +1,25 @@ + + american fuzzy lop 1.58b (fwknop,fwknoprc,c4ffd4b) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 8 days, 10 hrs, 53 min, 20 sec │ cycles done : 84 │ +│ last new path : 0 days, 0 hrs, 1 min, 48 sec │ total paths : 2346 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : 0 days, 0 hrs, 32 min, 20 sec │ uniq hangs : 48 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 2338* (99.66%) │ map density : 3367 (5.14%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 2.99 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : interest 32/8 │ favored paths : 279 (11.89%) │ +│ stage execs : 98.2k/166k (58.79%) │ new edges on : 460 (19.61%) │ +│ total execs : 1.71G │ total crashes : 0 (0 unique) │ +│ exec speed : 1634/sec │ total hangs : 347 (48 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 300/34.3M, 32/34.3M, 32/34.3M │ levels : 23 │ +│ byte flips : 2/4.29M, 0/3.53M, 12/3.92M │ pending : 16 │ +│ arithmetics : 90/167M, 3/17.5M, 0/1.02M │ pend fav : 0 │ +│ known ints : 21/16.1M, 12/130M, 11/195M │ own finds : 2345 │ +│ dictionary : 0/0, 0/0, 259/175M │ imported : n/a │ +│ havoc : 1494/414M, 48/471M │ variable : 787 │ +│ trim : 9.84%/1.55M, 28.74% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:115%] diff --git a/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/exec_speed.png b/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..1bc4738036f50a4bdae9d7fa5f26beb24c6c7212 GIT binary patch literal 36489 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 S!rPyKggjmST-G@yGywn`4ihT? literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/high_freq.png b/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7f6d1bb10a0e24058ae7ff7d9795899e631312 GIT binary patch literal 20967 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 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/index.html b/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/index.html new file mode 100644 index 00000000..cdc34019 --- /dev/null +++ b/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknop,fwknoprc,c4ffd4b</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Thu Apr 9 09:03:50 EDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/low_freq.png b/test/afl/results/2.6.6/c4ffd4b/client-rc-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..f22d09270fbfdb54da9895b8950a1e99dd26fb25 GIT binary patch literal 12932 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 E7r*)<IsgCw literal 0 HcmV?d00001 From 87a4acb6364070cb2a58888352147e29788770b5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 9 Apr 2015 18:04:31 -0700 Subject: [PATCH 054/219] [test suite] added detection for crashes triggered with AddressSanitizer (requires --enable-asan-support) --- test/test-fwknop.pl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 8068d846..9c0c448f 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1631,6 +1631,14 @@ sub look_for_crashes() { $curr_test_file); $rv = 0; } + + if (&file_find_regex([qr/ERROR\:\sAddressSanitizer/, + qr/SUMMARY\s:\sAddressSanitizer/], + $MATCH_ANY, $NO_APPEND_RESULTS, $f)) { + &write_test_file("[-] AddressSanitizer crash found in: $f\n", + $curr_test_file); + $rv = 0; + } } $do_crash_check = 0; From 5164378b17a88a6dc008a2ac5495b7885d2b4524 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 9 Apr 2015 22:23:17 -0400 Subject: [PATCH 055/219] [build] add --enable-32bit-mode for ASAN+AFL fuzzing --- configure.ac | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/configure.ac b/configure.ac index ca1b4fa1..8e450c61 100644 --- a/configure.ac +++ b/configure.ac @@ -183,6 +183,19 @@ if test "x$want_asan_support" = "xyes"; then FKO_CHECK_COMPILER_ARG([-fsanitize=address -fno-omit-frame-pointer]) fi +dnl Decide whether or not force 32-bit mode +dnl +want_32bit_mode=no +AC_ARG_ENABLE([32bit-mode], + [AS_HELP_STRING([--enable-32bit-mode], + [Build 32-bit fwknop binaries @<:@default is to disable@:>@])], + [want_32bit_mode=$enableval], + []) + +if test "x$want_32bit_mode" = "xyes"; then + FKO_CHECK_COMPILER_ARG([-m32]) +fi + dnl Decide whether or not to compile in certain features that enable fuzzing dnl of fwknop code - this is for testing purposes only. dnl From 86cdc90f4a961017d8e0821ef750cb65e1b79a07 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 15:47:41 -0700 Subject: [PATCH 056/219] [test suite] add open_ports_force_masq_access.conf file --- test/conf/open_ports_force_masq_access.conf | 6 ++++++ test/test-fwknop.pl | 1 + 2 files changed, 7 insertions(+) create mode 100644 test/conf/open_ports_force_masq_access.conf diff --git a/test/conf/open_ports_force_masq_access.conf b/test/conf/open_ports_force_masq_access.conf new file mode 100644 index 00000000..37f75f12 --- /dev/null +++ b/test/conf/open_ports_force_masq_access.conf @@ -0,0 +1,6 @@ +SOURCE 4.3.2.0/24, 127.0.0.0/24, 123.123.123.123/24, 23.43.0.0/16, 10.10.10.10 +OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/12345 +KEY fwknoptest +FW_ACCESS_TIMEOUT 3 +FORCE_MASQUERADE Y +DISABLE_DNAT Y diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 9c0c448f..c8ceb1dc 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -475,6 +475,7 @@ our %cf = ( 'tcp_pcap_filter' => "$conf_dir/tcp_pcap_filter_fwknopd.conf", 'icmp_pcap_filter' => "$conf_dir/icmp_pcap_filter_fwknopd.conf", 'open_ports_access' => "$conf_dir/open_ports_access.conf", + 'open_ports_force_masq_access' => "$conf_dir/open_ports_force_masq_access.conf", 'hmac_open_ports_access' => "$conf_dir/hmac_sha256_open_ports_access.conf", 'multi_gpg_access' => "$conf_dir/multi_gpg_access.conf", 'multi_gpg_no_pw_access' => "$conf_dir/multi_gpg_no_pw_access.conf", From 7dc41e68eff9e19ab4d1e4084978b8127cc45dcf Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 15:48:14 -0700 Subject: [PATCH 057/219] [test suite] add open_ports_force_masq_access.conf file --- Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.am b/Makefile.am index d077fbf5..6edcfc7c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -297,6 +297,7 @@ EXTRA_DIST = \ test/conf/no_subnet_source_match_access.conf \ test/conf/ofb_mode_access.conf \ test/conf/open_ports_access.conf \ + test/conf/open_ports_force_masq_access.conf \ test/conf/override_fwknopd.conf \ test/conf/override2_fwknopd.conf \ test/conf/override_no_digest_tracking_fwknopd.conf \ From ffeb60677d926882063e89896b6c16cc9a82e334 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 15:49:08 -0700 Subject: [PATCH 058/219] [test suite] update SNAT MASQ test to use force masq access file --- test/tests/rijndael.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/tests/rijndael.pl b/test/tests/rijndael.pl index b7fbd341..26fd710c 100644 --- a/test/tests/rijndael.pl +++ b/test/tests/rijndael.pl @@ -856,7 +856,8 @@ 'detail' => "SNAT MASQUERADE", 'function' => \&spa_cycle, 'cmdline' => "$default_client_args -N $internal_nat_host:22", - 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_no_translate_ip"} -a $cf{'open_ports_access'} / . + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_no_translate_ip"} / . + qq/-a $cf{'open_ports_force_masq_access'} / . "-d $default_digest_file -p $default_pid_file $intf_str", 'server_positive_output_matches' => [ qr/FWKNOP_FORWARD\s.*dport\s22\s/, From 654f455ba685b0272b19e1689d13d0e4849a2751 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 15:49:19 -0700 Subject: [PATCH 059/219] Revert "[server] use 'success' string for firewalld as returned firewall-cmd for command success" This reverts commit 1e33119b04a583fbf18b5b562edb14301a2ca7d6. --- server/fw_util_firewalld.c | 46 +++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 31efd191..60a9472d 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -299,9 +299,6 @@ comment_match_exists(const fko_srv_options_t * const opts) log_msg(LOG_DEBUG, "comment_match_exists() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(strncmp(err_buf, "success", strlen("success")) != 0) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); - zero_cmd_buffers(); snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " FIREWD_LIST_RULES_ARGS, @@ -314,6 +311,9 @@ comment_match_exists(const fko_srv_options_t * const opts) WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(cmd_out); + if(!EXTCMD_IS_SUCCESS(res)) + log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); + ndx = strstr(cmd_out, TMP_COMMENT); if(ndx == NULL) res = 0; /* did not find the tmp comment */ @@ -342,7 +342,7 @@ comment_match_exists(const fko_srv_options_t * const opts) static int add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0, rv = 0; + int res = 0; zero_cmd_buffers(); @@ -360,17 +360,14 @@ add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) log_msg(LOG_DEBUG, "add_jump_rule() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(strncmp(err_buf, "success", strlen("success")) == 0) - { + if(EXTCMD_IS_SUCCESS(res)) log_msg(LOG_INFO, "Added jump rule from chain: %s to chain: %s", fwc.chain[chain_num].from_chain, fwc.chain[chain_num].to_chain); - rv = 1; - } else log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - return rv; + return res; } static int @@ -393,7 +390,7 @@ chain_exists(const fko_srv_options_t * const opts, const int chain_num) log_msg(LOG_DEBUG, "chain_exists() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(strncmp(err_buf, "success", strlen("success")) == 0) + if(EXTCMD_IS_SUCCESS(res)) log_msg(LOG_DEBUG, "'%s' table '%s' chain exists", fwc.chain[chain_num].table, fwc.chain[chain_num].to_chain); @@ -506,7 +503,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) cmd_buf, res); /* Expect full success on this */ - if(!EXTCMD_IS_SUCCESS(res)) + if(! EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); got_err++; @@ -544,7 +541,7 @@ fw_dump_rules(const fko_srv_options_t * const opts) cmd_buf, res); /* Expect full success on this */ - if(!EXTCMD_IS_SUCCESS(res)) + if(! EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); got_err++; @@ -590,7 +587,7 @@ delete_all_chains(const fko_srv_options_t * const opts) cmd_buf, res, err_buf); /* Expect full success on this */ - if(strncmp(err_buf, "success", strlen("success")) != 0) + if(! EXTCMD_IS_SUCCESS(res)) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); cmd_ctr++; @@ -614,7 +611,7 @@ delete_all_chains(const fko_srv_options_t * const opts) cmd_buf, res, err_buf); /* Expect full success on this */ - if(strncmp(err_buf, "success", strlen("success")) != 0) + if(! EXTCMD_IS_SUCCESS(res)) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); zero_cmd_buffers(); @@ -633,7 +630,7 @@ delete_all_chains(const fko_srv_options_t * const opts) cmd_buf, res, err_buf); /* Expect full success on this */ - if(strncmp(err_buf, "success", strlen("success")) != 0) + if(! EXTCMD_IS_SUCCESS(res)) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); } @@ -643,7 +640,7 @@ delete_all_chains(const fko_srv_options_t * const opts) static int create_chain(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0, rv = 0; + int res = 0; zero_cmd_buffers(); @@ -663,12 +660,10 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) cmd_buf, res, err_buf); /* Expect full success on this */ - if(strncmp(err_buf, "success", strlen("success")) != 0) + if(! EXTCMD_IS_SUCCESS(res)) log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - else - rv = 1; - return rv; + return res; } static void @@ -702,14 +697,14 @@ create_fw_chains(const fko_srv_options_t * const opts) /* Create the chain */ - if(! create_chain(opts, i)) + if(! EXTCMD_IS_SUCCESS(create_chain(opts, i))) got_err++; /* Then create the jump rule to that chain if it * doesn't already exist (which is possible) */ if(jump_rule_exists(opts, i) == 0) - if(! add_jump_rule(opts, i)) + if(! EXTCMD_IS_SUCCESS(add_jump_rule(opts, i))) got_err++; } } @@ -954,7 +949,7 @@ create_rule(const fko_srv_options_t * const opts, log_msg(LOG_DEBUG, "create_rule() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(strncmp(err_buf, "success", strlen("success")) == 0) + if(EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_DEBUG, "create_rule() Rule: '%s' added to %s", fw_rule, fw_chain); res = 1; @@ -1452,8 +1447,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(cmd_out); - log_msg(LOG_DEBUG, - "check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)", + log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)", cmd_buf, res, cmd_out); if(!EXTCMD_IS_SUCCESS(res)) @@ -1565,7 +1559,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(strncmp(err_buf, "success", strlen("success")) == 0) + if(EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_INFO, "Removed rule %s from %s with expire time of %u", rule_num_str, ch[i].to_chain, rule_exp From 912c625e9e71ec186d7c8ee6179e34a2ee00dfd7 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 15:55:20 -0700 Subject: [PATCH 060/219] [server] remove DISABLE_DNAT exception for SPA packets that request a NAT operation - this is reserved for FORCE_NAT scenarios --- server/fw_util_firewalld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 60a9472d..12fe3273 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -1339,7 +1339,7 @@ process_spa_request(const fko_srv_options_t * const opts, /* DNAT rule */ - if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + if(strlen(dnat_chain->to_chain)) dnat_rule(opts, acc, dnat_chain, nat_ip, nat_port, fst_proto, fst_port, spadat, exp_ts, now); From cf8c4df50e20b352897b130fa1abde6bb8a75eeb Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 15:57:44 -0700 Subject: [PATCH 061/219] [server] remove DISABLE_DNAT exception for SPA packets that request a NAT operation - this is reserved for FORCE_NAT scenarios --- server/fw_util_iptables.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 2d42d07b..fd348a5a 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1341,7 +1341,7 @@ process_spa_request(const fko_srv_options_t * const opts, /* DNAT rule */ - if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) + if(strlen(dnat_chain->to_chain)) dnat_rule(opts, acc, dnat_chain, nat_ip, nat_port, fst_proto, fst_port, spadat, exp_ts, now); From c0f3ed38a8f2347e9db5679fa2488ad3cc31c94a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 16:01:29 -0700 Subject: [PATCH 062/219] [server] further error status simplication for firewalld --- server/fw_util_firewalld.c | 56 ++++++++++++++++++-------------------- server/fw_util_firewalld.h | 4 ++- 2 files changed, 30 insertions(+), 30 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 12fe3273..d6506987 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -342,7 +342,7 @@ comment_match_exists(const fko_srv_options_t * const opts) static int add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0; + int res = 0, rv = 0; zero_cmd_buffers(); @@ -361,19 +361,22 @@ add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) cmd_buf, res, err_buf); if(EXTCMD_IS_SUCCESS(res)) + { log_msg(LOG_INFO, "Added jump rule from chain: %s to chain: %s", fwc.chain[chain_num].from_chain, fwc.chain[chain_num].to_chain); + rv = 1; + } else log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - return res; + return rv; } static int chain_exists(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0; + int res = 0, rv = 0; zero_cmd_buffers(); @@ -390,14 +393,17 @@ chain_exists(const fko_srv_options_t * const opts, const int chain_num) log_msg(LOG_DEBUG, "chain_exists() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); - if(EXTCMD_IS_SUCCESS(res)) + if(strstr(err_buf, FIREWD_CMD_FAIL_STR) == NULL) + { log_msg(LOG_DEBUG, "'%s' table '%s' chain exists", fwc.chain[chain_num].table, fwc.chain[chain_num].to_chain); + rv = 1; + } else log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - return res; + return rv; } static int @@ -640,7 +646,7 @@ delete_all_chains(const fko_srv_options_t * const opts) static int create_chain(const fko_srv_options_t * const opts, const int chain_num) { - int res = 0; + int res = 0, rv = 0; zero_cmd_buffers(); @@ -660,24 +666,30 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) cmd_buf, res, err_buf); /* Expect full success on this */ - if(! EXTCMD_IS_SUCCESS(res)) + if(EXTCMD_IS_SUCCESS(res)) + rv = 1; + else log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - return res; + return rv; } -static void +static int mk_chain(const fko_srv_options_t * const opts, const int chain_num) { + int err = 0; + /* Make sure the required chain and jump rule exist */ - if(chain_exists(opts, chain_num) == 0) - create_chain(opts, chain_num); + if(! chain_exists(opts, chain_num)) + if (! create_chain(opts, chain_num)) + err++; - if (jump_rule_exists(opts, chain_num) == 0) - add_jump_rule(opts, chain_num); + if (jump_rule_exists(opts, chain_num)) + if(! add_jump_rule(opts, chain_num)) + err++; - return; + return err; } /* Create the fwknop custom chains (at least those that are configured). @@ -692,21 +704,7 @@ create_fw_chains(const fko_srv_options_t * const opts) if(fwc.chain[i].target[0] == '\0') continue; - if(chain_exists(opts, i) == 0) - { - - /* Create the chain - */ - if(! EXTCMD_IS_SUCCESS(create_chain(opts, i))) - got_err++; - - /* Then create the jump rule to that chain if it - * doesn't already exist (which is possible) - */ - if(jump_rule_exists(opts, i) == 0) - if(! EXTCMD_IS_SUCCESS(add_jump_rule(opts, i))) - got_err++; - } + got_err += mk_chain(opts, i); } return(got_err); diff --git a/server/fw_util_firewalld.h b/server/fw_util_firewalld.h index 861ee323..9b2534e7 100644 --- a/server/fw_util_firewalld.h +++ b/server/fw_util_firewalld.h @@ -31,7 +31,9 @@ #ifndef FW_UTIL_FIREWALLD_H #define FW_UTIL_FIREWALLD_H -#define SNAT_TARGET_BUFSIZE 64 +#define SNAT_TARGET_BUFSIZE 64 + +#define FIREWD_CMD_FAIL_STR "COMMAND_FAILED" /* returned by firewall-cmd */ #if HAVE_EXECVPE #define SH_REDIR "" /* the shell is not used when execvpe() is available */ From 1e9f7e94f0152e14535ce66de915ee05664d9a3b Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Apr 2015 16:05:01 -0700 Subject: [PATCH 063/219] [server] consolidate chain creation within mk_chain() --- server/fw_util_firewalld.c | 2 +- server/fw_util_iptables.c | 30 ++++++++++-------------------- 2 files changed, 11 insertions(+), 21 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index d6506987..d93bf7bb 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -682,7 +682,7 @@ mk_chain(const fko_srv_options_t * const opts, const int chain_num) /* Make sure the required chain and jump rule exist */ if(! chain_exists(opts, chain_num)) - if (! create_chain(opts, chain_num)) + if(! create_chain(opts, chain_num)) err++; if (jump_rule_exists(opts, chain_num)) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index fd348a5a..f20cf98b 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -676,15 +676,19 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) static void mk_chain(const fko_srv_options_t * const opts, const int chain_num) { + int err = 0; + /* Make sure the required chain and jump rule exist */ - if(chain_exists(opts, chain_num) == 0) - create_chain(opts, chain_num); + if(! chain_exists(opts, chain_num)) + if(! create_chain(opts, chain_num)) + err++; - if (jump_rule_exists(opts, chain_num) == 0) - add_jump_rule(opts, chain_num); + if (! jump_rule_exists(opts, chain_num)) + if(! add_jump_rule(opts, chain_num)) + err++; - return; + return err; } /* Create the fwknop custom chains (at least those that are configured). @@ -699,21 +703,7 @@ create_fw_chains(const fko_srv_options_t * const opts) if(fwc.chain[i].target[0] == '\0') continue; - if(chain_exists(opts, i) == 0) - { - - /* Create the chain - */ - if(! create_chain(opts, i)) - got_err++; - - /* Then create the jump rule to that chain if it - * doesn't already exist (which is possible) - */ - if(jump_rule_exists(opts, i) == 0) - if(! add_jump_rule(opts, i)) - got_err++; - } + got_err += mk_chain(opts, i); } return(got_err); From fba6473b1cd5475311c990477dbff05d56d439dc Mon Sep 17 00:00:00 2001 From: dan brooks <dan@danbrooks.net> Date: Wed, 15 Apr 2015 16:52:34 -0400 Subject: [PATCH 064/219] android: allow definition of custom server udp port --- android/project/jni/fwknop/fwknop_client.c | 10 ++++++++- android/project/res/layout/main.xml | 21 +++++++++++++++++++ .../com/max2idea/android/fwknop/Fwknop.java | 13 ++++++++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/android/project/jni/fwknop/fwknop_client.c b/android/project/jni/fwknop/fwknop_client.c index 1c300c32..9188f15b 100644 --- a/android/project/jni/fwknop/fwknop_client.c +++ b/android/project/jni/fwknop/fwknop_client.c @@ -68,6 +68,10 @@ jstring Java_com_max2idea_android_fwknop_Fwknop_sendSPAPacket(JNIEnv* env, jstring jdestip = (*env)->GetObjectField(env, thiz, fid); const char *destip_str = (*env)->GetStringUTFChars(env, jdestip, 0); + fid = (*env)->GetFieldID(env, c, "destport_str", "Ljava/lang/String;"); + jstring jdestport = (*env)->GetObjectField(env, thiz, fid); + const char *destport_str = (*env)->GetStringUTFChars(env, jdestport, 0); + fid = (*env)->GetFieldID(env, c, "passwd_str", "Ljava/lang/String;"); jstring jpasswd = (*env)->GetObjectField(env, thiz, fid); const char *passwd_str = (*env)->GetStringUTFChars(env, jpasswd, 0); @@ -94,6 +98,10 @@ jstring Java_com_max2idea_android_fwknop_Fwknop_sendSPAPacket(JNIEnv* env, sprintf(res_msg, "Error: Invalid or missing destination IP"); goto cleanup2; } + if(destport_str == NULL) { + sprintf(res_msg, "Error: Invalid or missing destination port"); + goto cleanup2; + } if(passwd_str == NULL) { sprintf(res_msg, "Error: Invalid or missing password"); goto cleanup2; @@ -112,7 +120,7 @@ jstring Java_com_max2idea_android_fwknop_Fwknop_sendSPAPacket(JNIEnv* env, /* Set our spa server info */ opts.spa_server_str = (char*)destip_str; - opts.spa_dst_port = FKO_DEFAULT_PORT; /* Until we make this settable. */ + opts.spa_dst_port = atoi(destport_str); /* Intialize the context */ diff --git a/android/project/res/layout/main.xml b/android/project/res/layout/main.xml index 17b5497b..d25a734a 100644 --- a/android/project/res/layout/main.xml +++ b/android/project/res/layout/main.xml @@ -88,6 +88,27 @@ android:textSize="20dip" /> </LinearLayout> + <LinearLayout android:id="@+id/destPortl" + android:orientation="horizontal" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + > + <TextView + android:id="@+id/destPortStr" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Server UDP Port: " + android:textSize="20dip" + /> + <EditText + android:id="@+id/destPort" + android:layout_width="fill_parent" + android:layout_height="wrap_content" + android:text="62201" + android:singleLine="true" + android:textSize="20dip" + /> + </LinearLayout> <LinearLayout android:id="@+id/fwTimeoutl" android:orientation="horizontal" android:layout_width="fill_parent" diff --git a/android/project/src/com/max2idea/android/fwknop/Fwknop.java b/android/project/src/com/max2idea/android/fwknop/Fwknop.java index 23d32c84..d1c38b29 100644 --- a/android/project/src/com/max2idea/android/fwknop/Fwknop.java +++ b/android/project/src/com/max2idea/android/fwknop/Fwknop.java @@ -98,6 +98,7 @@ public class Fwknop extends Activity { private EditText mPasswd; private EditText mHmac; private EditText mDestip; + private EditText mDestport; private EditText mTCPAccessPorts; private EditText mUDPAccessPorts; private EditText mFwTimeout; @@ -107,6 +108,7 @@ public class Fwknop extends Activity { private String passwd_str; private String hmac_str; private String destip_str; + private String destport_str; private String fw_timeout_str; private CheckBox mCheck; private String externalIP = ""; @@ -344,6 +346,14 @@ public class Fwknop extends Activity { return; } + if (this.mDestport != null && !this.mDestport.getText().toString().trim().equals("")) { + this.destport_str = mDestport.getText().toString(); + edit.putString("destport_str", mDestport.getText().toString()); + } else { + this.UIAlert("Input error", "Please enter a valid Server port", this); + return; + } + if (this.mFwTimeout != null) { int fw_timeout; try { @@ -381,6 +391,9 @@ public class Fwknop extends Activity { this.mDestip = (EditText) findViewById(R.id.destIP); this.mDestip.setText(prefs.getString("destip_str", "")); + this.mDestport = (EditText) findViewById(R.id.destPort); + this.mDestport.setText(prefs.getString("destport_str", "62201")); + this.mFwTimeout = (EditText) findViewById(R.id.fwTimeout); this.mFwTimeout.setText(prefs.getString("fw_timeout_str", "60")); From 55cbebe7bbda3540d6113bc6807be5ddebbaf059 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 18 Apr 2015 05:30:39 -0700 Subject: [PATCH 065/219] ChangeLog and doc updates --- ChangeLog | 16 +++++++++++++--- doc/fwknopd.man.asciidoc | 18 +++++++++++++++++- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 28f18c5d..47d8642c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,14 @@ -fwknop-2.6.6 (02//2015): +fwknop-2.6.6 (04//2015): + - [server] Add the ability for fwknopd to function as an generic SPA + gateway. This allows scenarios such as the fwknopd system providing DHCP + addresses to client systems, but those systems would be blocking by + default from accessing the broader Internet until a valid SPA packet is + sent to the gateway. Two new access.conf variables support this feature: + DISABLE_DNAT (do not build any DNAT rules for forwarded connections) and + FORWARD_ALL (allow all traffic to be forwarded instead of specfic + services requested within an SPA packet). So far, this feature is only + supported on systems running iptables or firewalld. The idea was + contributed by github user "spartan1833" via issue 131. - [server] Bug fix when compiled with --enable-udp-server to not include pcap.h, which is likely not installed whenever libpcap is also not installed. This bug was reported by Alexander Kozhevnikov. @@ -6,8 +16,8 @@ fwknop-2.6.6 (02//2015): enables simple memory bug detection in AFL at the cost of a small performance hit. - [test suite] Handle versions of lcov that don't have the --rc argument - which is normally used to force the creation branch coverage stats when - code coverage reports are created. + which is normally used to force the creation of branch coverage stats + when code coverage reports are created. - [build] Add --enable-asan-support to autoconf configure script to enable Google's Address Sanitizer (ASan) support. This feature is used during the testing phase for new fwknop releases. diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index 7707be27..33f5279f 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -283,7 +283,10 @@ See the '@sysconfdir@/fwknop/fwknopd.conf' file for the full list and correspond built with the MASQUERADE target (since then the internal IP does not have to be defined here in the '@sysconfdir@/fwknop/fwknopd.conf' file), but if you want *fwknopd* to use the SNAT target, you must also define an - IP address with the ``SNAT_TRANSLATE_IP'' variable. + IP address with the ``SNAT_TRANSLATE_IP'' variable. Note that this + variable is generally deprecated in favor of the ``FORCE_SNAT'' variable + in the '@sysconfdir@/fwknop/access.conf' file which enables per-stanza + control over the SNAT IP. *ENABLE_IPT_OUTPUT* '<Y/N>':: Add ACCEPT rules to the FWKNOP_OUTPUT chain. This is usually only useful @@ -546,6 +549,19 @@ directive starts a new stanza. necessary to also specify an IP address for SNAT rules because the MASQUERADE target is used instead. +*FORWARD_ALL* '<Y/N>':: + In NAT scenarios, control whether all traffic is forwarded through the + *fwknopd* system as opposed to just forwarding connections to specific + services as requested by the *fwknop* client. + +*DISABLE_DNAT* '<Y/N>':: + Control whether DNAT rules are created in FORCE_NAT scenarios. This is + mainly used in conjunction with the FORWARD_ALL variable to allow + *fwknopd* to act essentially as an SPA gateway. I.e., the *fwknop* client + is used to gain access via SPA to the broader Internet after being granted + an IP via DHCP, but prior to sending the SPA packet all traffic is blocked + by default to the Internet. + *GPG_DECRYPT_ID* '<keyID>':: Define a GnuPG key ID to use for decrypting SPA messages that have been encrypted by an *fwknop* client. This keyword is From 19f00c0dbef4548cb702794a5757301357b2a259 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 18 Apr 2015 05:33:00 -0700 Subject: [PATCH 066/219] [test suite] add jump rule validation, include complete fwknopd chain listings --- test/test-fwknop.pl | 46 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 39 insertions(+), 7 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index c8ceb1dc..79a81237 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -91,6 +91,7 @@ our $FW_TYPE = 'iptables'; ### default to iptables our $FW_PREFIX = 'IPT'; our $fw_conf_prefix = 'ipt'; my $prefer_iptables = 0; +my $fw_bin = ''; our $spoof_user = 'testuser'; @@ -6866,8 +6867,11 @@ sub os_fw_detect() { close UNAME; if ($platform eq $LINUX) { - unless ($prefer_iptables) { - if (&find_command('firewalld')) { + if ($prefer_iptables) { + $fw_bin = &find_command('iptables'); + } else { + $fw_bin = &find_command('firewall-cmd'); + if ($fw_bin) { $FW_TYPE = 'firewalld'; $FW_PREFIX = 'FIREWD'; $fw_conf_prefix = 'firewd'; @@ -7250,6 +7254,8 @@ sub parse_valgrind_flagged_functions() { sub is_fw_rule_active() { my $test_hr = shift; + my $rv = 1; + my $conf_args = $default_server_conf_args; if ($test_hr->{'server_conf'}) { @@ -7258,16 +7264,42 @@ sub is_fw_rule_active() { } if ($test_hr->{'no_ip_check'}) { - return 1 if &run_cmd("$lib_view_str $fwknopdCmd " . - qq{$conf_args --fw-list | grep -v "# DISABLED" |grep _exp_}, + &run_cmd("$lib_view_str $fwknopdCmd " . + qq{$conf_args --fw-list | grep -v "# DISABLED" }, $cmd_out_tmp, $curr_test_file); + unless (&file_find_regex([qr/_exp_/], + $MATCH_ALL, $NO_APPEND_RESULTS, $cmd_out_tmp)) { + $rv = 0; + } } else { - return 1 if &run_cmd("$lib_view_str $fwknopdCmd " . - qq{$conf_args --fw-list | grep -v "# DISABLED" |grep $fake_ip |grep _exp_}, + &run_cmd("$lib_view_str $fwknopdCmd " . + qq{$conf_args --fw-list | grep -v "# DISABLED" }, $cmd_out_tmp, $curr_test_file); + unless (&file_find_regex([qr/\s$fake_ip\s.*_exp_/], + $MATCH_ALL, $NO_APPEND_RESULTS, $cmd_out_tmp)) { + $rv = 0; + } } - return 0; + if ($fw_bin and $FW_TYPE eq 'firewalld' or $FW_TYPE eq 'iptables') { + ### make sure there is at least one jump rule + ### 79 5304 FWKNOP_INPUT all -- * * 0.0.0.0/0 0.0.0.0/0 + if ($FW_TYPE eq 'firewalld') { + unless (&run_cmd("$fw_bin --direct --passthrough ipv4 -t filter " . + "-nL -v | grep -v Chain | grep FWKNOP_ ", $cmd_out_tmp, $curr_test_file)) { + &write_test_file("[-] No jump rule found.\n", $curr_test_file); + $rv = 0; + } + } else { + unless (&run_cmd("$fw_bin -t filter " . + "-nL -v | grep -v Chain | grep FWKNOP_ ", $cmd_out_tmp, $curr_test_file)) { + &write_test_file("[-] No jump rule found.\n", $curr_test_file); + $rv = 0; + } + } + } + + return $rv; } sub is_fwknopd_running() { From f06c6e3b9c4e4d5a83af4d22f0d5d7592f1a45de Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 18 Apr 2015 05:37:31 -0700 Subject: [PATCH 067/219] [test suite] allow default FORCE_NAT 0.0.0.0 0 to apply --- test/conf/hmac_forward_all_access.conf | 1 - 1 file changed, 1 deletion(-) diff --git a/test/conf/hmac_forward_all_access.conf b/test/conf/hmac_forward_all_access.conf index 4ff14398..1b965c80 100644 --- a/test/conf/hmac_forward_all_access.conf +++ b/test/conf/hmac_forward_all_access.conf @@ -2,7 +2,6 @@ SOURCE ANY KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== FW_ACCESS_TIMEOUT 3 -FORCE_NAT 0.0.0.0 0 FORCE_SNAT 123.4.4.4 DISABLE_DNAT Y FORWARD_ALL Y From 03959653ca1dee79337bea76bd2320fe86418569 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 18 Apr 2015 05:38:35 -0700 Subject: [PATCH 068/219] [server] differentiate MASQUERADE from SNAT with a dedicated FWKNOP_MASQUERADE chain --- server/fw_util_firewalld.c | 76 +++++++++++++++++--------------------- server/fw_util_firewalld.h | 1 + server/fw_util_iptables.c | 72 ++++++++++++++++-------------------- server/fwknopd.conf | 4 +- server/fwknopd_common.h | 4 +- 5 files changed, 69 insertions(+), 88 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index d93bf7bb..96da72db 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -685,7 +685,7 @@ mk_chain(const fko_srv_options_t * const opts, const int chain_num) if(! create_chain(opts, chain_num)) err++; - if (jump_rule_exists(opts, chain_num)) + if (! jump_rule_exists(opts, chain_num)) if(! add_jump_rule(opts, chain_num)) err++; @@ -815,7 +815,7 @@ fw_config_init(fko_srv_options_t * const opts) #if FIREWALL_FIREWALLD char cmd_passthru[512]; snprintf(cmd_passthru, sizeof cmd_passthru, "%s %s ", - opts->config[CONF_FIREWALL_EXE], " --direct --passthrough ipv4 "); + opts->config[CONF_FIREWALL_EXE], FIREWD_CMD_PREFIX); strlcpy(fwc.fw_command, cmd_passthru, sizeof(fwc.fw_command)); #else strlcpy(fwc.fw_command, opts->config[CONF_FIREWALL_EXE], sizeof(fwc.fw_command)); @@ -852,6 +852,9 @@ fw_config_init(fko_srv_options_t * const opts) */ if(strncasecmp(opts->config[CONF_ENABLE_FIREWD_SNAT], "Y", 1)==0) { + /* Support both SNAT and MASQUERADE - this will be controlled + * via the access.conf configuration for individual rules + */ if(set_fw_chain_conf(FIREWD_MASQUERADE_ACCESS, opts->config[CONF_FIREWD_MASQUERADE_ACCESS]) != 1) return 0; @@ -1296,27 +1299,36 @@ process_spa_request(const fko_srv_options_t * const opts, if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_NAT_ACCESS_MSG - || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) + || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG + || acc->force_nat) { - ndx = strchr(spadat->nat_access, ','); - if(ndx != NULL) + if(acc->force_nat) { - strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); - if (! is_valid_ipv4_addr(nat_ip)) + strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); + nat_port = acc->force_nat_port; + } + else + { + ndx = strchr(spadat->nat_access, ','); + if(ndx != NULL) { - log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); - free_acc_port_list(port_list); - return res; - } + strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); + if (! is_valid_ipv4_addr(nat_ip)) + { + log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); + free_acc_port_list(port_list); + return res; + } - nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, - NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_INFO, "Invalid NAT port in SPA message"); - free_acc_port_list(port_list); - res = is_err; - return res; + nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, + NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_INFO, "Invalid NAT port in SPA message"); + free_acc_port_list(port_list); + res = is_err; + return res; + } } } @@ -1335,35 +1347,13 @@ process_spa_request(const fko_srv_options_t * const opts, nat_port, fst_proto, fst_port, spadat, exp_ts, now); } - /* DNAT rule - */ - if(strlen(dnat_chain->to_chain)) - dnat_rule(opts, acc, dnat_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - - if(acc->force_snat) - snat_rule(opts, acc, nat_ip, nat_port, - fst_proto, fst_port, spadat, exp_ts, now); - } - else if(acc->force_nat) /* handle force NAT scenarios */ - { - strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); - nat_port = acc->force_nat_port; - - /* FORWARD access rule - */ - if(strlen(fwd_chain->to_chain)) - forward_access_rule(opts, acc, fwd_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - /* DNAT rule */ if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) dnat_rule(opts, acc, dnat_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); + nat_port, fst_proto, fst_port, spadat, exp_ts, now); - /* SNAT rule if required - we only allow this for FORCE_NAT - * access stanzas for now until a new SPA packet type is added. + /* SNAT rule */ if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_FIREWD_SNAT], "Y", 1) == 0) snat_rule(opts, acc, nat_ip, nat_port, diff --git a/server/fw_util_firewalld.h b/server/fw_util_firewalld.h index 9b2534e7..fdac0dcb 100644 --- a/server/fw_util_firewalld.h +++ b/server/fw_util_firewalld.h @@ -34,6 +34,7 @@ #define SNAT_TARGET_BUFSIZE 64 #define FIREWD_CMD_FAIL_STR "COMMAND_FAILED" /* returned by firewall-cmd */ +#define FIREWD_CMD_PREFIX "--direct --passthrough ipv4" #if HAVE_EXECVPE #define SH_REDIR "" /* the shell is not used when execvpe() is available */ diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index f20cf98b..e355c04c 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -844,6 +844,9 @@ fw_config_init(fko_srv_options_t * const opts) */ if(strncasecmp(opts->config[CONF_ENABLE_IPT_SNAT], "Y", 1)==0) { + /* Support both SNAT and MASQUERADE - this will be controlled + * via the access.conf configuration for individual rules + */ if(set_fw_chain_conf(IPT_MASQUERADE_ACCESS, opts->config[CONF_IPT_MASQUERADE_ACCESS]) != 1) return 0; @@ -1290,27 +1293,36 @@ process_spa_request(const fko_srv_options_t * const opts, if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG || spadat->message_type == FKO_NAT_ACCESS_MSG - || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) + || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG + || acc->force_nat) { - ndx = strchr(spadat->nat_access, ','); - if(ndx != NULL) + if(acc->force_nat) { - strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); - if (! is_valid_ipv4_addr(nat_ip)) + strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); + nat_port = acc->force_nat_port; + } + else + { + ndx = strchr(spadat->nat_access, ','); + if(ndx != NULL) { - log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); - free_acc_port_list(port_list); - return res; - } + strlcpy(nat_ip, spadat->nat_access, (ndx-spadat->nat_access)+1); + if (! is_valid_ipv4_addr(nat_ip)) + { + log_msg(LOG_INFO, "Invalid NAT IP in SPA message"); + free_acc_port_list(port_list); + return res; + } - nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, - NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_INFO, "Invalid NAT port in SPA message"); - free_acc_port_list(port_list); - res = is_err; - return res; + nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT, + NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_INFO, "Invalid NAT port in SPA message"); + free_acc_port_list(port_list); + res = is_err; + return res; + } } } @@ -1331,33 +1343,11 @@ process_spa_request(const fko_srv_options_t * const opts, /* DNAT rule */ - if(strlen(dnat_chain->to_chain)) + if(strlen(dnat_chain->to_chain) && !acc->disable_nat) dnat_rule(opts, acc, dnat_chain, nat_ip, nat_port, fst_proto, fst_port, spadat, exp_ts, now); - if(acc->force_snat) - snat_rule(opts, acc, nat_ip, nat_port, - fst_proto, fst_port, spadat, exp_ts, now); - } - else if(acc->force_nat) /* handle force NAT scenarios */ - { - strlcpy(nat_ip, acc->force_nat_ip, sizeof(nat_ip)); - nat_port = acc->force_nat_port; - - /* FORWARD access rule - */ - if(strlen(fwd_chain->to_chain)) - forward_access_rule(opts, acc, fwd_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - - /* DNAT rule - */ - if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) - dnat_rule(opts, acc, dnat_chain, nat_ip, - nat_port, fst_proto, fst_port, spadat, exp_ts, now); - - /* SNAT rule if required - we only allow this for FORCE_NAT - * access stanzas for now until a new SPA packet type is added. + /* SNAT rule */ if(acc->force_snat || strncasecmp(opts->config[CONF_ENABLE_IPT_SNAT], "Y", 1) == 0) snat_rule(opts, acc, nat_ip, nat_port, diff --git a/server/fwknopd.conf b/server/fwknopd.conf index 1c2621a2..f406acc5 100644 --- a/server/fwknopd.conf +++ b/server/fwknopd.conf @@ -303,7 +303,7 @@ # FIREWD_MASQUERADE_ACCESS variable. # #FIREWD_SNAT_ACCESS SNAT, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1; -#FIREWD_MASQUERADE_ACCESS MASQUERADE, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1; +#FIREWD_MASQUERADE_ACCESS MASQUERADE, nat, POSTROUTING, 1, FWKNOP_MASQUERADE, 1; # The ENABLE_COMMENT_MATCH_CHECK variable instructs fwknopd to check for the # firewalld 'comment' match at start up. If it's not found, then fwknopd will @@ -411,7 +411,7 @@ # IPT_MASQUERADE_ACCESS variable. # #IPT_SNAT_ACCESS SNAT, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1; -#IPT_MASQUERADE_ACCESS MASQUERADE, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1; +#IPT_MASQUERADE_ACCESS MASQUERADE, nat, POSTROUTING, 1, FWKNOP_MASQUERADE, 1; # The ENABLE_COMMENT_MATCH_CHECK variable instructs fwknopd to check for the # iptables 'comment' match at start up. If it's not found, then fwknopd will diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index 7b191041..dc6f5160 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -141,7 +141,7 @@ #define DEF_FIREWD_FORWARD_ACCESS "ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD, 1" #define DEF_FIREWD_DNAT_ACCESS "DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING, 1" #define DEF_FIREWD_SNAT_ACCESS "SNAT, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1" - #define DEF_FIREWD_MASQUERADE_ACCESS "MASQUERADE, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1" + #define DEF_FIREWD_MASQUERADE_ACCESS "MASQUERADE, nat, POSTROUTING, 1, FWKNOP_MASQUERADE, 1" #define RCHK_MAX_FIREWD_RULE_NUM (2 << 15) @@ -161,7 +161,7 @@ #define DEF_IPT_FORWARD_ACCESS "ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD, 1" #define DEF_IPT_DNAT_ACCESS "DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING, 1" #define DEF_IPT_SNAT_ACCESS "SNAT, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1" - #define DEF_IPT_MASQUERADE_ACCESS "MASQUERADE, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1" + #define DEF_IPT_MASQUERADE_ACCESS "MASQUERADE, nat, POSTROUTING, 1, FWKNOP_MASQUERADE, 1" #define RCHK_MAX_IPT_RULE_NUM (2 << 15) From bb5aa928d90963bc43ca320d0680b5bcaaa95718 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 18 Apr 2015 12:33:11 -0700 Subject: [PATCH 069/219] [server] fix typos from corresponding firewalld changes --- server/fw_util_iptables.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index e355c04c..54127ccf 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -673,7 +673,7 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) return rv; } -static void +static int mk_chain(const fko_srv_options_t * const opts, const int chain_num) { int err = 0; @@ -1343,7 +1343,7 @@ process_spa_request(const fko_srv_options_t * const opts, /* DNAT rule */ - if(strlen(dnat_chain->to_chain) && !acc->disable_nat) + if(strlen(dnat_chain->to_chain) && !acc->disable_dnat) dnat_rule(opts, acc, dnat_chain, nat_ip, nat_port, fst_proto, fst_port, spadat, exp_ts, now); From 0ecc2d233365234cd0690e19000bfd56d910104e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 07:10:26 -0700 Subject: [PATCH 070/219] minor docs update --- CREDITS | 6 ++++++ ChangeLog | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/CREDITS b/CREDITS index e3e59e24..de17d9e2 100644 --- a/CREDITS +++ b/CREDITS @@ -55,6 +55,7 @@ Franck Joncourt - Added log module support for the client. - Added the ability to read a passphrase from STDIN and also from a file descriptor via --fd (closes #74). + - Added libfko unit tests via the CUnit framework. Jonathan Schulz - Submitted patches to change HTTP connection type to 'close' for -R mode @@ -213,3 +214,8 @@ Grant Pannell Alexander Kozhevnikov - Reported a bug when fwknop is compiled with --enable-udp-server where the server was including pcap.h + +Dan Brooks + - Contributed a patch for the Android client app to add the definition of + custom server udp port. This is similiar to the --server-port argument + offered by the main fwknop client. diff --git a/ChangeLog b/ChangeLog index 47d8642c..c422272e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,9 @@ fwknop-2.6.6 (04//2015): - [server] Bug fix when compiled with --enable-udp-server to not include pcap.h, which is likely not installed whenever libpcap is also not installed. This bug was reported by Alexander Kozhevnikov. + - [android] (Dan Brooks) Contributed a patch for the Android client app to + add the definition of custom server udp port. This is similiar to the + --server-port argument offered by the main fwknop client. - [test suite] Set AFL_HARDEN=1 to AFL fuzzing wrapper scripts. This enables simple memory bug detection in AFL at the cost of a small performance hit. @@ -21,6 +24,8 @@ fwknop-2.6.6 (04//2015): - [build] Add --enable-asan-support to autoconf configure script to enable Google's Address Sanitizer (ASan) support. This feature is used during the testing phase for new fwknop releases. + - [test suite] (Franck Joncourt) Added libfko unit tests with the CUnit + framework. fwknop-2.6.5 (12/16/2014): - [server] (Grant Pannell) Added a new access.conf variable "DESTINATION" From 68db4b77a5c0c87682160e212a81acb4e682d8ee Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 07:11:10 -0700 Subject: [PATCH 071/219] [server] allow FORWARD_ALL to control whether FORCE_NAT is required --- server/access.c | 4 +-- test/conf/open_ports_force_masq_access.conf | 1 + test/tests/basic_operations.pl | 28 +++++++++++++++++---- test/tests/rijndael.pl | 5 ++-- 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/server/access.c b/server/access.c index 532dc969..38d7aaa3 100644 --- a/server/access.c +++ b/server/access.c @@ -1142,14 +1142,14 @@ acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t if((acc->force_snat == 1 || acc->force_masquerade == 1) && acc->force_nat == 0) { - if(acc->disable_dnat == 1) + if(acc->forward_all == 1) { add_acc_force_nat(opts, acc, "0.0.0.0 0"); } else { log_msg(LOG_ERR, - "[*] FORCE_SNAT/FORCE_MASQUERADE requires either FORCE_NAT or DISABLE_DNAT: '%s'", + "[*] FORCE_SNAT/FORCE_MASQUERADE requires either FORCE_NAT or FORWARD_ALL: '%s'", acc->source ); return(0); diff --git a/test/conf/open_ports_force_masq_access.conf b/test/conf/open_ports_force_masq_access.conf index 37f75f12..8cf013dd 100644 --- a/test/conf/open_ports_force_masq_access.conf +++ b/test/conf/open_ports_force_masq_access.conf @@ -3,4 +3,5 @@ OPEN_PORTS udp/6001, tcp/22, tcp/80, tcp/12345 KEY fwknoptest FW_ACCESS_TIMEOUT 3 FORCE_MASQUERADE Y +FORWARD_ALL Y DISABLE_DNAT Y diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index 3b308d93..f4dde2ec 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -3075,13 +3075,31 @@ { 'category' => 'basic operations', 'subcategory' => 'server', - 'detail' => 'FORCE_SNAT -> FORCE_NAT/DISABLE_DNAT', + 'detail' => 'FORCE_SNAT -> FORCE_NAT/FORWARD_ALL', 'function' => \&generic_exec, 'cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'require_force_nat_access'} / . "-d $default_digest_file -p $default_pid_file $intf_str --exit-parse-config", - 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/i], + 'positive_output_matches' => [qr/requires either FORCE_NAT or FORWARD_ALL/i], 'exec_err' => $YES, }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => 'FORCE_MASQUERADE -> FORCE_NAT/FORWARD_ALL', + 'function' => \&server_conf_files, + 'fwknopd_cmdline' => "$server_rewrite_conf_files --exit-parse-config", + 'exec_err' => $YES, + 'server_access_file' => [ + 'SOURCE any', + 'KEY testtest', + 'FORCE_MASQUERADE Y' + ], + 'server_conf_file' => [ + "ENABLE_${FW_PREFIX}_FORWARDING Y;", + "ENABLE_${FW_PREFIX}_SNAT Y;" + ], + 'positive_output_matches' => [qr/requires either FORCE_NAT or FORWARD_ALL/i], + }, { 'category' => 'basic operations', @@ -3675,7 +3693,7 @@ 'server_conf_file' => [ "ENABLE_${FW_PREFIX}_FORWARDING Y" ], - 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/], + 'positive_output_matches' => [qr/requires either FORCE_NAT or FORWARD_ALL/], }, { 'category' => 'basic operations', @@ -3688,7 +3706,7 @@ 'SOURCE any', 'KEY testtest', 'FORCE_SNAT 1.2.3.4', - 'DISABLE_DNAT Y' + 'FORWARD_ALL Y' ], 'server_conf_file' => [ "ENABLE_${FW_PREFIX}_FORWARDING Y" @@ -3711,7 +3729,7 @@ 'server_conf_file' => [ "ENABLE_${FW_PREFIX}_FORWARDING Y" ], - 'positive_output_matches' => [qr/requires either FORCE_NAT or DISABLE_DNAT/], + 'positive_output_matches' => [qr/requires either FORCE_NAT or FORWARD_ALL/], }, { diff --git a/test/tests/rijndael.pl b/test/tests/rijndael.pl index 26fd710c..26aab6a6 100644 --- a/test/tests/rijndael.pl +++ b/test/tests/rijndael.pl @@ -860,9 +860,8 @@ qq/-a $cf{'open_ports_force_masq_access'} / . "-d $default_digest_file -p $default_pid_file $intf_str", 'server_positive_output_matches' => [ - qr/FWKNOP_FORWARD\s.*dport\s22\s/, - qr/\*\/\sto\:$internal_nat_host\:22/i, - qr/MASQUERADE\s.*to\-ports/, + qr/FWKNOP_FORWARD\s.*0.0.0.0\s/, + qr/MASQUERADE\s.*all/, ], 'no_ip_check' => 1, 'fw_rule_created' => $NEW_RULE_REQUIRED, From b1100cb730a71bafb5bd42184e5981afc305858c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 07:16:30 -0700 Subject: [PATCH 072/219] [server] NAT validation only applies to systems running iptables or firewalld --- server/access.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/access.c b/server/access.c index 38d7aaa3..5686a8da 100644 --- a/server/access.c +++ b/server/access.c @@ -1139,6 +1139,7 @@ acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t } } +#if defined(FIREWALL_FIREWALLD) || defined(FIREWALL_IPTABLES) if((acc->force_snat == 1 || acc->force_masquerade == 1) && acc->force_nat == 0) { @@ -1155,6 +1156,7 @@ acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t return(0); } } +#endif if(acc->require_source_address == 0) { From cc765a23dba91f7ef4f7bbfe75dba90377cf4e68 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 12:22:55 -0700 Subject: [PATCH 073/219] [test suite] minor FORCE_NAT config tweak --- test/conf/require_force_nat_access.conf | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/conf/require_force_nat_access.conf b/test/conf/require_force_nat_access.conf index 23f71e21..d92e8240 100644 --- a/test/conf/require_force_nat_access.conf +++ b/test/conf/require_force_nat_access.conf @@ -2,7 +2,5 @@ SOURCE ANY KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== FW_ACCESS_TIMEOUT 3 -#FORCE_NAT 0.0.0.0 0 FORCE_SNAT 123.4.4.4 -#DISABLE_DNAT Y -FORWARD_ALL Y +DISABLE_DNAT Y From 93a3798cc10ea1a3eb746d8a2a1fc844410a9c83 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 13:25:11 -0700 Subject: [PATCH 074/219] [test suite] exclude server restart cycle from valgrind results parsing --- test/test-fwknop.pl | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 79a81237..62c6d181 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -2028,6 +2028,9 @@ sub server_start_stop_cycle() { my $rv = 1; + &write_test_file("[+] TEST: " . &get_msg($test_hr) . "\n", + $server_test_file); + &run_cmd("$lib_view_str $valgrind_str $fwknopdCmd $default_server_conf_args -S", $cmd_out_tmp, $curr_test_file); &run_cmd("$lib_view_str $valgrind_str $fwknopdCmd $default_server_conf_args -K", @@ -7156,6 +7159,10 @@ sub parse_valgrind_flagged_functions() { chomp $test_title; $is_prove_output = 1 if $test_title =~ /Test\:\:Valgrind/; last if $test_title =~ /valgrind\soutput/; + + ### exclude the start/stop test since it involves signals + ### that force leaks + last if $test_title =~ /start restart stop/; } } close F; From e333cba945925ae356d83ba0da3a95ee82bc8fb2 Mon Sep 17 00:00:00 2001 From: Ilya Tumaykin <itumaykin@gmail.com> Date: Mon, 20 Apr 2015 02:43:10 +0300 Subject: [PATCH 075/219] server: remove extra '/run' subdir from paths Having extra '/run' subdirectory hardcoded into paths used for options 'digest-file', 'pid-file', 'run-dir' is counterintuitive and can lead to bogus directory layouts when 'localstatedir' differs from the default value. For example, if 'localstatedir' is set to '/run', which is a common and recommended substitute for /var/run in many distros nowadays, then fwknop files will be placed under /run/run/fwknop. This changeset removes extra '/run' subdirectory from all relevant paths by changing DEF_RUN_DIR. Default value of 'localstatedir' is changed to '/var/run' so users who relied on the previous behaviour won't have to bother changing anything. This is tested and works. Gentoo have this patch applied since 2.6.0. --- doc/fwknopd.man.asciidoc | 10 +++++----- fwknop.spec | 2 +- server/fwknopd.8.in | 10 +++++----- server/fwknopd_common.h | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index 33f5279f..2f539ebe 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -68,7 +68,7 @@ COMMAND-LINE OPTIONS *-d, --digest-file*='<digest-file>':: Specify the location of the 'digest.cache' file. If this option is not given, 'fwknopd' will use the compile-time default location (typically - '@localstatedir@/run/fwknop/digest.cache'). + '@localstatedir@/fwknop/digest.cache'). *-D, --dump-config*:: Dump the configuration values that *fwknopd* derives from the @@ -131,7 +131,7 @@ COMMAND-LINE OPTIONS *-p, --pid-file*='<pid-file>':: Specify the location of the 'fwknopd.pid' file. If this option is not given, 'fwknopd' will use the compile-time default location (typically - '@localstatedir@/run/fwknop/fwknopd.pid). + '@localstatedir@/fwknop/fwknopd.pid). *-P, --pcap-filter*='<filter>':: Specify a Berkeley packet filter statement on the *fwknopd* command @@ -165,11 +165,11 @@ COMMAND-LINE OPTIONS *--rotate-digest-cache*:: Rotate the digest cache file by renaming it to ``<name>-old'', and starting a new one. The digest cache file is typically found in - '@localstatedir@/run/fwknop/digest.cache'. + '@localstatedir@/fwknop/digest.cache'. *-r, --run-dir*='<path>':: Specify the directory where *fwknopd* writes run time state files. The - default is '@localstatedir@/run'. + default is '@localstatedir@'. *-S, --status*:: Display the status of any *fwknopd* processes that may or not be @@ -399,7 +399,7 @@ See the '@sysconfdir@/fwknop/fwknopd.conf' file for the full list and correspond *FWKNOP_RUN_DIR* '<path>':: Specify the directory where *fwknopd* writes run time state files. The - default is '@localstatedir@/run'. + default is '@localstatedir@'. ACCESS.CONF VARIABLES ~~~~~~~~~~~~~~~~~~~~~ diff --git a/fwknop.spec b/fwknop.spec index b6d5d858..f4fba9b5 100644 --- a/fwknop.spec +++ b/fwknop.spec @@ -8,7 +8,7 @@ %define _libdir /usr/lib %endif %define _sysconfdir /etc -%define _localstatedir /var +%define _localstatedir /var/run %define _infodir /usr/share/info %define _mandir /usr/share/man diff --git a/server/fwknopd.8.in b/server/fwknopd.8.in index 5c28cb3d..baff0197 100644 --- a/server/fwknopd.8.in +++ b/server/fwknopd.8.in @@ -94,7 +94,7 @@ Specify the location of the file\&. If this option is not given, \fIfwknopd\fR will use the compile\-time default location (typically -\fI@localstatedir@/run/fwknop/digest\&.cache\fR)\&. +\fI@localstatedir@/fwknop/digest\&.cache\fR)\&. .RE .PP \fB\-D, \-\-dump\-config\fR @@ -196,7 +196,7 @@ Specify the location of the \fIfwknopd\&.pid\fR file\&. If this option is not given, \fIfwknopd\fR -will use the compile\-time default location (typically \*(Aq@localstatedir@/run/fwknop/fwknopd\&.pid)\&. +will use the compile\-time default location (typically \*(Aq@localstatedir@/fwknop/fwknopd\&.pid)\&. .RE .PP \fB\-P, \-\-pcap\-filter\fR=\fI<filter>\fR @@ -244,7 +244,7 @@ files\&. This will also force a flush of the current \(lqFWKNOP\(rq iptables cha \fB\-\-rotate\-digest\-cache\fR .RS 4 Rotate the digest cache file by renaming it to \(lq<name>\-old\(rq, and starting a new one\&. The digest cache file is typically found in -\fI@localstatedir@/run/fwknop/digest\&.cache\fR\&. +\fI@localstatedir@/fwknop/digest\&.cache\fR\&. .RE .PP \fB\-r, \-\-run\-dir\fR=\fI<path>\fR @@ -252,7 +252,7 @@ Rotate the digest cache file by renaming it to \(lq<name>\-old\(rq, and starting Specify the directory where \fBfwknopd\fR writes run time state files\&. The default is -\fI@localstatedir@/run\fR\&. +\fI@localstatedir@\fR\&. .RE .PP \fB\-S, \-\-status\fR @@ -524,7 +524,7 @@ Override syslog facility\&. The \(lqSYSLOG_FACILITY\(rq variable can be set to Specify the directory where \fBfwknopd\fR writes run time state files\&. The default is -\fI@localstatedir@/run\fR\&. +\fI@localstatedir@\fR\&. .RE .PP \fBENABLE_DESTINATION_RULE\fR \fI<Y/N>\fR diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index dc6f5160..ecf2a817 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -70,7 +70,7 @@ /* Our default run directory is based on LOCALSTATEDIR as set by the * configure script. This is where we put the PID and digest cache files. */ - #define DEF_RUN_DIR SYSRUNDIR"/run/"PACKAGE_NAME + #define DEF_RUN_DIR SYSRUNDIR"/"PACKAGE_NAME #endif /* More Conf defaults From e39d34750bc9a751c07d4132715ef3d971e0821f Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 17:48:18 -0700 Subject: [PATCH 076/219] [server] switch from abs() to labs() for time difference calculation This commit fixes the following warning during compilation on Mac OS X: gcc -DHAVE_CONFIG_H -I. -I.. -I ../lib -I ../common -DSYSCONFDIR=\"/etc\" -DSYSRUNDIR=\"/var\" -g -O2 -Wall -Wformat -Wformat-security -fstack-protector-all -fstack-protector -fPIE -D_FORTIFY_SOURCE=2 -MT fwknopd-incoming_spa.o -MD -MP -MF .deps/fwknopd-incoming_spa.Tpo -c -o fwknopd-incoming_spa.o `test -f 'incoming_spa.c' || echo './'`incoming_spa.c incoming_spa.c:736:23: warning: absolute value function 'abs' given an argument of type 'long' but has parameter of type 'int' which may cause truncation of value [-Wabsolute-value] ts_diff = abs(now_ts - spadat.timestamp); ^ incoming_spa.c:736:23: note: use function 'labs' instead ts_diff = abs(now_ts - spadat.timestamp); ^~~ labs 1 warning generated. --- server/incoming_spa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/incoming_spa.c b/server/incoming_spa.c index 541a7fcd..40501f3c 100644 --- a/server/incoming_spa.c +++ b/server/incoming_spa.c @@ -733,7 +733,7 @@ incoming_spa(fko_srv_options_t *opts) { time(&now_ts); - ts_diff = abs(now_ts - spadat.timestamp); + ts_diff = labs(now_ts - spadat.timestamp); if(ts_diff > conf_pkt_age) { From 48acac160a230baf1d892ef60b796f33d5790121 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 18:49:28 -0700 Subject: [PATCH 077/219] [test suite] pick up pf and ipfw firewalls for prefix designation --- test/test-fwknop.pl | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 62c6d181..55a9bea5 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -6887,6 +6887,19 @@ sub os_fw_detect() { push @tests_to_exclude, qr/firewalld/; push @tests_to_exclude, qr|dupe rule|; ### not handled yet on non-iptables firewalls push @tests_to_exclude, qr|ipt\-no|; + $fw_bin = &find_command('pfctl'); + if ($fw_bin) { + $FW_TYPE = 'pf'; + $FW_PREFIX = 'PF'; + $fw_conf_prefix = 'pf'; + } else { + $fw_bin = &find_command('ipfw'); + if ($fw_bin) { + $FW_TYPE = 'ipfw'; + $FW_PREFIX = 'IPFW'; + $fw_conf_prefix = 'ipfw'; + } + } } unless ($platform eq $FREEBSD or $platform eq $MACOSX) { push @tests_to_exclude, qr|active/expire sets|; From a606a9c565df1359c383f7f356b8dfd0203fba9f Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 18:52:08 -0700 Subject: [PATCH 078/219] [test suite] fw prefixes aren't used on non-Linux systems yet --- test/test-fwknop.pl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 55a9bea5..b2ad5609 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -6890,14 +6890,10 @@ sub os_fw_detect() { $fw_bin = &find_command('pfctl'); if ($fw_bin) { $FW_TYPE = 'pf'; - $FW_PREFIX = 'PF'; - $fw_conf_prefix = 'pf'; } else { $fw_bin = &find_command('ipfw'); if ($fw_bin) { $FW_TYPE = 'ipfw'; - $FW_PREFIX = 'IPFW'; - $fw_conf_prefix = 'ipfw'; } } } From f962edda0023a07554342cb7a0aaabd15ad1c8ff Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 19:37:06 -0700 Subject: [PATCH 079/219] [extras] update Coverity installation path --- extras/coverity/coverity_scan.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/coverity/coverity_scan.sh b/extras/coverity/coverity_scan.sh index 8b1eb508..73f9a4cc 100755 --- a/extras/coverity/coverity_scan.sh +++ b/extras/coverity/coverity_scan.sh @@ -1,7 +1,7 @@ #!/bin/sh +x make clean -export PATH=$PATH:/home/mbr/coverity/cov-analysis-linux64-7.5.0/bin +export PATH=$PATH:/home/mbr/coverity/cov-analysis-linux64-7.6.0/bin cov-build --dir cov-int make tar cvfz fwknop.tgz cov-int From b2109f563011786ab8cc7d8aca79d72db1b74cdf Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 19:44:43 -0700 Subject: [PATCH 080/219] [server] remove unncessary NULL check spotted by Coverity --- server/replay_cache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/replay_cache.c b/server/replay_cache.c index 7fea6765..85b91b2b 100644 --- a/server/replay_cache.c +++ b/server/replay_cache.c @@ -134,8 +134,8 @@ rotate_digest_cache_file(fko_srv_options_t *opts) ); #endif /* NO_DIGEST_CACHE */ - if(new_file != NULL) - free(new_file); + free(new_file); + return; } static void From f757b4ebdad0f304528ad2d7cd26c09e0917988b Mon Sep 17 00:00:00 2001 From: Ilya Tumaykin <itumaykin@gmail.com> Date: Mon, 20 Apr 2015 14:32:37 +0300 Subject: [PATCH 081/219] extras: adjust 'localstatedir' value for the AppArmor profile Comments in the shipped AppArmor profile state that fwknopd is assumed to be built with 'localstatedir=/var', which is misleading for several reasons: * AppArmor profile assumes that fwknopd's pidfile and digest cache are under /run/fwknop by the looks of it, i.e. 'localstatedir' is '/run'. * By default these files are placed under /var/run/fwknop. Thus this profile implicitly relies on the existence of '/var/run -> /run' symlink and won't work otherwise when 'localstatedir' is '/var' Since GitHub PR#152 was merged, 'localstatedir' can be simply set to '/run' for AppArmor users to avoid this confusion. This changeset does it. If anyone had it working before, they should have it working now as the shipped AppArmor profile required /run existence before as well. --- extras/apparmor/configure_args.sh | 2 +- extras/apparmor/usr.sbin.fwknopd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/extras/apparmor/configure_args.sh b/extras/apparmor/configure_args.sh index adf6447c..062b07cd 100755 --- a/extras/apparmor/configure_args.sh +++ b/extras/apparmor/configure_args.sh @@ -7,7 +7,7 @@ # if [ -x ./configure ]; then - ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var $@ + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/run $@ else echo "[*] Execute from the fwknop top level sources directory" fi diff --git a/extras/apparmor/usr.sbin.fwknopd b/extras/apparmor/usr.sbin.fwknopd index e967a56e..e0aba356 100644 --- a/extras/apparmor/usr.sbin.fwknopd +++ b/extras/apparmor/usr.sbin.fwknopd @@ -1,6 +1,6 @@ # Last Modified: Sun Aug 18 22:54:57 2013 # Assumes fwknopd was built with: -# './configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var' +# './configure --prefix=/usr --sysconfdir=/etc --localstatedir=/run' #include <tunables/global> /usr/sbin/fwknopd { From 85733ded3cfab98fe4c95fc9f64680219334d5cf Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Apr 2015 20:34:01 -0400 Subject: [PATCH 082/219] [test suite] additional iptables exclusions for non-iptables systems --- test/test-fwknop.pl | 3 +++ test/tests/rijndael_hmac.pl | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index b2ad5609..4f9dadd5 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -6883,6 +6883,9 @@ sub os_fw_detect() { } else { push @tests_to_exclude, qr/NAT\b/; push @tests_to_exclude, qr/MASQ/; + push @tests_to_exclude, qr/INPUT/; + push @tests_to_exclude, qr/FORWARD/; + push @tests_to_exclude, qr/IPT_/; push @tests_to_exclude, qr/iptables/; push @tests_to_exclude, qr/firewalld/; push @tests_to_exclude, qr|dupe rule|; ### not handled yet on non-iptables firewalls diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index c72c5cfc..77578732 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -379,7 +379,7 @@ { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', - 'detail' => "$FW_TYPE custom input chain", + 'detail' => "$FW_TYPE custom INPUT chain", 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_custom_input_chain"} -a $cf{'hmac_access'} / . From 94af6172bb9ad73d3c1fe7f7641c1b52a0c85a91 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 20 Apr 2015 08:41:28 -0700 Subject: [PATCH 083/219] [server] minor -h usage update --- server/config_init.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/config_init.c b/server/config_init.c index 54864227..0ddceee6 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -1242,6 +1242,8 @@ usage(void) " override the PCAP_FILTER variable in fwknopd.conf.\n" " -R, --restart - Force the currently running fwknopd to restart.\n" " --rotate-digest-cache\n" + " - Rotate the digest cache file by renaming the file\n" + " to the same path with the -old suffix.\n" " -r, --run-dir - Set path to local state run directory.\n" " - Rotate the digest cache file by renaming it to\n" " '<name>-old', and starting a new one.\n" From f18827b002e9f878b567bf0b05a1756a698de163 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 20 Apr 2015 08:45:09 -0700 Subject: [PATCH 084/219] [test suite] make valgrind results requirements stronger for test passage --- test/test-fwknop.pl | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 4f9dadd5..b7471da7 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1558,16 +1558,13 @@ sub valgrind_results() { my $rv = 1; - unless (&file_find_regex( - [qr/no\sleaks\sare\spossible/], - $MATCH_ALL, $APPEND_RESULTS, $file)) { - $rv = 0 unless &file_find_regex( - [qr/definitely\slost\:\s0\sbytes/], - $MATCH_ALL, $APPEND_RESULTS, $file); - $rv = 0 unless &file_find_regex( - [qr/indirectly\slost\:\s0\sbytes/], - $MATCH_ALL, $APPEND_RESULTS, $file); - } + $rv = 0 if &file_find_regex( + [qr/definitely\slost\:\s[1-9]\d+\sbytes/], + $MATCH_ALL, $APPEND_RESULTS, $file); + $rv = 0 if &file_find_regex( + [qr/indirectly\slost\:\s[1-9]\d+\sbytes/], + $MATCH_ALL, $APPEND_RESULTS, $file); + return $rv; } @@ -6886,6 +6883,8 @@ sub os_fw_detect() { push @tests_to_exclude, qr/INPUT/; push @tests_to_exclude, qr/FORWARD/; push @tests_to_exclude, qr/IPT_/; + push @tests_to_exclude, qr/\bchain\b/; + push @tests_to_exclude, qr/\bjump\b/; push @tests_to_exclude, qr/iptables/; push @tests_to_exclude, qr/firewalld/; push @tests_to_exclude, qr|dupe rule|; ### not handled yet on non-iptables firewalls From bdc3751a840d7cc0c5944b767cd11d4355d59137 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 20 Apr 2015 08:47:51 -0700 Subject: [PATCH 085/219] bump version to 2.6.6 --- ChangeLog | 2 +- VERSION | 2 +- configure.ac | 2 +- fwknop.spec | 11 +++++++---- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index c422272e..937966e7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -fwknop-2.6.6 (04//2015): +fwknop-2.6.6 (04/21/2015): - [server] Add the ability for fwknopd to function as an generic SPA gateway. This allows scenarios such as the fwknopd system providing DHCP addresses to client systems, but those systems would be blocking by diff --git a/VERSION b/VERSION index 57cf282e..338a5b5d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6.5 +2.6.6 diff --git a/configure.ac b/configure.ac index 8e450c61..677791d8 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ AC_PREREQ(2.62) dnl Define our name, version and email. m4_define(my_package, [fwknop]) -m4_define(my_version, [2.6.5]) +m4_define(my_version, [2.6.6]) m4_define(my_bug_email, [dstuart@dstuart.org]) AC_INIT(my_package, my_version, my_bug_email) diff --git a/fwknop.spec b/fwknop.spec index f4fba9b5..5532b5c3 100644 --- a/fwknop.spec +++ b/fwknop.spec @@ -13,10 +13,10 @@ %define _mandir /usr/share/man Name: fwknop -Version: 2.6.5 +Version: 2.6.6 Epoch: 1 Release: 1%{?dist} -Summary: Firewall Knock Operator client. An implementation of Single Packet Authorization. +Summary: Firewall Knock Operator client. An implementation of Single Packet Authorization. Group: Applications/Internet License: GPL @@ -43,14 +43,14 @@ Group: Development/Libraries Requires: libfko >= 2.0.3 %package server -Summary: The Firewall Knock Operator server. An implementation of Single Packet Authorization. +Summary: The Firewall Knock Operator server. An implementation of Single Packet Authorization. Group: System Environment/Daemons Requires: libfko => 2.0.3, libpcap, iptables %description Fwknop implements an authorization scheme known as Single Packet Authorization -(SPA) for Linux systems running firewalld or iptables. This mechanism requires +(SPA) for Linux systems running firewalld or iptables. This mechanism requires only a single encrypted and non-replayed packet to communicate various pieces of information including desired access through a firewalld or iptables policy. The main application of this program is to use firewalld or iptables in a default-drop @@ -142,6 +142,9 @@ fi %config(noreplace) %attr(0600,root,root) %{_sysconfdir}/fwknop/access.conf %changelog +* Tue Apr 21 2015 <mbr@cipherdyne.org> - 2.6.6 +- fwknop-2.6.6 release. + * Tue Dec 16 2014 <mbr@cipherdyne.org> - 2.6.5 - fwknop-2.6.5 release. From 75d40049630c9239a17bfb17c01920e5c356a6d9 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 20 Apr 2015 09:19:37 -0700 Subject: [PATCH 086/219] changes since 2.6.5 --- ChangeLog.git | 2070 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 1371 insertions(+), 699 deletions(-) diff --git a/ChangeLog.git b/ChangeLog.git index 9732ddbd..1492f5ab 100644 --- a/ChangeLog.git +++ b/ChangeLog.git @@ -1,861 +1,1533 @@ -commit 27af305cf7213c57d9559f129f708fa51fe657aa (HEAD, refs/heads/master) +commit 95bf4dcb8703ce7637519294df979b94e781f163 (HEAD, tag: refs/tags/2.6.6, refs/remotes/origin/master, refs/remotes/origin/HEAD, refs/heads/master) +Merge: bdc3751 f757b4e +Author: Michael Rash <michael.rash@gmail.com> +Date: Mon Apr 20 21:28:10 2015 -0400 + + Merge pull request #153 from Coacher/master + + extras: adjust 'localstatedir' value for the AppArmor profile + +commit bdc3751a840d7cc0c5944b767cd11d4355d59137 Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Dec 16 21:31:36 2014 -0500 +Date: Mon Apr 20 08:47:51 2015 -0700 - minor date change for 2.6.5 release + bump version to 2.6.6 - ChangeLog | 2 +- + ChangeLog | 2 +- + VERSION | 2 +- + configure.ac | 2 +- + fwknop.spec | 11 +++++++---- + 4 files changed, 10 insertions(+), 7 deletions(-) + +commit f18827b002e9f878b567bf0b05a1756a698de163 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Apr 20 08:45:09 2015 -0700 + + [test suite] make valgrind results requirements stronger for test passage + + test/test-fwknop.pl | 19 +++++++++---------- + 1 file changed, 9 insertions(+), 10 deletions(-) + +commit 94af6172bb9ad73d3c1fe7f7641c1b52a0c85a91 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Apr 20 08:41:28 2015 -0700 + + [server] minor -h usage update + + server/config_init.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 85733ded3cfab98fe4c95fc9f64680219334d5cf (refs/remotes/moria/master) +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 20:34:01 2015 -0400 + + [test suite] additional iptables exclusions for non-iptables systems + + test/test-fwknop.pl | 3 +++ + test/tests/rijndael_hmac.pl | 2 +- + 2 files changed, 4 insertions(+), 1 deletion(-) + +commit f757b4ebdad0f304528ad2d7cd26c09e0917988b +Author: Ilya Tumaykin <itumaykin@gmail.com> +Date: Mon Apr 20 14:32:37 2015 +0300 + + extras: adjust 'localstatedir' value for the AppArmor profile + + Comments in the shipped AppArmor profile state that fwknopd is assumed + to be built with 'localstatedir=/var', which is misleading for several + reasons: + + * AppArmor profile assumes that fwknopd's pidfile and digest cache are + under /run/fwknop by the looks of it, i.e. 'localstatedir' is '/run'. + + * By default these files are placed under /var/run/fwknop. Thus this + profile implicitly relies on the existence of '/var/run -> /run' symlink + and won't work otherwise when 'localstatedir' is '/var' + + Since GitHub PR#152 was merged, 'localstatedir' can be simply set to + '/run' for AppArmor users to avoid this confusion. This changeset does + it. + + If anyone had it working before, they should have it working now as the + shipped AppArmor profile required /run existence before as well. + + extras/apparmor/configure_args.sh | 2 +- + extras/apparmor/usr.sbin.fwknopd | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit b2109f563011786ab8cc7d8aca79d72db1b74cdf +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 19:44:43 2015 -0700 + + [server] remove unncessary NULL check spotted by Coverity + + server/replay_cache.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit f962edda0023a07554342cb7a0aaabd15ad1c8ff +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 19:37:06 2015 -0700 + + [extras] update Coverity installation path + + extras/coverity/coverity_scan.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit ff3eaf84484c3f4e53392ebea8d6658840873586 +commit a606a9c565df1359c383f7f356b8dfd0203fba9f Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Dec 16 21:15:29 2014 -0500 +Date: Sun Apr 19 18:52:08 2015 -0700 - [test suite] minor update to exclude a couple of iptables tests on ipfw/PF firewalls + [test suite] fw prefixes aren't used on non-Linux systems yet - test/test-fwknop.pl | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + test/test-fwknop.pl | 4 ---- + 1 file changed, 4 deletions(-) -commit 7f1da8e62596d8c120e1484bab98e95d6f08ca04 +commit 48acac160a230baf1d892ef60b796f33d5790121 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Dec 15 22:34:22 2014 -0500 +Date: Sun Apr 19 18:49:28 2015 -0700 - bumped version to 2.6.5 + [test suite] pick up pf and ipfw firewalls for prefix designation - ChangeLog | 2 +- - VERSION | 2 +- - configure.ac | 2 +- - fwknop.spec | 5 ++++- - win32/config.h | 2 +- - 5 files changed, 8 insertions(+), 5 deletions(-) + test/test-fwknop.pl | 13 +++++++++++++ + 1 file changed, 13 insertions(+) -commit db8b5e4e485796908f385dcd1c2f7ebb8c742578 +commit db80c81f660e0be5ba8229af631b87462fa273e8 +Merge: e39d347 b21c04e +Author: Michael Rash <michael.rash@gmail.com> +Date: Sun Apr 19 21:15:51 2015 -0400 + + Merge pull request #152 from Coacher/master + + server: remove extra '/run' subdir from paths + +commit e39d34750bc9a751c07d4132715ef3d971e0821f Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Dec 15 20:57:46 2014 -0500 +Date: Sun Apr 19 17:48:18 2015 -0700 - [test suite] added AFL plot results: plot-2.6.5.67f969f/ - - test/afl/results/plot-2.6.5.67f969f/exec_speed.png | Bin 0 -> 20466 bytes - test/afl/results/plot-2.6.5.67f969f/high_freq.png | Bin 0 -> 22305 bytes - test/afl/results/plot-2.6.5.67f969f/index.html | 10 + - .../afl/results/plot-2.6.5.67f969f/index.html.orig | 10 + - test/afl/results/plot-2.6.5.67f969f/low_freq.png | Bin 0 -> 11027 bytes - test/afl/results/plot-2.6.5.67f969f/plot_data | 7337 ++++++++++++++++++++ - 6 files changed, 7357 insertions(+) - -commit a4eb640f9ca26dd6cf35e64a74c53fab6f774e97 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Dec 15 20:55:49 2014 -0500 - - [test suite] add AFL results file: server-access-2.6.5.67f969f - - test/afl/results/server-access-2.6.5.67f969f | 25 +++++++++++++++++++++++++ - 1 file changed, 25 insertions(+) - -commit 9dc56d6bb7b28142e0173521db5a91bd25d41a00 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Dec 15 17:06:07 2014 -0800 - - [test suite / server] rule deletion/addition tests mid-cycle - - server/fw_util_firewalld.c | 37 ++++++++++---------------------- - server/fw_util_iptables.c | 39 +++++++++++----------------------- - test/test-fwknop.pl | 34 +++++++++++++++++++++++++----- - test/tests/rijndael_hmac.pl | 41 ++++++++++++++++++++++++++++++++++++ - test/tests/rijndael_hmac_cmd_exec.pl | 13 ++++++++++++ - 5 files changed, 106 insertions(+), 58 deletions(-) - -commit fd582487dba5e5655584f5c341a2754a5aae8d4d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Dec 15 17:03:08 2014 -0800 - - [server] minor typo fix + [server] switch from abs() to labs() for time difference calculation + + This commit fixes the following warning during compilation on Mac OS X: + + gcc -DHAVE_CONFIG_H -I. -I.. -I ../lib -I ../common -DSYSCONFDIR=\"/etc\" -DSYSRUNDIR=\"/var\" -g -O2 -Wall -Wformat -Wformat-security -fstack-protector-all -fstack-protector -fPIE -D_FORTIFY_SOURCE=2 -MT fwknopd-incoming_spa.o -MD -MP -MF .deps/fwknopd-incoming_spa.Tpo -c -o fwknopd-incoming_spa.o `test -f 'incoming_spa.c' || echo './'`incoming_spa.c + incoming_spa.c:736:23: warning: absolute value function 'abs' given an argument of + type 'long' but has parameter of type 'int' which may cause truncation of + value [-Wabsolute-value] + ts_diff = abs(now_ts - spadat.timestamp); + ^ + incoming_spa.c:736:23: note: use function 'labs' instead + ts_diff = abs(now_ts - spadat.timestamp); + ^~~ + labs + 1 warning generated. server/incoming_spa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 67f969f2c7ea5f8ce5f498ba99588467436351f2 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Dec 10 17:06:45 2014 -0800 +commit b21c04e9d6c49ebbc613080733193698569dd639 +Merge: e333cba 93a3798 +Author: Ilya Tumaykin <itumaykin@gmail.com> +Date: Mon Apr 20 02:46:41 2015 +0300 - [server] compilation bug fix for firewalld platforms in DESTINATION processing code + Merge remote-tracking branch 'upstream/master' + +commit e333cba945925ae356d83ba0da3a95ee82bc8fb2 +Author: Ilya Tumaykin <itumaykin@gmail.com> +Date: Mon Apr 20 02:43:10 2015 +0300 + + server: remove extra '/run' subdir from paths + + Having extra '/run' subdirectory hardcoded into paths used for options + 'digest-file', 'pid-file', 'run-dir' is counterintuitive and can lead to + bogus directory layouts when 'localstatedir' differs from the default + value. + + For example, if 'localstatedir' is set to '/run', which is a common and + recommended substitute for /var/run in many distros nowadays, then + fwknop files will be placed under /run/run/fwknop. + + This changeset removes extra '/run' subdirectory from all relevant paths + by changing DEF_RUN_DIR. Default value of 'localstatedir' is changed to + '/var/run' so users who relied on the previous behaviour won't have to + bother changing anything. + + This is tested and works. Gentoo have this patch applied since 2.6.0. + + doc/fwknopd.man.asciidoc | 10 +++++----- + fwknop.spec | 2 +- + server/fwknopd.8.in | 10 +++++----- + server/fwknopd_common.h | 2 +- + 4 files changed, 12 insertions(+), 12 deletions(-) + +commit 93a3798cc10ea1a3eb746d8a2a1fc844410a9c83 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 13:25:11 2015 -0700 + + [test suite] exclude server restart cycle from valgrind results parsing + + test/test-fwknop.pl | 7 +++++++ + 1 file changed, 7 insertions(+) + +commit cc765a23dba91f7ef4f7bbfe75dba90377cf4e68 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 12:22:55 2015 -0700 + + [test suite] minor FORCE_NAT config tweak + + test/conf/require_force_nat_access.conf | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +commit b1100cb730a71bafb5bd42184e5981afc305858c +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 07:16:30 2015 -0700 + + [server] NAT validation only applies to systems running iptables or firewalld + + server/access.c | 2 ++ + 1 file changed, 2 insertions(+) + +commit 68db4b77a5c0c87682160e212a81acb4e682d8ee +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 07:11:10 2015 -0700 + + [server] allow FORWARD_ALL to control whether FORCE_NAT is required + + server/access.c | 4 ++-- + test/conf/open_ports_force_masq_access.conf | 1 + + test/tests/basic_operations.pl | 28 +++++++++++++++++++++++----- + test/tests/rijndael.pl | 5 ++--- + 4 files changed, 28 insertions(+), 10 deletions(-) + +commit 0ecc2d233365234cd0690e19000bfd56d910104e +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 19 07:10:26 2015 -0700 + + minor docs update + + CREDITS | 6 ++++++ + ChangeLog | 5 +++++ + 2 files changed, 11 insertions(+) + +commit bb5aa928d90963bc43ca320d0680b5bcaaa95718 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Apr 18 12:33:11 2015 -0700 + + [server] fix typos from corresponding firewalld changes + + server/fw_util_iptables.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit c9dedd33784581726571a7437dda3ccc7476655a +Merge: 0395965 baf3f70 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Apr 18 05:39:01 2015 -0700 + + Merge branch 'master' of https://github.com/mrash/fwknop + +commit 03959653ca1dee79337bea76bd2320fe86418569 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Apr 18 05:38:35 2015 -0700 + + [server] differentiate MASQUERADE from SNAT with a dedicated FWKNOP_MASQUERADE chain + + server/fw_util_firewalld.c | 76 ++++++++++++++++++++-------------------------- + server/fw_util_firewalld.h | 1 + + server/fw_util_iptables.c | 72 +++++++++++++++++++------------------------ + server/fwknopd.conf | 4 +-- + server/fwknopd_common.h | 4 +-- + 5 files changed, 69 insertions(+), 88 deletions(-) + +commit f06c6e3b9c4e4d5a83af4d22f0d5d7592f1a45de +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Apr 18 05:37:31 2015 -0700 + + [test suite] allow default FORCE_NAT 0.0.0.0 0 to apply + + test/conf/hmac_forward_all_access.conf | 1 - + 1 file changed, 1 deletion(-) + +commit 19f00c0dbef4548cb702794a5757301357b2a259 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Apr 18 05:33:00 2015 -0700 + + [test suite] add jump rule validation, include complete fwknopd chain listings + + test/test-fwknop.pl | 46 +++++++++++++++++++++++++++++++++++++++------- + 1 file changed, 39 insertions(+), 7 deletions(-) + +commit 55cbebe7bbda3540d6113bc6807be5ddebbaf059 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Apr 18 05:30:39 2015 -0700 + + ChangeLog and doc updates + + ChangeLog | 16 +++++++++++++--- + doc/fwknopd.man.asciidoc | 18 +++++++++++++++++- + 2 files changed, 30 insertions(+), 4 deletions(-) + +commit baf3f706d8cbce7f0a91e2b394a054f8b590eaf0 +Merge: 1e9f7e9 fba6473 +Author: Michael Rash <michael.rash@gmail.com> +Date: Thu Apr 16 21:45:59 2015 -0400 + + Merge pull request #151 from mrdanbrooks/master + + android: allow definition of custom server udp port + +commit fba6473b1cd5475311c990477dbff05d56d439dc +Author: dan brooks <dan@danbrooks.net> +Date: Wed Apr 15 16:52:34 2015 -0400 + + android: allow definition of custom server udp port + + android/project/jni/fwknop/fwknop_client.c | 10 +++++++++- + android/project/res/layout/main.xml | 21 +++++++++++++++++++++ + .../src/com/max2idea/android/fwknop/Fwknop.java | 13 +++++++++++++ + 3 files changed, 43 insertions(+), 1 deletion(-) + +commit 1e9f7e94f0152e14535ce66de915ee05664d9a3b +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 12 16:05:01 2015 -0700 + + [server] consolidate chain creation within mk_chain() + + server/fw_util_firewalld.c | 2 +- + server/fw_util_iptables.c | 30 ++++++++++-------------------- + 2 files changed, 11 insertions(+), 21 deletions(-) + +commit c0f3ed38a8f2347e9db5679fa2488ad3cc31c94a +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 12 16:01:29 2015 -0700 + + [server] further error status simplication for firewalld + + server/fw_util_firewalld.c | 56 ++++++++++++++++++++++------------------------ + server/fw_util_firewalld.h | 4 +++- + 2 files changed, 30 insertions(+), 30 deletions(-) + +commit cf8c4df50e20b352897b130fa1abde6bb8a75eeb +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 12 15:57:44 2015 -0700 + + [server] remove DISABLE_DNAT exception for SPA packets that request a NAT operation - this is reserved for FORCE_NAT scenarios + + server/fw_util_iptables.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 912c625e9e71ec186d7c8ee6179e34a2ee00dfd7 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Apr 12 15:55:20 2015 -0700 + + [server] remove DISABLE_DNAT exception for SPA packets that request a NAT operation - this is reserved for FORCE_NAT scenarios server/fw_util_firewalld.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 122ecf10d787cd9ae295dc7b029bfa37440fa9b8 +commit 654f455ba685b0272b19e1689d13d0e4849a2751 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Dec 7 17:00:10 2014 -0500 +Date: Sun Apr 12 15:49:19 2015 -0700 - minor ChangeLog update + Revert "[server] use 'success' string for firewalld as returned firewall-cmd for command success" + + This reverts commit 1e33119b04a583fbf18b5b562edb14301a2ca7d6. - ChangeLog | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + server/fw_util_firewalld.c | 46 ++++++++++++++++++++-------------------------- + 1 file changed, 20 insertions(+), 26 deletions(-) -commit c7e3be6bbd5486bd31257d23c074b5e23b428f4a -Merge: 74f1146 a99bff9 +commit ffeb60677d926882063e89896b6c16cc9a82e334 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Dec 7 16:32:53 2014 -0500 +Date: Sun Apr 12 15:49:08 2015 -0700 - Merge branch 'master' of https://github.com/mrash/fwknop + [test suite] update SNAT MASQ test to use force masq access file -commit 74f114603ba149f67fbc51ad2995c78bae9bdadf + test/tests/rijndael.pl | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 7dc41e68eff9e19ab4d1e4084978b8127cc45dcf Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Dec 7 16:29:30 2014 -0500 +Date: Sun Apr 12 15:48:14 2015 -0700 - check fiu_init() and fiu_enable() return values - - client/fwknop.c | 31 ++++++++++++++++++++++++------- - server/fwknopd.c | 12 ++++++++++-- - 2 files changed, 34 insertions(+), 9 deletions(-) - -commit a99bff9b639334208ce65920d9b995a52e0da2ac -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Dec 6 19:58:33 2014 -0500 - - [test suite] minor Makefile update for fko-wrapper - - test/fko-wrapper/Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit 54625819c959afc30ed0f2b1ca2fdd75e3c6bc41 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Dec 5 21:23:23 2014 -0500 - - [test suite] get resolve tests passing (--test mode stopped resolutions) - - test/test-fwknop.pl | 4 ++++ - test/tests/basic_operations.pl | 26 +++++++++++++------------- - 2 files changed, 17 insertions(+), 13 deletions(-) - -commit 01438a9c1621e013daed765c90033707569965d7 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Dec 5 20:57:38 2014 -0500 - - [test suite] make filehandles a bit more unique - - test/test-fwknop.pl | 160 ++++++++++++++++++++++++++-------------------------- - 1 file changed, 81 insertions(+), 79 deletions(-) - -commit a4d6c17512acb62296e6b64a86b9a418da7a1276 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Dec 5 20:56:47 2014 -0500 - - [test suite] add DESTINATION formatting tests - - test/tests/basic_operations.pl | 155 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 155 insertions(+) - -commit 28c7cfc8e5064a7756f0636da4d641845b10be5c -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Dec 5 20:52:17 2014 -0500 - - added missed config file spotted by the test suite + [test suite] add open_ports_force_masq_access.conf file Makefile.am | 1 + 1 file changed, 1 insertion(+) -commit 76b1c6dd5029fb16143124376ec5aefd600511df -Merge: 8988fe4 d6dee35 +commit 86cdc90f4a961017d8e0821ef750cb65e1b79a07 Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Dec 4 20:07:05 2014 -0500 +Date: Sun Apr 12 15:47:41 2015 -0700 - Merge branch 'spa_destination_ip' + [test suite] add open_ports_force_masq_access.conf file -commit d6dee352af535d8a8486fbf6e8facf4651d5cb13 (refs/heads/spa_destination_ip) + test/conf/open_ports_force_masq_access.conf | 6 ++++++ + test/test-fwknop.pl | 1 + + 2 files changed, 7 insertions(+) + +commit 5164378b17a88a6dc008a2ac5495b7885d2b4524 Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Dec 3 20:57:06 2014 -0500 +Date: Thu Apr 9 22:23:17 2015 -0400 - minor update to get DESTINATION filtering tests passing + [build] add --enable-32bit-mode for ASAN+AFL fuzzing - ChangeLog | 2 +- - server/access.c | 8 ++++---- - server/incoming_spa.c | 5 ++++- - test/tests/rijndael_hmac.pl | 4 ++++ - 4 files changed, 13 insertions(+), 6 deletions(-) + configure.ac | 13 +++++++++++++ + 1 file changed, 13 insertions(+) -commit c5c263c02ff0bd1b68509b647176e381d3453ed2 +commit 513fb239dfd92287e910240b8ed3b8c29f77c66e +Merge: 87a4acb 1986c9a Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Dec 3 20:56:47 2014 -0500 +Date: Thu Apr 9 21:21:45 2015 -0400 - add Grant Pannell + Merge branch 'master' of ssh://github.com/mrash/fwknop - CREDITS | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -commit 8988fe41b8e832ab8db6b186c1dcd9579fe80729 +commit 87a4acb6364070cb2a58888352147e29788770b5 Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Dec 3 20:26:24 2014 -0500 +Date: Thu Apr 9 18:04:31 2015 -0700 - [test suite] add AFL wrappers for Rijndael decryption fuzzing + [test suite] added detection for crashes triggered with AddressSanitizer (requires --enable-asan-support) - .../helpers/fwknopd-enc-pkt-file.sh | 5 +++ - test/afl/fuzzing-wrappers/server-enc-pkts.sh | 43 ++++++++++++++++++++++ - test/afl/test-cases/enc-pkts/spa.enc | 3 ++ - 3 files changed, 51 insertions(+) - -commit 285ec0ddcb93fedb4e6102f378cdfda27b9e1dcf -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Dec 3 20:25:05 2014 -0500 - - [server] add AFL support for fuzzing SPA Rijndael decryption routine directly with --afl-pkt-file - - Makefile.am | 3 +++ - lib/cipher_funcs.c | 5 ++++ - lib/fko.h | 4 +++ - lib/fko_encryption.c | 7 +++++- - lib/fko_funcs.c | 35 ++++++++++++++++++++++++++ - server/cmd_opts.h | 5 ++++ - server/config_init.c | 9 +++++++ - server/fwknopd.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++- - server/fwknopd_common.h | 3 +++ - server/replay_cache.c | 8 +++++- - 10 files changed, 143 insertions(+), 3 deletions(-) - -commit 53be8c4116debe69155968c81f14ce769ec7876d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Dec 3 20:20:56 2014 -0500 - - [test suite] added afl/results/ directory to track AFL run results over time - - test/afl/results/server-conf-2.6.5.aeac6a4 | 25 ++++++++++++++++++++++ - test/afl/results/server-digest-cache-2.6.5.aeac6a4 | 25 ++++++++++++++++++++++ - test/afl/results/server-enc-pkts-2.6.5.aeac6a4 | 25 ++++++++++++++++++++++ - test/afl/results/spa-pkts-2.6.5.7a2763a | 25 ++++++++++++++++++++++ - 4 files changed, 100 insertions(+) - -commit 7a9a430f24e9690284c56691b5b03e5f2b6eec18 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 30 22:17:51 2014 -0500 - - [test suite] additional DESTINATION accept/filter tests - - Makefile.am | 4 +++ - test/conf/hmac_spa_destination2_access.conf | 5 +++ - test/conf/hmac_spa_destination3_access.conf | 5 +++ - test/conf/hmac_spa_destination4_access.conf | 5 +++ - test/conf/hmac_spa_destination5_access.conf | 5 +++ - test/test-fwknop.pl | 4 +++ - test/tests/rijndael_hmac.pl | 56 +++++++++++++++++++++++++++-- - 7 files changed, 81 insertions(+), 3 deletions(-) - -commit cf84f016a38c0d630f7d3d832075111a10cbc420 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 30 21:37:42 2014 -0500 - - [test suite] add complete cycle DESTINATION test - - Makefile.am | 1 + - test/conf/hmac_spa_destination_access.conf | 5 +++++ - test/test-fwknop.pl | 2 ++ - test/tests/rijndael_hmac.pl | 13 +++++++++++++ - 4 files changed, 21 insertions(+) - -commit e1694c732c302522741e9c515f1eb3e39cfefc54 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 30 21:36:46 2014 -0500 - - update ChangeLog to include Grant's patch - - ChangeLog | 8 ++++++++ + test/test-fwknop.pl | 8 ++++++++ 1 file changed, 8 insertions(+) -commit 42d103d100af7839a74816c9bd1d6aafdff6ea78 +commit 1986c9aaf94dfc76ebc7c669a61df0c289dbda91 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 30 17:02:27 2014 -0500 +Date: Thu Apr 9 20:01:59 2015 -0400 - [test suite] minor test update for DESTINATION access.conf stanza + [test suite] added AFL results for client-rc fuzzing - test/tests/basic_operations.pl | 18 +++++++++++++++++- - 1 file changed, 17 insertions(+), 1 deletion(-) + test/afl/results/2.6.6/c4ffd4b/client-rc | 25 +++++++++++++++++++++ + .../2.6.6/c4ffd4b/client-rc-plot/exec_speed.png | Bin 0 -> 36489 bytes + .../2.6.6/c4ffd4b/client-rc-plot/high_freq.png | Bin 0 -> 20967 bytes + .../2.6.6/c4ffd4b/client-rc-plot/index.html | 10 +++++++++ + .../2.6.6/c4ffd4b/client-rc-plot/low_freq.png | Bin 0 -> 12932 bytes + 5 files changed, 35 insertions(+) -commit aeac6a40639f33905bbb2ee84ed8a9e80887a768 +commit 2d0b623a9a12e6f75339c94650a84185d017cdcc Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 29 22:20:44 2014 -0500 +Date: Wed Apr 8 18:50:26 2015 -0700 - [test suite] add server-digest-cache/ directory for AFL fuzzing + [test suite] more FORCE_NAT tests - test/afl/test-cases/server-digest-cache/digest.cache | 11 +++++++++++ - 1 file changed, 11 insertions(+) + test/tests/basic_operations.pl | 21 ++++++++++++++++++++- + 1 file changed, 20 insertions(+), 1 deletion(-) -commit af6087c48d8457f1fbb8cd82bc8dec482155d45f (refs/remotes/DigitalDJ/master) -Author: Grant Pannell <grant@pannell.net.au> -Date: Sat Nov 29 15:14:31 2014 +1030 +commit ca41ce6e7592de7aed1137014b39a1cd0fac1d5d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Apr 8 18:40:44 2015 -0700 - Keep the documentation consistent + [test suite] restore FORCE_SNAT test passing result - server/access.conf | 2 +- - server/fwknopd.8.in | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit d0849d6cc9d641d580a9f39811d160db5e910f98 -Author: Grant Pannell <grant@pannell.net.au> -Date: Sat Nov 29 15:10:38 2014 +1030 - - Fix type on man asciidoc - - doc/fwknopd.man.asciidoc | 2 +- + test/tests/basic_operations.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 624872ef4889cb43f5ecb42b74d9722bd6e9a4a8 -Author: Grant Pannell <grant@pannell.net.au> -Date: Sat Nov 29 15:05:06 2014 +1030 - - Add DESTINATION access.conf directive and ENABLE_DESTINATION_RULE fwknopd.conf directive - - Makefile.am | 1 + - doc/fwknopd.man.asciidoc | 18 ++++++++++ - server/access.c | 51 +++++++++++++++++++++-------- - server/access.conf | 13 ++++++++ - server/cmd_opts.h | 1 + - server/config_init.c | 6 ++++ - server/fw_util_firewalld.c | 58 +++++++++++++++++++++------------ - server/fw_util_firewalld.h | 7 ++-- - server/fw_util_ipf.c | 6 +++- - server/fw_util_ipf.h | 1 + - server/fw_util_ipfw.c | 6 ++++ - server/fw_util_ipfw.h | 3 +- - server/fw_util_iptables.c | 58 +++++++++++++++++++++------------ - server/fw_util_iptables.h | 7 ++-- - server/fw_util_pf.c | 6 ++++ - server/fw_util_pf.h | 5 +-- - server/fwknopd.8.in | 12 +++++++ - server/fwknopd.conf | 10 ++++++ - server/fwknopd_common.h | 13 ++++++++ - server/incoming_spa.c | 8 +++-- - test/conf/destination_rule_fwknopd.conf | 1 + - test/tests/basic_operations.pl | 16 +++++++++ - 22 files changed, 242 insertions(+), 65 deletions(-) - -commit 7a2763a133c8fd37e5b88a65259fd7bec4c56b2e +commit 547dbb66b3314206b9b1db619e512a687a18a94c Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Nov 28 19:18:38 2014 -0500 +Date: Wed Apr 8 18:30:03 2015 -0700 - [server] minor fix to add AFL_FUZZING macro + [server] minor return value handling update for create_chain() and add_jump_rule() - server/fwknopd.c | 2 ++ + server/fw_util_iptables.c | 19 ++++++++++++------- + 1 file changed, 12 insertions(+), 7 deletions(-) + +commit 1e33119b04a583fbf18b5b562edb14301a2ca7d6 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Apr 8 18:29:03 2015 -0700 + + [server] use 'success' string for firewalld as returned firewall-cmd for command success + + server/fw_util_firewalld.c | 46 ++++++++++++++++++++++++++-------------------- + 1 file changed, 26 insertions(+), 20 deletions(-) + +commit 429881703f7afbd92a803a16a4afb88a2350ff2d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Apr 8 18:24:26 2015 -0700 + + [test suite] minor uninitialized var bug fix + + test/tests/basic_operations.pl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit ab2d9c0aec1fbd6bc226181ac5c1bee3ad8f173c +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 7 16:35:07 2015 -0700 + + [test suite] minor path bug fix + + test/test-fwknop.pl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 0fa42ae11781c1347c183473c47c3005bf4ca2e9 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 7 16:34:49 2015 -0700 + + [server] allow DISABLE_DNAT to not require FORCE_NAT + + server/access.c | 23 ++++++++----- + server/fw_util_firewalld.c | 57 +++++++++++++++++---------------- + server/fw_util_iptables.c | 57 +++++++++++++++++---------------- + test/conf/require_force_nat_access.conf | 2 +- + test/tests/basic_operations.pl | 10 ++++++ + test/tests/rijndael_hmac.pl | 10 ------ + 6 files changed, 84 insertions(+), 75 deletions(-) + +commit 7a21494f3913142885c0744e18443f8528105d3d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 7 16:32:44 2015 -0700 + + added --enable-asan-support for Google's Address Sanitizer compiler flags + + ChangeLog | 3 +++ + configure.ac | 13 +++++++++++++ + 2 files changed, 16 insertions(+) + +commit 21dc1e8968e69a51cea89f8c5299d4f7b020453c +Merge: 8010690 3d8b524 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 7 08:24:21 2015 -0400 + + Merge branch 'master' of ssh://minastirith/Users/mbr/git/fwknop + +commit 3d8b524019f7bfdfe409196f65877b6975117bb1 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 7 08:23:55 2015 -0400 + + [test suite] FORCE_SNAT requires FORCE_NAT test + + Makefile.am | 3 +++ + test/test-fwknop.pl | 1 + + test/tests/rijndael_hmac.pl | 10 ++++++++++ + 3 files changed, 14 insertions(+) + +commit 37c9f38565c48244fe4606f87b93ba2b3db28f6d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Apr 6 21:20:31 2015 -0400 + + [test suite] FORCE_SNAT requires FORCE_NAT test + + test/conf/require_force_nat_access.conf | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit 8e6db3a5da1d2624a10929742aa1b58f374b7949 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Apr 6 20:04:33 2015 -0400 + + [server] extend FORWARD_ALL to apply to NAT operations + + This is a significant commit to allow all ports and protocols to be + NAT'd in conjunction with FORWARD ACCEPT rules. This commit is in + support of 6b7a3bbdae295c29a15a59385e637bd391858bc2 to allow fwknopd to + function as an SPA gateway. + + server/access.c | 6 +- + server/fw_util_iptables.c | 492 ++++++++++++++++---------- + server/fw_util_iptables.h | 2 + + server/fwknopd.conf | 8 +- + server/fwknopd_common.h | 5 +- + test/conf/hmac_force_masq_no_dnat_access.conf | 7 + + test/conf/hmac_forward_all_access.conf | 8 + + test/test-fwknop.pl | 2 + + test/tests/rijndael_hmac.pl | 46 ++- + 9 files changed, 375 insertions(+), 201 deletions(-) + +commit 80106900394505e6932e7f55a49ddae9b22a3d5c +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Apr 6 11:47:07 2015 -0700 + + [server] add missing #define's for firewalld + + server/fw_util_firewalld.h | 2 ++ 1 file changed, 2 insertions(+) -commit 01e294aed3f32058c28e7f489184b29f9486126b +commit ef6c0549a58aff051ff796b215223b8590aa0078 Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Nov 28 19:13:35 2014 -0500 +Date: Mon Apr 6 01:33:18 2015 -0700 - [test suite] use -A mode for AFL fuzzing, make sure fwknopd does not init digest cache in -A mode + [test suite] added --prefer-iptables to exclude firewalld - server/fwknopd.c | 3 +++ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh | 2 +- - test/afl/fuzzing-wrappers/server-access.sh | 2 +- - test/afl/fuzzing-wrappers/server-conf.sh | 6 +++--- - 4 files changed, 8 insertions(+), 5 deletions(-) + test/test-fwknop.pl | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) -commit 0556dfc0d8c64bb411f5c4ffe75baf4d9eaa1438 +commit c25f34e7a2808c276364532f6e0f8fd98e6c1b61 Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 26 16:40:16 2014 -0500 +Date: Mon Apr 6 01:24:55 2015 -0700 - [test suite] minor AFL status screen path update + [server] update firewalld for FORWARD_ALL NAT operations - test/afl/README.md | 2 +- + server/fw_util_firewalld.c | 492 ++++++++++++++++++++++++++++----------------- + server/fwknopd_common.h | 3 - + 2 files changed, 305 insertions(+), 190 deletions(-) + +commit ca467b9030705189499001cf53d7068c1a5d4561 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Mar 31 19:58:18 2015 -0400 + + [test suite] added AFL results for spa-pkts and server-digest-cache fuzzing runs + + test/afl/results/2.6.6/a18b3e9/spa-pkts | 26 +++++++++++++++++++++ + .../2.6.6/a18b3e9/spa-pkts-plot/exec_speed.png | Bin 0 -> 15670 bytes + .../2.6.6/a18b3e9/spa-pkts-plot/high_freq.png | Bin 0 -> 23913 bytes + .../results/2.6.6/a18b3e9/spa-pkts-plot/index.html | 10 ++++++++ + .../2.6.6/a18b3e9/spa-pkts-plot/low_freq.png | Bin 0 -> 10437 bytes + test/afl/results/2.6.6/c4ffd4b/server-digest-cache | 26 +++++++++++++++++++++ + .../server-digest-cache-plot/exec_speed.png | Bin 0 -> 14618 bytes + .../c4ffd4b/server-digest-cache-plot/high_freq.png | Bin 0 -> 22748 bytes + .../c4ffd4b/server-digest-cache-plot/index.html | 10 ++++++++ + .../c4ffd4b/server-digest-cache-plot/low_freq.png | Bin 0 -> 8961 bytes + 10 files changed, 72 insertions(+) + +commit c4ffd4b00a86d46ebf3cc3fcd65e6e841d7bb899 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Mar 30 21:38:31 2015 -0400 + + [extras] minor ramdisk creation bug fix + + extras/ramdisk/ramdisk-create.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 6149ec0a8cde68e9e55b7b2a5ce079a5d6b390e9 +commit a18b3e90272709bf1660b97421dd208e72af0bff Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 26 16:38:53 2014 -0500 +Date: Sun Mar 29 18:15:11 2015 -0700 - [test suite] another minor path reorg + [server] minor code coverage update for firewalld systems - test/afl/README | 2 +- - test/afl/README.md | 132 +++++++++++++++++++++++++++++++++++++++++++++++++ - test/afl/doc/README.md | 132 ------------------------------------------------- - 3 files changed, 133 insertions(+), 133 deletions(-) + server/fw_util_firewalld.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) -commit 00f45add289687a8a4b5be6a1c511409e87ccf45 +commit 244d2692f284034fa75ea37be4ea21e303abb1eb Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 26 16:35:17 2014 -0500 +Date: Sun Mar 29 08:04:55 2015 -0400 - update Makefile.am for latest AFL paths + [test suite] added server-access plot data - Makefile.am | 34 ++++++++++++++++++++++++++-------- - 1 file changed, 26 insertions(+), 8 deletions(-) + .../2.6.6/ea7f22f/server-access-plot/exec_speed.png | Bin 0 -> 22475 bytes + .../2.6.6/ea7f22f/server-access-plot/high_freq.png | Bin 0 -> 22220 bytes + .../results/2.6.6/ea7f22f/server-access-plot/index.html | 10 ++++++++++ + .../2.6.6/ea7f22f/server-access-plot/low_freq.png | Bin 0 -> 10671 bytes + 4 files changed, 10 insertions(+) -commit a900257c865ac313ae34979e1d3faa91e9212394 +commit cb089c550d994708154b8265027b1afe46efbe92 Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 26 16:26:19 2014 -0500 +Date: Sun Mar 29 08:00:03 2015 -0400 - [test suite] add AFL README + [test suite] added server-access AFL results run - test/afl/README | 1 + + test/afl/results/2.6.6/ea7f22f/server-access | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +commit 60d982a1034dd3519fc0d682e6c1050454e0c570 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Mar 28 07:54:30 2015 -0400 + + [test suite] added GPG 4096-bit key combination tests + + Makefile.am | 1 + + test/conf/gpg_dirs.tar.gz | Bin 20585 -> 29331 bytes + test/conf/gpg_server_large_key_access.conf | 6 ++++++ + test/test-fwknop.pl | 14 ++++++++++++++ + test/tests/gpg_no_pw.pl | 22 ++++++++++++++++++++++ + 5 files changed, 43 insertions(+) + +commit 1dc4a47357347cec43590086df0b98dfc5ff0d93 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 26 22:04:20 2015 -0400 + + [libfko] minor update to make process_sigs() static + + lib/gpgme_funcs.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 9de2a61d040f7fce247ef47de36214ac26b919c2 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 26 22:01:52 2015 -0400 + + add subkey gpg access.conf file + + Makefile.am | 1 + 1 file changed, 1 insertion(+) -commit 4e796fc865aa5230eeff4752cc9e6b8b4038b79d +commit 0f86406afb37fc571d97d383bb7db5b3fa250419 Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 26 16:25:53 2014 -0500 +Date: Thu Mar 26 22:01:02 2015 -0400 - [test suite] minor AFL path update + [test suite] added gpg subkey signing test - test/afl/AFL_status_screen.png | Bin 232415 -> 0 bytes - test/afl/README | 1 - - test/afl/README.md | 132 ------------------------------------- - test/afl/doc/AFL_status_screen.png | Bin 0 -> 232415 bytes - test/afl/doc/README.md | 132 +++++++++++++++++++++++++++++++++++++ - 5 files changed, 132 insertions(+), 133 deletions(-) + test/conf/gpg_dirs.tar.gz | Bin 12472 -> 20585 bytes + test/conf/gpg_subkey_access.conf | 6 ++++++ + test/test-fwknop.pl | 19 +++++++++++++++++++ + test/tests/gpg_no_pw.pl | 12 ++++++++++++ + 4 files changed, 37 insertions(+) -commit 2e4ce021afe2710628521173bd9cf5d7c989ce5e +commit edd57f48de63d4ebd6fcaa8842ced82017b3b664 Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 26 09:30:10 2014 -0500 +Date: Tue Mar 24 22:45:07 2015 -0400 - [test suite] AFL wrapper update to not require -A for fuzzing access.conf and fwknopd.conf + add test/conf/gpg_large_signing_key_access.conf - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh | 2 +- - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh | 2 +- - test/afl/fuzzing-wrappers/server-access.sh | 2 +- - test/afl/fuzzing-wrappers/server-conf.sh | 2 +- - test/afl/fuzzing-wrappers/server-digest-cache.sh | 2 +- - 5 files changed, 5 insertions(+), 5 deletions(-) + Makefile.am | 1 + + 1 file changed, 1 insertion(+) -commit 7938e6fbbff386572e4d060513c82308f81a6d85 +commit 91a4e82f237a6df4233d1f4830ad2b647aa7759c Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 26 08:46:24 2014 -0500 +Date: Tue Mar 24 22:38:41 2015 -0400 - [server] manpage update + [test suite] added 4096-bit signing key test - server/fwknopd.8.in | 68 +++++++++++++++++++++++++++++++++-------------------- - 1 file changed, 42 insertions(+), 26 deletions(-) + test/conf/gpg_large_signing_key_access.conf | 6 ++++++ + test/test-fwknop.pl | 10 ++++++++++ + test/tests/gpg_no_pw.pl | 12 ++++++++++++ + 3 files changed, 28 insertions(+) -commit aa94fcb8cfa854e0cc68b279db2060fcb8bf54f0 +commit 59d0ef0b17e8fb8c6c05b8de07de0767b76823e1 Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 25 22:08:54 2014 -0500 +Date: Tue Mar 24 22:03:21 2015 -0400 - [test suite] add AFL wrapper for fuzzing digest cache file format + [test suite] minor file rename - .../helpers/fwknopd-digest-cache.sh | 16 +++++++++ - test/afl/fuzzing-wrappers/server-digest-cache.sh | 41 ++++++++++++++++++++++ - 2 files changed, 57 insertions(+) - -commit a64542c7a44ce9740043b98692bc9a2c365a4964 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 25 22:06:56 2014 -0500 - - [server] add --run-dir command line arg - - doc/fwknopd.man.asciidoc | 41 ++++++++++++++++++++++++----------------- - server/cmd_opts.h | 3 ++- - server/config_init.c | 5 ++++- - 3 files changed, 30 insertions(+), 19 deletions(-) - -commit 82cf8b1c9cc9c3256bfbd97cbd3a40353851dc02 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 25 22:05:15 2014 -0500 - - [server] Enforce proper bounds checking on digest cache file import - - Bug fix to ensure that proper bounds are enforced when importing digest - cache files from previous fwknopd executions. This bug - was discovered through fuzzing with American Fuzzy Lop (AFL) as driven - by the test/afl/fuzzing-wrappers/server-digest-cache.sh wrapper. - Previous to this fix, fwknopd could be made to crash through a malicious - digest cache file (normally in /var/run/fwknop/digest.cache) upon - initial import. - - ChangeLog | 9 +++++++++ - server/replay_cache.c | 8 ++++---- - 2 files changed, 13 insertions(+), 4 deletions(-) - -commit 8872e50818cc3d847015b5c4344c76991752283d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 25 15:04:30 2014 -0500 - - [test suite] use digest tracking override for ALF fwknopd fuzzing - - server/fwknopd.c | 5 ----- - test/afl/fuzzing-wrappers/client-rc.sh | 4 +++- - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh | 6 +++++- - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh | 6 +++++- - test/afl/fuzzing-wrappers/server-access.sh | 8 +++++++- - test/afl/fuzzing-wrappers/server-conf.sh | 7 ++++++- - test/afl/fuzzing-wrappers/spa-pkts.sh | 5 ++++- - test/conf/override_no_digest_tracking_fwknopd.conf | 1 + - 8 files changed, 31 insertions(+), 11 deletions(-) - -commit 00ffe198e865699be24ed420485818a8cd431d8d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 23 22:39:25 2014 -0500 - - [test suite] support AFL resume operations - - test/afl/fuzzing-wrappers/client-rc.sh | 11 ++++++++--- - test/afl/fuzzing-wrappers/fcns | 3 ++- - test/afl/fuzzing-wrappers/server-access.sh | 10 ++++++++-- - test/afl/fuzzing-wrappers/server-conf.sh | 11 ++++++++--- - test/afl/fuzzing-wrappers/spa-pkts.sh | 10 ++++++++-- - 5 files changed, 34 insertions(+), 11 deletions(-) - -commit 28abc276fe0daae16d3e3fe642ab9946fc858108 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 23 21:01:44 2014 -0500 - - [test suite] AFL update spa-pkts.sh to use new shared bash functions - - test/afl/fuzzing-wrappers/spa-pkts.sh | 22 ++++++++++++++-------- - 1 file changed, 14 insertions(+), 8 deletions(-) - -commit 39419f43cb3076c2d292c7d81af8bc114c3e92ea -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 23 16:53:29 2014 -0500 - - [test suite] started on shared functions for AFL wrappers - - test/afl/fuzzing-wrappers/client-rc.sh | 21 ++++++++++++++------- - test/afl/fuzzing-wrappers/fcns | 21 +++++++++++++++++++++ - test/afl/fuzzing-wrappers/server-access.sh | 23 +++++++++++++++-------- - test/afl/fuzzing-wrappers/server-conf.sh | 21 ++++++++++++++------- - 4 files changed, 64 insertions(+), 22 deletions(-) - -commit c50c13b6d3ad4dd26e1837f92bfb5668333d2fbc -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Nov 23 09:27:06 2014 -0500 - - minor README formatting updates - - README.md | 28 +++++++++++++++------------- - 1 file changed, 15 insertions(+), 13 deletions(-) - -commit 426bde83c5cc243b0e3977bac401667b364c0865 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 23:06:52 2014 -0500 - - [test suite] set banner for each AFL wrapper - - test/afl/fuzzing-wrappers/client-rc.sh | 2 +- - test/afl/fuzzing-wrappers/server-access.sh | 2 +- - test/afl/fuzzing-wrappers/server-conf.sh | 2 +- - test/afl/fuzzing-wrappers/spa-pkts.sh | 2 +- + Makefile.am | 2 +- + test/conf/gpg_dirs.tar.gz | Bin 0 -> 12472 bytes + test/conf/gpg_dirs_orig.tar.gz | Bin 12472 -> 0 bytes + test/test-fwknop.pl | 6 +++--- 4 files changed, 4 insertions(+), 4 deletions(-) -commit 0e93020671a202fbf922bd199cca9aa53598e61a +commit 1594194e7335ce660e1b73302711677f0c67762a Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 23:06:20 2014 -0500 +Date: Tue Mar 24 22:01:55 2015 -0400 - [test suite] minor AFL README update + [test suite] added new gpg keyrings for large key tests (4096 bits) - test/afl/README.md | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) + test/conf/gpg_dirs_orig.tar.gz | Bin 3876 -> 12472 bytes + 1 file changed, 0 insertions(+), 0 deletions(-) -commit 290aaebd76e04bbe43e2a5177f64aa6b29ef1175 -Merge: 9037b3e ec4647c +commit 17382953e86b7f3a5fad1ba4de36a2805f52442e Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 20:49:21 2014 -0500 +Date: Tue Mar 24 21:44:38 2015 -0400 + + [test suite] minor usage update + + test/test-fwknop.pl | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +commit ce0bb64830dbd782aadd9e932aa117a70b64643d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Mar 23 18:07:13 2015 -0700 + + [test suite] restructured AFL results directory to results/version/commit/ + + test/afl/results/2.6.5/67f969f/server-access | 25 + + .../67f969f/server-access-plot/exec_speed.png | Bin 0 -> 20466 bytes + .../2.6.5/67f969f/server-access-plot/high_freq.png | Bin 0 -> 22305 bytes + .../2.6.5/67f969f/server-access-plot/index.html | 10 + + .../67f969f/server-access-plot/index.html.orig | 10 + + .../2.6.5/67f969f/server-access-plot/low_freq.png | Bin 0 -> 11027 bytes + .../2.6.5/67f969f/server-access-plot/plot_data | 7337 ++++++++++++++++++++ + test/afl/results/2.6.5/7a2763a/spa-pkts | 25 + + test/afl/results/2.6.5/aeac6a4/server-conf | 25 + + test/afl/results/2.6.5/aeac6a4/server-digest-cache | 25 + + test/afl/results/2.6.5/aeac6a4/server-enc-pkts | 25 + + test/afl/results/2.6.5/db8b5e4/server-access | 25 + + .../db8b5e4/server-access-plot/exec_speed.png | Bin 0 -> 27214 bytes + .../2.6.5/db8b5e4/server-access-plot/high_freq.png | Bin 0 -> 22590 bytes + .../2.6.5/db8b5e4/server-access-plot/index.html | 10 + + .../db8b5e4/server-access-plot/index.html.orig | 10 + + .../2.6.5/db8b5e4/server-access-plot/low_freq.png | Bin 0 -> 10548 bytes + test/afl/results/2.6.6/59edf64/spa-pkts | 27 + + test/afl/results/plot-2.6.5.67f969f/exec_speed.png | Bin 20466 -> 0 bytes + test/afl/results/plot-2.6.5.67f969f/high_freq.png | Bin 22305 -> 0 bytes + test/afl/results/plot-2.6.5.67f969f/index.html | 10 - + .../afl/results/plot-2.6.5.67f969f/index.html.orig | 10 - + test/afl/results/plot-2.6.5.67f969f/low_freq.png | Bin 11027 -> 0 bytes + test/afl/results/plot-2.6.5.67f969f/plot_data | 7337 -------------------- + test/afl/results/plot-2.6.5.db8b5e4/exec_speed.png | Bin 27214 -> 0 bytes + test/afl/results/plot-2.6.5.db8b5e4/high_freq.png | Bin 22590 -> 0 bytes + test/afl/results/plot-2.6.5.db8b5e4/index.html | 10 - + .../afl/results/plot-2.6.5.db8b5e4/index.html.orig | 10 - + test/afl/results/plot-2.6.5.db8b5e4/low_freq.png | Bin 10548 -> 0 bytes + test/afl/results/server-access-2.6.5.67f969f | 25 - + test/afl/results/server-access-2.6.5.db8b5e4 | 25 - + test/afl/results/server-conf-2.6.5.aeac6a4 | 25 - + test/afl/results/server-digest-cache-2.6.5.aeac6a4 | 25 - + test/afl/results/server-enc-pkts-2.6.5.aeac6a4 | 25 - + test/afl/results/spa-pkts-2.6.5.59edf64 | 27 - + test/afl/results/spa-pkts-2.6.5.7a2763a | 25 - + 36 files changed, 7554 insertions(+), 7554 deletions(-) + +commit 08bc2aa60301912716acc882b918d73fcbfbdafb +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Mar 23 17:55:59 2015 -0700 + + [test suite] rely exclusively on tarball for gpg keyrings + + Makefile.am | 12 ------------ + test/conf/client-gpg-no-pw/pubring.gpg | Bin 2480 -> 0 bytes + test/conf/client-gpg-no-pw/secring.gpg | Bin 1274 -> 0 bytes + test/conf/client-gpg-no-pw/trustdb.gpg | Bin 1360 -> 0 bytes + test/conf/client-gpg/pubring.gpg | Bin 2480 -> 0 bytes + test/conf/client-gpg/secring.gpg | Bin 1350 -> 0 bytes + test/conf/client-gpg/trustdb.gpg | Bin 1360 -> 0 bytes + test/conf/server-gpg-no-pw/pubring.gpg | Bin 2480 -> 0 bytes + test/conf/server-gpg-no-pw/secring.gpg | Bin 1276 -> 0 bytes + test/conf/server-gpg-no-pw/trustdb.gpg | Bin 1360 -> 0 bytes + test/conf/server-gpg/pubring.gpg | Bin 2480 -> 0 bytes + test/conf/server-gpg/secring.gpg | Bin 1352 -> 0 bytes + test/conf/server-gpg/trustdb.gpg | Bin 1360 -> 0 bytes + test/test-fwknop.pl | 4 ++++ + 14 files changed, 4 insertions(+), 12 deletions(-) + +commit 90fb4c9aca0e10b75394a5cf5fa60e03df3e293e +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 22:26:29 2015 -0400 + + minor comment addition + + test/afl/fuzzing-wrappers/helpers/afl-cmin/README | 1 + + 1 file changed, 1 insertion(+) + +commit 5aacd6ae213d3a7ece43e51b732b28b55933f7ea +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 22:18:04 2015 -0400 + + added convenience script to create a ramdisk for AFL fuzzing runs + + extras/ramdisk/ramdisk-create.sh | 8 ++++++++ + 1 file changed, 8 insertions(+) + +commit ea7f22f8421420205d4ff759ca51b3ecb2c571b5 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 22:12:37 2015 -0400 + + fix line separators + + Makefile.am | 44 ++++++++++++++++++++++---------------------- + 1 file changed, 22 insertions(+), 22 deletions(-) + +commit f87e18635c9c37f13f864939cc6830fcf266201a +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 22:06:19 2015 -0400 + + update Makefile.am for latest AFL scripts and test cases + + Makefile.am | 63 ++++++++++++++++++++++++++++++++++++++++--------------------- + 1 file changed, 41 insertions(+), 22 deletions(-) + +commit 2414393c94a75661949fd76ebd5f0bc0618a22f7 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 22:02:12 2015 -0400 + + added the extras/patches/ directory (initial patch to link against pthreads for libfiu support) + + extras/patches/libfiu_add_pthreads.patch | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +commit 211f1fb5a2b3597cbdfd5016b2d22de9d891f3ed +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 22:00:21 2015 -0400 + + [test suite] update afl-compile-code-coverage.sh to not use afl-gcc + + Makefile.am | 1 - + test/afl/compile/afl-compile-code-coverage.sh | 17 ++++++++++++----- + test/afl/compile/afl-gen-code-coverage.sh | 13 ------------- + 3 files changed, 12 insertions(+), 19 deletions(-) + +commit d058493d3b0e6b8b073f7d4ebe09236dcc4ea109 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 17:41:26 2015 -0700 + + [test suite] handle versions of lcov that don't have the --rc option + + ChangeLog | 8 ++++++-- + Makefile.am | 2 ++ + test/gen-coverage-report.sh | 8 ++++---- + test/init-lcov.sh | 4 ++-- + test/lcov.env | 9 +++++++++ + 5 files changed, 23 insertions(+), 8 deletions(-) + +commit c7be9baf9c22757af3e37c70a8d7d23b37c14c97 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Mar 22 14:46:07 2015 -0700 + + [test suite] better lcov coverage report handling with --initial and --zerocounters + + test/gen-coverage-report.sh | 28 ++++++---------------------- + test/init-lcov.sh | 14 ++++++++++++++ + test/lcov.env | 5 +++++ + test/test-fwknop.pl | 2 ++ + 4 files changed, 27 insertions(+), 22 deletions(-) + +commit 56e2e5ca2fa5e2335b5faff194f4e8c4b0f7898d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 23:45:22 2015 -0400 + + [test suite] restore digest length calculation for AFL fuzzing, fixes #148 + + lib/fko_decode.c | 6 ------ + 1 file changed, 6 deletions(-) + +commit 67fefd67ae1a470bf8753811bffa5cdf2f3442e4 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 23:39:16 2015 -0400 + + [test suite] added README for afl-cmin helper scripts + + test/afl/fuzzing-wrappers/helpers/afl-cmin/README | 12 ++++++++++++ + .../fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh | 1 - + 2 files changed, 12 insertions(+), 1 deletion(-) + +commit c4048573c6d325cd692c1b58159abca2e68c7b19 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 23:37:04 2015 -0400 + + [test suite] removed SPA packet from afl-cmin corpus + + test/afl/test-cases/spa-pkts.cmin/spa3_md5.start | 1 - + 1 file changed, 1 deletion(-) + +commit 8ad434aed5dfa18d9e15ce586e0464ddc6bae10f +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 23:02:40 2015 -0400 + + [test suite] the large afl-cmin directories are not used by default + + test/afl/fuzzing-wrappers/server-conf.sh | 2 +- + .../server-access.cmin/cfb_mode_access.conf | 4 --- + .../test-cases/server-access.cmin/cmd_access.conf | 4 --- + .../server-access.cmin/cmd_giduid_access.conf | 6 ---- + .../server-access.cmin/cmd_setuid_access.conf | 5 --- + .../server-access.cmin/ctr_mode_access.conf | 4 --- + .../server-access.cmin/default_fwknopd.conf | 1 - + .../dual_key_legacy_iv_access.conf | 10 ------ + .../server-access.cmin/ecb_mode_access.conf | 4 --- + .../expired_epoch_stanza_access.conf | 4 --- + .../server-access.cmin/expired_stanza_access.conf | 4 --- + .../server-access.cmin/force_nat_access.conf | 4 --- + .../fuzzing_open_ports_access.conf | 4 --- + .../fuzzing_restrict_ports_access.conf | 5 --- + .../server-access.cmin/fuzzing_source_access.conf | 4 --- + .../server-access.cmin/fwknoprc_with_default_key | 2 -- + .../gpg_no_sig_no_fpr_access.conf | 8 ----- + .../hmac_dual_key_usage_access.conf | 12 ------- + .../server-access.cmin/hmac_equal_keys_access.conf | 17 --------- + .../server-access.cmin/hmac_force_masq_access.conf | 6 ---- + .../server-access.cmin/hmac_force_snat_access.conf | 6 ---- + .../server-access.cmin/hmac_fuzzing_access.conf | 5 --- + .../server-access.cmin/hmac_get_key_access.conf | 4 --- + .../hmac_invalid_type_access.conf | 5 --- + .../hmac_md5_short_key_access.conf | 5 --- + .../hmac_no_b64_cygwin_access.conf | 4 --- + .../hmac_sha1_short_key_access.conf | 5 --- + .../server-access.cmin/hmac_sha384_access.conf | 5 --- + .../hmac_sha512_short_key2_access.conf | 5 --- + .../hmac_simple_keys_access.conf | 4 --- + .../icmp_pcap_filter_fwknopd.conf | 1 - + .../server-access.cmin/invalid_expire_access.conf | 4 --- + .../server-access.cmin/invalid_source_access.conf | 6 ---- + .../server-access.cmin/ip_source_match_access.conf | 3 -- + .../ipt_custom_nat_chain_fwknopd.conf | 5 --- + .../ipt_no_flush_init_or_exit_fwknopd.conf | 2 -- + .../server-access.cmin/ipt_snat_fwknopd.conf | 3 -- + .../legacy_iv_long_key2_access.conf | 4 --- + .../server-access.cmin/multi_stanzas_access.conf | 12 ------- + .../multi_stanzas_with_broken_keys.conf | 15 -------- + .../no_multi_source_match_access.conf | 3 -- + .../server-access.cmin/ofb_mode_access.conf | 4 --- + .../server-conf.cmin/default_fwknopd.conf | 1 - + .../server-conf.cmin/fwknoprc_gpg_invalid_exe | 4 --- + .../server-conf.cmin/fwknoprc_hmac_defaults | 40 --------------------- + .../fwknoprc_hmac_time_offset_days | 18 ---------- + .../server-conf.cmin/fwknoprc_stanza_list | 8 ----- + .../server-conf.cmin/fwknoprc_with_named_key | 3 -- + .../test-cases/server-conf.cmin/gpg_access.conf | 7 ---- + .../server-conf.cmin/gpg_dirs_orig.tar.gz | Bin 3876 -> 0 bytes + .../server-conf.cmin/icmp_pcap_filter_fwknopd.conf | 1 - + .../invalid_ipt_input_chain_3_fwknopd.conf | 1 - + .../invalid_ipt_input_chain_4_fwknopd.conf | 1 - + .../invalid_ipt_input_chain_5_fwknopd.conf | 1 - + .../invalid_ipt_input_chain_fwknopd.conf | 1 - + .../ipt_custom_nat_chain_fwknopd.conf | 5 --- + .../ipt_no_flush_init_fwknopd.conf | 1 - + .../server-conf.cmin/ipt_output_chain_fwknopd.conf | 2 -- + .../server-conf.cmin/ipt_snat_fwknopd.conf | 3 -- + .../ipt_snat_no_translate_ip_fwknopd.conf | 2 -- + .../test-cases/server-conf.cmin/multi_pkts.pcap | Bin 46890 -> 0 bytes + .../server-conf.cmin/override2_fwknopd.conf | 2 -- + .../override_no_digest_tracking_fwknopd.conf | 1 - + .../test-cases/server-conf.cmin/spa_over_http.pcap | Bin 1846 -> 0 bytes + .../server-conf.cmin/spa_over_http_fwknopd.conf | 1 - + .../test-cases/server-conf.cmin/spa_replay.pcap | Bin 910 -> 0 bytes + .../server-conf.cmin/var_expansion_fwknopd.conf | 2 -- + .../var_expansion_invalid_fwknopd.conf | 2 -- + 68 files changed, 1 insertion(+), 326 deletions(-) + +commit ab5c000a32dca8e6584be55d168810f774856b32 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 22:55:50 2015 -0400 + + [test suite] added afl-cmin scripts, and the main test suite configs are referenced + + server/config_init.c | 4 +-- + .../helpers/afl-cmin/server-access-cmin.sh | 19 ++++++++++ + .../helpers/afl-cmin/server-conf-cmin.sh | 18 ++++++++++ + .../helpers/afl-cmin/spa-pkts-cmin.sh | 9 +++-- + test/afl/fuzzing-wrappers/server-access.sh | 5 +-- + test/afl/fuzzing-wrappers/server-conf.sh | 7 ++-- + .../server-access.cmin/cfb_mode_access.conf | 4 +++ + .../test-cases/server-access.cmin/cmd_access.conf | 4 +++ + .../server-access.cmin/cmd_giduid_access.conf | 6 ++++ + .../server-access.cmin/cmd_setuid_access.conf | 5 +++ + .../server-access.cmin/ctr_mode_access.conf | 4 +++ + .../server-access.cmin/default_fwknopd.conf | 1 + + .../dual_key_legacy_iv_access.conf | 10 ++++++ + .../server-access.cmin/ecb_mode_access.conf | 4 +++ + .../expired_epoch_stanza_access.conf | 4 +++ + .../server-access.cmin/expired_stanza_access.conf | 4 +++ + .../server-access.cmin/force_nat_access.conf | 4 +++ + .../fuzzing_open_ports_access.conf | 4 +++ + .../fuzzing_restrict_ports_access.conf | 5 +++ + .../server-access.cmin/fuzzing_source_access.conf | 4 +++ + .../server-access.cmin/fwknoprc_with_default_key | 2 ++ + .../gpg_no_sig_no_fpr_access.conf | 8 +++++ + .../hmac_dual_key_usage_access.conf | 12 +++++++ + .../server-access.cmin/hmac_equal_keys_access.conf | 17 +++++++++ + .../server-access.cmin/hmac_force_masq_access.conf | 6 ++++ + .../server-access.cmin/hmac_force_snat_access.conf | 6 ++++ + .../server-access.cmin/hmac_fuzzing_access.conf | 5 +++ + .../server-access.cmin/hmac_get_key_access.conf | 4 +++ + .../hmac_invalid_type_access.conf | 5 +++ + .../hmac_md5_short_key_access.conf | 5 +++ + .../hmac_no_b64_cygwin_access.conf | 4 +++ + .../hmac_sha1_short_key_access.conf | 5 +++ + .../server-access.cmin/hmac_sha384_access.conf | 5 +++ + .../hmac_sha512_short_key2_access.conf | 5 +++ + .../hmac_simple_keys_access.conf | 4 +++ + .../icmp_pcap_filter_fwknopd.conf | 1 + + .../server-access.cmin/invalid_expire_access.conf | 4 +++ + .../server-access.cmin/invalid_source_access.conf | 6 ++++ + .../server-access.cmin/ip_source_match_access.conf | 3 ++ + .../ipt_custom_nat_chain_fwknopd.conf | 5 +++ + .../ipt_no_flush_init_or_exit_fwknopd.conf | 2 ++ + .../server-access.cmin/ipt_snat_fwknopd.conf | 3 ++ + .../legacy_iv_long_key2_access.conf | 4 +++ + .../server-access.cmin/multi_stanzas_access.conf | 12 +++++++ + .../multi_stanzas_with_broken_keys.conf | 15 ++++++++ + .../no_multi_source_match_access.conf | 3 ++ + .../server-access.cmin/ofb_mode_access.conf | 4 +++ + .../server-conf.cmin/default_fwknopd.conf | 1 + + .../server-conf.cmin/fwknoprc_gpg_invalid_exe | 4 +++ + .../server-conf.cmin/fwknoprc_hmac_defaults | 40 +++++++++++++++++++++ + .../fwknoprc_hmac_time_offset_days | 18 ++++++++++ + .../server-conf.cmin/fwknoprc_stanza_list | 8 +++++ + .../server-conf.cmin/fwknoprc_with_named_key | 3 ++ + .../test-cases/server-conf.cmin/gpg_access.conf | 7 ++++ + .../server-conf.cmin/gpg_dirs_orig.tar.gz | Bin 0 -> 3876 bytes + .../server-conf.cmin/icmp_pcap_filter_fwknopd.conf | 1 + + .../invalid_ipt_input_chain_3_fwknopd.conf | 1 + + .../invalid_ipt_input_chain_4_fwknopd.conf | 1 + + .../invalid_ipt_input_chain_5_fwknopd.conf | 1 + + .../invalid_ipt_input_chain_fwknopd.conf | 1 + + .../ipt_custom_nat_chain_fwknopd.conf | 5 +++ + .../ipt_no_flush_init_fwknopd.conf | 1 + + .../server-conf.cmin/ipt_output_chain_fwknopd.conf | 2 ++ + .../server-conf.cmin/ipt_snat_fwknopd.conf | 3 ++ + .../ipt_snat_no_translate_ip_fwknopd.conf | 2 ++ + .../test-cases/server-conf.cmin/multi_pkts.pcap | Bin 0 -> 46890 bytes + .../server-conf.cmin/override2_fwknopd.conf | 2 ++ + .../override_no_digest_tracking_fwknopd.conf | 1 + + .../test-cases/server-conf.cmin/spa_over_http.pcap | Bin 0 -> 1846 bytes + .../server-conf.cmin/spa_over_http_fwknopd.conf | 1 + + .../test-cases/server-conf.cmin/spa_replay.pcap | Bin 0 -> 910 bytes + .../server-conf.cmin/var_expansion_fwknopd.conf | 2 ++ + .../var_expansion_invalid_fwknopd.conf | 2 ++ + 73 files changed, 378 insertions(+), 9 deletions(-) + +commit 104aeca978d323db3e3a9cfb2c543547b32416cb +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 22:48:11 2015 -0400 + + [test suite] switch SPA packets test to use afl-cmin test cases + + test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh | 7 +++++++ + test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh | 9 ++++++--- + test/afl/fuzzing-wrappers/spa-pkts.sh | 2 +- + test/afl/test-cases/spa-pkts.cmin/spa1_md5.start | 1 + + test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start | 1 + + test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start | 1 + + test/afl/test-cases/spa-pkts.cmin/spa2_md5.start | 1 + + test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start | 1 + + test/afl/test-cases/spa-pkts.cmin/spa3_md5.start | 1 + + 9 files changed, 20 insertions(+), 4 deletions(-) + +commit 89d7241a51f102619ec24ac85566730c550e0652 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 22:37:01 2015 -0400 + + [test suite] include all digest lengths for SPA input packets (afl-cmin usage will be next) + + test/afl/test-cases/spa-pkts/spa.start | 1 - + test/afl/test-cases/spa-pkts/spa1_md5.start | 1 + + test/afl/test-cases/spa-pkts/spa1_sha256.start | 1 + + test/afl/test-cases/spa-pkts/spa1_sha384.start | 1 + + test/afl/test-cases/spa-pkts/spa1_sha512.start | 1 + + test/afl/test-cases/spa-pkts/spa2.start | 1 - + test/afl/test-cases/spa-pkts/spa2_md5.start | 1 + + test/afl/test-cases/spa-pkts/spa2_sha256.start | 1 + + test/afl/test-cases/spa-pkts/spa2_sha384.start | 1 + + test/afl/test-cases/spa-pkts/spa2_sha512.start | 1 + + test/afl/test-cases/spa-pkts/spa3.start | 1 - + test/afl/test-cases/spa-pkts/spa3_md5.start | 1 + + test/afl/test-cases/spa-pkts/spa3_sha256.start | 1 + + test/afl/test-cases/spa-pkts/spa3_sha384.start | 1 + + test/afl/test-cases/spa-pkts/spa3_sha512.start | 1 + + 15 files changed, 12 insertions(+), 3 deletions(-) + +commit 3febc74c22a337795eea844d16dcb200842e2243 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 22:34:45 2015 -0400 + + [test suite] extend digest lengths for SPA input packets + + test/afl/test-cases/spa-pkts/spa.start | 2 +- + test/afl/test-cases/spa-pkts/spa2.start | 2 +- + test/afl/test-cases/spa-pkts/spa3.start | 2 +- + 3 files changed, 3 insertions(+), 3 deletions(-) + +commit 95ae8dd1fe494b9f68eb05bb2648ba58ff81f9f1 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 22:20:26 2015 -0400 + + minor ChangeLog update + + ChangeLog | 2 ++ + 1 file changed, 2 insertions(+) + +commit 40c695097ed73d566861ba69c7e812c702aeac7a +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Mar 19 22:05:10 2015 -0400 + + added spa-pkts-2.6.5.59edf64 AFL test results file + + test/afl/results/spa-pkts-2.6.5.59edf64 | 27 +++++++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +commit 59edf64d9cc507047d429ad02b71fc5ad3767878 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Mar 7 20:09:31 2015 -0800 + + [server] consolidate fw creation, add FORWARD_ALL functionality + + server/fw_util_firewalld.c | 271 ++++++++++++++++----------------------------- + server/fw_util_firewalld.h | 1 + + server/fw_util_iptables.c | 1 - + 3 files changed, 97 insertions(+), 176 deletions(-) + +commit cfd1cbf2bfc023e92c92928aafd10ce074b3affa +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Mar 7 19:45:50 2015 -0800 + + [server] minor macro usage update for 127.0.0.2 + + server/fw_util.h | 1 + + server/fw_util_firewalld.h | 6 +++--- + server/fw_util_iptables.h | 6 +++--- + 3 files changed, 7 insertions(+), 6 deletions(-) + +commit 745a442f1830f9b4b36cf9657f518d67395530c4 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Mar 7 19:36:23 2015 -0800 + + [test suite] add AFL_HARDEN=1 to AFL compilation scripts + + test/afl/compile/afl-compile-no-enable-arg.sh | 2 +- + test/afl/compile/afl-compile.sh | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +commit 26aceb9db6d4872960c37cf8d4e11e6bc912660e +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Mar 7 19:12:39 2015 -0800 + + [test suite] add more rigorous multi-port tests with per-rule regex search criteria + + test/tests/rijndael.pl | 27 +++++++++++++++++++++++++++ + test/tests/rijndael_hmac.pl | 16 ++++++++++++++++ + 2 files changed, 43 insertions(+) + +commit 322ae853888b17f250125acd91942b0ed1ed9eea +Author: Damien Stuart <dstuart@dstuart.org> +Date: Wed Feb 18 22:44:53 2015 -0500 + + Fixed a bug in configure.ac that did not allow specifying alternate firewall exe if firewall-cmd was found by configure. + + configure.ac | 80 +++++++++++++++++++++++++++++++----------------------------- + 1 file changed, 42 insertions(+), 38 deletions(-) + +commit bf251034e3ac16a92fa2df59ce05c9cde2c13cc8 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Feb 18 19:37:37 2015 -0500 + + [server] bug fix to exclude pcap.h only in --enable-udp-server mode + + This commit fixes issue #143 on github reported by Coacher. The previous + commit introduced a build time error for non UDP server mode as seen + here: + + https://paste.kde.org/pkaxwobwr + + server/pcap_capture.c | 6 ++++-- + server/process_packet.c | 6 ++++-- + 2 files changed, 8 insertions(+), 4 deletions(-) + +commit 1ce800446da6f22a802159dff7879bec52ce0ade +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Feb 17 23:21:05 2015 -0800 + + [server] Bug fix to not include pcap.h in --enable-udp-server mode + + CREDITS | 4 ++++ + ChangeLog | 5 +++++ + server/pcap_capture.c | 3 +-- + server/process_packet.c | 5 +++++ + 4 files changed, 15 insertions(+), 2 deletions(-) + +commit 987455b902aef54090837ac1001c93ba094b84fe +Author: Damien Stuart <dstuart@dstuart.org> +Date: Sat Feb 14 12:40:58 2015 -0500 + + Remove commented out entries from the client and server Makefile.am. + + client/Makefile.am | 5 ----- + server/Makefile.am | 4 ---- + 2 files changed, 9 deletions(-) + +commit b152d15970316f16272877c5c98b984c440acad8 +Author: Damien Stuart <dstuart@dstuart.org> +Date: Sat Feb 14 12:29:30 2015 -0500 + + Refactored how the cunit tests are processed so "make dist" does not fail and builds with c-unit-tests enabled work on systems with firewalld (added fw_util_firewalld.c for server tests). + + client/Makefile.am | 4 ++ + client/config_init.c | 3 +- + common/Makefile.am | 10 +++- + common/cunit_common.c | 50 +++++++++++++++++++ + common/cunit_common.h | 52 ++++++++++---------- + lib/Makefile.am | 8 +++- + lib/cunit_common.c | 51 -------------------- + server/Makefile.am | 7 ++- + server/access.c | 4 +- + test/c-unit-tests/Makefile.am | 108 ++++++++++++++++++++---------------------- + 10 files changed, 156 insertions(+), 141 deletions(-) + +commit e8cfeaf77209e017c715963e07a49373e2db317a +Merge: 6b7a3bb 1c81aef +Author: Michael Rash <michael.rash@gmail.com> +Date: Sat Jan 17 09:11:29 2015 -0500 + + Merge pull request #142 from fjoncourt/c_unit_testing + + C unit testing - excellent, thank you Franck. I'll work on the relative path issue you mentioned as well. + +commit 6b7a3bbdae295c29a15a59385e637bd391858bc2 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jan 17 08:38:32 2015 -0500 + + [server] Add FORWARD_ALL access.conf wildcard + + This is a significant commit that allows iptables firewalls to be used + as an "SPA gateway" for all ports/protocols upon providing a valid SPA + packet. Additional commits will be made to extend this capability, but + this commit adds two new access.conf keywords: FORWARD_ALL and + DISABLE_DNAT. These are used in conjunction to add ACCEPT rules for all + ports/protocols in the FORWARD chain, and also disable DNAT rules at the + same time. Then, by buildling the SNAT chain to provide translation for + an internal network (where an SPA cliet is located), but DROP all + forwarded traffic by default at the same time, SPA can be used to gain + access to the internet. So, this would allow, say, an RFC 1918 internal + network to have IP's assigned via DHCP but they wouldn't be able to + access the internet before sending a SPA packet to the gateway. This + scenario was suggested by spartan1833 to the fwknop list and tracked via + github issue 131. + + Additional commits will be made to fully support this feature. + + common/common.h | 2 ++ + server/access.c | 17 +++++++++++-- + server/fw_util_iptables.c | 64 ++++++++++++++++++++++++++++++++++------------- + server/fw_util_iptables.h | 1 + + server/fwknopd_common.h | 7 +++--- + 5 files changed, 67 insertions(+), 24 deletions(-) + +commit d148fb091a14d0cbbe5a5d61fc0b16d7e78364d5 +Merge: 08bc935 4f94a05 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jan 17 08:33:22 2015 -0500 Merge branch 'master' of https://github.com/mrash/fwknop -commit 9037b3e7e097f149288b5935b0b0c5f22a7ee4fc +commit 4f94a0584e84708c48502961392b1472bc92d827 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 20:49:09 2014 -0500 +Date: Sat Jan 17 08:11:37 2015 -0500 - minor manpage update to reference github link for contirbutors + [test suite] minor candidate big fix for readline on closed filehandle errors seen in GPG tests - doc/fwknop.man.asciidoc | 2 +- - doc/fwknopd.man.asciidoc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + test/test-fwknop.pl | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -commit ec4647cdf0b8c7fa37d18324c41baa159624f17e +commit 08bc93579675b702c6a5ac56c227850298ee7735 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 16:52:15 2014 -0500 +Date: Mon Jan 5 21:55:38 2015 -0500 - [test suite] path bug fix + [server] remove redundant mk_chain() calls - test/afl/compile/afl-compile-code-coverage.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + server/fw_util_iptables.c | 11 +---------- + 1 file changed, 1 insertion(+), 10 deletions(-) -commit f4a8c0ace1a1f88f8b203bc029089afb47bf0773 +commit 1f9e939c950ee14653947140a0465fcb61ff7dd7 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 16:05:02 2014 -0500 +Date: Mon Jan 5 21:37:09 2015 -0500 - [test suite] more AFL README updates + [server] consolidate iptables rule additions into a single ipt_rule() function - test/afl/README.md | 60 +++++++++++++++++++++++++++++++++++++++++++++++------- - 1 file changed, 53 insertions(+), 7 deletions(-) + server/fw_util_iptables.c | 255 ++++++++++++++-------------------------------- + 1 file changed, 79 insertions(+), 176 deletions(-) -commit e7da008d34134de85f2d7202e20b330d9bd4448e +commit 1c81aef39d426d7426ef07a692fb243e61e254b1 +Author: Franck Joncourt <franck@debian.org> +Date: Wed Dec 31 09:51:08 2014 +0100 + + Fixed file permissions + + client/config_init.c | 0 + client/config_init.h | 0 + client/getpasswd.c | 0 + client/getpasswd.h | 0 + common/Makefile.am | 0 + common/common.h | 0 + configure.ac | 0 + lib/Makefile.am | 0 + lib/cunit_common.c | 0 + server/Makefile.am | 0 + server/access.c | 0 + server/access.h | 0 + server/fwknopd.c | 0 + server/utils.c | 0 + 14 files changed, 0 insertions(+), 0 deletions(-) + +commit 29a5a9804d68395c10a176bd9baec1ecbe1a701a +Author: Franck Joncourt <franck@debian.org> +Date: Tue Dec 30 20:49:14 2014 +0100 + + * Added libfko unit tests + + lib/fko_decode.c | 49 ++++++++++++++++- + test/c-unit-tests/Makefile.am | 7 +-- + test/c-unit-tests/README.md | 123 +++++++++++++++++++++++++++--------------- + 3 files changed, 130 insertions(+), 49 deletions(-) + +commit 1ece9d022b0e4d13b03f879b74f54a7e3fdad231 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 16:03:51 2014 -0500 +Date: Tue Dec 30 10:42:31 2014 -0500 - [test suite] more AFL README updates + [server] consolidate create_chain() and add_jump_rule() into a single function - test/afl/AFL_status_screen.png | Bin 0 -> 232415 bytes - 1 file changed, 0 insertions(+), 0 deletions(-) + server/fw_util_firewalld.c | 52 ++++++++++++++++++---------------------------- + server/fw_util_iptables.c | 52 ++++++++++++++++++---------------------------- + 2 files changed, 40 insertions(+), 64 deletions(-) -commit 18760d4d64969b49174ca6e83ed6b81f2449ef4c -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 15:10:00 2014 -0500 +commit 620d31364e6984eb25ad2279fb4fd71fc33870ef +Author: Franck Joncourt <franck@debian.org> +Date: Mon Dec 29 18:47:17 2014 +0100 - [test suite] AFL README add all four fuzzing wrappers + * Removed duplicated entry in Makefile.am for libfko + * Added c unit tests for fko (draft) + * Updated c unit test README file. - test/afl/README.md | 9 ++++----- - 1 file changed, 4 insertions(+), 5 deletions(-) + lib/Makefile.am | 2 +- + lib/fko.h | 4 + + lib/fko_decode.c | 23 +++ + test/c-unit-tests/Makefile.am | 39 ++++- + test/c-unit-tests/README.md | 341 +++++++++++++++++++++++------------------ + test/c-unit-tests/fko_utests.c | 34 ++++ + 6 files changed, 291 insertions(+), 152 deletions(-) -commit dd0571ad56c121fc0abef3c792818a7460062254 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 15:03:12 2014 -0500 +commit cb13d84d489b2f9a43ec47e7ba2b72bd03789bca +Author: Franck Joncourt <franck@debian.org> +Date: Mon Dec 29 13:25:01 2014 +0100 - [test suite] AFL README formatting update + Use of subdir-objects libtool option. - test/afl/README.md | 13 +++++++++---- - 1 file changed, 9 insertions(+), 4 deletions(-) + configure.ac | 2 +- + test/c-unit-tests/Makefile.am | 52 ++++++++++++++++++++++++------------------- + 2 files changed, 30 insertions(+), 24 deletions(-) -commit 8d38980915aba3d4d6d8d77f2e291aaff20124ea -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 13:55:05 2014 -0500 +commit 750fd97bda3a5f482ff2a41f6a534d40eed47b24 +Author: Franck Joncourt <franck@debian.org> +Date: Mon Dec 29 11:45:30 2014 +0100 - [test suite] AFL README formatting update + Allow to build without c unit test - test/afl/README.md | 8 ++++---- + lib/cunit_common.c | 4 ++++ + 1 file changed, 4 insertions(+) + +commit fdb3da0769be166ff73b4b7c8c4db710aec7356e +Author: Franck Joncourt <franck@debian.org> +Date: Mon Dec 29 11:45:23 2014 +0100 + + Added README for c unit test + + test/c-unit-tests/README.md | 150 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 150 insertions(+) + +commit 526cae6464633696bc9241412b0bdb975bcabbd2 +Author: Franck Joncourt <franck@debian.org> +Date: Sun Dec 28 23:55:52 2014 +0100 + + Fixed upper case + + test/c-unit-tests/fwknop_utests.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) -commit f53c15fbda4a5737c087ee16692fe8291515b020 +commit 5c3a7090148f824f1495594de6d789de6d60072b +Merge: b7ecb33 bd0035a +Author: Franck Joncourt <franck@debian.org> +Date: Sun Dec 28 23:24:15 2014 +0100 + + Merge branch 'c_unit_testing' of https://github.com/fjoncourt/fwknop into c_unit_testing + + Conflicts: + client/config_init.c + common/cunit_common.h + lib/cunit_common.c + server/access.c + +commit b7ecb3334ae7397b8ee73cb5e56666d326c16d63 +Merge: 260cd54 2430f3a +Author: Franck Joncourt <franck@debian.org> +Date: Sun Dec 28 15:00:24 2014 +0100 + + Merge upstream changes to our changes + +commit 2430f3ae80f90a2d9758beaab00620b42588d59f Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 13:53:54 2014 -0500 +Date: Mon Dec 22 09:22:39 2014 -0500 - [test suite] AFL README formatting update + [test suite] added long running server-access AFL fuzzing results - test/afl/README.md | 16 ++++++++-------- - 1 file changed, 8 insertions(+), 8 deletions(-) + test/afl/results/plot-2.6.5.db8b5e4/exec_speed.png | Bin 0 -> 27214 bytes + test/afl/results/plot-2.6.5.db8b5e4/high_freq.png | Bin 0 -> 22590 bytes + test/afl/results/plot-2.6.5.db8b5e4/index.html | 10 +++++++++ + .../afl/results/plot-2.6.5.db8b5e4/index.html.orig | 10 +++++++++ + test/afl/results/plot-2.6.5.db8b5e4/low_freq.png | Bin 0 -> 10548 bytes + test/afl/results/server-access-2.6.5.db8b5e4 | 25 +++++++++++++++++++++ + 6 files changed, 45 insertions(+) -commit 9dbe7f5bd6ad911b3ba8be329ce212dc4cf68dbf -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 13:52:42 2014 -0500 +commit 260cd5481b41384f802eaa4bd1a33824d751cf8f +Author: Franck Joncourt <franck@debian.org> +Date: Sun Sep 7 20:33:39 2014 +0200 - [test suite] AFL README formatting update + Use of init and cleanup functions for the test suite. - test/afl/README.md | 28 ++++++++++++++++------------ - 1 file changed, 16 insertions(+), 12 deletions(-) + client/config_init.c | 66 +++++++++++++++++++++++++++------------------------ + common/cunit_common.h | 54 ++++++++++++++++++++++------------------- + lib/cunit_common.c | 22 +++++++++-------- + server/access.c | 36 ++++++++++++++-------------- + 4 files changed, 95 insertions(+), 83 deletions(-) -commit 0b58e3af57c4dbc231aa7d0a9ca2195eb57fe5fc -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 13:43:56 2014 -0500 +commit bd0035af1e1efa2d6b82f9be27bac075c69d9f52 +Author: Franck Joncourt <franck@debian.org> +Date: Sun Sep 7 15:40:03 2014 +0200 - [test suite] AFL README.md files list + Fixed tab vs spaces - test/afl/README.md | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) + client/config_init.c | 58 ++++++++++++++++++------------------ + common/common.h | 2 +- + common/cunit_common.h | 44 ++++++++++++++-------------- + lib/cunit_common.c | 60 +++++++++++++++++++------------------- + server/access.c | 36 +++++++++++------------ + test/c-unit-tests/fwknop_utests.c | 16 +++++----- + test/c-unit-tests/fwknopd_utests.c | 18 ++++++------ + 7 files changed, 117 insertions(+), 117 deletions(-) -commit a15d76a3ea3e995a68232fe2f9b3f97c32fec0e0 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 13:40:52 2014 -0500 +commit 32c5afae83ef38f34eae6ba1257a9043c0518487 +Merge: 688f08c aae72a9 +Author: Franck Joncourt <franck@debian.org> +Date: Sun Sep 7 15:24:59 2014 +0200 - [test suite] AFL README -> README.md + Merge remote-tracking branch 'upstream/master' into c_unit_testing - test/afl/README | 78 +----------------------------------------------------- - test/afl/README.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 78 insertions(+), 77 deletions(-) +commit 688f08c2a0378fb9afc9b9015a454ffdde6e969e +Author: Franck Joncourt <franck@debian.org> +Date: Sun Aug 31 20:48:44 2014 +0200 -commit 38977b5f2fd8def73a29850ac07baf9d16f8366d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 13:39:24 2014 -0500 + Both the fwknop client and server have their own test suites tied to fwknop_utests + and fwknopd_utests binaries. + + When profil coverage is enbaled, lcov filee are parsed by test-fwknop.pl and added + to the main profil coverage report in the output directory. + + Running make from the main directory build the c-unit test suites if enabled. - [test suite] use exit status in wrapper scripts + Makefile.am | 5 +++ + client/config_init.c | 63 ++++++++++++++++++++------------------ + client/getpasswd.c | 52 ------------------------------- + client/getpasswd.h | 4 --- + common/Makefile.am | 2 +- + common/common.h | 11 +------ + common/cunit_common.h | 31 +++++++++++++++++++ + configure.ac | 4 ++- + lib/Makefile.am | 3 +- + lib/cunit_common.c | 45 +++++++++++++++++++++++++++ + server/Makefile.am | 3 +- + server/access.c | 35 +++++++++++++++++++++ + server/access.h | 4 +++ + server/fwknopd.c | 22 ------------- + server/utils.c | 26 ++++++++++++++++ + test/c-unit-tests/Makefile.am | 30 ++++++++++++++---- + test/c-unit-tests/fko_utests.c | 37 ---------------------- + test/c-unit-tests/fko_utests.h | 4 --- + test/c-unit-tests/fwknop_utests.c | 35 +++++++++++++++++++++ + test/c-unit-tests/fwknopd_utests.c | 35 +++++++++++++++++++++ + test/test-fwknop.pl | 2 +- + 21 files changed, 283 insertions(+), 170 deletions(-) - test/afl/compile/afl-compile-code-coverage.sh | 2 +- - test/afl/compile/afl-compile-no-enable-arg.sh | 2 +- - test/afl/compile/afl-compile.sh | 2 +- - test/afl/compile/afl-gen-code-coverage.sh | 2 +- - test/afl/fuzzing-wrappers/client-rc.sh | 5 +++-- - test/afl/fuzzing-wrappers/helpers/fwknop-rc-hangs.sh | 2 +- - test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh | 2 ++ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access-hangs.sh | 2 +- - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh | 2 ++ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf-hangs.sh | 2 +- - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh | 2 ++ - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-hangs.sh | 2 +- - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh | 2 ++ - test/afl/fuzzing-wrappers/server-access.sh | 4 ++-- - test/afl/fuzzing-wrappers/server-conf.sh | 4 ++-- - test/afl/fuzzing-wrappers/spa-pkts.sh | 4 ++-- - 16 files changed, 25 insertions(+), 16 deletions(-) +commit 934d764159293ef93a3a5c382e94655922a0c658 +Author: Franck Joncourt <franck@debian.org> +Date: Sun Aug 24 21:14:45 2014 +0200 -commit ca64e3aa4e8fe831d47a81d3deb11ce9df2f0541 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 13:38:46 2014 -0500 + Minor update. - [test suite] start on AFL README in .md format + test/c-unit-tests/Makefile.am | 16 ++++++++-------- + test/c-unit-tests/fko_utests.c | 9 ++++++--- + test/c-unit-tests/fko_utests.h | 4 +--- + 3 files changed, 15 insertions(+), 14 deletions(-) - test/afl/README | 66 +++++++++++++++++++++++++++++---------------------------- - 1 file changed, 34 insertions(+), 32 deletions(-) +commit 306dd0f6852a383d0c4ba2ef17f73c411b75c6b9 +Author: Franck Joncourt <franck@debian.org> +Date: Sun Aug 24 21:05:44 2014 +0200 -commit f8d3cc51f046128d803a0198c637a4dedf698fc6 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Nov 22 09:11:39 2014 -0500 + First layout to add c unit testing support to fwknop. - [test suite] stronger access.conf test case for AFL fuzzing - - .../helpers/fwknopd-parse-access.sh | 2 +- - test/afl/fuzzing-wrappers/server-access.sh | 2 +- - test/afl/test-cases/server-access/access.conf | 24 ++++++++++++---------- - 3 files changed, 15 insertions(+), 13 deletions(-) - -commit 0e5606fb263d89518d7ba90fcaa5d62767fc63f4 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Nov 21 22:18:17 2014 -0500 - - [test suite] AFL fuzzing README update - - test/afl/README | 59 ++++++++++++++++++++++++++++++++++++--------------------- - 1 file changed, 37 insertions(+), 22 deletions(-) - -commit 63a2ae92d4335468218d2444f0a4c22fa2b475d3 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Nov 21 22:16:02 2014 -0500 - - [test suite] added *hang.sh helper scripts for AFL results analysis - - test/afl/afl-compile-code-coverage.sh | 9 --------- - test/afl/afl-compile.sh | 8 -------- - test/afl/afl-gen-code-coverage.sh | 13 ------------- - test/afl/compile/afl-compile-code-coverage.sh | 9 +++++++++ - test/afl/compile/afl-compile-no-enable-arg.sh | 10 ++++++++++ - test/afl/compile/afl-compile.sh | 8 ++++++++ - test/afl/compile/afl-gen-code-coverage.sh | 13 +++++++++++++ - test/afl/fuzzing-wrappers/helpers/fwknop-rc-hangs.sh | 7 +++++-- - .../fuzzing-wrappers/helpers/fwknopd-parse-access-hangs.sh | 11 +++++++++++ - .../fuzzing-wrappers/helpers/fwknopd-parse-conf-hangs.sh | 11 +++++++++++ - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-hangs.sh | 11 +++++++++++ - 11 files changed, 78 insertions(+), 32 deletions(-) - -commit 46a6b5a1e59357aae504ce9424b46c88675fb5dc -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Nov 21 21:42:32 2014 -0500 - - [test suite] moved helper scripts to fuzzing-wrappers/helpers/ - - test/afl/fuzzing-wrappers/client-rc.sh | 2 +- - test/afl/fuzzing-wrappers/fwknop-rc-test.sh | 10 ---------- - test/afl/fuzzing-wrappers/fwknopd-parse-access.sh | 10 ---------- - test/afl/fuzzing-wrappers/fwknopd-parse-conf.sh | 10 ---------- - test/afl/fuzzing-wrappers/fwknopd-stdin-test.sh | 5 ----- - test/afl/fuzzing-wrappers/helpers/fwknop-rc-hangs.sh | 8 ++++++++ - test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh | 10 ++++++++++ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-access.sh | 10 ++++++++++ - test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh | 10 ++++++++++ - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh | 5 +++++ - test/afl/fuzzing-wrappers/server-access.sh | 2 +- - test/afl/fuzzing-wrappers/server-conf.sh | 2 +- - test/afl/fuzzing-wrappers/spa-pkts.sh | 2 +- - 13 files changed, 47 insertions(+), 39 deletions(-) - -commit 5041533c65569e001c219178015a9c991946fef8 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Nov 21 21:32:05 2014 -0500 - - [test suite] update AFL helper scripts to accept file path from the command line - - test/afl/fuzzing-wrappers/fwknop-rc-test.sh | 9 ++++++++- - test/afl/fuzzing-wrappers/fwknopd-parse-access.sh | 9 ++++++++- - test/afl/fuzzing-wrappers/fwknopd-parse-conf.sh | 9 ++++++++- - 3 files changed, 24 insertions(+), 3 deletions(-) - -commit c1a1a4d3aaf563917c7ee3dafaac1f1b124a0b8b -Author: Michael Rash <mbr@cipherdyne.org> -Date: Fri Nov 21 21:22:20 2014 -0500 - - [test suite] minor comment removal - - test/afl/fuzzing-wrappers/fwknopd-stdin-test.sh | 1 - - 1 file changed, 1 deletion(-) - -commit 9e671217e1620b9aefbc55d6147f1e3d6b6abfa0 -Author: Damien Stuart <dstuart@dstuart.org> -Date: Wed Nov 19 22:01:04 2014 -0500 - - Move #include <sys/wait.h> directive so it is not seen in the windows build - - client/http_resolve_host.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit 492a7e523b8b162a4a2879df809c8f23f6bff9ad -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Nov 19 20:19:14 2014 -0500 - - [test suite] AFL wrapper enhancements (fwknopd conf file fuzzing, use -t 1000 for all fuzzing cycles) - - test/afl/fuzzing-wrappers/client-rc.sh | 2 +- - test/afl/fuzzing-wrappers/fwknopd-parse-conf.sh | 3 +++ - test/afl/fuzzing-wrappers/server-access.sh | 2 +- - test/afl/fuzzing-wrappers/server-conf.sh | 22 ++++++++++++++++++++++ - test/afl/fuzzing-wrappers/spa-pkts.sh | 2 +- - test/afl/test-cases/server-conf/fwknopd.conf | 22 +++++++++++----------- - 6 files changed, 39 insertions(+), 14 deletions(-) - -commit 31fcef08a5228c5af3060b546895503467deab70 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 18 23:10:56 2014 -0500 - - [test suite] add multiple stanzas for the fwknoprc AFL test - - test/afl/fuzzing-wrappers/client-rc.sh | 2 +- - test/afl/fuzzing-wrappers/fwknop-rc-test.sh | 2 +- - test/afl/test-cases/client-rc/fwknoprc | 11 +++++++++-- - 3 files changed, 11 insertions(+), 4 deletions(-) - -commit ece855b66a87d98276dd8b82d15cecd6643b617b -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 18 23:10:19 2014 -0500 - - [client] bug fix to ensure -a overrides IP resolution - - client/config_init.c | 26 +++++++++++++------------- - 1 file changed, 13 insertions(+), 13 deletions(-) - -commit 22289a3f58278d13a36249efc18809da92fb4309 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 18 20:16:12 2014 -0500 - - [client] disable IP resolution in AFL_FUZZING mode - - client/config_init.c | 14 ++++++++++++++ - 1 file changed, 14 insertions(+) - -commit c7bb83b1b33e43c915fef970fef3e05b263d2007 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Nov 18 20:15:13 2014 -0500 - - [test suite] additional AFL support for client fwknoprc file and server fwknopd.conf file - - test/afl/fuzzing-wrappers/client-rc.sh | 22 +++++++++++++ - test/afl/fuzzing-wrappers/fwknop-rc-test.sh | 3 ++ - test/afl/fuzzing-wrappers/server-access.sh | 2 +- - test/afl/fuzzing-wrappers/spa-pkts.sh | 2 +- - test/afl/test-cases/client-rc/fwknoprc | 40 +++++++++++++++++++++++ - test/afl/test-cases/server-conf/fwknopd.conf | 47 ++++++++++++++++++++++++++++ - 6 files changed, 114 insertions(+), 2 deletions(-) - -commit d107359e952bd0b959dcfa7d1001511b161dcb0f -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Nov 17 20:00:38 2014 -0500 - - [test suite] removed files added by mistake - - test/afl/fuzzing-wrappers/.server-access.sh.swp | Bin 12288 -> 0 bytes - test/afl/fuzzing-wrappers/.spa-pkts.sh.swp | Bin 12288 -> 0 bytes - 2 files changed, 0 insertions(+), 0 deletions(-) - -commit 3c7859cb9d7c24b40ed7ca1de4a98ce119832e8b -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Nov 17 19:58:47 2014 -0500 - - [test suite] start on AFL fuzzing for conf files in addition to SPA pkts - - test/afl/afl-fuzzing.in/spa.start | 1 - - test/afl/afl-fuzzing.in/spa2.start | 1 - - test/afl/afl-fuzzing.in/spa3.start | 1 - - test/afl/afl-run.sh | 16 -------- - test/afl/fuzzing-wrappers/.server-access.sh.swp | Bin 0 -> 12288 bytes - test/afl/fuzzing-wrappers/.spa-pkts.sh.swp | Bin 0 -> 12288 bytes - test/afl/fuzzing-wrappers/fwknopd-parse-access.sh | 3 ++ - test/afl/fuzzing-wrappers/fwknopd-stdin-test.sh | 6 +++ - test/afl/fuzzing-wrappers/server-access.sh | 22 +++++++++++ - test/afl/fuzzing-wrappers/spa-pkts.sh | 22 +++++++++++ - test/afl/fwknopd-stdin-test.sh | 6 --- - test/afl/test-cases/server-access/access.conf | 45 ++++++++++++++++++++++ - test/afl/test-cases/spa-pkts/spa.start | 1 + - test/afl/test-cases/spa-pkts/spa2.start | 1 + - test/afl/test-cases/spa-pkts/spa3.start | 1 + - 15 files changed, 101 insertions(+), 25 deletions(-) + client/config_init.c | 57 ++++++++++++++++++++++++++++++++++++++++++ + client/config_init.h | 4 +++ + client/getpasswd.c | 52 ++++++++++++++++++++++++++++++++++++++ + client/getpasswd.h | 4 +++ + common/common.h | 15 +++++++++++ + configure.ac | 16 ++++++++++++ + test/c-unit-tests/Makefile.am | 16 ++++++++++++ + test/c-unit-tests/fko_utests.c | 34 +++++++++++++++++++++++++ + test/c-unit-tests/fko_utests.h | 6 +++++ + 9 files changed, 204 insertions(+) From 3512f7f417d61ccab669ab637038688ba44385a9 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 20 Apr 2015 21:34:12 -0400 Subject: [PATCH 087/219] doc updates --- ChangeLog | 4 +++- client/fwknop.8.in | 6 +++--- server/fwknopd.8.in | 40 ++++++++++++++++++++++++++++++---------- 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 937966e7..1d122197 100644 --- a/ChangeLog +++ b/ChangeLog @@ -23,7 +23,9 @@ fwknop-2.6.6 (04/21/2015): when code coverage reports are created. - [build] Add --enable-asan-support to autoconf configure script to enable Google's Address Sanitizer (ASan) support. This feature is used during - the testing phase for new fwknop releases. + the testing phase for new fwknop releases. Running fwknop under the + complete test suite (and also under AFL) with ASan support compiled in + did not turn up any new bugs. - [test suite] (Franck Joncourt) Added libfko unit tests with the CUnit framework. diff --git a/client/fwknop.8.in b/client/fwknop.8.in index dba867bd..89cb249f 100644 --- a/client/fwknop.8.in +++ b/client/fwknop.8.in @@ -2,12 +2,12 @@ .\" Title: fwknop .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> -.\" Date: 11/15/2014 +.\" Date: 04/20/2015 .\" Manual: Fwknop Client .\" Source: Fwknop Client .\" Language: English .\" -.TH "FWKNOP" "8" "11/15/2014" "Fwknop Client" "Fwknop Client" +.TH "FWKNOP" "8" "04/20/2015" "Fwknop Client" "Fwknop Client" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -1256,7 +1256,7 @@ Additional commentary on Single Packet Authorization can be found via Michael Ra Damien Stuart <dstuart@dstuart\&.org>, Michael Rash <mbr@cipherdyne\&.org> .SH "CONTRIBUTORS" .sp -This \(lqC\(rq version of fwknop was derived from the original Perl\-based version on which many people who are active in the open source community have contributed\&. See the CREDITS file in the fwknop sources, or visit \fIhttp://www\&.cipherdyne\&.org/fwknop/docs/contributors\&.html\fR to view the online list of contributors\&. A few contributors deserve to be singled out including: Franck Joncourt, Max Kastanas, Vlad Glagolev, Sean Greven, Hank Leininger, Fernando Arnaboldi, and Erik Gomez\&. +This \(lqC\(rq version of fwknop was derived from the original Perl\-based version on which many people who are active in the open source community have contributed\&. See the CREDITS file in the fwknop sources, or visit \fIhttps://github\&.com/mrash/fwknop/blob/master/CREDITS\fR to view the online list of contributors\&. A few contributors deserve to be singled out including: Franck Joncourt, Max Kastanas, Vlad Glagolev, Sean Greven, Hank Leininger, Fernando Arnaboldi, and Erik Gomez\&. .sp The phrase \(lqSingle Packet Authorization\(rq was coined by MadHat and Simple Nomad at the BlackHat Briefings of 2005\&. .SH "BUGS" diff --git a/server/fwknopd.8.in b/server/fwknopd.8.in index baff0197..99718ba9 100644 --- a/server/fwknopd.8.in +++ b/server/fwknopd.8.in @@ -2,12 +2,12 @@ .\" Title: fwknopd .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> -.\" Date: 11/26/2014 +.\" Date: 04/20/2015 .\" Manual: Fwknop Server .\" Source: Fwknop Server .\" Language: English .\" -.TH "FWKNOPD" "8" "11/26/2014" "Fwknop Server" "Fwknop Server" +.TH "FWKNOPD" "8" "04/20/2015" "Fwknop Server" "Fwknop Server" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -391,7 +391,9 @@ Specify the IP address for SNAT\&. This functionality is only enabled when \(lqE \fI@sysconfdir@/fwknop/fwknopd\&.conf\fR file), but if you want \fBfwknopd\fR -to use the SNAT target, you must also define an IP address with the \(lqSNAT_TRANSLATE_IP\(rq variable\&. +to use the SNAT target, you must also define an IP address with the \(lqSNAT_TRANSLATE_IP\(rq variable\&. Note that this variable is generally deprecated in favor of the \(lqFORCE_SNAT\(rq variable in the +\fI@sysconfdir@/fwknop/access\&.conf\fR +file which enables per\-stanza control over the SNAT IP\&. .RE .PP \fBENABLE_IPT_OUTPUT\fR \fI<Y/N>\fR @@ -519,6 +521,13 @@ Override syslog identity on message logged by Override syslog facility\&. The \(lqSYSLOG_FACILITY\(rq variable can be set to .RE .PP +\fBENABLE_DESTINATION_RULE\fR \fI<Y/N>\fR +.RS 4 +Controls whether +\fBfwknopd\fR +will set the destination field on the firewall rule to the destination address specified on the incoming SPA packet\&. This is useful for interfaces with multiple IP addresses hosting separate services\&. If \(lqENABLE_IPT_OUTPUT\(rq is set to \(lqY\(rq, the source field of the firewall rule is set\&. FORWARD and SNAT rules are not affected however, DNAT rules will also have their destination field set\&. The default is \(lqN\(rq, which sets the destination field to 0\&.0\&.0\&.0/0 (any)\&. +.RE +.PP \fBFWKNOP_RUN_DIR\fR \fI<path>\fR .RS 4 Specify the directory where @@ -526,13 +535,6 @@ Specify the directory where writes run time state files\&. The default is \fI@localstatedir@\fR\&. .RE -.PP -\fBENABLE_DESTINATION_RULE\fR \fI<Y/N>\fR -.RS 4 -Controls whether -\fBfwknopd\fR -will set the destination field on the firewall rule to the destination address specified on the incoming SPA packet\&. This is useful for interfaces with multiple IP addresses hosting separate services\&. If \(lqENABLE_IPT_OUTPUT\(rq is set to \(lqY\(rq, the source field of the firewall rule is set\&. FORWARD and SNAT rules are not affected however, DNAT rules will also have their destination field set\&. The default is \(lqN\(rq, which sets the destination field to 0\&.0\&.0\&.0/0 (any)\&. -.RE .SS "ACCESS\&.CONF VARIABLES" .sp This section describes the access control directives in the \fI@sysconfdir@/fwknop/access\&.conf\fR file\&. Theses directives define encryption keys and level of access that is granted to \fBfwknop\fR clients that have generated the appropriate encrypted message\&. @@ -683,6 +685,24 @@ file except that it is per access stanza and overrides any value set with \(lqSN This is similar to the \(lqFORCE_SNAT\(rq variable, except that it is not necessary to also specify an IP address for SNAT rules because the MASQUERADE target is used instead\&. .RE .PP +\fBFORWARD_ALL\fR \fI<Y/N>\fR +.RS 4 +In NAT scenarios, control whether all traffic is forwarded through the +\fBfwknopd\fR +system as opposed to just forwarding connections to specific services as requested by the +\fBfwknop\fR +client\&. +.RE +.PP +\fBDISABLE_DNAT\fR \fI<Y/N>\fR +.RS 4 +Control whether DNAT rules are created in FORCE_NAT scenarios\&. This is mainly used in conjunction with the FORWARD_ALL variable to allow +\fBfwknopd\fR +to act essentially as an SPA gateway\&. I\&.e\&., the +\fBfwknop\fR +client is used to gain access via SPA to the broader Internet after being granted an IP via DHCP, but prior to sending the SPA packet all traffic is blocked by default to the Internet\&. +.RE +.PP \fBGPG_DECRYPT_ID\fR \fI<keyID>\fR .RS 4 Define a GnuPG key ID to use for decrypting SPA messages that have been encrypted by an From 6467b922d53949ffa0cf49af1e0632e0b4b55534 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 21 Apr 2015 03:30:32 -0700 Subject: [PATCH 088/219] [test suite] additional FORWARD_ALL tests --- Makefile.am | 6 +++ .../firewd_snat_translate_ip_fwknopd.conf | 3 ++ test/conf/firewd_spa_dst_snat_fwknopd.conf | 3 ++ .../hmac_force_nat_forward_all_access.conf | 6 +++ .../hmac_forward_all_and_dnat_access.conf | 7 +++ test/conf/ipt_snat_translate_ip_fwknopd.conf | 3 ++ test/conf/ipt_spa_dst_snat_fwknopd.conf | 3 ++ test/test-fwknop.pl | 6 ++- test/tests/rijndael_hmac.pl | 49 +++++++++++++++++-- 9 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 test/conf/firewd_snat_translate_ip_fwknopd.conf create mode 100644 test/conf/firewd_spa_dst_snat_fwknopd.conf create mode 100644 test/conf/hmac_force_nat_forward_all_access.conf create mode 100644 test/conf/hmac_forward_all_and_dnat_access.conf create mode 100644 test/conf/ipt_snat_translate_ip_fwknopd.conf create mode 100644 test/conf/ipt_spa_dst_snat_fwknopd.conf diff --git a/Makefile.am b/Makefile.am index 6edcfc7c..eb723877 100644 --- a/Makefile.am +++ b/Makefile.am @@ -215,8 +215,10 @@ EXTRA_DIST = \ test/conf/hmac_force_nat_access.conf \ test/conf/hmac_force_snat_access.conf \ test/conf/hmac_force_masq_access.conf \ + test/conf/hmac_force_nat_forward_all_access.conf \ test/conf/hmac_no_b64_cygwin_access.conf \ test/conf/hmac_forward_all_access.conf \ + test/conf/hmac_forward_all_and_dnat_access.conf \ test/conf/hmac_force_masq_no_dnat_access.conf \ test/conf/multi_pkts.pcap \ test/conf/fwknoprc_default_hmac_base64_key \ @@ -315,7 +317,11 @@ EXTRA_DIST = \ test/conf/firewd_snat_fwknopd.conf \ test/conf/ipt_snat_no_translate_ip_fwknopd.conf \ test/conf/firewd_snat_no_translate_ip_fwknopd.conf \ + test/conf/ipt_snat_translate_ip_fwknopd.conf \ + test/conf/firewd_snat_translate_ip_fwknopd.conf \ test/conf/destination_rule_fwknopd.conf \ + test/conf/firewd_spa_dst_snat_fwknopd.conf \ + test/conf/ipt_spa_dst_snat_fwknopd.conf \ test/conf/hmac_spa_destination_access.conf \ test/conf/hmac_spa_destination2_access.conf \ test/conf/hmac_spa_destination3_access.conf \ diff --git a/test/conf/firewd_snat_translate_ip_fwknopd.conf b/test/conf/firewd_snat_translate_ip_fwknopd.conf new file mode 100644 index 00000000..fb85154d --- /dev/null +++ b/test/conf/firewd_snat_translate_ip_fwknopd.conf @@ -0,0 +1,3 @@ +ENABLE_FIREWD_FORWARDING Y; +ENABLE_FIREWD_SNAT Y; +SNAT_TRANSLATE_IP 8.1.2.3; diff --git a/test/conf/firewd_spa_dst_snat_fwknopd.conf b/test/conf/firewd_spa_dst_snat_fwknopd.conf new file mode 100644 index 00000000..e2e9a90a --- /dev/null +++ b/test/conf/firewd_spa_dst_snat_fwknopd.conf @@ -0,0 +1,3 @@ +ENABLE_FIREWD_FORWARDING Y; +ENABLE_FIREWD_SNAT Y; +ENABLE_DESTINATION_RULE Y; diff --git a/test/conf/hmac_force_nat_forward_all_access.conf b/test/conf/hmac_force_nat_forward_all_access.conf new file mode 100644 index 00000000..80bcb53c --- /dev/null +++ b/test/conf/hmac_force_nat_forward_all_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +FORCE_NAT 192.168.1.123 22 +FORWARD_ALL Y diff --git a/test/conf/hmac_forward_all_and_dnat_access.conf b/test/conf/hmac_forward_all_and_dnat_access.conf new file mode 100644 index 00000000..bcf6912d --- /dev/null +++ b/test/conf/hmac_forward_all_and_dnat_access.conf @@ -0,0 +1,7 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +FORCE_SNAT 123.4.4.4 +DISABLE_DNAT N +FORWARD_ALL Y diff --git a/test/conf/ipt_snat_translate_ip_fwknopd.conf b/test/conf/ipt_snat_translate_ip_fwknopd.conf new file mode 100644 index 00000000..75e816c6 --- /dev/null +++ b/test/conf/ipt_snat_translate_ip_fwknopd.conf @@ -0,0 +1,3 @@ +ENABLE_IPT_FORWARDING Y; +ENABLE_IPT_SNAT Y; +SNAT_TRANSLATE_IP 8.1.2.3; diff --git a/test/conf/ipt_spa_dst_snat_fwknopd.conf b/test/conf/ipt_spa_dst_snat_fwknopd.conf new file mode 100644 index 00000000..fb9ce60a --- /dev/null +++ b/test/conf/ipt_spa_dst_snat_fwknopd.conf @@ -0,0 +1,3 @@ +ENABLE_IPT_FORWARDING Y; +ENABLE_IPT_SNAT Y; +ENABLE_DESTINATION_RULE Y; diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index b7471da7..5c0fc6f1 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -376,6 +376,7 @@ our %cf = ( "${fw_conf_prefix}_nat" => "$conf_dir/${fw_conf_prefix}_nat_fwknopd.conf", "${fw_conf_prefix}_snat" => "$conf_dir/${fw_conf_prefix}_snat_fwknopd.conf", "${fw_conf_prefix}_snat_no_translate_ip" => "$conf_dir/${fw_conf_prefix}_snat_no_translate_ip_fwknopd.conf", + "${fw_conf_prefix}_snat_translate_ip" => "$conf_dir/${fw_conf_prefix}_snat_translate_ip_fwknopd.conf", 'def' => "$conf_dir/default_fwknopd.conf", 'def_access' => "$conf_dir/default_access.conf", 'portrange_filter' => "$conf_dir/portrange_fwknopd.conf", @@ -409,7 +410,8 @@ our %cf = ( 'hmac_simple_keys_access' => "$conf_dir/hmac_simple_keys_access.conf", 'hmac_invalid_type_access' => "$conf_dir/hmac_invalid_type_access.conf", 'hmac_cygwin_access' => "$conf_dir/hmac_no_b64_cygwin_access.conf", - 'spa_destnation' => "$conf_dir/destination_rule_fwknopd.conf", + 'spa_destination' => "$conf_dir/destination_rule_fwknopd.conf", + "${fw_conf_prefix}_spa_dst_snat" => "$conf_dir/${fw_conf_prefix}_spa_dst_snat_fwknopd.conf", 'hmac_spa_destination_access' => "$conf_dir/hmac_spa_destination_access.conf", 'hmac_spa_destination2_access' => "$conf_dir/hmac_spa_destination2_access.conf", 'hmac_spa_destination3_access' => "$conf_dir/hmac_spa_destination3_access.conf", @@ -430,10 +432,12 @@ our %cf = ( 'invalid_run_dir_path' => "$conf_dir/invalid_run_dir_path_fwknopd.conf", 'force_nat_access' => "$conf_dir/force_nat_access.conf", 'hmac_force_nat_access' => "$conf_dir/hmac_force_nat_access.conf", + 'hmac_force_nat_forward_all_access' => "$conf_dir/hmac_force_nat_forward_all_access.conf", 'hmac_force_snat_access' => "$conf_dir/hmac_force_snat_access.conf", 'hmac_force_masq_access' => "$conf_dir/hmac_force_masq_access.conf", 'hmac_force_masq_no_dnat_access' => "$conf_dir/hmac_force_masq_no_dnat_access.conf", 'hmac_forward_all_access' => "$conf_dir/hmac_forward_all_access.conf", + 'hmac_forward_all_and_dna_access' => "$conf_dir/hmac_forward_all_and_dnat_access.conf", 'cmd_access' => "$conf_dir/cmd_access.conf", 'cmd_setuid_access' => "$conf_dir/cmd_setuid_access.conf", 'cmd_giduid_access' => "$conf_dir/cmd_giduid_access.conf", diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index 77578732..125f6736 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -89,7 +89,7 @@ 'detail' => 'cycle DESTINATION accepted (1)', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, - 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destnation'} " . + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destination'} " . "-a $cf{'hmac_spa_destination_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", 'fw_rule_created' => $NEW_RULE_REQUIRED, @@ -103,7 +103,7 @@ 'detail' => 'cycle DESTINATION accepted (2)', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, - 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destnation'} " . + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destination'} " . "-a $cf{'hmac_spa_destination2_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", 'fw_rule_created' => $NEW_RULE_REQUIRED, @@ -116,7 +116,7 @@ 'detail' => 'cycle DESTINATION accepted (3)', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, - 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destnation'} " . + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destination'} " . "-a $cf{'hmac_spa_destination3_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", 'fw_rule_created' => $NEW_RULE_REQUIRED, @@ -129,7 +129,7 @@ 'detail' => 'cycle DESTINATION filtered (1)', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, - 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destnation'} " . + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destination'} " . "-a $cf{'hmac_spa_destination4_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, @@ -143,7 +143,7 @@ 'detail' => 'cycle DESTINATION filtered (2)', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, - 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destnation'} " . + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'spa_destination'} " . "-a $cf{'hmac_spa_destination5_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, @@ -1450,6 +1450,45 @@ 'server_conf' => $cf{"${fw_conf_prefix}_snat_no_translate_ip"}, 'key_file' => $cf{'rc_hmac_b64_key'}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "FORWARD_ALL snat translate IP", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + $cf{'rc_hmac_b64_key'}, + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_translate_ip"} -a $cf{'hmac_force_nat_forward_all_access'} / . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/\sSNAT\s.*all.*\sto:$force_nat_host2/], + 'server_negative_output_matches' => [qr/DNAT\s.*\*\/\sto\:/, + qr/\*\/\sto\:$internal_nat_host\:22/i, + qr/\*\/\sto\:$force_nat_host\:22/i], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'server_conf' => $cf{"${fw_conf_prefix}_snat_translate_ip"}, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, + + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "FORWARD_ALL + DNAT", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + $cf{'rc_hmac_b64_key'}, + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_spa_dst_snat"} -a $cf{'hmac_forward_all_and_dna_access'} / . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/DNAT\s.*\*\/\sto\:/, + qr/\sSNAT\s.*all.*\sto:$force_nat_host2/], + 'server_negative_output_matches' => [ + qr/\*\/\sto\:$internal_nat_host\:22/i, + qr/\*\/\sto\:$force_nat_host\:22/i], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'server_conf' => $cf{"${fw_conf_prefix}_spa_dst_snat"}, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, { 'category' => 'Rijndael+HMAC', From 176afecd9fd325a0479826d877887997ece97fc0 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 21 Apr 2015 21:09:20 -0400 Subject: [PATCH 089/219] [server] minor spacing fix --- server/fw_util_firewalld.c | 2 -- server/fw_util_iptables.c | 2 -- 2 files changed, 4 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 96da72db..7ec3857a 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -489,7 +489,6 @@ fw_dump_rules(const fko_srv_options_t * const opts) for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { - if(fwc.chain[i].target[0] == '\0') continue; @@ -523,7 +522,6 @@ fw_dump_rules(const fko_srv_options_t * const opts) for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { - if(fwc.chain[i].target[0] == '\0') continue; diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 54127ccf..7d5e4b34 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -489,7 +489,6 @@ fw_dump_rules(const fko_srv_options_t * const opts) for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { - if(fwc.chain[i].target[0] == '\0') continue; @@ -523,7 +522,6 @@ fw_dump_rules(const fko_srv_options_t * const opts) for(i=0; i < NUM_FWKNOP_ACCESS_TYPES; i++) { - if(fwc.chain[i].target[0] == '\0') continue; From 6bdfa95067d3f9e1374273edfa5db857e10ca47c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 22 Apr 2015 00:58:35 -0700 Subject: [PATCH 090/219] [server / test suite] cleaner SNAT MASQUERADE support --- test/conf/hmac_forward_all_masq_access.conf | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 test/conf/hmac_forward_all_masq_access.conf diff --git a/test/conf/hmac_forward_all_masq_access.conf b/test/conf/hmac_forward_all_masq_access.conf new file mode 100644 index 00000000..001c78df --- /dev/null +++ b/test/conf/hmac_forward_all_masq_access.conf @@ -0,0 +1,6 @@ +SOURCE ANY +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +FW_ACCESS_TIMEOUT 3 +FORCE_MASQUERADE Y +FORWARD_ALL Y From 17d1071aa8265030c7944ce932bf984b9920ec2b Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 22 Apr 2015 01:00:57 -0700 Subject: [PATCH 091/219] [server / test suite] cleaner SNAT MASQUERADE support --- Makefile.am | 1 + server/fw_util_firewalld.c | 27 +++++++++++---------------- server/fw_util_iptables.c | 27 +++++++++++---------------- test/test-fwknop.pl | 3 +++ test/tests/rijndael_hmac.pl | 21 ++++++++++++++++++++- 5 files changed, 46 insertions(+), 33 deletions(-) diff --git a/Makefile.am b/Makefile.am index eb723877..4901b3df 100644 --- a/Makefile.am +++ b/Makefile.am @@ -218,6 +218,7 @@ EXTRA_DIST = \ test/conf/hmac_force_nat_forward_all_access.conf \ test/conf/hmac_no_b64_cygwin_access.conf \ test/conf/hmac_forward_all_access.conf \ + test/conf/hmac_forward_all_masq_access.conf \ test/conf/hmac_forward_all_and_dnat_access.conf \ test/conf/hmac_force_masq_no_dnat_access.conf \ test/conf/multi_pkts.pcap \ diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 7ec3857a..a735ea1e 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -95,8 +95,8 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, * maximize code coverage in conjunction with the test suite, and is never * compiled in for a production release of fwknop. */ - if(run_extcmd_write("/bin/grep -v test", "/bin/echo test", &pid_status, opts) != 0) - log_msg(LOG_WARNING, "Code coverage: Could not execute command"); + if(run_extcmd_write("/bin/grep -v test", "/bin/echo test", &pid_status, opts) == 0) + log_msg(LOG_WARNING, "[ignore] Code coverage: Executed command"); #endif if(proto == IPPROTO_TCP) @@ -1136,11 +1136,18 @@ static void snat_rule(const fko_srv_options_t * const opts, char snat_target[SNAT_TARGET_BUFSIZE] = {0}; struct fw_chain *snat_chain = NULL; - log_msg(LOG_DEBUG, "snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d", - acc->forward_all, nat_ip, nat_port); + log_msg(LOG_DEBUG, + "snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d, force_snat: %d, force_snat_ip: %s, force_masq: %d", + acc->forward_all, nat_ip, nat_port, acc->force_snat, + (acc->force_snat_ip == NULL) ? "(NONE)" : acc->force_snat_ip, + acc->force_masquerade); if(acc->forward_all) { + /* Default to MASQUERADE */ + snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); + /* Add SNAT or MASQUERADE rules. */ if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) @@ -1150,12 +1157,6 @@ static void snat_rule(const fko_srv_options_t * const opts, snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-source %s", acc->force_snat_ip); } - else if(acc->force_snat && acc->force_masquerade) - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); - } else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) { @@ -1164,12 +1165,6 @@ static void snat_rule(const fko_srv_options_t * const opts, snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-source %s", opts->config[CONF_SNAT_TRANSLATE_IP]); } - else - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[FIREWD_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); - } memset(rule_buf, 0, CMD_BUFSIZE); diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 7d5e4b34..328e839e 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -89,8 +89,8 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, * maximize code coverage in conjunction with the test suite, and is never * compiled in for a production release of fwknop. */ - if(run_extcmd_write("/bin/grep -v test", "/bin/echo test", &pid_status, opts) != 0) - log_msg(LOG_WARNING, "Code coverage: Could not execute command"); + if(run_extcmd_write("/bin/grep -v test", "/bin/echo test", &pid_status, opts) == 0) + log_msg(LOG_WARNING, "[ignore] Code coverage: Executed command"); #endif snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " IPT_LIST_RULES_ARGS, @@ -1130,11 +1130,18 @@ static void snat_rule(const fko_srv_options_t * const opts, char snat_target[SNAT_TARGET_BUFSIZE] = {0}; struct fw_chain *snat_chain = NULL; - log_msg(LOG_DEBUG, "snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d", - acc->forward_all, nat_ip, nat_port); + log_msg(LOG_DEBUG, + "snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d, force_snat: %d, force_snat_ip: %s, force_masq: %d", + acc->forward_all, nat_ip, nat_port, acc->force_snat, + (acc->force_snat_ip == NULL) ? "(NONE)" : acc->force_snat_ip, + acc->force_masquerade); if(acc->forward_all) { + /* Default to MASQUERADE */ + snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); + snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); + /* Add SNAT or MASQUERADE rules. */ if(acc->force_snat && is_valid_ipv4_addr(acc->force_snat_ip)) @@ -1144,12 +1151,6 @@ static void snat_rule(const fko_srv_options_t * const opts, snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-source %s", acc->force_snat_ip); } - else if(acc->force_snat && acc->force_masquerade) - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); - } else if((opts->config[CONF_SNAT_TRANSLATE_IP] != NULL) && is_valid_ipv4_addr(opts->config[CONF_SNAT_TRANSLATE_IP])) { @@ -1158,12 +1159,6 @@ static void snat_rule(const fko_srv_options_t * const opts, snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, "--to-source %s", opts->config[CONF_SNAT_TRANSLATE_IP]); } - else - { - /* Using MASQUERADE */ - snat_chain = &(opts->fw_config->chain[IPT_MASQUERADE_ACCESS]); - snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, " "); - } memset(rule_buf, 0, CMD_BUFSIZE); diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 5c0fc6f1..833ba6a5 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -437,6 +437,7 @@ our %cf = ( 'hmac_force_masq_access' => "$conf_dir/hmac_force_masq_access.conf", 'hmac_force_masq_no_dnat_access' => "$conf_dir/hmac_force_masq_no_dnat_access.conf", 'hmac_forward_all_access' => "$conf_dir/hmac_forward_all_access.conf", + 'hmac_forward_all_masq_access' => "$conf_dir/hmac_forward_all_masq_access.conf", 'hmac_forward_all_and_dna_access' => "$conf_dir/hmac_forward_all_and_dnat_access.conf", 'cmd_access' => "$conf_dir/cmd_access.conf", 'cmd_setuid_access' => "$conf_dir/cmd_setuid_access.conf", @@ -6879,6 +6880,8 @@ sub os_fw_detect() { $FW_TYPE = 'firewalld'; $FW_PREFIX = 'FIREWD'; $fw_conf_prefix = 'firewd'; + } else { + $fw_bin = &find_command('iptables'); } } } else { diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index 125f6736..fc1a8af6 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -1453,7 +1453,7 @@ { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', - 'detail' => "FORWARD_ALL snat translate IP", + 'detail' => "FORWARD_ALL SNAT translate IP", 'function' => \&spa_cycle, 'cmdline' => "$default_client_args_no_get_key --rc-file " . $cf{'rc_hmac_b64_key'}, @@ -1469,6 +1469,25 @@ 'server_conf' => $cf{"${fw_conf_prefix}_snat_translate_ip"}, 'key_file' => $cf{'rc_hmac_b64_key'}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "FORWARD_ALL MASQUERADE", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + $cf{'rc_hmac_b64_key'}, + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_no_translate_ip"} -a $cf{'hmac_forward_all_masq_access'} / . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/\sMASQUERADE\s.*all/], + 'server_negative_output_matches' => [ + qr/\*\/\sto\:$internal_nat_host\:22/i, + qr/\*\/\sto\:$force_nat_host\:22/i], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'server_conf' => $cf{"${fw_conf_prefix}_snat_no_translate_ip"}, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, { 'category' => 'Rijndael+HMAC', From e209acc196fa673037642512d9571485b592face Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 22 Apr 2015 01:10:00 -0700 Subject: [PATCH 092/219] minor ChangeLog update --- ChangeLog | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1d122197..21a50937 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,4 @@ -fwknop-2.6.6 (04/21/2015): +fwknop-2.6.6 (04/23/2015): - [server] Add the ability for fwknopd to function as an generic SPA gateway. This allows scenarios such as the fwknopd system providing DHCP addresses to client systems, but those systems would be blocking by @@ -8,16 +8,14 @@ fwknop-2.6.6 (04/21/2015): FORWARD_ALL (allow all traffic to be forwarded instead of specfic services requested within an SPA packet). So far, this feature is only supported on systems running iptables or firewalld. The idea was - contributed by github user "spartan1833" via issue 131. + contributed by "spartan1833" to the fwknop mailing list, and this became + issue 131 on github. - [server] Bug fix when compiled with --enable-udp-server to not include pcap.h, which is likely not installed whenever libpcap is also not installed. This bug was reported by Alexander Kozhevnikov. - [android] (Dan Brooks) Contributed a patch for the Android client app to add the definition of custom server udp port. This is similiar to the --server-port argument offered by the main fwknop client. - - [test suite] Set AFL_HARDEN=1 to AFL fuzzing wrapper scripts. This - enables simple memory bug detection in AFL at the cost of a small - performance hit. - [test suite] Handle versions of lcov that don't have the --rc argument which is normally used to force the creation of branch coverage stats when code coverage reports are created. @@ -28,6 +26,9 @@ fwknop-2.6.6 (04/21/2015): did not turn up any new bugs. - [test suite] (Franck Joncourt) Added libfko unit tests with the CUnit framework. + - [test suite] Set AFL_HARDEN=1 to AFL fuzzing wrapper scripts. This + enables simple memory bug detection in AFL at the cost of a small + performance hit. fwknop-2.6.5 (12/16/2014): - [server] (Grant Pannell) Added a new access.conf variable "DESTINATION" From 707c59d12793fbf7805767ef868f4166c831c90b Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 22 Apr 2015 19:09:46 -0700 Subject: [PATCH 093/219] minor 2.6.6 release date update --- fwknop.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fwknop.spec b/fwknop.spec index 5532b5c3..ae50287d 100644 --- a/fwknop.spec +++ b/fwknop.spec @@ -142,7 +142,7 @@ fi %config(noreplace) %attr(0600,root,root) %{_sysconfdir}/fwknop/access.conf %changelog -* Tue Apr 21 2015 <mbr@cipherdyne.org> - 2.6.6 +* Tue Apr 23 2015 <mbr@cipherdyne.org> - 2.6.6 - fwknop-2.6.6 release. * Tue Dec 16 2014 <mbr@cipherdyne.org> - 2.6.5 From 93383c8430f1ef6668d5ece284334f7e045c6940 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 22 Apr 2015 19:10:15 -0700 Subject: [PATCH 094/219] changes since 2.6.5 --- ChangeLog.git | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/ChangeLog.git b/ChangeLog.git index 1492f5ab..0c70b5bc 100644 --- a/ChangeLog.git +++ b/ChangeLog.git @@ -1,4 +1,89 @@ -commit 95bf4dcb8703ce7637519294df979b94e781f163 (HEAD, tag: refs/tags/2.6.6, refs/remotes/origin/master, refs/remotes/origin/HEAD, refs/heads/master) +commit 707c59d12793fbf7805767ef868f4166c831c90b (HEAD, refs/heads/master) +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Apr 22 19:09:46 2015 -0700 + + minor 2.6.6 release date update + + fwknop.spec | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e209acc196fa673037642512d9571485b592face +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Apr 22 01:10:00 2015 -0700 + + minor ChangeLog update + + ChangeLog | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +commit 17d1071aa8265030c7944ce932bf984b9920ec2b +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Apr 22 01:00:57 2015 -0700 + + [server / test suite] cleaner SNAT MASQUERADE support + + Makefile.am | 1 + + server/fw_util_firewalld.c | 27 +++++++++++---------------- + server/fw_util_iptables.c | 27 +++++++++++---------------- + test/test-fwknop.pl | 3 +++ + test/tests/rijndael_hmac.pl | 21 ++++++++++++++++++++- + 5 files changed, 46 insertions(+), 33 deletions(-) + +commit 6bdfa95067d3f9e1374273edfa5db857e10ca47c +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed Apr 22 00:58:35 2015 -0700 + + [server / test suite] cleaner SNAT MASQUERADE support + + test/conf/hmac_forward_all_masq_access.conf | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 176afecd9fd325a0479826d877887997ece97fc0 (refs/remotes/origin/master, refs/remotes/origin/HEAD) +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 21 21:09:20 2015 -0400 + + [server] minor spacing fix + + server/fw_util_firewalld.c | 2 -- + server/fw_util_iptables.c | 2 -- + 2 files changed, 4 deletions(-) + +commit d961165a5ba38261fbdba275c45820c261455bd2 +Merge: 3512f7f 6467b92 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 21 19:28:05 2015 -0400 + + Merge branch 'master' of ssh://fedora21/home/mbr/git/fwknop + +commit 6467b922d53949ffa0cf49af1e0632e0b4b55534 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Apr 21 03:30:32 2015 -0700 + + [test suite] additional FORWARD_ALL tests + + Makefile.am | 6 +++ + test/conf/firewd_snat_translate_ip_fwknopd.conf | 3 ++ + test/conf/firewd_spa_dst_snat_fwknopd.conf | 3 ++ + test/conf/hmac_force_nat_forward_all_access.conf | 6 +++ + test/conf/hmac_forward_all_and_dnat_access.conf | 7 ++++ + test/conf/ipt_snat_translate_ip_fwknopd.conf | 3 ++ + test/conf/ipt_spa_dst_snat_fwknopd.conf | 3 ++ + test/test-fwknop.pl | 6 ++- + test/tests/rijndael_hmac.pl | 49 +++++++++++++++++++++--- + 9 files changed, 80 insertions(+), 6 deletions(-) + +commit 3512f7f417d61ccab669ab637038688ba44385a9 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Apr 20 21:34:12 2015 -0400 + + doc updates + + ChangeLog | 4 +++- + client/fwknop.8.in | 6 +++--- + server/fwknopd.8.in | 40 ++++++++++++++++++++++++++++++---------- + 3 files changed, 36 insertions(+), 14 deletions(-) + +commit 95bf4dcb8703ce7637519294df979b94e781f163 Merge: bdc3751 f757b4e Author: Michael Rash <michael.rash@gmail.com> Date: Mon Apr 20 21:28:10 2015 -0400 @@ -7,6 +92,15 @@ Date: Mon Apr 20 21:28:10 2015 -0400 extras: adjust 'localstatedir' value for the AppArmor profile +commit 75d40049630c9239a17bfb17c01920e5c356a6d9 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Apr 20 09:19:37 2015 -0700 + + changes since 2.6.5 + + ChangeLog.git | 1794 +++++++++++++++++++++++++++++++++++++++------------------ + 1 file changed, 1233 insertions(+), 561 deletions(-) + commit bdc3751a840d7cc0c5944b767cd11d4355d59137 Author: Michael Rash <mbr@cipherdyne.org> Date: Mon Apr 20 08:47:51 2015 -0700 From bcfc313e36d1236b73401fa32c1dce978ffeab15 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 24 Apr 2015 17:55:43 -0700 Subject: [PATCH 095/219] [test suite] minor bug fix for rm previous coverage script path --- test/test-fwknop.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 833ba6a5..b92995c1 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1657,7 +1657,7 @@ sub config_recompile() { chdir 'test' or die $!; ### we're recompiling, so remove any existing profile coverage ### files since they will be invalidated by the recompile - &run_cmd($profile_rm_prev_sh, $cmd_out_tmp, $curr_test_file); + &run_cmd("./$profile_rm_prev_sh", $cmd_out_tmp, $curr_test_file); chdir '..' or die $!; } From 87a2fbda0c8aa06dfa54205bc5302195185ff582 Mon Sep 17 00:00:00 2001 From: Damien Stuart <dstuart@dstuart.org> Date: Sat, 25 Apr 2015 09:35:24 -0400 Subject: [PATCH 096/219] Bump version in config.h for the Windows build. --- win32/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/win32/config.h b/win32/config.h index 7f7b7fc0..6a86136a 100644 --- a/win32/config.h +++ b/win32/config.h @@ -178,7 +178,7 @@ #undef TIME_WITH_SYS_TIME /* Version number of package */ -#define VERSION "2.6.5" +#define VERSION "2.6.6" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ From 378b54748c1d8e1d6acdff7dc7653fbfeaadc130 Mon Sep 17 00:00:00 2001 From: Damien Stuart <dstuart@dstuart.org> Date: Mon, 4 May 2015 16:33:41 -0400 Subject: [PATCH 097/219] Updated error code descriptions and fixed function description formats in the libfko docs. --- doc/libfko.texi | 299 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 240 insertions(+), 59 deletions(-) diff --git a/doc/libfko.texi b/doc/libfko.texi index 2d578ff3..4d56bdd9 100644 --- a/doc/libfko.texi +++ b/doc/libfko.texi @@ -550,7 +550,7 @@ parsing, and data extraction. For building a new fko @acronym{SPA} message, you will use the @code{fko_new} function: -@deftypefun int fko_new (@w{fko_ctx_t @var{*ctx}}) +@deftypefun int fko_new (fko_ctx_t @var{*ctx}) The function @code{fko_new} sets up and initializes a new @code{fko_ctx_t} object, pre-populates default values and returns a handle for it in @var{ctx}. The function returns the error code @code{FKO_SUCCESS} if the context was @@ -577,7 +577,8 @@ if(rc != FKO_SUCCESS) For a context that will be used for receiving and parsing an existing @acronym{SPA} message, you will use the @code{fko_new_with_data} function: -@deftypefun int fko_new_with_data (@w{fko_ctx_t @var{*ctx}, const char @var{*data}, const char @var{*key}, const char @var{key_len}, int @var{encryption_mode}, const char @var{hmac_key}, const int @var{hmac_type}}) +@deftypefun int fko_new_with_data @ + (fko_ctx_t @var{*ctx}, const char @var{*data}, const char @var{*key}, const char @var{key_len}, int @var{encryption_mode}, const char @var{hmac_key}, const int @var{hmac_type}) The function @code{fko_new_with_data} sets up and initializes a new @code{fko_ctx_t} context, but instead of initializing default values, it @@ -698,7 +699,7 @@ the memory and resources it was using. This is especially important in programs that process @acronym{SPA} data repeatedly (i.e. in a loop). Failure to destroy the context can cause memory leaks in your program. -@deftypefun void fko_destroy (@w{fko_ctx_t @var{ctx}}) +@deftypefun void fko_destroy (fko_ctx_t @var{ctx}) The function @code{fko_destroy} destroys the context with the handle @var{ctx} and releases all associated resources. @end deftypefun @@ -845,7 +846,7 @@ return an integer representing the return status of the function. When succesfull, they will return @code{FKO_SUCCESS}. Otherwise, an error code value is returned. -@deftypefun int fko_set_spa_digest_type (@w{fko_ctx_t @var{ctx}, short @var{digest_type}}); +@deftypefun int fko_set_spa_digest_type (fko_ctx_t @var{ctx}, short @var{digest_type}); Set the message digest type. Valid values can be found in @ref{Digests} of this manual. If a value other than the those that are supported is given, the function will return @code{FKO_ERROR_INVALID_DATA}. @@ -855,7 +856,7 @@ For example: @end example @end deftypefun -@deftypefun int fko_set_spa_hmac_type (@w{fko_ctx_t @var{ctx}, short @var{hmac_type}}); +@deftypefun int fko_set_spa_hmac_type (fko_ctx_t @var{ctx}, short @var{hmac_type}); Set the message hmac type. Valid values can be found in @ref{HMAC Digests} of this manual. If a value other than the those that are supported is given, the function will return @code{FKO_ERROR_INVALID_DATA}. @@ -865,7 +866,7 @@ For example: @end example @end deftypefun -@deftypefun int fko_set_spa_encryption_type (@w{fko_ctx_t @var{ctx}, short @var{encrypt_type}}); +@deftypefun int fko_set_spa_encryption_type (fko_ctx_t @var{ctx}, short @var{encrypt_type}); Set the encrytion algorithm to use when ecrypting the final @acronym{SPA} data. Valid values can be found in @ref{Encryption Algorithms} of this manual. @@ -875,7 +876,7 @@ For example: @end example @end deftypefun -@deftypefun int fko_set_rand_value (@w{fko_ctx_t @var{ctx}, const char @var{*val}}); +@deftypefun int fko_set_rand_value (fko_ctx_t @var{ctx}, const char @var{*val}); Set the random value portion of the spa data to the given value (@var{val}). The given value must be a pointer to a 16-character decimal numeric string or NULL. If the value is NULL, the function generate a new random value. @@ -883,7 +884,7 @@ If a string value is provided, it must be a 16-character decimal string. Otherwise, the function will return @code{FKO_ERROR_INVALID_DATA}. @end deftypefun -@deftypefun int fko_set_username (@w{fko_ctx_t @var{ctx}, const char @var{*username}}); +@deftypefun int fko_set_username (fko_ctx_t @var{ctx}, const char @var{*username}); Set the username field of the @acronym{SPA} data. If @var{username} is NULL, libfko will first look for the environment variable @env{SPOOF_USER} and use its value if found. Otherwise, it will try to determine the username @@ -892,12 +893,12 @@ then fallback to the environment variables @env{LOGNAME} or @env{USER}. If none of those work, the function will return @code{FKO_ERROR_USERNAME_UNKNOWN}. @end deftypefun -@deftypefun int fko_set_timestamp (@w{fko_ctx_t @var{ctx}, int @var{offset}}); +@deftypefun int fko_set_timestamp (fko_ctx_t @var{ctx}, int @var{offset}); Sets the timestamp value of the SPA data to the current time plus the offset value. @end deftypefun -@deftypefun int fko_set_spa_message_type (@w{fko_ctx_t @var{ctx}, short @var{msg_type}}); +@deftypefun int fko_set_spa_message_type (fko_ctx_t @var{ctx}, short @var{msg_type}); Sets the message type for the SPA data. The choices for the @code{spa_message_type} are listed in @ref{SPA Messages}. For example: @@ -906,25 +907,25 @@ For example: @end example @end deftypefun -@deftypefun int fko_set_spa_message (@w{fko_ctx_t @var{ctx}, const char @var{*msg_string}}); +@deftypefun int fko_set_spa_message (fko_ctx_t @var{ctx}, const char @var{*msg_string}); Set the SPA message string to the given value. If this string does not conform to the required @code{spa_nat_access} format, the function will return @code{FKO_ERROR_INVALID_DATA}. @end deftypefun -@deftypefun int fko_set_spa_nat_access (@w{fko_ctx_t @var{ctx}, const char @var{*nat_access}}); +@deftypefun int fko_set_spa_nat_access (fko_ctx_t @var{ctx}, const char @var{*nat_access}); Set the optional SPA nat access string to the given value. If this string does not conform to the required @code{spa_nat_access} format, the function will return @code{FKO_ERROR_INVALID_DATA}. @end deftypefun -@deftypefun int fko_set_spa_server_auth (@w{fko_ctx_t @var{ctx}, const char @var{*server_auth}}); +@deftypefun int fko_set_spa_server_auth (fko_ctx_t @var{ctx}, const char @var{*server_auth}); Set the optional (very seldom used) SPA server auth feature to the given value. This parameter may become deprecated. @end deftypefun -@deftypefun int fko_set_spa_client_timeout (@w{fko_ctx_t @var{ctx}, int @var{timeout}}); +@deftypefun int fko_set_spa_client_timeout (fko_ctx_t @var{ctx}, int @var{timeout}); Sets the SPA client timeout value. If the timeout is set to a value greater than 0, it is assumed the @code{spa_message_type} setting should be one of the ``TIMEOUT'' variants. This function will change the @code{message_type} @@ -932,7 +933,7 @@ to the appropriate setting if necessary. However, it is recommended you set the correct @code{message_type} ahead of time. @end deftypefun -@deftypefun int fko_set_spa_digest (@w{fko_ctx_t @var{ctx}}); +@deftypefun int fko_set_spa_digest (fko_ctx_t @var{ctx}); Initiates a calculation (or recalculation) of the message digest hash for the current @acronym{SPA} data. If the required data fields are not set this function will return @code{FKO_ERROR_MISSING_ENCODED_DATA}. @@ -941,7 +942,7 @@ as it will be called automatically by other functions during normal processing (most notably @code{fko_spa_data_final}). @end deftypefun -@deftypefun int fko_set_spa_hmac (@w{fko_ctx_t @var{ctx}, const char @var{*hmac_key}, const int @var{hmac_key_len}}); +@deftypefun int fko_set_spa_hmac (fko_ctx_t @var{ctx}, const char @var{*hmac_key}, const int @var{hmac_key_len}); Initiates a calculation (or recalculation) of the message HMAC for the current @acronym{SPA} data. @strong{Note}: It should not be necessary to call this function directly @@ -949,7 +950,7 @@ as it will be called automatically by other functions during normal processing (most notably @code{fko_spa_data_final}). @end deftypefun -@deftypefun int fko_set_spa_data (@w{fko_ctx_t @var{ctx}, char @var{*enc_data}}); +@deftypefun int fko_set_spa_data (fko_ctx_t @var{ctx}, char @var{*enc_data}); This function is used to place encrypted @acronym{SPA} data into a newly created empty context (i.e. with @code{fko_new}). In most cases, you would use @code{fko_new_with_data} so you wouldn't have to take the extra step to @@ -960,37 +961,37 @@ use this function. However, some may find a reason to do it in this way. @noindent @emph{GPG-specific functions:} -@deftypefun int fko_set_gpg_recipient (@w{fko_ctx_t @var{ctx}, const char @var{recipient}}); +@deftypefun int fko_set_gpg_recipient (fko_ctx_t @var{ctx}, const char @var{recipient}); Sets the @acronym{GPG} key for the recipient. This would be the recipient's public key used to encyrpt the @acronym{SPA} data. You can use the user name ("recip@@the.dest.com") or the key ID ("5EXXXXCC"). At present, multiple recipients are not supported. @end deftypefun -@deftypefun int fko_set_gpg_signer (@w{fko_ctx_t @var{ctx}, const char @var{signer}}); +@deftypefun int fko_set_gpg_signer (fko_ctx_t @var{ctx}, const char @var{signer}); Sets the @acronym{GPG} key for signing the data. This would be the sender's key used to sign the @acronym{SPA} data. You can use the user name or key ID. @end deftypefun -@deftypefun int fko_set_gpg_home_dir (@w{fko_ctx_t @var{ctx}, const char @var{home_dir}}); +@deftypefun int fko_set_gpg_home_dir (fko_ctx_t @var{ctx}, const char @var{home_dir}); Sets the @acronym{GPG} home directory for the current gpgme context. This allows for using alternate keyrings, gpg configurations, etc. @end deftypefun -@deftypefun int fko_set_gpg_signature_verify (@w{fko_ctx_t @var{ctx}, unsigned char @var{verify}}); +@deftypefun int fko_set_gpg_signature_verify (fko_ctx_t @var{ctx}, unsigned char @var{verify}); Sets the verify @acronym{GPG} signature flag. When set to a true value, the @acronym{GPG} signature is extracted and checked for validity during the decryption/decoding phase. When set to false, no attempt is made to access or check the signature. This flag is set to true by default. @end deftypefun -@deftypefun int fko_set_gpg_ignore_verify_error (@w{fko_ctx_t @var{ctx}, unsigned char @var{ignore}}); +@deftypefun int fko_set_gpg_ignore_verify_error (fko_ctx_t @var{ctx}, unsigned char @var{ignore}); Sets the ignore signature verify error flag. When set to a true value. Any signature verification errors are ignored (but still captured) and the decoding process will continue. The default value of this flag is false. @end deftypefun -@deftypefun int fko_set_gpg_exe (@w{fko_ctx_t @var{ctx}, const char @var{gpg_exe}}); +@deftypefun int fko_set_gpg_exe (fko_ctx_t @var{ctx}, const char @var{gpg_exe}); Sets the path to the @acronym{GPG} executable that @emph{gpgme} will use. By default, @emph{libfko} forces @emph{gpgme} to use @command{gpg} in case @emph{gpgme} was compiled to use @command{gpg2} as its default engine. You @@ -1013,32 +1014,32 @@ an FKO error code. The value of the respective field or parmeter that is being retrieved will placed into the variables whose addresses are passed to the function. -@deftypefun int fko_get_spa_data (@w{fko_ctx_t @var{ctx}, char @var{**spa_data}}); +@deftypefun int fko_get_spa_data (fko_ctx_t @var{ctx}, char @var{**spa_data}); Assigns the pointer to the string holding the final encrypted @acronym{SPA} data to the address @var{spa_data} is pointing to. This is the data that would be packaged into a packet and sent to an fwknop server. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_rand_value (@w{fko_ctx_t @var{ctx}, char @var{**rand_val}}); +@deftypefun int fko_get_rand_value (fko_ctx_t @var{ctx}, char @var{**rand_val}); Assigns the pointer to the string holding the random 16-character decimal number (@code{rand_val}) associated with the current context to the address @var{rand_val} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_username (@w{fko_ctx_t @var{ctx}, char @var{**username}}); +@deftypefun int fko_get_username (fko_ctx_t @var{ctx}, char @var{**username}); Assigns the pointer to the string holding the username associated with the current context to the address @var{rand_val} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_timestamp (@w{fko_ctx_t @var{ctx}, time_t @var{*timestamp}}); +@deftypefun int fko_get_timestamp (fko_ctx_t @var{ctx}, time_t @var{*timestamp}); Sets the value of the @var{timestamp} variable to the timestamp value associated with the current context. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_message_type (@w{fko_ctx_t @var{ctx}, short @var{*msg_type}}); +@deftypefun int fko_get_spa_message_type (fko_ctx_t @var{ctx}, short @var{*msg_type}); Sets the value of the @var{msg_type} variable to the @acronym{SPA} message type value associated with the current context. This value can be checked against the list of valid message_types listed in @ref{SPA Messages} of this @@ -1062,64 +1063,64 @@ manual. For example: The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_message (@w{fko_ctx_t @var{ctx}, char @var{**spa_msg}}); +@deftypefun int fko_get_spa_message (fko_ctx_t @var{ctx}, char @var{**spa_msg}); Assigns the pointer to the string holding the the fko @acronym{SPA} request message associated with the current context to the address @var{spa_msg} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_nat_access (@w{fko_ctx_t @var{ctx}, char @var{**nat_access}}); +@deftypefun int fko_get_spa_nat_access (fko_ctx_t @var{ctx}, char @var{**nat_access}); Assigns the pointer to the string holding the the fko @acronym{SPA} nat access message associated with the current context to the address @var{nat_access} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_server_auth (@w{fko_ctx_t @var{ctx}, char @var{**server_auth}}); +@deftypefun int fko_get_spa_server_auth (fko_ctx_t @var{ctx}, char @var{**server_auth}); Assigns the pointer to the string holding the the fko @acronym{SPA} server auth message associated with the current context to the address @var{server_auth} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_client_timeout (@w{fko_ctx_t @var{ctx}, int @var{*client_timeout}}); +@deftypefun int fko_get_spa_client_timeout (fko_ctx_t @var{ctx}, int @var{*client_timeout}); Sets the value of the @var{client_timeout} variable to the client_timeout value associated with the current context. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_digest_type (@w{fko_ctx_t @var{ctx}, short @var{*digest_type}}); +@deftypefun int fko_get_spa_digest_type (fko_ctx_t @var{ctx}, short @var{*digest_type}); Sets the value of the @var{digest_type} variable to the digest type value associated with the current context. This value can be checked against the list of valid digest_types listed in @ref{Digests} of this manual. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_hmac_type (@w{fko_ctx_t @var{ctx}, short @var{*hmac_type}}); +@deftypefun int fko_get_spa_hmac_type (fko_ctx_t @var{ctx}, short @var{*hmac_type}); Sets the value of the @var{hmac_type} variable to the HMAC type value associated with the current context. This value can be checked against the list of valid hmac_types listed in @ref{HMAC Digests} of this manual. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_digest (@w{fko_ctx_t @var{ctx}, char @var{**spa_digest}}); +@deftypefun int fko_get_spa_digest (fko_ctx_t @var{ctx}, char @var{**spa_digest}); Assigns the pointer to the string holding the the fko @acronym{SPA} digest value associated with the current context to the address @var{spa_digest} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_hmac (@w{fko_ctx_t @var{ctx}, char @var{**spa_hmac}}); +@deftypefun int fko_get_spa_hmac (fko_ctx_t @var{ctx}, char @var{**spa_hmac}); Assigns the pointer to the string holding the the fko @acronym{SPA} HMAC value associated with the current context to the address @var{spa_hmac} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_spa_encryption_type (@w{fko_ctx_t @var{ctx}, short @var{*enc_type}}); +@deftypefun int fko_get_spa_encryption_type (fko_ctx_t @var{ctx}, short @var{*enc_type}); Sets the value of the @var{enc_type} variable to the encryption type value associated with the current context. This value can be checked against the list of valid digest_types listed in @ref{Encryption Algorithms} of this manual. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_encoded_data (@w{fko_ctx_t @var{ctx}, char @var{**enc_msg}}); +@deftypefun int fko_get_encoded_data (fko_ctx_t @var{ctx}, char @var{**enc_msg}); Assigns the pointer to the string holding the the encoded @acronym{SPA} data (before encryption) associated with the current context to the address @var{enc_msg} is pointing to. This is intermediate data that would not @@ -1127,7 +1128,7 @@ normally be of use unless debugging the library. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_version (@w{fko_ctx_t @var{ctx}, char @var{**fko_version}}); +@deftypefun int fko_get_version (fko_ctx_t @var{ctx}, char @var{**fko_version}); Assigns the pointer to the string holding the the @acronym{SPA} version value associated with the current context to the address @var{fko_version} is pointing to. This is a static value for @acronym{SPA} data that is being @@ -1140,61 +1141,61 @@ value is an FKO error status. @noindent @emph{GPG-specific functions:} -@deftypefun int fko_get_gpg_recipient (@w{fko_ctx_t @var{ctx}, char @var{**recipient}}); +@deftypefun int fko_get_gpg_recipient (fko_ctx_t @var{ctx}, char @var{**recipient}); Assigns the pointer to the string holding the the @acronym{GPG} recipient ID associated with the current context to the address @var{recipient} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_signer (@w{fko_ctx_t @var{ctx}, char @var{**signer}}); +@deftypefun int fko_get_gpg_signer (fko_ctx_t @var{ctx}, char @var{**signer}); Assigns the pointer to the string holding the the @acronym{GPG} signer ID associated with the current context to the address @var{signer} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_home_dir (@w{fko_ctx_t @var{ctx}, char @var{**gpg_dir}}); +@deftypefun int fko_get_gpg_home_dir (fko_ctx_t @var{ctx}, char @var{**gpg_dir}); Assigns the pointer to the string holding the the @acronym{GPG} home directory associated with the current context to the address @var{gpg_dir} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_signature_verify (@w{fko_ctx_t @var{ctx}, unsigned char @var{*val}}); +@deftypefun int fko_get_gpg_signature_verify (fko_ctx_t @var{ctx}, unsigned char @var{*val}); Sets the value of the @var{val} variable to the current gpg_signature_verify flag value associated with the current context. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_ignore_verify_error (@w{fko_ctx_t @var{ctx}, unsigned char @var{*val}}); +@deftypefun int fko_get_gpg_ignore_verify_error (fko_ctx_t @var{ctx}, unsigned char @var{*val}); Sets the value of the @var{val} variable to the current ignore_verify_error flag value associated with the current context. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_signature_id (@w{fko_ctx_t @var{ctx}, char @var{**sig_id}}); +@deftypefun int fko_get_gpg_signature_id (fko_ctx_t @var{ctx}, char @var{**sig_id}); Assigns the pointer to the string holding the the @acronym{GPG} signature ID associated with the current context to the address @var{sig_id} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_signature_fpr (@w{fko_ctx_t @var{ctx}, char @var{**sig_fpr}}); +@deftypefun int fko_get_gpg_signature_fpr (fko_ctx_t @var{ctx}, char @var{**sig_fpr}); Assigns the pointer to the string holding the the @acronym{GPG} signature fingerprint associated with the current context to the address @var{sig_fpr} is pointing to. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_signature_summary (@w{fko_ctx_t @var{ctx}, int @var{*sig_sum}}); +@deftypefun int fko_get_gpg_signature_summary (fko_ctx_t @var{ctx}, int @var{*sig_sum}); Sets the value of the @var{sig_sum} variable to the @acronym{GPG} signature summary value associated with the current context. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_signature_status (@w{fko_ctx_t @var{ctx}, int @var{*sig_stat}}); +@deftypefun int fko_get_gpg_signature_status (fko_ctx_t @var{ctx}, int @var{*sig_stat}); Sets the value of the @var{sig_stat} variable to the @acronym{GPG} signature error status value associated with the current context. The return value is an FKO error status. @end deftypefun -@deftypefun int fko_get_gpg_exe (@w{fko_ctx_t @var{ctx}, char @var{**gpg_exe}}); +@deftypefun int fko_get_gpg_exe (fko_ctx_t @var{ctx}, char @var{**gpg_exe}); Assigns the pointer to the string holding the the @acronym{GPG} executable path associated with the current context to the address @var{gpg_exe} is pointing to. The return value is an FKO error status. @@ -1219,14 +1220,14 @@ All of these functions return an integer representing the return status of the function. When succesfull, they will return @code{FKO_SUCCESS}. Otherwise, an error code value is returned. -@deftypefun int fko_spa_data_final (@w{fko_ctx_t @var{ctx}, char @var{*enc_key}, int @var{ken_len}, char @var{*hmac_key}, int @var{hmac_key_len}}); +@deftypefun int fko_spa_data_final (fko_ctx_t @var{ctx}, char @var{*enc_key}, int @var{ken_len}, char @var{*hmac_key}, int @var{hmac_key_len}); This function is the final step in creating a complete encrypted @acronym{SPA} data string suitable for transmission to an fwknop server. It does require all of the requisite @acronym{SPA} data fields be set, otherwise it will fail with an appropriate error code. @end deftypefun -@deftypefun int fko_decrypt_spa_data (@w{fko_ctx_t @var{ctx}, char @var{*dec_key}, int @var{key_len}}); +@deftypefun int fko_decrypt_spa_data (fko_ctx_t @var{ctx}, char @var{*dec_key}, int @var{key_len}); When given the correct @var{key} (password), this function decrypts, decodes, and parses the encrypted @acronym{SPA} data that was supplied to the context via the @code{fko_new_with_data} function that was also called without the @@ -1235,20 +1236,20 @@ via the @code{fko_new_with_data} function that was also called without the fields in the context for later retrieval. @end deftypefun -@deftypefun int fko_encrypt_spa_data (@w{fko_ctx_t @var{ctx}, char @var{*enc_key}, int @var{key_len}}); +@deftypefun int fko_encrypt_spa_data (fko_ctx_t @var{ctx}, char @var{*enc_key}, int @var{key_len}); Encrypts the intermediate encoded @acronym{SPA} data stored in the context. This function will call @code{fko_encode} if necessary. It is normally not called directly as it is called from @code{fko_spa_data_final}. @end deftypefun -@deftypefun int fko_decode_spa_data (@w{fko_ctx_t @var{ctx}}); +@deftypefun int fko_decode_spa_data (fko_ctx_t @var{ctx}); This function performs the decoding, parsing, validation of the @acronym{SPA} data that was just decrypted. It is normally not called directly as it is called from @code{fko_decrypt_spa_data} (which is in turn called from @code{fko_new_with_data} if a password is supplied to it). @end deftypefun -@deftypefun int fko_encode_spa_data (@w{fko_ctx_t @var{ctx}}); +@deftypefun int fko_encode_spa_data (fko_ctx_t @var{ctx}); Performs the base64 encoding of those @acronym{SPA} data fields that need to be encoded, performs some data validation, and calls @code{fkp_set_spa_digest} to recompute the @acronym{SPA} message @@ -1261,14 +1262,14 @@ called from @code{fko_encrypt_spa_data} (which is in turn called from @noindent @emph{GPG-specific utility functions:} -@deftypefun int fko_gpg_signature_id_match (@w{fko_ctx_t @var{ctx}, const char @var{*id}, unsigned char @var{*id_match}}); +@deftypefun int fko_gpg_signature_id_match (fko_ctx_t @var{ctx}, const char @var{*id}, unsigned char @var{*id_match}); Sets the value of the @var{id_match} variable to true (1) if the value of @var{id} matches the ID of the @acronym{GPG} signature associated with the current context. Otherwise, @var{id_match} is set to false (0). The return value is an FKO error status. @end deftypefun -@deftypefun int fko_gpg_signature_fpr_match (@w{fko_ctx_t @var{ctx}, const char @var{*fpr}, unsigned char @var{*fpr_match}}); +@deftypefun int fko_gpg_signature_fpr_match (fko_ctx_t @var{ctx}, const char @var{*fpr}, unsigned char @var{*fpr_match}); Sets the value of the @var{fpr_match} variable to true (1) if the value of @var{fpr} matches the fingerprint of the @acronym{GPG} signature associated with the current context. Otherwise, @var{fpr_match} is set to false (0). @@ -1286,7 +1287,7 @@ success (0), or one of the non-zero values thar corresponds to a number of possible errors. libfko provides a function to get a descriptive string for the given error code. -@deftypefun {const char *} fko_errstr (@w{int @var{err_code}}) +@deftypefun {const char *} fko_errstr (int @var{err_code}) The function @code{fko_errstr} returns a pointer to a statically allocated string containing the descripton of the error. @end deftypefun @@ -1304,9 +1305,173 @@ FKO Context is not initialized @item FKO_ERROR_MEMORY_ALLOCATION Unable to allocate memory @item FKO_ERROR_FILESYSTEM_OPERATION -Read/write bytes mismiatch +Read/write bytes mismatch @item FKO_ERROR_INVALID_DATA Args contain invalid data +@item FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE +Invalid data: negative timeout value +@item FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL +Invalid data: invalid message length +@item FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII +Invalid data: contains non-ascii characters +@item FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS +Invalid data: insufficient number of data fields +@item FKO_ERROR_INVALID_DATA_DECODE_GT_MAX_FIELDS +Invalid data: too many data fields +@item FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS +Invalid data: invalid number of fields +@item FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE +Invalid data: decode: encoded message - digest size is not valid +@item FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING +Invalid data: decode: missing random data +@item FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING +Invalid data: decode: missing username +@item FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG +Invalid data: decode: username to large +@item FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL +Invalid data: decode: failed to decode username +@item FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL +Invalid data: decode: invalid username +@item FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING +Invalid data: decode: missing timestamp +@item FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG +Invalid data: decode: timestamp too large +@item FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL +Invalid data: decode: failed to decode timestamp +@item FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING +Invalid data: decode: missing version data +@item FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG +Invalid data: decode: version data is too large +@item FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING +Invalid data: decode: missing message type +@item FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG +Invalid data: decode: message type is too large +@item FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL +Invalid data: decode: failed to decode message type +@item FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING +Invalid data: decode: missing message data +@item FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG +Invalid data: decode: message data is too large +@item FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL +Invalid data: decode: failed to decode message data +@item FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL +Invalid data: decode: invalid message data +@item FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL +Invalid data: decode: invliad access data +@item FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING +Invalid data: decode: missing NAT access data +@item FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG +Invalid data: decode: NAT access data is too large +@item FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL +Invalid data: decode: failed to decode NAT access data +@item FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL +Invalid data: decode: invalid NAT access +@item FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING +Invalid data: decode: missing server auth +@item FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL +Invalid data: decode: server auth decode fail +@item FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG +Invalid data: decode: SPA extra too large +@item FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG +Invalid data: decode: extra too large +@item FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL +Invalid data: decode: extra decode failed +@item FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING +Invalid data: decode: missing timeout +@item FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG +Invalid data: decode timeout value is too large +@item FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL +Invalid data: decode invalid timeout +@item FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL +Invalid data: decode: timeout decode failed +@item FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG +Invalid data: encode: message is too large +@item FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL +Invalid data: encode: invalid message length +@item FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL +Invalid data: encode: invalid digest +@item FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG +Invalid data: encode: digest is too large +@item FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64 +Invalid data: encoded data is not Base64 +@item FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL +Invalid data: encrypt: invalid message length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL +Invalid data: encrypt: invalid digest length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL +Invalid data: encrypt: invalid plaintext length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL +Invalid data: encrypt: invalid encrypt result message length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL +Invalid data: encrypt: decode cipher length failed +@item FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL +Invalid data: encrypt: invalid cipher length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING +Invalid data: encrypt: missing decrypted message +@item FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL +Invalid data: encrypt: invalid decrypted message length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL +Invalid data: encrypt: invalid encryption type +@item FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL +Invalid data: encrypt: invalid encryption mode +@item FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN +Invalid data: encrypt: unknown encryption type +@item FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING +Invalid data: missing encoded message +@item FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL +Invalid data: invalid message length from new +@item FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL +Invalid data: invalid key length from gen_keylen +@item FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL +Invalid data: gen_hmaclen failure +@item FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL +Invalid data: gen_key: encode failure +@item FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL +Invalid data: gen_hmac: encode failure +@item FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL +Invalid data: set_spa_data: invalid message length +@item FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL +Invalid data: invalid HMAC msglen +@item FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL +Invalid data: invalid length for encrypted message +@item FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL +Invalid data: HMAC comparison failed +@item FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL +Invalid data: invalid HMAC type +@item FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL +Invalid data: invalid HMAC length +@item FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING +Invalid data: missing port +@item FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL +Invalid data: invalid message type +@item FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY +Invalid data: empty data message +@item FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING +Invalid data: missing command message +@item FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING +Invalid data: missing access message +@item FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING +Invalid data: missing NAT data +@item FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING +Invalid data: missing proto/port data +@item FKO_ERROR_INVALID_DATA_NAT_EMPTY +Invalid data: empty NAT value +@item FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL +Invalid data: invalid random data length +@item FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING +Invalid data: server auth missing +@item FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL +Invalid data: invalid timestamp value +@item FKO_ERROR_INVALID_DATA_USER_MISSING +Invalid data: missing user data +@item FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL +Invalid data: user first char not valid +@item FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL +Invalid data: user remchar not valid +@item FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN +Invalid data: util conversion to long less than minimum +@item FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX +Invalid data: util conversion to long greater than maximum @item FKO_ERROR_DATA_TOO_LARGE Value or Size of the data exceeded the max allowed @item FKO_ERROR_INVALID_KEY_LEN @@ -1343,6 +1508,8 @@ Invalid HMAC key length Unsupported HMAC mode (default: SHA256) @item FKO_ERROR_UNSUPPORTED_FEATURE Unsupported or unimplemented feature or function +@item FKO_ERROR_ZERO_OUT_DATA +Could not zero out sensitive data @item FKO_ERROR_UNKNOWN Unknown/Unclassified error @end table @@ -1406,6 +1573,20 @@ Missing GPG signature Bad GPG signature @item FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED Trying to check signature with verification disabled +@item FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL +Invalid data: encrypt: invalid GPG-encrypt message +@item FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL +Invalid data: encrypt: invalid GPG digest +@item FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL +Invalid data: encrypt: invalid GPG message length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL +Invalid data: encrypt: invalid GPG result message length +@item FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL +Invalid data: encrypt: GPG cipher failed +@item FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL +Invalid data: encrypt: GPG-encoded message is NULL +@item FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL +Invalid data: encrypt: invalid GPG-encrypted message length @end table @end deftypevar @@ -1416,7 +1597,7 @@ using the following function: @cindex gpg-specific functions -@deftypefun {const char *} fko_gpg_errstr (@w{int @var{err_code}}) +@deftypefun {const char *} fko_gpg_errstr (int @var{err_code}) The function @code{fko_errstr} returns a pointer to a statically allocated string containing the descripton of the @acronym{GPGME} error. @end deftypefun From 28dc60f9bd41555fc24c7f08bc153ae6e04d8e5c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 10 May 2015 21:20:10 -0700 Subject: [PATCH 098/219] added server-conf AFL fuzzing cycle results --- test/afl/results/2.6.6/93383c8/server-conf | 26 ++++++++++++++++++ .../server-conf-plot/plot/exec_speed.png | Bin 0 -> 19144 bytes .../server-conf-plot/plot/high_freq.png | Bin 0 -> 21399 bytes .../93383c8/server-conf-plot/plot/index.html | 10 +++++++ .../server-conf-plot/plot/low_freq.png | Bin 0 -> 11242 bytes 5 files changed, 36 insertions(+) create mode 100644 test/afl/results/2.6.6/93383c8/server-conf create mode 100644 test/afl/results/2.6.6/93383c8/server-conf-plot/plot/exec_speed.png create mode 100644 test/afl/results/2.6.6/93383c8/server-conf-plot/plot/high_freq.png create mode 100644 test/afl/results/2.6.6/93383c8/server-conf-plot/plot/index.html create mode 100644 test/afl/results/2.6.6/93383c8/server-conf-plot/plot/low_freq.png diff --git a/test/afl/results/2.6.6/93383c8/server-conf b/test/afl/results/2.6.6/93383c8/server-conf new file mode 100644 index 00000000..9979b689 --- /dev/null +++ b/test/afl/results/2.6.6/93383c8/server-conf @@ -0,0 +1,26 @@ + + american fuzzy lop 1.77b (fwknopd,fwknopd.conf,93383c8) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 2 days, 22 hrs, 39 min, 12 sec │ cycles done : 57 │ +│ last new path : 0 days, 19 hrs, 8 min, 2 sec │ total paths : 603 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 107 (17.74%) │ map density : 861 (1.31%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 2.85 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : splice 5 │ favored paths : 39 (6.47%) │ +│ stage execs : 322/500 (64.40%) │ new edges on : 77 (12.77%) │ +│ total execs : 341M │ total crashes : 0 (0 unique) │ +│ exec speed : 2335/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 86/7.70M, 5/7.70M, 5/7.70M │ levels : 17 │ +│ byte flips : 0/962k, 0/918k, 0/920k │ pending : 0 │ +│ arithmetics : 20/51.0M, 0/7.06M, 0/137k │ pend fav : 0 │ +│ known ints : 5/4.93M, 0/25.3M, 4/40.5M │ own finds : 602 │ +│ dictionary : 0/0, 0/0, 46/45.9M │ imported : n/a │ +│ havoc : 425/58.2M, 3/82.3M │ variable : 0 │ +│ trim : 16.25%/362k, 4.76% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:107%] + diff --git a/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/exec_speed.png b/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..5556e7b716facc128dca414cca26952e8355f16a GIT binary patch literal 19144 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 BeW(Bc literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/high_freq.png b/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..41824465de23ed921197b9b466c26d30105e51df GIT binary patch literal 21399 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 Cyp3o8 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/index.html b/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/index.html new file mode 100644 index 00000000..e347c689 --- /dev/null +++ b/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,fwknopd.conf,93383c8</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Sun May 10 21:17:35 PDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/low_freq.png b/test/afl/results/2.6.6/93383c8/server-conf-plot/plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..96291d62d8b7771f137c8331c279c56136d19d9a GIT binary patch literal 11242 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 bhSeQk9%8S6gOp9&6%n%1N_Vnu8$bCUh6XO- literal 0 HcmV?d00001 From 7817d28a2d486433e4706b7b20aefdc183c1b23a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 14 May 2015 17:49:55 -0700 Subject: [PATCH 099/219] [test suite] minor check for AFL compile configure success --- test/afl/compile/afl-compile-code-coverage.sh | 9 +++++++++ test/afl/compile/afl-compile.sh | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/test/afl/compile/afl-compile-code-coverage.sh b/test/afl/compile/afl-compile-code-coverage.sh index a8c0b7b7..17bb9a92 100755 --- a/test/afl/compile/afl-compile-code-coverage.sh +++ b/test/afl/compile/afl-compile-code-coverage.sh @@ -8,9 +8,18 @@ # cd ../../ + ./extras/apparmor/configure_args.sh --enable-afl-fuzzing --enable-profile-coverage $@ + +if [ $? -ne 0 ] +then + echo "[*] autogen configure script failure, exiting" + exit 1 +fi + make clean make + cd test/afl exit $? diff --git a/test/afl/compile/afl-compile.sh b/test/afl/compile/afl-compile.sh index 5dcdcb79..990563a6 100755 --- a/test/afl/compile/afl-compile.sh +++ b/test/afl/compile/afl-compile.sh @@ -1,7 +1,15 @@ #!/bin/sh -x cd ../../ + CC=afl-gcc ./extras/apparmor/configure_args.sh --enable-afl-fuzzing $@ + +if [ $? -ne 0 ] +then + echo "[*] autogen configure script failure, exiting" + exit 1 +fi + make clean AFL_HARDEN=1 make cd test/afl From 136d017afb5c7021251db2be741d30cc1e13ed91 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 14 May 2015 17:51:25 -0700 Subject: [PATCH 100/219] [client] ensure no dns, http, or other network comms in AFL fuzzing mode --- client/config_init.c | 6 ------ client/http_resolve_host.c | 30 ++++++++++++++++++++++++++++++ client/spa_comm.c | 19 +++++++++++++++++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/client/config_init.c b/client/config_init.c index 96fb5fc9..cdb233d0 100644 --- a/client/config_init.c +++ b/client/config_init.c @@ -1869,12 +1869,6 @@ validate_options(fko_cli_options_t *options) snprintf(options->http_user_agent, HTTP_MAX_USER_AGENT_LEN, "%s%s", "Fwknop/", MY_VERSION); -#if AFL_FUZZING - /* Don't issue IP resolution requests in AFL fuzzing mode - */ - options->resolve_ip_http_https = 0; -#endif - if(options->http_proxy[0] != 0x0 && options->spa_proto != FKO_PROTO_HTTP) { log_msg(LOG_VERBOSITY_ERROR, diff --git a/client/http_resolve_host.c b/client/http_resolve_host.c index ae4ef690..0e509f13 100644 --- a/client/http_resolve_host.c +++ b/client/http_resolve_host.c @@ -45,6 +45,10 @@ #include <sys/wait.h> #endif +#if AFL_FUZZING + #define AFL_SET_RESOLVE_HOST "192.168.12.123" /* force to non-routable IP */ +#endif + struct url { char port[MAX_PORT_STR_LEN+1]; @@ -95,6 +99,19 @@ try_url(struct url *url, fko_cli_options_t *options) hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; +#if AFL_FUZZING + /* Make sure to not generate any resolution requests when compiled + * for AFL fuzzing cycles + */ + strlcpy(options->allow_ip_str, AFL_SET_RESOLVE_HOST, + sizeof(options->allow_ip_str)); + log_msg(LOG_VERBOSITY_INFO, + "\n[+] AFL fuzzing cycle, force IP resolution to: %s", + options->allow_ip_str); + + return(1); +#endif + error = getaddrinfo(url->host, url->port, &hints, &result); if (error != 0) { @@ -381,6 +398,19 @@ resolve_ip_https(fko_cli_options_t *options) strlcat(wget_ssl_cmd, WGET_RESOLVE_URL_SSL, sizeof(wget_ssl_cmd)); } +#if AFL_FUZZING + /* Make sure to not generate any resolution requests when compiled + * for AFL fuzzing cycles + */ + strlcpy(options->allow_ip_str, AFL_SET_RESOLVE_HOST, + sizeof(options->allow_ip_str)); + log_msg(LOG_VERBOSITY_INFO, + "\n[+] AFL fuzzing cycle, force IP resolution to: %s", + options->allow_ip_str); + + return(1); +#endif + #if HAVE_EXECVPE if(strtoargv(wget_ssl_cmd, wget_argv, &wget_argc, options) != 1) { diff --git a/client/spa_comm.c b/client/spa_comm.c index 20a9b196..3b27f918 100644 --- a/client/spa_comm.c +++ b/client/spa_comm.c @@ -119,6 +119,14 @@ send_spa_packet_tcp_or_udp(const char *spa_data, const int sd_len, snprintf(port_str, MAX_PORT_STR_LEN+1, "%d", options->spa_dst_port); +#if AFL_FUZZING + /* Make sure to never send SPA packets under AFL fuzzing cycles + */ + log_msg(LOG_VERBOSITY_NORMAL, + "AFL fuzzing enabled, SPA packet not actually sent."); + return res; +#endif + error = getaddrinfo(options->spa_server_str, port_str, &hints, &result); if (error != 0) @@ -590,6 +598,9 @@ send_spa_packet_http(const char *spa_data, const int sd_len, return 0; } + /* In AFL fuzzing mode, the following function will not send + * the SPA packet. + */ return send_spa_packet_tcp_or_udp(http_buf, strlen(http_buf), options); } @@ -684,6 +695,14 @@ send_spa_packet(fko_ctx_t ctx, fko_cli_options_t *options) * the ip address */ hints.ai_family = AF_INET; +#if AFL_FUZZING + /* Make sure to never send SPA packets under AFL fuzzing cycles + */ + log_msg(LOG_VERBOSITY_NORMAL, + "AFL fuzzing enabled, SPA packet not actually sent."); + return res; +#endif + if (resolve_dest_adr(options->spa_server_str, &hints, ip_str, sizeof(ip_str)) != 0) { log_msg(LOG_VERBOSITY_ERROR, "[*] Unable to resolve %s as an ip address", From f659fe849f78032bf47503b406fe1284f311ab8c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 19 May 2015 19:06:16 -0700 Subject: [PATCH 101/219] added server digest and access AFL runs --- test/afl/results/2.6.6/136d017/server-access | 26 ++++++++++++++++++ .../136d017/server-access-plot/exec_speed.png | Bin 0 -> 16861 bytes .../136d017/server-access-plot/high_freq.png | Bin 0 -> 21647 bytes .../136d017/server-access-plot/index.html | 10 +++++++ .../136d017/server-access-plot/low_freq.png | Bin 0 -> 11180 bytes .../results/2.6.6/136d017/server-digest-cache | 26 ++++++++++++++++++ .../plot/exec_speed.png | Bin 0 -> 16520 bytes .../plot/high_freq.png | Bin 0 -> 21945 bytes .../server-digest-cache-plot/plot/index.html | 10 +++++++ .../plot/low_freq.png | Bin 0 -> 10238 bytes 10 files changed, 72 insertions(+) create mode 100644 test/afl/results/2.6.6/136d017/server-access create mode 100644 test/afl/results/2.6.6/136d017/server-access-plot/exec_speed.png create mode 100644 test/afl/results/2.6.6/136d017/server-access-plot/high_freq.png create mode 100644 test/afl/results/2.6.6/136d017/server-access-plot/index.html create mode 100644 test/afl/results/2.6.6/136d017/server-access-plot/low_freq.png create mode 100644 test/afl/results/2.6.6/136d017/server-digest-cache create mode 100644 test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/exec_speed.png create mode 100644 test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/high_freq.png create mode 100644 test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/index.html create mode 100644 test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/low_freq.png diff --git a/test/afl/results/2.6.6/136d017/server-access b/test/afl/results/2.6.6/136d017/server-access new file mode 100644 index 00000000..04b0e132 --- /dev/null +++ b/test/afl/results/2.6.6/136d017/server-access @@ -0,0 +1,26 @@ + + american fuzzy lop 1.77b (fwknopd,access.conf,136d017) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 2 days, 23 hrs, 50 min, 53 sec │ cycles done : 31 │ +│ last new path : 0 days, 4 hrs, 5 min, 17 sec │ total paths : 724 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 641* (88.54%) │ map density : 1017 (1.55%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 3.56 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : havoc │ favored paths : 56 (7.73%) │ +│ stage execs : 23.5k/40.0k (58.80%) │ new edges on : 95 (13.12%) │ +│ total execs : 332M │ total crashes : 0 (0 unique) │ +│ exec speed : 2492/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 65/9.52M, 9/9.51M, 9/9.51M │ levels : 15 │ +│ byte flips : 0/1.19M, 0/1.18M, 1/1.18M │ pending : 0 │ +│ arithmetics : 13/65.8M, 0/9.16M, 0/962k │ pend fav : 0 │ +│ known ints : 6/6.40M, 1/32.1M, 0/52.0M │ own finds : 723 │ +│ dictionary : 0/0, 0/0, 54/57.2M │ imported : n/a │ +│ havoc : 565/52.5M, 0/23.8M │ variable : 0 │ +│ trim : 9.43%/375k, 0.58% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:103%] + diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/exec_speed.png b/test/afl/results/2.6.6/136d017/server-access-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..07d0fa7ca39906a0f4408278493778fa0e198431 GIT binary patch literal 16861 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 TpMBYj+K{ZI(u)%Dm%jfOP==&( literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/high_freq.png b/test/afl/results/2.6.6/136d017/server-access-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..b258ffdf6667bdc5a5a19aa123207c400926526f GIT binary patch literal 21647 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 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/index.html b/test/afl/results/2.6.6/136d017/server-access-plot/index.html new file mode 100644 index 00000000..0cad18c2 --- /dev/null +++ b/test/afl/results/2.6.6/136d017/server-access-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,access.conf,136d017</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Tue May 19 19:02:54 PDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/low_freq.png b/test/afl/results/2.6.6/136d017/server-access-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..131669458a51826c207d2c56d33c57a47631666e GIT binary patch literal 11180 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 TdlG0)9s+q&^+w+BM$i5aYIV56 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache b/test/afl/results/2.6.6/136d017/server-digest-cache new file mode 100644 index 00000000..2034d883 --- /dev/null +++ b/test/afl/results/2.6.6/136d017/server-digest-cache @@ -0,0 +1,26 @@ + + american fuzzy lop 1.77b (fwknopd,digest.cache,136d017) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 0 days, 5 hrs, 30 min, 30 sec │ cycles done : 114 │ +│ last new path : 0 days, 3 hrs, 22 min, 2 sec │ total paths : 71 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 27* (38.03%) │ map density : 727 (1.11%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 1.22 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : splice 18 │ favored paths : 8 (11.27%) │ +│ stage execs : 42/500 (8.40%) │ new edges on : 9 (12.68%) │ +│ total execs : 35.2M │ total crashes : 0 (0 unique) │ +│ exec speed : 2140/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 6/586k, 2/586k, 2/586k │ levels : 6 │ +│ byte flips : 0/73.3k, 0/71.0k, 1/71.2k │ pending : 0 │ +│ arithmetics : 0/3.95M, 0/676k, 0/58.1k │ pend fav : 0 │ +│ known ints : 1/364k, 0/1.93M, 0/3.13M │ own finds : 70 │ +│ dictionary : 0/0, 0/0, 0/48.0k │ imported : n/a │ +│ havoc : 36/8.00M, 22/15.0M │ variable : 0 │ +│ trim : 43.16%/30.5k, 3.31% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:104%] + diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/exec_speed.png b/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..70cda6b02113cb2a0d1f538cd972e95181996913 GIT binary patch literal 16520 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 Sg=GSAb<)ov&+^1yzW+ZsrUIb= literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/high_freq.png b/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..a4681ab24e3c80b583544a0aaa55f5f85b076b4a GIT binary patch literal 21945 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%0D2>=$Vs9v<fA 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 VtTvYg4^|Rsqld41nd`QL{{ZIG0p0)r literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/index.html b/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/index.html new file mode 100644 index 00000000..c1dbe999 --- /dev/null +++ b/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,digest.cache,136d017</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Thu May 14 13:17:41 PDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/low_freq.png b/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..98daff424fb597f55dafcb89ae5e67a0cee98953 GIT binary patch literal 10238 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 literal 0 HcmV?d00001 From 3e2e73ff99a1886d233af275a9407e219d43cd8e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 19 May 2015 19:07:52 -0700 Subject: [PATCH 102/219] moved 136d017 AFL results to 2.6.7 directory --- .../results/{2.6.6 => 2.6.7}/136d017/server-access | 0 .../136d017/server-access-plot/exec_speed.png | Bin .../136d017/server-access-plot/high_freq.png | Bin .../136d017/server-access-plot/index.html | 0 .../136d017/server-access-plot/low_freq.png | Bin .../{2.6.6 => 2.6.7}/136d017/server-digest-cache | 0 .../server-digest-cache-plot/plot/exec_speed.png | Bin .../server-digest-cache-plot/plot/high_freq.png | Bin .../server-digest-cache-plot/plot/index.html | 0 .../server-digest-cache-plot/plot/low_freq.png | Bin 10 files changed, 0 insertions(+), 0 deletions(-) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-access (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-access-plot/exec_speed.png (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-access-plot/high_freq.png (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-access-plot/index.html (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-access-plot/low_freq.png (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-digest-cache (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-digest-cache-plot/plot/exec_speed.png (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-digest-cache-plot/plot/high_freq.png (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-digest-cache-plot/plot/index.html (100%) rename test/afl/results/{2.6.6 => 2.6.7}/136d017/server-digest-cache-plot/plot/low_freq.png (100%) diff --git a/test/afl/results/2.6.6/136d017/server-access b/test/afl/results/2.6.7/136d017/server-access similarity index 100% rename from test/afl/results/2.6.6/136d017/server-access rename to test/afl/results/2.6.7/136d017/server-access diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/exec_speed.png b/test/afl/results/2.6.7/136d017/server-access-plot/exec_speed.png similarity index 100% rename from test/afl/results/2.6.6/136d017/server-access-plot/exec_speed.png rename to test/afl/results/2.6.7/136d017/server-access-plot/exec_speed.png diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/high_freq.png b/test/afl/results/2.6.7/136d017/server-access-plot/high_freq.png similarity index 100% rename from test/afl/results/2.6.6/136d017/server-access-plot/high_freq.png rename to test/afl/results/2.6.7/136d017/server-access-plot/high_freq.png diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/index.html b/test/afl/results/2.6.7/136d017/server-access-plot/index.html similarity index 100% rename from test/afl/results/2.6.6/136d017/server-access-plot/index.html rename to test/afl/results/2.6.7/136d017/server-access-plot/index.html diff --git a/test/afl/results/2.6.6/136d017/server-access-plot/low_freq.png b/test/afl/results/2.6.7/136d017/server-access-plot/low_freq.png similarity index 100% rename from test/afl/results/2.6.6/136d017/server-access-plot/low_freq.png rename to test/afl/results/2.6.7/136d017/server-access-plot/low_freq.png diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache b/test/afl/results/2.6.7/136d017/server-digest-cache similarity index 100% rename from test/afl/results/2.6.6/136d017/server-digest-cache rename to test/afl/results/2.6.7/136d017/server-digest-cache diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/exec_speed.png b/test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/exec_speed.png similarity index 100% rename from test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/exec_speed.png rename to test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/exec_speed.png diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/high_freq.png b/test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/high_freq.png similarity index 100% rename from test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/high_freq.png rename to test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/high_freq.png diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/index.html b/test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/index.html similarity index 100% rename from test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/index.html rename to test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/index.html diff --git a/test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/low_freq.png b/test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/low_freq.png similarity index 100% rename from test/afl/results/2.6.6/136d017/server-digest-cache-plot/plot/low_freq.png rename to test/afl/results/2.6.7/136d017/server-digest-cache-plot/plot/low_freq.png From ceb1713976902677a7c0e817f7a0ecfc1a485eed Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 20 May 2015 08:55:17 -0700 Subject: [PATCH 103/219] add --key-gen option to fwknopd (suggested by Jonathan Bennett) --- CREDITS | 1 + ChangeLog | 5 ++ client/config_init.c | 2 +- client/fwknop_common.h | 4 +- common/common.h | 3 + doc/fwknop.man.asciidoc | 5 ++ server/cmd_opts.h | 11 +++- server/config_init.c | 111 ++++++++++++++++++++++++++++++++- server/fwknopd_common.h | 13 +++- test/tests/basic_operations.pl | 8 +++ test/tests/rijndael.pl | 27 -------- test/tests/rijndael_hmac.pl | 53 ++++++++++++++++ 12 files changed, 209 insertions(+), 34 deletions(-) diff --git a/CREDITS b/CREDITS index de17d9e2..38e21083 100644 --- a/CREDITS +++ b/CREDITS @@ -1,5 +1,6 @@ Jonathan Bennett - Contributed OpenWRT support - see the extras/openwrt/ directory. + - Suggested the addition of the --key-gen option to fwknopd. Sebastien Jeanquier - Assisted with getting fwknop included in BackTrack Linux - the choice diff --git a/ChangeLog b/ChangeLog index 21a50937..4daf008d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +fwknop-2.6.7 (05//2015): + - Added --key-gen to fwknopd. This feature was suggested by Jonathan + Bennett, and will help with ease of use efforts. The first platform to + take advantage of this will likely be OpenWRT thanks to Jonathan. + fwknop-2.6.6 (04/23/2015): - [server] Add the ability for fwknopd to function as an generic SPA gateway. This allows scenarios such as the fwknopd system providing DHCP diff --git a/client/config_init.c b/client/config_init.c index cdb233d0..f0ae1354 100644 --- a/client/config_init.c +++ b/client/config_init.c @@ -199,7 +199,7 @@ static int critical_var_array[] = }; /** - * @brief Generate Rijndael + HMAC keys from /dev/random (base64 encoded) and exit. + * @brief Generate Rijndael + HMAC keys from /dev/urandom (base64 encoded). * * @param options FKO command line option structure */ diff --git a/client/fwknop_common.h b/client/fwknop_common.h index aef20c48..c57db028 100644 --- a/client/fwknop_common.h +++ b/client/fwknop_common.h @@ -69,8 +69,6 @@ #define MAX_HOSTNAME_LEN 70 #define MAX_URL_HOST_LEN 256 #define MAX_URL_PATH_LEN 1024 -#define MAX_KEY_LEN 128 -#define MAX_B64_KEY_LEN 180 /* fwknop client configuration parameters and values */ @@ -156,10 +154,10 @@ typedef struct fko_cli_options unsigned char use_gpg; unsigned char use_gpg_agent; unsigned char gpg_no_signing_pw; + unsigned char key_gen; int time_offset_plus; int time_offset_minus; int fw_timeout; - int key_gen; char use_rc_stanza[MAX_LINE_LEN]; unsigned char got_named_stanza; diff --git a/common/common.h b/common/common.h index b63e7c25..c7b2e573 100644 --- a/common/common.h +++ b/common/common.h @@ -157,6 +157,9 @@ enum { #define MAX_GPG_KEY_ID 128 #define MAX_USERNAME_LEN 30 +#define MAX_KEY_LEN 128 +#define MAX_B64_KEY_LEN 180 + /* Command line argument / argv handling */ #define MAX_CMDLINE_ARGS 30 /*!< should be way more than enough */ diff --git a/doc/fwknop.man.asciidoc b/doc/fwknop.man.asciidoc index 070ac775..efa99a79 100644 --- a/doc/fwknop.man.asciidoc +++ b/doc/fwknop.man.asciidoc @@ -196,6 +196,11 @@ GENERAL OPTIONS keys are generally more secure than passphrases that are typed in from the command line. +*--key-gen-file*='<file>':: + Write generated keys to the specified file. Note that the file is + overwritten if it already exists. If this option is not given, then + *--key-gen* writes the keys to stdout. + *--key-len*='<length>':: Specify the number of bytes for a generated Rijndael key. The maximum size is currently 128 bytes. diff --git a/server/cmd_opts.h b/server/cmd_opts.h index bc1eee16..d7a645cb 100644 --- a/server/cmd_opts.h +++ b/server/cmd_opts.h @@ -141,6 +141,10 @@ enum { FW_LIST = 0x200, FW_LIST_ALL, FW_FLUSH, + KEY_GEN_FILE, + KEY_LEN, + HMAC_KEY_LEN, + HMAC_DIGEST_TYPE, AFL_PKT_FILE, GPG_HOME_DIR, GPG_EXE_PATH, @@ -178,7 +182,12 @@ static struct option cmd_opts[] = {"fault-injection-tag", 1, NULL, FAULT_INJECTION_TAG}, {"help", 0, NULL, 'h'}, {"interface", 1, NULL, 'i'}, - {"kill", 0, NULL, 'K'}, + {"key-gen", 0, NULL, 'k'}, + {"key-gen-file", 1, NULL, KEY_GEN_FILE }, + {"key-len", 1, NULL, KEY_LEN }, + {"hmac-key-len", 1, NULL, HMAC_KEY_LEN }, + {"hmac-digest-type", 1, NULL, HMAC_DIGEST_TYPE }, + {"kill", 0, NULL, 'K' }, {"fw-flush", 0, NULL, FW_FLUSH }, {"fw-list", 0, NULL, FW_LIST }, {"fw-list-all", 0, NULL, FW_LIST_ALL }, diff --git a/server/config_init.c b/server/config_init.c index 0ddceee6..46e3d1f1 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -201,6 +201,60 @@ validate_int_var_ranges(fko_srv_options_t *opts) return; } +/** + * @brief Generate Rijndael + HMAC keys from /dev/urandom (base64 encoded). + * + * @param options FKO command line option structure + */ +static void +generate_keys(fko_srv_options_t *options) +{ + char key_base64[MAX_B64_KEY_LEN+1]; + char hmac_key_base64[MAX_B64_KEY_LEN+1]; + + FILE *key_gen_file_ptr = NULL; + int res; + + /* Zero out the key buffers */ + memset(key_base64, 0x00, sizeof(key_base64)); + memset(hmac_key_base64, 0x00, sizeof(hmac_key_base64)); + + /* Generate the key through libfko */ + res = fko_key_gen(key_base64, FKO_DEFAULT_KEY_LEN, + hmac_key_base64, FKO_DEFAULT_HMAC_KEY_LEN, + FKO_DEFAULT_HMAC_MODE); + + if(res != FKO_SUCCESS) + { + log_msg(LOG_ERR, "%s: fko_key_gen: Error %i - %s", + MY_NAME, res, fko_errstr(res)); + clean_exit(options, NO_FW_CLEANUP, EXIT_FAILURE); + } + + if(options->key_gen_file[0] != '\0') + { + if ((key_gen_file_ptr = fopen(options->key_gen_file, "w")) == NULL) + { + log_msg(LOG_INFO, "Unable to create key gen file: %s: %s", + options->key_gen_file, strerror(errno)); + clean_exit(options, NO_FW_CLEANUP, EXIT_FAILURE); + } + fprintf(key_gen_file_ptr, "KEY_BASE64: %s\nHMAC_KEY_BASE64: %s\n", + key_base64, hmac_key_base64); + fclose(key_gen_file_ptr); + log_msg(LOG_INFO, + "[+] Wrote Rijndael and HMAC keys to: %s", + options->key_gen_file); + } + else + { + log_msg(LOG_INFO, + "KEY_BASE64: %s\nHMAC_KEY_BASE64: %s", + key_base64, hmac_key_base64); + } + clean_exit(options, NO_FW_CLEANUP, EXIT_SUCCESS); +} + /* Parse the config file... */ static void @@ -427,7 +481,7 @@ validate_options(fko_srv_options_t *opts) if(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE] == NULL) set_config_entry(opts, CONF_ENABLE_DIGEST_PERSISTENCE, DEF_ENABLE_DIGEST_PERSISTENCE); - + /* Enable destination rule. */ if(opts->config[CONF_ENABLE_DESTINATION_RULE] == NULL) @@ -882,6 +936,20 @@ validate_options(fko_srv_options_t *opts) clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } + if(opts->key_gen) + { + /* Set defaults and validate for --key-gen mode + */ + if(opts->key_len == 0) + opts->key_len = FKO_DEFAULT_KEY_LEN; + + if(opts->hmac_key_len == 0) + opts->hmac_key_len = FKO_DEFAULT_HMAC_KEY_LEN; + + if(opts->hmac_type == 0) + opts->hmac_type = FKO_DEFAULT_HMAC_MODE; + } + return; } @@ -1130,6 +1198,44 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) case IPT_DISABLE_CHECK_SUPPORT: opts->ipt_disable_check_support = 1; break; + case 'k': + opts->key_gen = 1; + break; + case KEY_GEN_FILE: + opts->key_gen = 1; + strlcpy(opts->key_gen_file, optarg, sizeof(opts->key_gen_file)); + break; + case KEY_LEN: /* used in --key-gen mode only */ + opts->key_len = strtol_wrapper(optarg, 1, + MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, + "Invalid key length '%s', must be in [%d-%d]", + optarg, 1, MAX_KEY_LEN); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; + case HMAC_DIGEST_TYPE: /* used in --key-gen mode only */ + if((opts->hmac_type = hmac_digest_strtoint(optarg)) < 0) + { + log_msg(LOG_ERR, + "* Invalid hmac digest type: %s, use {md5,sha1,sha256,sha384,sha512}", + optarg); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; + case HMAC_KEY_LEN: /* used in --key-gen mode only */ + opts->hmac_key_len = strtol_wrapper(optarg, 1, + MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, + "Invalid hmac key length '%s', must be in [%d-%d]", + optarg, 1, MAX_KEY_LEN); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; case 'K': opts->kill = 1; break; @@ -1190,6 +1296,9 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) */ validate_options(opts); + if(opts->key_gen) + generate_keys(opts); + return; } diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index ecf2a817..8c33eaa0 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -585,10 +585,14 @@ typedef struct fko_srv_options unsigned char fw_list; /* List current firewall rules */ unsigned char fw_list_all; /* List all current firewall rules */ unsigned char fw_flush; /* Flush current firewall rules */ + unsigned char key_gen; /* Generate keys and exit */ + unsigned char exit_after_parse_config; /* Parse config and exit */ + + /* Operational flags + */ unsigned char test; /* Test mode flag */ unsigned char afl_fuzzing; /* SPA pkts from stdin for AFL fuzzing */ unsigned char verbose; /* Verbose mode flag */ - unsigned char exit_after_parse_config; /* Parse config and exit */ unsigned char enable_udp_server; /* Enable UDP server mode */ unsigned char firewd_disable_check_support; /* Don't use firewall-cmd ... -C */ @@ -605,6 +609,13 @@ typedef struct fko_srv_options int tcp_server_pid; int lock_fd; + /* Values used in --key-gen mode only + */ + char key_gen_file[MAX_PATH_LEN]; + int key_len; + int hmac_key_len; + int hmac_type; + #if USE_FILE_CACHE struct digest_cache_list *digest_cache; /* In-memory digest cache list */ #endif diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index f4dde2ec..76a509d9 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -390,6 +390,14 @@ 'exec_err' => $YES, 'cmdline' => "$default_client_args --key-gen -K " . 'A'x1030 }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => '--key-gen file path (-K) too long', + 'function' => \&generic_exec, + 'exec_err' => $YES, + 'cmdline' => "$fwknopdCmd --key-gen --key-gen-file " . 'A'x1030 + }, { 'category' => 'basic operations', diff --git a/test/tests/rijndael.pl b/test/tests/rijndael.pl index 26aab6a6..34af65eb 100644 --- a/test/tests/rijndael.pl +++ b/test/tests/rijndael.pl @@ -421,33 +421,6 @@ 'key_file' => $cf{'rc_named_key'}, }, - ### --key-gen tests - { - 'category' => 'Rijndael', - 'subcategory' => 'client', - 'detail' => '--key-gen', - 'function' => \&generic_exec, - 'cmdline' => "$fwknopCmd --key-gen", - 'positive_output_matches' => [qr/^KEY_BASE64\:?\s\S{10}/, - qw/HMAC_KEY_BASE64\:?\s\S{10}/], - }, - { - 'category' => 'Rijndael', - 'subcategory' => 'client', - 'detail' => "--key-gen $uniq_keys key uniqueness", - 'function' => \&key_gen_uniqueness, - 'cmdline' => "$fwknopCmd --key-gen", ### no valgrind string (too slow for 100 client exec's) - 'disable_valgrind' => $YES, - }, - { - 'category' => 'Rijndael', - 'subcategory' => 'client', - 'detail' => '--key-gen to file', - 'function' => \&generic_exec, - 'cmdline' => "$fwknopCmd --key-gen --key-gen-file $key_gen_file", - 'positive_output_matches' => [qr/Wrote.*\skeys/], - }, - ### rc file tests { 'category' => 'Rijndael', diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index fc1a8af6..fd80f04c 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -58,6 +58,59 @@ 'exec_err' => $YES, }, + ### --key-gen tests + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client', + 'detail' => '--key-gen', + 'function' => \&generic_exec, + 'cmdline' => "$fwknopCmd --key-gen", + 'positive_output_matches' => [qr/^KEY_BASE64\:?\s\S{10}/, + qw/HMAC_KEY_BASE64\:?\s\S{10}/], + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'server', + 'detail' => '--key-gen', + 'function' => \&generic_exec, + 'cmdline' => "$fwknopdCmd --key-gen", + 'positive_output_matches' => [qr/^KEY_BASE64\:?\s\S{10}/, + qw/HMAC_KEY_BASE64\:?\s\S{10}/], + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client', + 'detail' => "--key-gen $uniq_keys key uniqueness", + 'function' => \&key_gen_uniqueness, + 'cmdline' => "$fwknopCmd --key-gen", ### no valgrind string (too slow for 100 exec's) + 'disable_valgrind' => $YES, + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'server', + 'detail' => "--key-gen $uniq_keys key uniqueness", + 'function' => \&key_gen_uniqueness, + 'cmdline' => "$fwknopdCmd --key-gen", ### no valgrind string (too slow for 100 exec's) + 'disable_valgrind' => $YES, + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client', + 'detail' => '--key-gen to file', + 'function' => \&generic_exec, + 'cmdline' => "$fwknopCmd --key-gen --key-gen-file $key_gen_file", + 'positive_output_matches' => [qr/Wrote.*\skeys/], + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'server', + 'detail' => '--key-gen to file', + 'function' => \&generic_exec, + 'cmdline' => "$fwknopdCmd --key-gen --key-gen-file $key_gen_file", + 'positive_output_matches' => [qr/Wrote.*\skeys/], + }, + + ### complete cycle tests { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', From de3bca2f9ebf6977f9f1e083637d6ec1bf89cf43 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 20 May 2015 09:47:51 -0700 Subject: [PATCH 104/219] handle key generation before config parsing --- server/config_init.c | 127 +++++++++++++++++++++---------------------- 1 file changed, 62 insertions(+), 65 deletions(-) diff --git a/server/config_init.c b/server/config_init.c index 46e3d1f1..2f1d2930 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -215,14 +215,25 @@ generate_keys(fko_srv_options_t *options) FILE *key_gen_file_ptr = NULL; int res; + /* Set defaults and validate for --key-gen mode + */ + if(options->key_len == 0) + options->key_len = FKO_DEFAULT_KEY_LEN; + + if(options->hmac_key_len == 0) + options->hmac_key_len = FKO_DEFAULT_HMAC_KEY_LEN; + + if(options->hmac_type == 0) + options->hmac_type = FKO_DEFAULT_HMAC_MODE; + /* Zero out the key buffers */ memset(key_base64, 0x00, sizeof(key_base64)); memset(hmac_key_base64, 0x00, sizeof(hmac_key_base64)); /* Generate the key through libfko */ - res = fko_key_gen(key_base64, FKO_DEFAULT_KEY_LEN, - hmac_key_base64, FKO_DEFAULT_HMAC_KEY_LEN, - FKO_DEFAULT_HMAC_MODE); + res = fko_key_gen(key_base64, options->key_len, + hmac_key_base64, options->hmac_key_len, + options->hmac_type); if(res != FKO_SUCCESS) { @@ -235,21 +246,19 @@ generate_keys(fko_srv_options_t *options) { if ((key_gen_file_ptr = fopen(options->key_gen_file, "w")) == NULL) { - log_msg(LOG_INFO, "Unable to create key gen file: %s: %s", + log_msg(LOG_ERR, "Unable to create key gen file: %s: %s", options->key_gen_file, strerror(errno)); clean_exit(options, NO_FW_CLEANUP, EXIT_FAILURE); } fprintf(key_gen_file_ptr, "KEY_BASE64: %s\nHMAC_KEY_BASE64: %s\n", key_base64, hmac_key_base64); fclose(key_gen_file_ptr); - log_msg(LOG_INFO, - "[+] Wrote Rijndael and HMAC keys to: %s", + fprintf(stdout, "[+] Wrote Rijndael and HMAC keys to: %s", options->key_gen_file); } else { - log_msg(LOG_INFO, - "KEY_BASE64: %s\nHMAC_KEY_BASE64: %s", + fprintf(stdout, "KEY_BASE64: %s\nHMAC_KEY_BASE64: %s\n", key_base64, hmac_key_base64); } clean_exit(options, NO_FW_CLEANUP, EXIT_SUCCESS); @@ -936,20 +945,6 @@ validate_options(fko_srv_options_t *opts) clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } - if(opts->key_gen) - { - /* Set defaults and validate for --key-gen mode - */ - if(opts->key_len == 0) - opts->key_len = FKO_DEFAULT_KEY_LEN; - - if(opts->hmac_key_len == 0) - opts->hmac_key_len = FKO_DEFAULT_HMAC_KEY_LEN; - - if(opts->hmac_type == 0) - opts->hmac_type = FKO_DEFAULT_HMAC_MODE; - } - return; } @@ -996,8 +991,9 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) /* First, scan the command-line args for -h/--help or an alternate * configuration file. If we find an alternate config file, use it, - * otherwise use the default. We also grab any override config files - * as well. + * otherwise use the default. We also grab any override config files + * as well. In addition, we handle key generation here since this is + * independent of configuration parsing. */ while ((cmd_arg = getopt_long(argc, argv, GETOPTS_OPTION_STRING, cmd_opts, &index)) != -1) { @@ -1020,6 +1016,45 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) if(got_override_config > 0) break; + case 'k': + opts->key_gen = 1; + break; + case KEY_GEN_FILE: + opts->key_gen = 1; + strlcpy(opts->key_gen_file, optarg, sizeof(opts->key_gen_file)); + break; + case KEY_LEN: /* used in --key-gen mode only */ + opts->key_len = strtol_wrapper(optarg, 1, + MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, + "Invalid key length '%s', must be in [%d-%d]", + optarg, 1, MAX_KEY_LEN); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; + case HMAC_DIGEST_TYPE: /* used in --key-gen mode only */ + if((opts->hmac_type = hmac_digest_strtoint(optarg)) < 0) + { + log_msg(LOG_ERR, + "* Invalid hmac digest type: %s, use {md5,sha1,sha256,sha384,sha512}", + optarg); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; + case HMAC_KEY_LEN: /* used in --key-gen mode only */ + opts->hmac_key_len = strtol_wrapper(optarg, 1, + MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, + "Invalid hmac key length '%s', must be in [%d-%d]", + optarg, 1, MAX_KEY_LEN); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; + /* Look for override configuration file arg. */ case 'O': @@ -1033,6 +1068,9 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) } } + if(opts->key_gen) + generate_keys(opts); + /* If no alternate configuration file was specified, we use the * default. */ @@ -1198,44 +1236,6 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) case IPT_DISABLE_CHECK_SUPPORT: opts->ipt_disable_check_support = 1; break; - case 'k': - opts->key_gen = 1; - break; - case KEY_GEN_FILE: - opts->key_gen = 1; - strlcpy(opts->key_gen_file, optarg, sizeof(opts->key_gen_file)); - break; - case KEY_LEN: /* used in --key-gen mode only */ - opts->key_len = strtol_wrapper(optarg, 1, - MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_ERR, - "Invalid key length '%s', must be in [%d-%d]", - optarg, 1, MAX_KEY_LEN); - clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); - } - break; - case HMAC_DIGEST_TYPE: /* used in --key-gen mode only */ - if((opts->hmac_type = hmac_digest_strtoint(optarg)) < 0) - { - log_msg(LOG_ERR, - "* Invalid hmac digest type: %s, use {md5,sha1,sha256,sha384,sha512}", - optarg); - clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); - } - break; - case HMAC_KEY_LEN: /* used in --key-gen mode only */ - opts->hmac_key_len = strtol_wrapper(optarg, 1, - MAX_KEY_LEN, NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_ERR, - "Invalid hmac key length '%s', must be in [%d-%d]", - optarg, 1, MAX_KEY_LEN); - clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); - } - break; case 'K': opts->kill = 1; break; @@ -1296,9 +1296,6 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) */ validate_options(opts); - if(opts->key_gen) - generate_keys(opts); - return; } From 81cdb0506f614641d3285689b5c927934ec6ad16 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 20 May 2015 16:57:43 -0700 Subject: [PATCH 105/219] added spa-pkts fuzzing cycle --- test/afl/results/2.6.7/136d017/spa-pkts | 26 ++++++++++++++++++ .../136d017/spa-pkts-plot/exec_speed.png | Bin 0 -> 13015 bytes .../2.6.7/136d017/spa-pkts-plot/high_freq.png | Bin 0 -> 23547 bytes .../2.6.7/136d017/spa-pkts-plot/index.html | 10 +++++++ .../2.6.7/136d017/spa-pkts-plot/low_freq.png | Bin 0 -> 10333 bytes 5 files changed, 36 insertions(+) create mode 100644 test/afl/results/2.6.7/136d017/spa-pkts create mode 100644 test/afl/results/2.6.7/136d017/spa-pkts-plot/exec_speed.png create mode 100644 test/afl/results/2.6.7/136d017/spa-pkts-plot/high_freq.png create mode 100644 test/afl/results/2.6.7/136d017/spa-pkts-plot/index.html create mode 100644 test/afl/results/2.6.7/136d017/spa-pkts-plot/low_freq.png diff --git a/test/afl/results/2.6.7/136d017/spa-pkts b/test/afl/results/2.6.7/136d017/spa-pkts new file mode 100644 index 00000000..a62b2c48 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/spa-pkts @@ -0,0 +1,26 @@ + + american fuzzy lop 1.77b (fwknopd,SPA,encode/decode,136d017) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 0 days, 20 hrs, 23 min, 20 sec │ cycles done : 32 │ +│ last new path : 0 days, 0 hrs, 26 min, 35 sec │ total paths : 448 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 294 (65.62%) │ map density : 1765 (2.69%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 1.58 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : splice 14 │ favored paths : 141 (31.47%) │ +│ stage execs : 770/1000 (77.00%) │ new edges on : 181 (40.40%) │ +│ total execs : 102M │ total crashes : 0 (0 unique) │ +│ exec speed : 1393/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 87/411k, 8/411k, 8/410k │ levels : 13 │ +│ byte flips : 1/51.5k, 0/51.0k, 0/50.1k │ pending : 0 │ +│ arithmetics : 53/2.87M, 0/12.2k, 0/2406 │ pend fav : 0 │ +│ known ints : 7/292k, 2/1.43M, 1/2.21M │ own finds : 443 │ +│ dictionary : 0/0, 0/0, 42/2.41M │ imported : n/a │ +│ havoc : 216/40.3M, 5/51.6M │ variable : 448 │ +│ trim : 2.48%/20.4k, 0.00% ├────────────────────────┘ +└─────────────────────────────────────────────────────┘ [cpu:105%] + diff --git a/test/afl/results/2.6.7/136d017/spa-pkts-plot/exec_speed.png b/test/afl/results/2.6.7/136d017/spa-pkts-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..616ab91dccb8a8282262a648eacc6f804f3fa219 GIT binary patch literal 13015 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%0A+NXL*ZPv0?W1_SX9<XXKCl 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 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/spa-pkts-plot/high_freq.png b/test/afl/results/2.6.7/136d017/spa-pkts-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..eae9ae396bea2df37602b5d17eab739042ce7461 GIT binary patch literal 23547 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 U_Wn96#~<BHjLdei4SqWPFF$1zumAu6 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/spa-pkts-plot/index.html b/test/afl/results/2.6.7/136d017/spa-pkts-plot/index.html new file mode 100644 index 00000000..601caedd --- /dev/null +++ b/test/afl/results/2.6.7/136d017/spa-pkts-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,SPA,encode/decode,136d017</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Wed May 20 16:55:20 PDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.7/136d017/spa-pkts-plot/low_freq.png b/test/afl/results/2.6.7/136d017/spa-pkts-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..9e74e875251c388f5a661c2f6ae98dea1da309f5 GIT binary patch literal 10333 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 V|MZ{FjvkA<Ew3u~QTCzF{{cdn@Kyi- literal 0 HcmV?d00001 From 1f454622064da8db625f4e1833c83a63c403a80f Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 21 May 2015 22:18:14 -0400 Subject: [PATCH 106/219] [extras] run ramdisk creation script from top level sources directory --- extras/ramdisk/ramdisk-create.sh | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/extras/ramdisk/ramdisk-create.sh b/extras/ramdisk/ramdisk-create.sh index 40620da4..d4eaef23 100755 --- a/extras/ramdisk/ramdisk-create.sh +++ b/extras/ramdisk/ramdisk-create.sh @@ -1,8 +1,26 @@ #!/bin/sh -x +# +# This script creates a ramdisk and clones the fwknop git repository +# into it. This is meant for AFL fuzzing cycles. +# +RSIZE=768M RAMDISK=/tmp/afl-ramdisk -mkdir $RAMDISK && chmod 777 $RAMDISK -mount -t tmpfs -o size=768M tmpfs $RAMDISK -cd ../.. && git clone . $RAMDISK/fwknop.git +if [ -d $RAMDISK ] +then + echo "[*] $RAMDISK directory already exists" + exit 1 +fi + +if [ -f extras/ramdisk/ramdisk-create.sh ] +then + mkdir $RAMDISK && chmod 777 $RAMDISK + mount -t tmpfs -o size=$RSIZE tmpfs $RAMDISK + git clone . $RAMDISK/fwknop.git +else + echo "[*] Run this script from the top level fwknop sources directory" + exit 1 +fi + exit $? From 29defca4d5d4c701a6faa350a16ebab8361e0a84 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 20 May 2015 18:52:30 -0700 Subject: [PATCH 107/219] (Jonathan Bennett) added console-qr.sh script to create QR codes from fwknopd access.conf keys --- CREDITS | 2 ++ ChangeLog | 2 ++ extras/console-qr/console-qr.sh | 24 ++++++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100755 extras/console-qr/console-qr.sh diff --git a/CREDITS b/CREDITS index 38e21083..c3d559b0 100644 --- a/CREDITS +++ b/CREDITS @@ -1,6 +1,8 @@ Jonathan Bennett - Contributed OpenWRT support - see the extras/openwrt/ directory. - Suggested the addition of the --key-gen option to fwknopd. + - Contributed the console-qr.sh script (in extras/console-qr/) to create + QR codes from fwknopd access.conf keys. Sebastien Jeanquier - Assisted with getting fwknop included in BackTrack Linux - the choice diff --git a/ChangeLog b/ChangeLog index 4daf008d..931dbeaa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ fwknop-2.6.7 (05//2015): - Added --key-gen to fwknopd. This feature was suggested by Jonathan Bennett, and will help with ease of use efforts. The first platform to take advantage of this will likely be OpenWRT thanks to Jonathan. + - Added a script from Jonathan Bennett at extras/console-qr/console-qr.sh + to generate QR codes from fwknopd access.conf keys. fwknop-2.6.6 (04/23/2015): - [server] Add the ability for fwknopd to function as an generic SPA diff --git a/extras/console-qr/console-qr.sh b/extras/console-qr/console-qr.sh new file mode 100755 index 00000000..7c7dfbaa --- /dev/null +++ b/extras/console-qr/console-qr.sh @@ -0,0 +1,24 @@ +#!/bin/sh +while read line; do + line=$(echo "$line" | sed 's:#.*$::g') + if [ "$(echo $line | grep -c 'SOURCE')" -ne "0" ] + then + source=$line + if [ -n "$qr" ] + then + echo $'\n\n'$source + qrencode -o - -t UTF8 "$qr" + qr="" + fi + fi + if [ "$(echo $line | grep -c 'KEY')" -ne "0" ] + then + trline="$(echo $line | sed 's/^[ \t]*//;s/[ \t]*$//' | sed 's/ /:/')" + qr="$qr$trline " + fi +done +if [ -n "$qr" ] +then + echo $'\n\n'$source + qrencode -o - -t UTF8 "$qr" +fi From 2e377985dac06f54202ca5cdaa6ee511a439ae64 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 20 May 2015 19:01:24 -0700 Subject: [PATCH 108/219] add ramdisk-create.sh and console-rq.sh --- Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile.am b/Makefile.am index 4901b3df..ec772134 100644 --- a/Makefile.am +++ b/Makefile.am @@ -71,6 +71,8 @@ EXTRA_DIST = \ extras/fwknop-launcher/fwknop-launcher.conf \ extras/apparmor/usr.sbin.fwknopd \ extras/apparmor/configure_args.sh \ + extras/ramdisk/ramdisk-create.sh \ + extras/console-qr/console-qr.sh \ fwknop.spec \ iphone/main.m \ iphone/Fwknop.xcodeproj \ From 85f42012ca5697f8bc9f7d1620de6e51a5b601d6 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 21 May 2015 09:35:31 -0700 Subject: [PATCH 109/219] add --key-gen and associated options to the fwknopd man page --- doc/fwknop.man.asciidoc | 10 +++++----- doc/fwknopd.man.asciidoc | 28 +++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/doc/fwknop.man.asciidoc b/doc/fwknop.man.asciidoc index efa99a79..49eb7225 100644 --- a/doc/fwknop.man.asciidoc +++ b/doc/fwknop.man.asciidoc @@ -190,11 +190,11 @@ GENERAL OPTIONS *--key-gen*:: Have *fwknop* generate both Rijndael and HMAC keys that can be used for SPA - packet encryption. These keys are derived from /dev/urandom and then base64 - encoded before being printed to stdout, and are meant to be included within - the ``$HOME/.fwknoprc'' file (or the file referenced by *--get-key*). Such - keys are generally more secure than passphrases that are typed in from the - command line. + packet encryption and authentication. These keys are derived from + /dev/urandom and then base64 encoded before being printed to stdout, and + are meant to be included within the ``$HOME/.fwknoprc'' file (or the file + referenced by *--get-key*). Such keys are generally more secure than + passphrases that are typed in from the command line. *--key-gen-file*='<file>':: Write generated keys to the specified file. Note that the file is diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index 2f539ebe..e36bed60 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -116,7 +116,7 @@ COMMAND-LINE OPTIONS network traffic. *-l, --locale*='<locale>':: - Set/override the system default locale setting. + Set/override the system default locale setting. *--no-ipt-check-support*:: Disable the usage of the iptables '-C' option. This is not normally needed, @@ -128,10 +128,31 @@ COMMAND-LINE OPTIONS '@sysconfdir@/fwknop/fwknopd.conf' file with values from the specified file. Multiple override config files can be given as a comma-separated list. +*--key-gen*:: + Have *fwknopd* generate both Rijndael and HMAC keys that can be used for + SPA packet encryption and authentication. These keys are derived from + /dev/urandom and then base64 encoded before being printed to stdout, and + are meant to be manually included in a stanza within the + '@sysconfdir@/fwknop/access.conf' file. Such keys are generally more secure + than passphrases. + +*--key-gen-file*='<file>':: + Write generated keys to the specified file. Note that the file is + overwritten if it already exists. If this option is not given, then + *--key-gen* writes the keys to stdout. + +*--key-len*='<length>':: + Specify the number of bytes for a generated Rijndael key. The maximum size + is currently 128 bytes. + +*--hmac-key-len*='<length>':: + Specify the number of bytes for a generated HMAC key. The maximum size is + currently 128 bytes. + *-p, --pid-file*='<pid-file>':: Specify the location of the 'fwknopd.pid' file. If this option is not given, 'fwknopd' will use the compile-time default location (typically - '@localstatedir@/fwknop/fwknopd.pid). + '@localstatedir@/fwknop/fwknopd.pid'). *-P, --pcap-filter*='<filter>':: Specify a Berkeley packet filter statement on the *fwknopd* command @@ -220,7 +241,8 @@ This section list the more prominent configuration variables used by *fwknopd*. It is not a complete list. There are directives for the type of firewall used by *fwknopd* (i.e. _iptables_, _ipfw_, or _pf_). You will want to make sure to check these to make sure they have appropriate values. -See the '@sysconfdir@/fwknop/fwknopd.conf' file for the full list and corresponding details. +See the '@sysconfdir@/fwknop/fwknopd.conf' file for the full list and +corresponding details. *PCAP_INTF* '<interface>':: Specify the ethernet interface on which *fwknopd* will sniff packets. From 85e07f99c47adf3153722a271204f54ce7ed2ff7 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 22 May 2015 15:31:18 -0400 Subject: [PATCH 110/219] man page updates --- client/fwknop.8.in | 13 ++++++++++--- server/fwknopd.8.in | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 40 insertions(+), 6 deletions(-) diff --git a/client/fwknop.8.in b/client/fwknop.8.in index 89cb249f..4e7b5fbc 100644 --- a/client/fwknop.8.in +++ b/client/fwknop.8.in @@ -2,12 +2,12 @@ .\" Title: fwknop .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> -.\" Date: 04/20/2015 +.\" Date: 05/22/2015 .\" Manual: Fwknop Client .\" Source: Fwknop Client .\" Language: English .\" -.TH "FWKNOP" "8" "04/20/2015" "Fwknop Client" "Fwknop Client" +.TH "FWKNOP" "8" "05/22/2015" "Fwknop Client" "Fwknop Client" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -164,10 +164,17 @@ rc file is a more powerful mechanism for specifying not only the HMAC key but ot .RS 4 Have \fBfwknop\fR -generate both Rijndael and HMAC keys that can be used for SPA packet encryption\&. These keys are derived from /dev/urandom and then base64 encoded before being printed to stdout, and are meant to be included within the \(lq$HOME/\&.fwknoprc\(rq file (or the file referenced by +generate both Rijndael and HMAC keys that can be used for SPA packet encryption and authentication\&. These keys are derived from /dev/urandom and then base64 encoded before being printed to stdout, and are meant to be included within the \(lq$HOME/\&.fwknoprc\(rq file (or the file referenced by \fB\-\-get\-key\fR)\&. Such keys are generally more secure than passphrases that are typed in from the command line\&. .RE .PP +\fB\-\-key\-gen\-file\fR=\fI<file>\fR +.RS 4 +Write generated keys to the specified file\&. Note that the file is overwritten if it already exists\&. If this option is not given, then +\fB\-\-key\-gen\fR +writes the keys to stdout\&. +.RE +.PP \fB\-\-key\-len\fR=\fI<length>\fR .RS 4 Specify the number of bytes for a generated Rijndael key\&. The maximum size is currently 128 bytes\&. diff --git a/server/fwknopd.8.in b/server/fwknopd.8.in index 99718ba9..807df7e9 100644 --- a/server/fwknopd.8.in +++ b/server/fwknopd.8.in @@ -2,12 +2,12 @@ .\" Title: fwknopd .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> -.\" Date: 04/20/2015 +.\" Date: 05/22/2015 .\" Manual: Fwknop Server .\" Source: Fwknop Server .\" Language: English .\" -.TH "FWKNOPD" "8" "04/20/2015" "Fwknop Server" "Fwknop Server" +.TH "FWKNOPD" "8" "05/22/2015" "Fwknop Server" "Fwknop Server" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -190,13 +190,40 @@ Override config variable values that are normally read from the file with values from the specified file\&. Multiple override config files can be given as a comma\-separated list\&. .RE .PP +\fB\-\-key\-gen\fR +.RS 4 +Have +\fBfwknopd\fR +generate both Rijndael and HMAC keys that can be used for SPA packet encryption and authentication\&. These keys are derived from /dev/urandom and then base64 encoded before being printed to stdout, and are meant to be manually included in a stanza within the +\fI@sysconfdir@/fwknop/access\&.conf\fR +file\&. Such keys are generally more secure than passphrases\&. +.RE +.PP +\fB\-\-key\-gen\-file\fR=\fI<file>\fR +.RS 4 +Write generated keys to the specified file\&. Note that the file is overwritten if it already exists\&. If this option is not given, then +\fB\-\-key\-gen\fR +writes the keys to stdout\&. +.RE +.PP +\fB\-\-key\-len\fR=\fI<length>\fR +.RS 4 +Specify the number of bytes for a generated Rijndael key\&. The maximum size is currently 128 bytes\&. +.RE +.PP +\fB\-\-hmac\-key\-len\fR=\fI<length>\fR +.RS 4 +Specify the number of bytes for a generated HMAC key\&. The maximum size is currently 128 bytes\&. +.RE +.PP \fB\-p, \-\-pid\-file\fR=\fI<pid\-file>\fR .RS 4 Specify the location of the \fIfwknopd\&.pid\fR file\&. If this option is not given, \fIfwknopd\fR -will use the compile\-time default location (typically \*(Aq@localstatedir@/fwknop/fwknopd\&.pid)\&. +will use the compile\-time default location (typically +\fI@localstatedir@/fwknop/fwknopd\&.pid\fR)\&. .RE .PP \fB\-P, \-\-pcap\-filter\fR=\fI<filter>\fR From 833dc7e4f6e8f19eb6eebc086cb204a217c36be0 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 24 May 2015 10:16:20 -0700 Subject: [PATCH 111/219] added client-rc results --- test/afl/results/2.6.7/136d017/client-rc | 26 ++++++++++++++++++ .../136d017/client-rc-plot/exec_speed.png | Bin 0 -> 36845 bytes .../136d017/client-rc-plot/high_freq.png | Bin 0 -> 21086 bytes .../2.6.7/136d017/client-rc-plot/index.html | 10 +++++++ .../2.6.7/136d017/client-rc-plot/low_freq.png | Bin 0 -> 11143 bytes 5 files changed, 36 insertions(+) create mode 100644 test/afl/results/2.6.7/136d017/client-rc create mode 100644 test/afl/results/2.6.7/136d017/client-rc-plot/exec_speed.png create mode 100644 test/afl/results/2.6.7/136d017/client-rc-plot/high_freq.png create mode 100644 test/afl/results/2.6.7/136d017/client-rc-plot/index.html create mode 100644 test/afl/results/2.6.7/136d017/client-rc-plot/low_freq.png diff --git a/test/afl/results/2.6.7/136d017/client-rc b/test/afl/results/2.6.7/136d017/client-rc new file mode 100644 index 00000000..cbb52d60 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/client-rc @@ -0,0 +1,26 @@ + + american fuzzy lop 1.77b (fwknop,fwknoprc,136d017) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 9 days, 1 hrs, 42 min, 49 sec │ cycles done : 134 │ +│ last new path : 0 days, 23 hrs, 3 min, 35 sec │ total paths : 2085 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 1803* (86.47%) │ map density : 2605 (3.97%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 3.06 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : havoc │ favored paths : 213 (10.22%) │ +│ stage execs : 29.4k/30.0k (97.93%) │ new edges on : 370 (17.75%) │ +│ total execs : 2.10G │ total crashes : 0 (0 unique) │ +│ exec speed : 2637/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 191/31.8M, 21/31.8M, 21/31.8M │ levels : 26 │ +│ byte flips : 0/3.97M, 1/2.68M, 4/2.81M │ pending : 0 │ +│ arithmetics : 65/145M, 4/14.6M, 0/674k │ pend fav : 0 │ +│ known ints : 14/13.5M, 7/73.2M, 6/123M │ own finds : 2084 │ +│ dictionary : 0/0, 0/0, 251/158M │ imported : n/a │ +│ havoc : 1418/590M, 43/877M │ variable : 566 │ +│ trim : 9.37%/1.32M, 33.98% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:104%] + diff --git a/test/afl/results/2.6.7/136d017/client-rc-plot/exec_speed.png b/test/afl/results/2.6.7/136d017/client-rc-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..b30495342a42dd4853df63f4ec539ce88ae6093b GIT binary patch literal 36845 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 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/client-rc-plot/high_freq.png b/test/afl/results/2.6.7/136d017/client-rc-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..52f4f5484af03829870c1c394f8f59afb8865e86 GIT binary patch literal 21086 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 Iol`;+0H~8#tpET3 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/client-rc-plot/index.html b/test/afl/results/2.6.7/136d017/client-rc-plot/index.html new file mode 100644 index 00000000..88a65762 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/client-rc-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknop,fwknoprc,136d017</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Sun May 24 10:13:59 PDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.7/136d017/client-rc-plot/low_freq.png b/test/afl/results/2.6.7/136d017/client-rc-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..505e4e0fc269b8372e8392aa14275bcdb14a2c27 GIT binary patch literal 11143 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 literal 0 HcmV?d00001 From 98f852b5af1084561a9a01337724d63168130c94 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 24 May 2015 11:00:52 -0700 Subject: [PATCH 112/219] added server-conf fuzzing results --- test/afl/results/2.6.7/136d017/server-conf | 26 ++++++++++++++++++ .../136d017/server-conf-plot/exec_speed.png | Bin 0 -> 18121 bytes .../136d017/server-conf-plot/high_freq.png | Bin 0 -> 20550 bytes .../2.6.7/136d017/server-conf-plot/index.html | 10 +++++++ .../136d017/server-conf-plot/low_freq.png | Bin 0 -> 9785 bytes 5 files changed, 36 insertions(+) create mode 100644 test/afl/results/2.6.7/136d017/server-conf create mode 100644 test/afl/results/2.6.7/136d017/server-conf-plot/exec_speed.png create mode 100644 test/afl/results/2.6.7/136d017/server-conf-plot/high_freq.png create mode 100644 test/afl/results/2.6.7/136d017/server-conf-plot/index.html create mode 100644 test/afl/results/2.6.7/136d017/server-conf-plot/low_freq.png diff --git a/test/afl/results/2.6.7/136d017/server-conf b/test/afl/results/2.6.7/136d017/server-conf new file mode 100644 index 00000000..62c0f2df --- /dev/null +++ b/test/afl/results/2.6.7/136d017/server-conf @@ -0,0 +1,26 @@ + + american fuzzy lop 1.77b (fwknopd,fwknopd.conf,136d017) + +┌─ process timing ─────────────────────────────────────┬─ overall results ─────┐ +│ run time : 3 days, 15 hrs, 54 min, 4 sec │ cycles done : 72 │ +│ last new path : 0 days, 9 hrs, 21 min, 30 sec │ total paths : 571 │ +│ last uniq crash : none seen yet │ uniq crashes : 0 │ +│ last uniq hang : none seen yet │ uniq hangs : 0 │ +├─ cycle progress ────────────────────┬─ map coverage ─┴───────────────────────┤ +│ now processing : 318 (55.69%) │ map density : 858 (1.31%) │ +│ paths timed out : 0 (0.00%) │ count coverage : 2.85 bits/tuple │ +├─ stage progress ────────────────────┼─ findings in depth ────────────────────┤ +│ now trying : splice 15 │ favored paths : 34 (5.95%) │ +│ stage execs : 1872/2000 (93.60%) │ new edges on : 77 (13.49%) │ +│ total execs : 382M │ total crashes : 0 (0 unique) │ +│ exec speed : 1212/sec │ total hangs : 0 (0 unique) │ +├─ fuzzing strategy yields ───────────┴───────────────┬─ path geometry ────────┤ +│ bit flips : 92/9.89M, 10/9.89M, 10/9.89M │ levels : 14 │ +│ byte flips : 0/1.24M, 0/1.16M, 0/1.16M │ pending : 0 │ +│ arithmetics : 18/64.1M, 0/6.97M, 0/172k │ pend fav : 0 │ +│ known ints : 9/6.45M, 2/31.9M, 5/51.1M │ own finds : 570 │ +│ dictionary : 0/0, 0/0, 39/58.6M │ imported : n/a │ +│ havoc : 385/54.4M, 3/74.9M │ variable : 0 │ +│ trim : 14.59%/377k, 6.64% ├────────────────────────┘ +^C────────────────────────────────────────────────────┘ [cpu:109%] + diff --git a/test/afl/results/2.6.7/136d017/server-conf-plot/exec_speed.png b/test/afl/results/2.6.7/136d017/server-conf-plot/exec_speed.png new file mode 100644 index 0000000000000000000000000000000000000000..21b1ec8cdaced4ef9f548b415c4cf28b3cb5f166 GIT binary patch literal 18121 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 TT+#M#dnEo=Mx^M?2cQ2B->Z0+ literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/server-conf-plot/high_freq.png b/test/afl/results/2.6.7/136d017/server-conf-plot/high_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..430e9ef447a41992ab4d46309fca7daa0b2097e9 GIT binary patch literal 20550 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 FO#stxH0b~U literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/server-conf-plot/index.html b/test/afl/results/2.6.7/136d017/server-conf-plot/index.html new file mode 100644 index 00000000..2acdea3d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/server-conf-plot/index.html @@ -0,0 +1,10 @@ +<table style="font-family: 'Trebuchet MS', 'Tahoma', 'Arial', 'Helvetica'"> +<tr><td style="width: 18ex"><b>Banner:</b></td><td>fwknopd,fwknopd.conf,136d017</td></tr> +<tr><td><b>Directory:</b></td><td>.</td></tr> +<tr><td><b>Generated on:</b></td><td>Sun May 24 10:59:33 PDT 2015</td></tr> +</table> +<p> +<img src="high_freq.png" width=1000 height=300><p> +<img src="low_freq.png" width=1000 height=200><p> +<img src="exec_speed.png" width=1000 height=200> + diff --git a/test/afl/results/2.6.7/136d017/server-conf-plot/low_freq.png b/test/afl/results/2.6.7/136d017/server-conf-plot/low_freq.png new file mode 100644 index 0000000000000000000000000000000000000000..47d3c86435d521c84c63d87dd095af1b65f2c9ff GIT binary patch literal 9785 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 VXbTqSZzpA}{0)`sS-<H&`X8Dp(yagh literal 0 HcmV?d00001 From 73f22bab16516d58f61fd6fb1c631edc4c6ab587 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 28 May 2015 16:03:54 -0400 Subject: [PATCH 113/219] added cumulative afl-cov web coverage report for 136d017 --- .../136d017/cumulative-afl-cov-web/amber.png | Bin 0 -> 141 bytes .../client/config_init.c.func-sort-c.html | 185 ++ .../client/config_init.c.func.html | 185 ++ .../client/config_init.c.gcov.html | 2757 +++++++++++++++++ .../client/fwknop.c.func-sort-c.html | 153 + .../client/fwknop.c.func.html | 153 + .../client/fwknop.c.gcov.html | 1440 +++++++++ .../client/getpasswd.c.func-sort-c.html | 93 + .../client/getpasswd.c.func.html | 93 + .../client/getpasswd.c.gcov.html | 382 +++ .../http_resolve_host.c.func-sort-c.html | 97 + .../client/http_resolve_host.c.func.html | 97 + .../client/http_resolve_host.c.gcov.html | 649 ++++ .../client/index-sort-b.html | 179 ++ .../client/index-sort-f.html | 179 ++ .../client/index-sort-l.html | 179 ++ .../cumulative-afl-cov-web/client/index.html | 179 ++ .../client/log_msg.c.func-sort-c.html | 93 + .../client/log_msg.c.func.html | 93 + .../client/log_msg.c.gcov.html | 201 ++ .../client/spa_comm.c.func-sort-c.html | 117 + .../client/spa_comm.c.func.html | 117 + .../client/spa_comm.c.gcov.html | 869 ++++++ .../client/utils.c.func-sort-c.html | 113 + .../client/utils.c.func.html | 113 + .../client/utils.c.gcov.html | 456 +++ .../cumulative-afl-cov-web/emerald.png | Bin 0 -> 141 bytes .../136d017/cumulative-afl-cov-web/gcov.css | 519 ++++ .../136d017/cumulative-afl-cov-web/glass.png | Bin 0 -> 167 bytes .../cumulative-afl-cov-web/index-sort-b.html | 131 + .../cumulative-afl-cov-web/index-sort-f.html | 131 + .../cumulative-afl-cov-web/index-sort-l.html | 131 + .../136d017/cumulative-afl-cov-web/index.html | 131 + .../lib/base64.c.func-sort-c.html | 93 + .../lib/base64.c.func.html | 93 + .../lib/base64.c.gcov.html | 224 ++ .../lib/cipher_funcs.c.func-sort-c.html | 109 + .../lib/cipher_funcs.c.func.html | 109 + .../lib/cipher_funcs.c.gcov.html | 502 +++ .../lib/digest.c.func-sort-c.html | 121 + .../lib/digest.c.func.html | 121 + .../lib/digest.c.gcov.html | 242 ++ .../lib/fko_client_timeout.c.func-sort-c.html | 89 + .../lib/fko_client_timeout.c.func.html | 89 + .../lib/fko_client_timeout.c.gcov.html | 215 ++ .../lib/fko_decode.c.func-sort-c.html | 137 + .../lib/fko_decode.c.func.html | 137 + .../lib/fko_decode.c.gcov.html | 743 +++++ .../lib/fko_digest.c.func-sort-c.html | 121 + .../lib/fko_digest.c.func.html | 121 + .../lib/fko_digest.c.gcov.html | 383 +++ .../lib/fko_encode.c.func-sort-c.html | 93 + .../lib/fko_encode.c.func.html | 93 + .../lib/fko_encode.c.gcov.html | 411 +++ .../lib/fko_encryption.c.func-sort-c.html | 197 ++ .../lib/fko_encryption.c.func.html | 197 ++ .../lib/fko_encryption.c.gcov.html | 1280 ++++++++ .../lib/fko_error.c.func-sort-c.html | 89 + .../lib/fko_error.c.func.html | 89 + .../lib/fko_error.c.gcov.html | 606 ++++ .../lib/fko_funcs.c.func-sort-c.html | 121 + .../lib/fko_funcs.c.func.html | 121 + .../lib/fko_funcs.c.gcov.html | 720 +++++ .../lib/fko_hmac.c.func-sort-c.html | 101 + .../lib/fko_hmac.c.func.html | 101 + .../lib/fko_hmac.c.gcov.html | 416 +++ .../lib/fko_message.c.func-sort-c.html | 121 + .../lib/fko_message.c.func.html | 121 + .../lib/fko_message.c.gcov.html | 449 +++ .../lib/fko_nat_access.c.func-sort-c.html | 89 + .../lib/fko_nat_access.c.func.html | 89 + .../lib/fko_nat_access.c.gcov.html | 214 ++ .../lib/fko_rand_value.c.func-sort-c.html | 89 + .../lib/fko_rand_value.c.func.html | 89 + .../lib/fko_rand_value.c.gcov.html | 266 ++ .../lib/fko_server_auth.c.func-sort-c.html | 89 + .../lib/fko_server_auth.c.func.html | 89 + .../lib/fko_server_auth.c.gcov.html | 200 ++ .../lib/fko_timestamp.c.func-sort-c.html | 89 + .../lib/fko_timestamp.c.func.html | 89 + .../lib/fko_timestamp.c.gcov.html | 179 ++ .../lib/fko_user.c.func-sort-c.html | 93 + .../lib/fko_user.c.func.html | 93 + .../lib/fko_user.c.gcov.html | 295 ++ .../lib/fko_util.c.func-sort-c.html | 153 + .../lib/fko_util.c.func.html | 153 + .../lib/fko_util.c.gcov.html | 872 ++++++ .../lib/gpgme_funcs.c.func-sort-c.html | 105 + .../lib/gpgme_funcs.c.func.html | 105 + .../lib/gpgme_funcs.c.gcov.html | 627 ++++ .../lib/hmac.c.func-sort-c.html | 165 + .../lib/hmac.c.func.html | 165 + .../lib/hmac.c.gcov.html | 517 ++++ .../lib/index-sort-b.html | 407 +++ .../lib/index-sort-f.html | 407 +++ .../lib/index-sort-l.html | 407 +++ .../cumulative-afl-cov-web/lib/index.html | 407 +++ .../lib/md5.c.func-sort-c.html | 97 + .../lib/md5.c.func.html | 97 + .../lib/md5.c.gcov.html | 363 +++ .../lib/rijndael.c.func-sort-c.html | 125 + .../lib/rijndael.c.func.html | 125 + .../lib/rijndael.c.gcov.html | 702 +++++ .../lib/sha1.c.func-sort-c.html | 101 + .../lib/sha1.c.func.html | 101 + .../lib/sha1.c.gcov.html | 376 +++ .../lib/sha2.c.func-sort-c.html | 129 + .../lib/sha2.c.func.html | 129 + .../lib/sha2.c.gcov.html | 1069 +++++++ .../lib/strlcat.c.func-sort-c.html | 85 + .../lib/strlcat.c.func.html | 85 + .../lib/strlcat.c.gcov.html | 159 + .../lib/strlcpy.c.func-sort-c.html | 85 + .../lib/strlcpy.c.func.html | 85 + .../lib/strlcpy.c.gcov.html | 155 + .../136d017/cumulative-afl-cov-web/ruby.png | Bin 0 -> 141 bytes .../server/access.c.func-sort-c.html | 201 ++ .../server/access.c.func.html | 201 ++ .../server/access.c.gcov.html | 2153 +++++++++++++ .../server/config_init.c.func-sort-c.html | 125 + .../server/config_init.c.func.html | 125 + .../server/config_init.c.gcov.html | 1384 +++++++++ .../server/extcmd.c.func-sort-c.html | 105 + .../server/extcmd.c.func.html | 105 + .../server/extcmd.c.gcov.html | 779 +++++ .../fw_util_firewalld.c.func-sort-c.html | 197 ++ .../server/fw_util_firewalld.c.func.html | 197 ++ .../server/fw_util_firewalld.c.gcov.html | 1702 ++++++++++ .../server/fwknopd.c.func-sort-c.html | 133 + .../server/fwknopd.c.func.html | 133 + .../server/fwknopd.c.gcov.html | 1102 +++++++ .../server/fwknopd_errors.c.func-sort-c.html | 93 + .../server/fwknopd_errors.c.func.html | 93 + .../server/fwknopd_errors.c.gcov.html | 217 ++ .../server/incoming_spa.c.func-sort-c.html | 101 + .../server/incoming_spa.c.func.html | 101 + .../server/incoming_spa.c.gcov.html | 1063 +++++++ .../server/index-sort-b.html | 275 ++ .../server/index-sort-f.html | 275 ++ .../server/index-sort-l.html | 275 ++ .../cumulative-afl-cov-web/server/index.html | 275 ++ .../server/log_msg.c.func-sort-c.html | 97 + .../server/log_msg.c.func.html | 97 + .../server/log_msg.c.gcov.html | 303 ++ .../server/pcap_capture.c.func-sort-c.html | 85 + .../server/pcap_capture.c.func.html | 85 + .../server/pcap_capture.c.gcov.html | 427 +++ .../server/process_packet.c.func-sort-c.html | 85 + .../server/process_packet.c.func.html | 85 + .../server/process_packet.c.gcov.html | 323 ++ .../server/replay_cache.c.func-sort-c.html | 117 + .../server/replay_cache.c.func.html | 117 + .../server/replay_cache.c.gcov.html | 857 +++++ .../server/sig_handler.c.func-sort-c.html | 93 + .../server/sig_handler.c.func.html | 93 + .../server/sig_handler.c.gcov.html | 262 ++ .../server/tcp_server.c.func-sort-c.html | 85 + .../server/tcp_server.c.func.html | 85 + .../server/tcp_server.c.gcov.html | 342 ++ .../server/udp_server.c.func-sort-c.html | 85 + .../server/udp_server.c.func.html | 85 + .../server/udp_server.c.gcov.html | 330 ++ .../server/utils.c.func-sort-c.html | 109 + .../server/utils.c.func.html | 109 + .../server/utils.c.gcov.html | 366 +++ .../136d017/cumulative-afl-cov-web/snow.png | Bin 0 -> 141 bytes .../136d017/cumulative-afl-cov-web/updown.png | Bin 0 -> 117 bytes 167 files changed, 45932 insertions(+) create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/amber.png create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/emerald.png create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/glass.png create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/ruby.png create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/snow.png create mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/updown.png diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/amber.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/amber.png new file mode 100644 index 0000000000000000000000000000000000000000..2cab170d8359081983a4e343848dfe06bc490f12 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^G2tW}LqE04T&+ z;1OBOz`!j8!i<;h*8KqrvZOouIx;Y9?C1WI$O`1M1^9%x{(levWG<?@RR^TFJY5_^ cDsCkw0NG3oj8E0?f%GwWy85}Sb4q9e09Jz{aR2}S literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html new file mode 100644 index 00000000..8f880a65 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html @@ -0,0 +1,185 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/config_init.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">310</td> + <td class="headerCovTableEntry">917</td> + <td class="headerCovTableEntryLo">33.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">26</td> + <td class="headerCovTableEntryLo">53.8 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">222</td> + <td class="headerCovTableEntry">582</td> + <td class="headerCovTableEntryLo">38.1 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="config_init.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#500">is_rc_section</a></td> + <td class="coverFnHi">152374</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#547">is_rc_param</a></td> + <td class="coverFnHi">109180</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#898">parse_rc_param</a></td> + <td class="coverFnHi">108412</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#399">lookup_var_by_name</a></td> + <td class="coverFnHi">108412</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#474">is_yes_str</a></td> + <td class="coverFnHi">12210</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#742">parse_time_offset</a></td> + <td class="coverFnHi">9046</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#638">set_rc_file</a></td> + <td class="coverFnHi">2890</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1498">process_rc_section</a></td> + <td class="coverFnHi">2890</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1920">set_defaults</a></td> + <td class="coverFnHi">2085</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1942">config_init</a></td> + <td class="coverFnHi">2085</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1769">validate_options</a></td> + <td class="coverFnHi">609</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#277">add_var_to_bitmask</a></td> + <td class="coverFnHi">609</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#205">generate_keys</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#695">keys_status</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#2440">usage</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#248">var_is_critical</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#364">ask_overwrite_var</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1471">add_multiple_vars_to_rc</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1596">update_rc</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#458">bool_to_yesno</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#330">bitmask_has_var</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#303">remove_var_from_bitmask</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#428">lookup_var_by_position</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1300">add_single_var_to_rc</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#590">dump_configured_stanzas_from_rcfile</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#788">create_fwknoprc</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html new file mode 100644 index 00000000..5e3cf207 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html @@ -0,0 +1,185 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/config_init.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">310</td> + <td class="headerCovTableEntry">917</td> + <td class="headerCovTableEntryLo">33.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">26</td> + <td class="headerCovTableEntryLo">53.8 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">222</td> + <td class="headerCovTableEntry">582</td> + <td class="headerCovTableEntryLo">38.1 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="config_init.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1471">add_multiple_vars_to_rc</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1300">add_single_var_to_rc</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#277">add_var_to_bitmask</a></td> + <td class="coverFnHi">609</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#364">ask_overwrite_var</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#330">bitmask_has_var</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#458">bool_to_yesno</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1942">config_init</a></td> + <td class="coverFnHi">2085</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#788">create_fwknoprc</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#590">dump_configured_stanzas_from_rcfile</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#205">generate_keys</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#547">is_rc_param</a></td> + <td class="coverFnHi">109180</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#500">is_rc_section</a></td> + <td class="coverFnHi">152374</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#474">is_yes_str</a></td> + <td class="coverFnHi">12210</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#695">keys_status</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#399">lookup_var_by_name</a></td> + <td class="coverFnHi">108412</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#428">lookup_var_by_position</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#898">parse_rc_param</a></td> + <td class="coverFnHi">108412</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#742">parse_time_offset</a></td> + <td class="coverFnHi">9046</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1498">process_rc_section</a></td> + <td class="coverFnHi">2890</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#303">remove_var_from_bitmask</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1920">set_defaults</a></td> + <td class="coverFnHi">2085</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#638">set_rc_file</a></td> + <td class="coverFnHi">2890</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1596">update_rc</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#2440">usage</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1769">validate_options</a></td> + <td class="coverFnHi">609</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#248">var_is_critical</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html new file mode 100644 index 00000000..883a0845 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html @@ -0,0 +1,2757 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/config_init.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - config_init.c<span style="font-size: 80%;"> (source / <a href="config_init.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">310</td> + <td class="headerCovTableEntry">917</td> + <td class="headerCovTableEntryLo">33.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">26</td> + <td class="headerCovTableEntryLo">53.8 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">222</td> + <td class="headerCovTableEntry">582</td> + <td class="headerCovTableEntryLo">38.1 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /**</a> +<span class="lineNum"> 2 </span> : : ****************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * \file config_init.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * \brief Command-line and config file processing for fwknop client. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ****************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : +<span class="lineNum"> 32 </span> : : #include &quot;fwknop_common.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;netinet_common.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;config_init.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;cmd_opts.h&quot; +<span class="lineNum"> 36 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 37 </span> : : #include &lt;sys/stat.h&gt; +<span class="lineNum"> 38 </span> : : #include &lt;fcntl.h&gt; +<span class="lineNum"> 39 </span> : : +<span class="lineNum"> 40 </span> : : #ifdef WIN32 +<span class="lineNum"> 41 </span> : : #define STDIN_FILENO 0 +<span class="lineNum"> 42 </span> : : #endif +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : #define RC_PARAM_TEMPLATE &quot;%-24s %s\n&quot; /*!&lt; Template to define param = val in a rc file */ +<span class="lineNum"> 45 </span> : : #define RC_SECTION_DEFAULT &quot;default&quot; /*!&lt; Name of the default section in fwknoprc */ +<span class="lineNum"> 46 </span> : : #define RC_SECTION_TEMPLATE &quot;[%s]\n&quot; /*!&lt; Template to define a section in a rc file */ +<span class="lineNum"> 47 </span> : : #define FWKNOPRC_OFLAGS (O_WRONLY|O_CREAT|O_EXCL) /*!&lt; O_flags used to create an fwknoprc file with the open function */ +<span class="lineNum"> 48 </span> : : #define FWKNOPRC_MODE (S_IRUSR|S_IWUSR) /*!&lt; mode used to create an fwknoprc file with the open function */ +<span class="lineNum"> 49 </span> : : #define PARAM_YES_VALUE &quot;Y&quot; /*!&lt; String which represents a YES value for a parameter in fwknoprc */ +<span class="lineNum"> 50 </span> : : #define PARAM_NO_VALUE &quot;N&quot; /*!&lt; String which represents a NO value for a parameter in fwknoprc */ +<span class="lineNum"> 51 </span> : : #define POSITION_TO_BITMASK(x) ((uint32_t)(1) &lt;&lt; ((x) % 32)) /*!&lt; Macro do get a bitmask from a position */ +<span class="lineNum"> 52 </span> : : #define BITMASK_ARRAY_SIZE 2 /*!&lt; Number of 32bits integer used to handle bitmask in the fko_var_bitmask_t structure */ +<span class="lineNum"> 53 </span> : : #define LF_CHAR 0x0A /*!&lt; Hexadecimal value associated to the LF char */ +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : #ifdef HAVE_C_UNIT_TESTS +<span class="lineNum"> 56 </span> : : #include &quot;cunit_common.h&quot; +<span class="lineNum"> 57 </span> : : DECLARE_TEST_SUITE(config_init, &quot;Config init test suite&quot;); +<span class="lineNum"> 58 </span> : : #endif +<span class="lineNum"> 59 </span> : : +<span class="lineNum"> 60 </span> : : /** +<span class="lineNum"> 61 </span> : : * Structure to handle long bitmask. +<span class="lineNum"> 62 </span> : : * +<span class="lineNum"> 63 </span> : : * The structure is built as an array of unsigned 32 bits integer to be able to +<span class="lineNum"> 64 </span> : : * easily increase the size of the bitmask. +<span class="lineNum"> 65 </span> : : * This bitmask can contains at most (BITMASK_ARRAY_SIZE * 32) values. +<span class="lineNum"> 66 </span> : : */ +<span class="lineNum"> 67 </span> : : typedef struct fko_var_bitmask +<span class="lineNum"> 68 </span> : : { +<span class="lineNum"> 69 </span> : : uint32_t dw[BITMASK_ARRAY_SIZE]; /*!&lt; Array of bitmasks */ +<span class="lineNum"> 70 </span> : : } fko_var_bitmask_t; +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : /** +<span class="lineNum"> 73 </span> : : * Structure to handle a variable in an rcfile (name and value) +<span class="lineNum"> 74 </span> : : */ +<span class="lineNum"> 75 </span> : : typedef struct rc_file_param +<span class="lineNum"> 76 </span> : : { +<span class="lineNum"> 77 </span> : : char name[MAX_LINE_LEN]; /*!&lt; Variable name */ +<span class="lineNum"> 78 </span> : : char val[MAX_LINE_LEN]; /*!&lt; Variable value */ +<span class="lineNum"> 79 </span> : : } rc_file_param_t; +<span class="lineNum"> 80 </span> : : +<span class="lineNum"> 81 </span> : : /** +<span class="lineNum"> 82 </span> : : * Structure to identify a configuration variable (name and position) +<span class="lineNum"> 83 </span> : : */ +<span class="lineNum"> 84 </span> : : typedef struct fko_var +<span class="lineNum"> 85 </span> : : { +<span class="lineNum"> 86 </span> : : const char name[32]; /*!&lt; Variable name in fwknoprc */ +<span class="lineNum"> 87 </span> : : unsigned int pos; /*!&lt; Variable position from the fwknop_cli_arg_t enumeration */ +<span class="lineNum"> 88 </span> : : } fko_var_t; +<span class="lineNum"> 89 </span> : : +<span class="lineNum"> 90 </span> : : enum +<span class="lineNum"> 91 </span> : : { +<span class="lineNum"> 92 </span> : : FWKNOP_CLI_FIRST_ARG = 0, +<span class="lineNum"> 93 </span> : : FWKNOP_CLI_ARG_DIGEST_TYPE = 0, +<span class="lineNum"> 94 </span> : : FWKNOP_CLI_ARG_SPA_SERVER_PROTO, +<span class="lineNum"> 95 </span> : : FWKNOP_CLI_ARG_SPA_SERVER_PORT, +<span class="lineNum"> 96 </span> : : FWKNOP_CLI_ARG_SPA_SOURCE_PORT, +<span class="lineNum"> 97 </span> : : FWKNOP_CLI_ARG_FW_TIMEOUT, +<span class="lineNum"> 98 </span> : : FWKNOP_CLI_ARG_ALLOW_IP, +<span class="lineNum"> 99 </span> : : FWKNOP_CLI_ARG_TIME_OFFSET, +<span class="lineNum"> 100 </span> : : FWKNOP_CLI_ARG_ENCRYPTION_MODE, +<span class="lineNum"> 101 </span> : : FWKNOP_CLI_ARG_USE_GPG, +<span class="lineNum"> 102 </span> : : FWKNOP_CLI_ARG_USE_GPG_AGENT, +<span class="lineNum"> 103 </span> : : FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW, +<span class="lineNum"> 104 </span> : : FWKNOP_CLI_ARG_GPG_RECIPIENT, +<span class="lineNum"> 105 </span> : : FWKNOP_CLI_ARG_GPG_SIGNER, +<span class="lineNum"> 106 </span> : : FWKNOP_CLI_ARG_GPG_HOMEDIR, +<span class="lineNum"> 107 </span> : : FWKNOP_CLI_ARG_GPG_EXE_PATH, +<span class="lineNum"> 108 </span> : : FWKNOP_CLI_ARG_SPOOF_USER, +<span class="lineNum"> 109 </span> : : FWKNOP_CLI_ARG_SPOOF_SOURCE_IP, +<span class="lineNum"> 110 </span> : : FWKNOP_CLI_ARG_ACCESS, +<span class="lineNum"> 111 </span> : : FWKNOP_CLI_ARG_SPA_SERVER, +<span class="lineNum"> 112 </span> : : FWKNOP_CLI_ARG_RAND_PORT, +<span class="lineNum"> 113 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL, +<span class="lineNum"> 114 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, +<span class="lineNum"> 115 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW, +<span class="lineNum"> 116 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64, +<span class="lineNum"> 117 </span> : : FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE, +<span class="lineNum"> 118 </span> : : FWKNOP_CLI_ARG_KEY_HMAC_BASE64, +<span class="lineNum"> 119 </span> : : FWKNOP_CLI_ARG_KEY_HMAC, +<span class="lineNum"> 120 </span> : : FWKNOP_CLI_ARG_USE_HMAC, +<span class="lineNum"> 121 </span> : : FWKNOP_CLI_ARG_USE_WGET_USER_AGENT, +<span class="lineNum"> 122 </span> : : FWKNOP_CLI_ARG_KEY_FILE, +<span class="lineNum"> 123 </span> : : FWKNOP_CLI_ARG_HMAC_KEY_FILE, +<span class="lineNum"> 124 </span> : : FWKNOP_CLI_ARG_NAT_ACCESS, +<span class="lineNum"> 125 </span> : : FWKNOP_CLI_ARG_HTTP_USER_AGENT, +<span class="lineNum"> 126 </span> : : FWKNOP_CLI_ARG_RESOLVE_URL, +<span class="lineNum"> 127 </span> : : FWKNOP_CLI_ARG_NAT_LOCAL, +<span class="lineNum"> 128 </span> : : FWKNOP_CLI_ARG_NAT_RAND_PORT, +<span class="lineNum"> 129 </span> : : FWKNOP_CLI_ARG_NAT_PORT, +<span class="lineNum"> 130 </span> : : FWKNOP_CLI_ARG_VERBOSE, +<span class="lineNum"> 131 </span> : : FWKNOP_CLI_ARG_RESOLVE_IP_HTTP, +<span class="lineNum"> 132 </span> : : FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS, +<span class="lineNum"> 133 </span> : : FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY, +<span class="lineNum"> 134 </span> : : FWKNOP_CLI_ARG_WGET_CMD, +<span class="lineNum"> 135 </span> : : FWKNOP_CLI_ARG_NO_SAVE_ARGS, +<span class="lineNum"> 136 </span> : : FWKNOP_CLI_LAST_ARG +<span class="lineNum"> 137 </span> : : } fwknop_cli_arg_t; +<span class="lineNum"> 138 </span> : : +<span class="lineNum"> 139 </span> : : static fko_var_t fko_var_array[FWKNOP_CLI_LAST_ARG] = +<span class="lineNum"> 140 </span> : : { +<span class="lineNum"> 141 </span> : : { &quot;DIGEST_TYPE&quot;, FWKNOP_CLI_ARG_DIGEST_TYPE }, +<span class="lineNum"> 142 </span> : : { &quot;SPA_SERVER_PROTO&quot;, FWKNOP_CLI_ARG_SPA_SERVER_PROTO }, +<span class="lineNum"> 143 </span> : : { &quot;SPA_SERVER_PORT&quot;, FWKNOP_CLI_ARG_SPA_SERVER_PORT }, +<span class="lineNum"> 144 </span> : : { &quot;SPA_SOURCE_PORT&quot;, FWKNOP_CLI_ARG_SPA_SOURCE_PORT }, +<span class="lineNum"> 145 </span> : : { &quot;FW_TIMEOUT&quot;, FWKNOP_CLI_ARG_FW_TIMEOUT }, +<span class="lineNum"> 146 </span> : : { &quot;ALLOW_IP&quot;, FWKNOP_CLI_ARG_ALLOW_IP }, +<span class="lineNum"> 147 </span> : : { &quot;TIME_OFFSET&quot;, FWKNOP_CLI_ARG_TIME_OFFSET }, +<span class="lineNum"> 148 </span> : : { &quot;ENCRYPTION_MODE&quot;, FWKNOP_CLI_ARG_ENCRYPTION_MODE }, +<span class="lineNum"> 149 </span> : : { &quot;USE_GPG&quot;, FWKNOP_CLI_ARG_USE_GPG }, +<span class="lineNum"> 150 </span> : : { &quot;USE_GPG_AGENT&quot;, FWKNOP_CLI_ARG_USE_GPG_AGENT }, +<span class="lineNum"> 151 </span> : : { &quot;GPG_RECIPIENT&quot;, FWKNOP_CLI_ARG_GPG_RECIPIENT }, +<span class="lineNum"> 152 </span> : : { &quot;GPG_SIGNER&quot;, FWKNOP_CLI_ARG_GPG_SIGNER }, +<span class="lineNum"> 153 </span> : : { &quot;GPG_HOMEDIR&quot;, FWKNOP_CLI_ARG_GPG_HOMEDIR }, +<span class="lineNum"> 154 </span> : : { &quot;GPG_EXE&quot;, FWKNOP_CLI_ARG_GPG_EXE_PATH }, +<span class="lineNum"> 155 </span> : : { &quot;GPG_SIGNING_PW&quot;, FWKNOP_CLI_ARG_GPG_SIGNING_PW }, +<span class="lineNum"> 156 </span> : : { &quot;GPG_SIGNING_PW_BASE64&quot;, FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64 }, +<span class="lineNum"> 157 </span> : : { &quot;GPG_NO_SIGNING_PW&quot;, FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW }, +<span class="lineNum"> 158 </span> : : { &quot;SPOOF_USER&quot;, FWKNOP_CLI_ARG_SPOOF_USER }, +<span class="lineNum"> 159 </span> : : { &quot;SPOOF_SOURCE_IP&quot;, FWKNOP_CLI_ARG_SPOOF_SOURCE_IP }, +<span class="lineNum"> 160 </span> : : { &quot;ACCESS&quot;, FWKNOP_CLI_ARG_ACCESS }, +<span class="lineNum"> 161 </span> : : { &quot;SPA_SERVER&quot;, FWKNOP_CLI_ARG_SPA_SERVER }, +<span class="lineNum"> 162 </span> : : { &quot;RAND_PORT&quot;, FWKNOP_CLI_ARG_RAND_PORT }, +<span class="lineNum"> 163 </span> : : { &quot;KEY&quot;, FWKNOP_CLI_ARG_KEY_RIJNDAEL }, +<span class="lineNum"> 164 </span> : : { &quot;KEY_BASE64&quot;, FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64 }, +<span class="lineNum"> 165 </span> : : { &quot;HMAC_DIGEST_TYPE&quot;, FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE }, +<span class="lineNum"> 166 </span> : : { &quot;HMAC_KEY_BASE64&quot;, FWKNOP_CLI_ARG_KEY_HMAC_BASE64 }, +<span class="lineNum"> 167 </span> : : { &quot;HMAC_KEY&quot;, FWKNOP_CLI_ARG_KEY_HMAC }, +<span class="lineNum"> 168 </span> : : { &quot;USE_HMAC&quot;, FWKNOP_CLI_ARG_USE_HMAC }, +<span class="lineNum"> 169 </span> : : { &quot;USE_WGET_USER_AGENT&quot;, FWKNOP_CLI_ARG_USE_WGET_USER_AGENT }, +<span class="lineNum"> 170 </span> : : { &quot;KEY_FILE&quot;, FWKNOP_CLI_ARG_KEY_FILE }, +<span class="lineNum"> 171 </span> : : { &quot;HMAC_KEY_FILE&quot;, FWKNOP_CLI_ARG_HMAC_KEY_FILE }, +<span class="lineNum"> 172 </span> : : { &quot;NAT_ACCESS&quot;, FWKNOP_CLI_ARG_NAT_ACCESS }, +<span class="lineNum"> 173 </span> : : { &quot;HTTP_USER_AGENT&quot;, FWKNOP_CLI_ARG_HTTP_USER_AGENT }, +<span class="lineNum"> 174 </span> : : { &quot;RESOLVE_URL&quot;, FWKNOP_CLI_ARG_RESOLVE_URL }, +<span class="lineNum"> 175 </span> : : { &quot;NAT_LOCAL&quot;, FWKNOP_CLI_ARG_NAT_LOCAL }, +<span class="lineNum"> 176 </span> : : { &quot;NAT_RAND_PORT&quot;, FWKNOP_CLI_ARG_NAT_RAND_PORT }, +<span class="lineNum"> 177 </span> : : { &quot;NAT_PORT&quot;, FWKNOP_CLI_ARG_NAT_PORT }, +<span class="lineNum"> 178 </span> : : { &quot;VERBOSE&quot;, FWKNOP_CLI_ARG_VERBOSE }, +<span class="lineNum"> 179 </span> : : { &quot;RESOLVE_IP_HTTP&quot;, FWKNOP_CLI_ARG_RESOLVE_IP_HTTP }, +<span class="lineNum"> 180 </span> : : { &quot;RESOLVE_IP_HTTPS&quot;, FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS }, +<span class="lineNum"> 181 </span> : : { &quot;RESOLVE_HTTP_ONLY&quot;, FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY }, +<span class="lineNum"> 182 </span> : : { &quot;WGET_CMD&quot;, FWKNOP_CLI_ARG_WGET_CMD }, +<span class="lineNum"> 183 </span> : : { &quot;NO_SAVE_ARGS&quot;, FWKNOP_CLI_ARG_NO_SAVE_ARGS } +<span class="lineNum"> 184 </span> : : }; +<span class="lineNum"> 185 </span> : : +<span class="lineNum"> 186 </span> : : /* Array to define which conf. variables are critical and should not be +<span class="lineNum"> 187 </span> : : * overwritten when a stanza is updated using the --save-rc-stanza arg +<span class="lineNum"> 188 </span> : : * without the user validation */ +<span class="lineNum"> 189 </span> : : static int critical_var_array[] = +<span class="lineNum"> 190 </span> : : { +<span class="lineNum"> 191 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL, +<span class="lineNum"> 192 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, +<span class="lineNum"> 193 </span> : : FWKNOP_CLI_ARG_KEY_HMAC, +<span class="lineNum"> 194 </span> : : FWKNOP_CLI_ARG_KEY_HMAC_BASE64, +<span class="lineNum"> 195 </span> : : FWKNOP_CLI_ARG_GPG_RECIPIENT, +<span class="lineNum"> 196 </span> : : FWKNOP_CLI_ARG_GPG_SIGNER, +<span class="lineNum"> 197 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW, +<span class="lineNum"> 198 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64 +<span class="lineNum"> 199 </span> : : }; +<span class="lineNum"> 200 </span> : : +<span class="lineNum"> 201 </span> : : /** +<span class="lineNum"> 202 </span> : : * @brief Generate Rijndael + HMAC keys from /dev/random (base64 encoded) and exit. +<span class="lineNum"> 203 </span> : : * +<span class="lineNum"> 204 </span> : : * @param options FKO command line option structure +<a name="205"><span class="lineNum"> 205 </span> : : */</a> +<span class="lineNum"> 206 </span> : : static void +<span class="lineNum"> 207 </span> :<span class="lineCov"> 566 : generate_keys(fko_cli_options_t *options)</span> +<span class="lineNum"> 208 </span> : : { +<span class="lineNum"> 209 </span> : : int res; +<span class="lineNum"> 210 </span> : : +<span class="lineNum"> 211 </span> : : /* If asked, we have to generate the keys */ +<span class="lineNum"> 212 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;key_gen)</span> +<span class="lineNum"> 213 </span> : : { +<span class="lineNum"> 214 </span> : : /* Zero out the key buffers */ +<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : memset(&amp;(options-&gt;key_base64), 0x00, sizeof(options-&gt;key_base64));</span> +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : memset(&amp;(options-&gt;hmac_key_base64), 0x00, sizeof(options-&gt;hmac_key_base64));</span> +<span class="lineNum"> 217 </span> : : +<span class="lineNum"> 218 </span> : : /* Generate the key through libfko */ +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : res = fko_key_gen(options-&gt;key_base64, options-&gt;key_len,</span> +<span class="lineNum"> 220 </span> : : options-&gt;hmac_key_base64, options-&gt;hmac_key_len, +<span class="lineNum"> 221 </span> : : options-&gt;hmac_type); +<span class="lineNum"> 222 </span> : : +<span class="lineNum"> 223 </span> : : /* Exit upon key generation failure*/ +<span class="lineNum"> 224 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 225 </span> : : { +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;%s: fko_key_gen: Error %i - %s&quot;,</span> +<span class="lineNum"> 227 </span> : : MY_NAME, res, fko_errstr(res)); +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 229 </span> : : } +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> : : /* Everything is ok - nothing to do */ +<span class="lineNum"> 232 </span> : : else; +<span class="lineNum"> 233 </span> : : } +<span class="lineNum"> 234 </span> : : +<span class="lineNum"> 235 </span> : : /* No key generation asked - nothing to do */ +<span class="lineNum"> 236 </span> : : else; +<span class="lineNum"> 237 </span> :<span class="lineCov"> 566 : }</span> +<span class="lineNum"> 238 </span> : : +<span class="lineNum"> 239 </span> : : /** +<span class="lineNum"> 240 </span> : : * @brief Check if a variable is a critical var. +<span class="lineNum"> 241 </span> : : * +<span class="lineNum"> 242 </span> : : * This function check the critical_var_array table to find if the variable +<span class="lineNum"> 243 </span> : : * position is available. +<span class="lineNum"> 244 </span> : : * +<span class="lineNum"> 245 </span> : : * @param var_pos Fwknop configuration variable position +<span class="lineNum"> 246 </span> : : * +<span class="lineNum"> 247 </span> : : * @return 1 the variable is critical, 0 otherwise +<a name="248"><span class="lineNum"> 248 </span> : : */</a> +<span class="lineNum"> 249 </span> : : static int +<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : var_is_critical(short var_pos)</span> +<span class="lineNum"> 251 </span> : : { +<span class="lineNum"> 252 </span> : : int ndx; /* Index on the critical_var_array array */ +<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : int var_found = 0;</span> +<span class="lineNum"> 254 </span> : : +<span class="lineNum"> 255 </span> : : /* Go through the array of critical vars */ +<span class="lineNum"> 256 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(critical_var_array) ; ndx++)</span> +<span class="lineNum"> 257 </span> : : { +<span class="lineNum"> 258 </span> : : /* and check if we find it */ +<span class="lineNum"> 259 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (var_pos == critical_var_array[ndx])</span> +<span class="lineNum"> 260 </span> : : { +<span class="lineNum"> 261 </span> : : var_found = 1; +<span class="lineNum"> 262 </span> : : break; +<span class="lineNum"> 263 </span> : : } +<span class="lineNum"> 264 </span> : : } +<span class="lineNum"> 265 </span> : : +<span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : return var_found;</span> +<span class="lineNum"> 267 </span> : : } +<span class="lineNum"> 268 </span> : : +<span class="lineNum"> 269 </span> : : /** +<span class="lineNum"> 270 </span> : : * @brief Add a variable to a bitmask +<span class="lineNum"> 271 </span> : : * +<span class="lineNum"> 272 </span> : : * This function adds the bitmask associated to a variable position, to a +<span class="lineNum"> 273 </span> : : * bitmask. +<span class="lineNum"> 274 </span> : : * +<span class="lineNum"> 275 </span> : : * @param var_pos Fwknop configuration variable position +<span class="lineNum"> 276 </span> : : * @param bm fko_var_bitmask_t variable to update +<a name="277"><span class="lineNum"> 277 </span> : : */</a> +<span class="lineNum"> 278 </span> : : static void +<span class="lineNum"> 279 </span> :<span class="lineCov"> 609 : add_var_to_bitmask(short var_pos, fko_var_bitmask_t *bm)</span> +<span class="lineNum"> 280 </span> : : { +<span class="lineNum"> 281 </span> : : unsigned int bitmask_ndx; +<span class="lineNum"> 282 </span> : : +<span class="lineNum"> 283 </span> : : /* Look for the index on the uint32_t array we have to process */ +<span class="lineNum"> 284 </span> :<span class="lineCov"> 609 : bitmask_ndx = var_pos / 32;</span> +<span class="lineNum"> 285 </span> : : +<span class="lineNum"> 286 </span> : : /* Set the bitmask according to the index found */ +<span class="lineNum"> 287 </span> [<span class="branchCov" title="Branch 0 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 609 : if (bitmask_ndx &lt; BITMASK_ARRAY_SIZE)</span> +<span class="lineNum"> 288 </span> :<span class="lineCov"> 609 : bm-&gt;dw[bitmask_ndx] |= POSITION_TO_BITMASK(var_pos);</span> +<span class="lineNum"> 289 </span> : : +<span class="lineNum"> 290 </span> : : /* The index on the uint32_t bitmask is invalid */ +<span class="lineNum"> 291 </span> : : else +<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;add_var_to_bitmask() : Bad variable position %u&quot;, var_pos);</span> +<span class="lineNum"> 293 </span> :<span class="lineCov"> 609 : }</span> +<span class="lineNum"> 294 </span> : : +<span class="lineNum"> 295 </span> : : /** +<span class="lineNum"> 296 </span> : : * @brief Remove a variable from a bitmask +<span class="lineNum"> 297 </span> : : * +<span class="lineNum"> 298 </span> : : * This function removes the bitmask associated to the variable position from a +<span class="lineNum"> 299 </span> : : * bitmask. +<span class="lineNum"> 300 </span> : : * +<span class="lineNum"> 301 </span> : : * @param var_pos Fwknop configuration variable position +<span class="lineNum"> 302 </span> : : * @param bm fko_var_bitmask_t structure to update +<a name="303"><span class="lineNum"> 303 </span> : : */</a> +<span class="lineNum"> 304 </span> : : static void +<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : remove_var_from_bitmask(short var_pos, fko_var_bitmask_t *bm)</span> +<span class="lineNum"> 306 </span> : : { +<span class="lineNum"> 307 </span> : : unsigned int bitmask_ndx; +<span class="lineNum"> 308 </span> : : +<span class="lineNum"> 309 </span> : : /* Look for the index on the uint32_t array we have to process */ +<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : bitmask_ndx = var_pos / 32;</span> +<span class="lineNum"> 311 </span> : : +<span class="lineNum"> 312 </span> : : /* Set the bitmask according to the index found */ +<span class="lineNum"> 313 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bitmask_ndx &lt; BITMASK_ARRAY_SIZE)</span> +<span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : bm-&gt;dw[bitmask_ndx] &amp;= ~POSITION_TO_BITMASK(var_pos);</span> +<span class="lineNum"> 315 </span> : : +<span class="lineNum"> 316 </span> : : /* The index on the uint32_t bitmask is invalid */ +<span class="lineNum"> 317 </span> : : else +<span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;remove_from_bitmask() : Bad variable position %u&quot;, var_pos);</span> +<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 320 </span> : : +<span class="lineNum"> 321 </span> : : /** +<span class="lineNum"> 322 </span> : : * @brief Return whether a variable is available in a bitmask +<span class="lineNum"> 323 </span> : : * +<span class="lineNum"> 324 </span> : : * The variable bitmask is looked for in the bitmask. +<span class="lineNum"> 325 </span> : : * +<span class="lineNum"> 326 </span> : : * @param var_pos Fwknop configuration variable position +<span class="lineNum"> 327 </span> : : * @param bm fko_var_bitmask_t structure to check +<span class="lineNum"> 328 </span> : : * +<span class="lineNum"> 329 </span> : : * @return 1 if the bitmsk contains the variable, 0 otherwise. +<a name="330"><span class="lineNum"> 330 </span> : : */</a> +<span class="lineNum"> 331 </span> : : static int +<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : bitmask_has_var(short var_pos, fko_var_bitmask_t *bm)</span> +<span class="lineNum"> 333 </span> : : { +<span class="lineNum"> 334 </span> : : unsigned int bitmask_ndx; +<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : int var_found = 0;</span> +<span class="lineNum"> 336 </span> : : +<span class="lineNum"> 337 </span> : : /* Look for the index on the uint32_t array we have to process */ +<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : bitmask_ndx = var_pos / 32;</span> +<span class="lineNum"> 339 </span> : : +<span class="lineNum"> 340 </span> : : /* Check the bitmask according to the index found */ +<span class="lineNum"> 341 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bitmask_ndx &lt; BITMASK_ARRAY_SIZE)</span> +<span class="lineNum"> 342 </span> : : { +<span class="lineNum"> 343 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( bm-&gt;dw[bitmask_ndx] &amp; POSITION_TO_BITMASK(var_pos) )</span> +<span class="lineNum"> 344 </span> :<span class="lineNoCov"> 0 : var_found = 1;</span> +<span class="lineNum"> 345 </span> : : } +<span class="lineNum"> 346 </span> : : +<span class="lineNum"> 347 </span> : : /* The index on the uint32_t bitmask is invalid */ +<span class="lineNum"> 348 </span> : : else +<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;bitmask_has_var_ndx() : Bad variable position %u&quot;, var_pos);</span> +<span class="lineNum"> 350 </span> : : +<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : return var_found;</span> +<span class="lineNum"> 352 </span> : : } +<span class="lineNum"> 353 </span> : : +<span class="lineNum"> 354 </span> : : /** +<span class="lineNum"> 355 </span> : : * @brief Ask the user if a variable must be overwritten or not for a specific stanza +<span class="lineNum"> 356 </span> : : * +<span class="lineNum"> 357 </span> : : * If the user sets other chars than a 'y' char, we assume he does not want to +<span class="lineNum"> 358 </span> : : * overwrite the variable. +<span class="lineNum"> 359 </span> : : * +<span class="lineNum"> 360 </span> : : * @param var Variable which should be overwritten +<span class="lineNum"> 361 </span> : : * @param stanza Stanza where the variable should be overwritten +<span class="lineNum"> 362 </span> : : * +<span class="lineNum"> 363 </span> : : * @return 1 if the user wants to overwrite the variable, 0 otherwise +<a name="364"><span class="lineNum"> 364 </span> : : */</a> +<span class="lineNum"> 365 </span> : : static int +<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : ask_overwrite_var(const char *var, const char *stanza)</span> +<span class="lineNum"> 367 </span> : : { +<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : char user_input = 'N';</span> +<span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : int overwrite = 0;</span> +<span class="lineNum"> 370 </span> : : int c; +<span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : int first_char = 1;;</span> +<span class="lineNum"> 372 </span> : : +<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 374 </span> : : &quot;Variable '%s' found in stanza '%s'. Overwrite [N/y] ? &quot;, +<span class="lineNum"> 375 </span> : : var, stanza); +<span class="lineNum"> 376 </span> : : +<span class="lineNum"> 377 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ((c=getchar()) != LF_CHAR)</span> +<span class="lineNum"> 378 </span> : : { +<span class="lineNum"> 379 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (first_char)</span> +<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : user_input = c;</span> +<span class="lineNum"> 381 </span> : : first_char = 0; +<span class="lineNum"> 382 </span> : : } +<span class="lineNum"> 383 </span> : : +<span class="lineNum"> 384 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (user_input == 'y')</span> +<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : overwrite = 1;</span> +<span class="lineNum"> 386 </span> : : +<span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : return overwrite;</span> +<span class="lineNum"> 388 </span> : : } +<span class="lineNum"> 389 </span> : : +<span class="lineNum"> 390 </span> : : /** +<span class="lineNum"> 391 </span> : : * @brief Lookup a variable in the variable array according to its name +<span class="lineNum"> 392 </span> : : * +<span class="lineNum"> 393 </span> : : * This function parses the fko_var_array table and try to find a match +<span class="lineNum"> 394 </span> : : * for the user string, which indicates we have found a configuration variable. +<span class="lineNum"> 395 </span> : : * +<span class="lineNum"> 396 </span> : : * @param str String to compare against every fwknop conf variables +<span class="lineNum"> 397 </span> : : * +<span class="lineNum"> 398 </span> : : * @return A pointer on the variable structure, or NULL if not found +<a name="399"><span class="lineNum"> 399 </span> : : */</a> +<span class="lineNum"> 400 </span> : : static fko_var_t * +<span class="lineNum"> 401 </span> :<span class="lineCov"> 108412 : lookup_var_by_name(const char *var_name)</span> +<span class="lineNum"> 402 </span> : : { +<span class="lineNum"> 403 </span> : : short ndx; /* Index on the the fko_var_array table */ +<span class="lineNum"> 404 </span> :<span class="lineCov"> 108412 : fko_var_t *var = NULL;</span> +<span class="lineNum"> 405 </span> : : +<span class="lineNum"> 406 </span> : : /* Check str against each variable available in fko_var_array */ +<span class="lineNum"> 407 </span> [<span class="branchCov" title="Branch 0 was taken 2851125 times"> + </span><span class="branchCov" title="Branch 1 was taken 42775 times"> + </span>]:<span class="lineCov"> 2893900 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(fko_var_array) ; ndx++)</span> +<span class="lineNum"> 408 </span> : : { +<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 65637 times"> + </span><span class="branchCov" title="Branch 1 was taken 2785488 times"> + </span>]:<span class="lineCov"> 2851125 : if (CONF_VAR_IS(var_name, fko_var_array[ndx].name))</span> +<span class="lineNum"> 410 </span> : : { +<span class="lineNum"> 411 </span> :<span class="lineCov"> 65637 : var = &amp;(fko_var_array[ndx]);</span> +<span class="lineNum"> 412 </span> :<span class="lineCov"> 65637 : break;</span> +<span class="lineNum"> 413 </span> : : } +<span class="lineNum"> 414 </span> : : } +<span class="lineNum"> 415 </span> : : +<span class="lineNum"> 416 </span> :<span class="lineCov"> 108412 : return var;</span> +<span class="lineNum"> 417 </span> : : } +<span class="lineNum"> 418 </span> : : +<span class="lineNum"> 419 </span> : : /** +<span class="lineNum"> 420 </span> : : * @brief Lookup a variable in the variable array according to its position +<span class="lineNum"> 421 </span> : : * +<span class="lineNum"> 422 </span> : : * This function parses the fko_var_array table and try to find a match +<span class="lineNum"> 423 </span> : : * for the position, which indicates we have found a configuration variable. +<span class="lineNum"> 424 </span> : : * +<span class="lineNum"> 425 </span> : : * @param var_pos Position to compare against every fwknop conf variables +<span class="lineNum"> 426 </span> : : * +<span class="lineNum"> 427 </span> : : * @return A pointer on the variable structure, or NULL if not found +<a name="428"><span class="lineNum"> 428 </span> : : */</a> +<span class="lineNum"> 429 </span> : : static fko_var_t * +<span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : lookup_var_by_position(short var_pos)</span> +<span class="lineNum"> 431 </span> : : { +<span class="lineNum"> 432 </span> : : short ndx; /* Index on the the fko_var_array table */ +<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : fko_var_t *var = NULL;</span> +<span class="lineNum"> 434 </span> : : +<span class="lineNum"> 435 </span> : : /* Check str against each variable available in fko_var_array */ +<span class="lineNum"> 436 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(fko_var_array) ; ndx++)</span> +<span class="lineNum"> 437 </span> : : { +<span class="lineNum"> 438 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (var_pos == fko_var_array[ndx].pos)</span> +<span class="lineNum"> 439 </span> : : { +<span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : var = &amp;(fko_var_array[ndx]);</span> +<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 442 </span> : : } +<span class="lineNum"> 443 </span> : : } +<span class="lineNum"> 444 </span> : : +<span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : return var;</span> +<span class="lineNum"> 446 </span> : : } +<span class="lineNum"> 447 </span> : : +<span class="lineNum"> 448 </span> : : /** +<span class="lineNum"> 449 </span> : : * @brief Set a string as a Yes or No value according to a boolean (0 or 1). +<span class="lineNum"> 450 </span> : : * +<span class="lineNum"> 451 </span> : : * This function checks whether a value is set to zero or not, and updates a +<span class="lineNum"> 452 </span> : : * string to a YES_NO parameter value. +<span class="lineNum"> 453 </span> : : * The string must be zeroed before being passed to the function. +<span class="lineNum"> 454 </span> : : * +<span class="lineNum"> 455 </span> : : * @param val Variable to check +<span class="lineNum"> 456 </span> : : * @param s String where to store the YES_NO value. +<span class="lineNum"> 457 </span> : : * @param len Number of bytes avaialble for the s buffer. +<a name="458"><span class="lineNum"> 458 </span> : : */</a> +<span class="lineNum"> 459 </span> : : static void +<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(int val, char* s, size_t len)</span> +<span class="lineNum"> 461 </span> : : { +<span class="lineNum"> 462 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (val == 0)</span> +<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : strlcpy(s, PARAM_NO_VALUE, len);</span> +<span class="lineNum"> 464 </span> : : else +<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : strlcpy(s, PARAM_YES_VALUE, len);</span> +<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> : : /** +<span class="lineNum"> 469 </span> : : * @brief Is a string formatted as YES string. +<span class="lineNum"> 470 </span> : : * +<span class="lineNum"> 471 </span> : : * @param s String to check for a YES string +<span class="lineNum"> 472 </span> : : * +<span class="lineNum"> 473 </span> : : * @return 1 if the string match the YES pattern, 0 otherwise +<a name="474"><span class="lineNum"> 474 </span> : : */</a> +<span class="lineNum"> 475 </span> : : static int +<span class="lineNum"> 476 </span> :<span class="lineCov"> 12210 : is_yes_str(const char *s)</span> +<span class="lineNum"> 477 </span> : : { +<span class="lineNum"> 478 </span> : : int valid; +<span class="lineNum"> 479 </span> : : +<span class="lineNum"> 480 </span> [<span class="branchCov" title="Branch 0 was taken 8849 times"> + </span><span class="branchCov" title="Branch 1 was taken 3361 times"> + </span>]:<span class="lineCov"> 12210 : if (strcasecmp(PARAM_YES_VALUE, s) == 0)</span> +<span class="lineNum"> 481 </span> : : valid = 1; +<span class="lineNum"> 482 </span> : : else +<span class="lineNum"> 483 </span> :<span class="lineCov"> 8849 : valid = 0;</span> +<span class="lineNum"> 484 </span> : : +<span class="lineNum"> 485 </span> :<span class="lineCov"> 12210 : return valid;</span> +<span class="lineNum"> 486 </span> : : } +<span class="lineNum"> 487 </span> : : +<span class="lineNum"> 488 </span> : : /** +<span class="lineNum"> 489 </span> : : * @brief Check if a section is in a line and fetch it. +<span class="lineNum"> 490 </span> : : * +<span class="lineNum"> 491 </span> : : * This function parses a NULL terminated string in order to find a section, +<span class="lineNum"> 492 </span> : : * something like [mysection]. If it succeeds, the stanza is retrieved. +<span class="lineNum"> 493 </span> : : * +<span class="lineNum"> 494 </span> : : * @param line String containing a line from the rc file to check for a section +<span class="lineNum"> 495 </span> : : * @param line_size size of the line buffer +<span class="lineNum"> 496 </span> : : * @param rc_section String to store the section found +<span class="lineNum"> 497 </span> : : * @param rc_section_size Size of the rc_section buffer +<span class="lineNum"> 498 </span> : : * +<span class="lineNum"> 499 </span> : : * @return 1 if a section was found, 0 otherwise +<a name="500"><span class="lineNum"> 500 </span> : : */</a> +<span class="lineNum"> 501 </span> : : static int +<span class="lineNum"> 502 </span> :<span class="lineCov"> 152374 : is_rc_section(const char* line, uint16_t line_size, char* rc_section, uint16_t rc_section_size)</span> +<span class="lineNum"> 503 </span> : : { +<span class="lineNum"> 504 </span> : : char *ndx, *emark; +<span class="lineNum"> 505 </span> :<span class="lineCov"> 152374 : char buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 506 </span> :<span class="lineCov"> 152374 : int section_found = 0;</span> +<span class="lineNum"> 507 </span> : : +<span class="lineNum"> 508 </span> [<span class="branchCov" title="Branch 0 was taken 152374 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 152374 : if (line_size &lt; sizeof(buf))</span> +<span class="lineNum"> 509 </span> : : { +<span class="lineNum"> 510 </span> :<span class="lineCov"> 152374 : strlcpy(buf, line, sizeof(buf));</span> +<span class="lineNum"> 511 </span> : : +<span class="lineNum"> 512 </span> :<span class="lineCov"> 152374 : ndx = buf;</span> +<span class="lineNum"> 513 </span> : : +<span class="lineNum"> 514 </span> [<span class="branchCov" title="Branch 1 was taken 4214 times"> + </span><span class="branchCov" title="Branch 2 was taken 152374 times"> + </span>]:<span class="lineCov"> 156588 : while(isspace(*ndx))</span> +<span class="lineNum"> 515 </span> :<span class="lineCov"> 4214 : ndx++;</span> +<span class="lineNum"> 516 </span> : : +<span class="lineNum"> 517 </span> [<span class="branchCov" title="Branch 0 was taken 12545 times"> + </span><span class="branchCov" title="Branch 1 was taken 139829 times"> + </span>]:<span class="lineCov"> 152374 : if(*ndx == '[')</span> +<span class="lineNum"> 518 </span> : : { +<span class="lineNum"> 519 </span> :<span class="lineCov"> 12545 : ndx++;</span> +<span class="lineNum"> 520 </span> :<span class="lineCov"> 12545 : emark = strchr(ndx, ']');</span> +<span class="lineNum"> 521 </span> [<span class="branchCov" title="Branch 0 was taken 8786 times"> + </span><span class="branchCov" title="Branch 1 was taken 3759 times"> + </span>]:<span class="lineCov"> 12545 : if(emark != NULL)</span> +<span class="lineNum"> 522 </span> : : { +<span class="lineNum"> 523 </span> :<span class="lineCov"> 8786 : *emark = '\0';</span> +<span class="lineNum"> 524 </span> :<span class="lineCov"> 8786 : memset(rc_section, 0, rc_section_size);</span> +<span class="lineNum"> 525 </span> :<span class="lineCov"> 8786 : strlcpy(rc_section, ndx, rc_section_size);</span> +<span class="lineNum"> 526 </span> :<span class="lineCov"> 8786 : section_found = 1;</span> +<span class="lineNum"> 527 </span> : : } +<span class="lineNum"> 528 </span> : : else +<span class="lineNum"> 529 </span> : : { +<span class="lineNum"> 530 </span> : : } +<span class="lineNum"> 531 </span> : : } +<span class="lineNum"> 532 </span> : : } +<span class="lineNum"> 533 </span> : : else +<span class="lineNum"> 534 </span> : : { +<span class="lineNum"> 535 </span> : : } +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> :<span class="lineCov"> 152374 : return section_found;</span> +<span class="lineNum"> 538 </span> : : } +<span class="lineNum"> 539 </span> : : +<span class="lineNum"> 540 </span> : : /** +<span class="lineNum"> 541 </span> : : * @brief Grab a variable and its value from a rc line. +<span class="lineNum"> 542 </span> : : * +<span class="lineNum"> 543 </span> : : * @param line Line to parse for a variable +<span class="lineNum"> 544 </span> : : * @param param Parameter structure where to store the variable name and its value +<span class="lineNum"> 545 </span> : : * +<span class="lineNum"> 546 </span> : : * @return 0 if no variable has been found, 1 otherwise. +<a name="547"><span class="lineNum"> 547 </span> : : */</a> +<span class="lineNum"> 548 </span> : : static int +<span class="lineNum"> 549 </span> :<span class="lineCov"> 109180 : is_rc_param(const char *line, rc_file_param_t *param)</span> +<span class="lineNum"> 550 </span> : : { +<span class="lineNum"> 551 </span> :<span class="lineCov"> 109180 : char var[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 552 </span> :<span class="lineCov"> 109180 : char val[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 553 </span> : : char *ndx; +<span class="lineNum"> 554 </span> : : +<span class="lineNum"> 555 </span> : : memset(param, 0, sizeof(*param)); +<span class="lineNum"> 556 </span> : : +<span class="lineNum"> 557 </span> : : /* Fetch the variable and its value */ +<span class="lineNum"> 558 </span> [<span class="branchCov" title="Branch 0 was taken 768 times"> + </span><span class="branchCov" title="Branch 1 was taken 108412 times"> + </span>]:<span class="lineCov"> 109180 : if(sscanf(line, &quot;%s %[^ ;\t\n\r#]&quot;, var, val) != 2)</span> +<span class="lineNum"> 559 </span> : : { +<span class="lineNum"> 560 </span> :<span class="lineCov"> 768 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 561 </span> : : &quot;*Invalid entry in '%s'&quot;, line); +<span class="lineNum"> 562 </span> :<span class="lineCov"> 768 : return 0;</span> +<span class="lineNum"> 563 </span> : : } +<span class="lineNum"> 564 </span> : : +<span class="lineNum"> 565 </span> : : /* Remove any colon that may be on the end of the var */ +<span class="lineNum"> 566 </span> [<span class="branchCov" title="Branch 0 was taken 1331 times"> + </span><span class="branchCov" title="Branch 1 was taken 107081 times"> + </span>]:<span class="lineCov"> 108412 : if((ndx = strrchr(var, ':')) != NULL)</span> +<span class="lineNum"> 567 </span> :<span class="lineCov"> 1331 : *ndx = '\0';</span> +<span class="lineNum"> 568 </span> : : +<span class="lineNum"> 569 </span> : : /* Even though sscanf should automatically add a terminating +<span class="lineNum"> 570 </span> : : * NULL byte, an assumption is made that the input arrays are +<span class="lineNum"> 571 </span> : : * big enough, so we'll force a terminating NULL byte regardless +<span class="lineNum"> 572 </span> : : */ +<span class="lineNum"> 573 </span> :<span class="lineCov"> 108412 : var[MAX_LINE_LEN-1] = 0x0;</span> +<span class="lineNum"> 574 </span> :<span class="lineCov"> 108412 : val[MAX_LINE_LEN-1] = 0x0;</span> +<span class="lineNum"> 575 </span> : : +<span class="lineNum"> 576 </span> : : /* Copy back the val and var in the structure */ +<span class="lineNum"> 577 </span> :<span class="lineCov"> 108412 : strlcpy(param-&gt;name, var, sizeof(param-&gt;name));</span> +<span class="lineNum"> 578 </span> :<span class="lineCov"> 108412 : strlcpy(param-&gt;val, val, sizeof(param-&gt;val));</span> +<span class="lineNum"> 579 </span> : : +<span class="lineNum"> 580 </span> :<span class="lineCov"> 108412 : return 1;</span> +<span class="lineNum"> 581 </span> : : } +<span class="lineNum"> 582 </span> : : +<span class="lineNum"> 583 </span> : : /** +<span class="lineNum"> 584 </span> : : * @brief Dump available stanzas from a fwknoprc file +<span class="lineNum"> 585 </span> : : * +<span class="lineNum"> 586 </span> : : * This function parses a rcfile and looks for configured stanzas. +<span class="lineNum"> 587 </span> : : * They are all displayed except the default stanza. +<span class="lineNum"> 588 </span> : : * +<span class="lineNum"> 589 </span> : : * @param rcfile full path to the rcfile to parse +<a name="590"><span class="lineNum"> 590 </span> : : */</a> +<span class="lineNum"> 591 </span> : : static int +<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : dump_configured_stanzas_from_rcfile(const char* rcfile)</span> +<span class="lineNum"> 593 </span> : : { +<span class="lineNum"> 594 </span> : : FILE *rc; +<span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : char line[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 596 </span> :<span class="lineNoCov"> 0 : char curr_stanza[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 597 </span> : : +<span class="lineNum"> 598 </span> : : /* Open the rcfile in read mode */ +<span class="lineNum"> 599 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc = fopen(rcfile, &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 600 </span> : : { +<span class="lineNum"> 601 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to open rc file: %s: %s&quot;,</span> +<span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> +<span class="lineNum"> 603 </span> : : +<span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> +<span class="lineNum"> 605 </span> : : } +<span class="lineNum"> 606 </span> : : +<span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;The following stanzas are configured in %s :&quot;, rcfile);</span> +<span class="lineNum"> 608 </span> : : +<span class="lineNum"> 609 </span> : : /* Parse the rcfile line by line to find stanza */ +<span class="lineNum"> 610 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ((fgets(line, MAX_LINE_LEN, rc)) != NULL)</span> +<span class="lineNum"> 611 </span> : : { +<span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : line[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 613 </span> : : +<span class="lineNum"> 614 </span> : : /* Get past comments and empty lines (note: we only look at the first +<span class="lineNum"> 615 </span> : : * character. */ +<span class="lineNum"> 616 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_EMPTY_LINE(line[0]))</span> +<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] +<span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 618 </span> : : +<span class="lineNum"> 619 </span> : : /* Check which section we are working on */ +<span class="lineNum"> 620 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (is_rc_section(line, strlen(line), curr_stanza, sizeof(curr_stanza)))</span> +<span class="lineNum"> 621 </span> : : { +<span class="lineNum"> 622 </span> : : /* Print the stanza and continue - we exclude the default stanza */ +<span class="lineNum"> 623 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (strcasecmp(curr_stanza, RC_SECTION_DEFAULT) != 0)</span> +<span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot; - %s&quot;, curr_stanza);</span> +<span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 626 </span> : : } +<span class="lineNum"> 627 </span> : : +<span class="lineNum"> 628 </span> : : /* Nothing we care about */ +<span class="lineNum"> 629 </span> : : else; +<span class="lineNum"> 630 </span> : : } +<span class="lineNum"> 631 </span> : : +<span class="lineNum"> 632 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> +<span class="lineNum"> 633 </span> : : +<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> +<span class="lineNum"> 635 </span> : : } +<span class="lineNum"> 636 </span> : : +<span class="lineNum"> 637 </span> : : /* Assign path to fwknop rc file +<a name="638"><span class="lineNum"> 638 </span> : : */</a> +<span class="lineNum"> 639 </span> : : static void +<span class="lineNum"> 640 </span> :<span class="lineCov"> 2890 : set_rc_file(char *rcfile, fko_cli_options_t *options)</span> +<span class="lineNum"> 641 </span> : : { +<span class="lineNum"> 642 </span> : : int rcf_offset; +<span class="lineNum"> 643 </span> : : char *homedir; +<span class="lineNum"> 644 </span> : : +<span class="lineNum"> 645 </span> : : memset(rcfile, 0x0, MAX_PATH_LEN); +<span class="lineNum"> 646 </span> : : +<span class="lineNum"> 647 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(options-&gt;rc_file[0] == 0x0)</span> +<span class="lineNum"> 648 </span> : : { +<span class="lineNum"> 649 </span> : : #ifdef WIN32 +<span class="lineNum"> 650 </span> : : homedir = getenv(&quot;USERPROFILE&quot;); +<span class="lineNum"> 651 </span> : : #else +<span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : homedir = getenv(&quot;HOME&quot;);</span> +<span class="lineNum"> 653 </span> : : #endif +<span class="lineNum"> 654 </span> : : +<span class="lineNum"> 655 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(homedir == NULL)</span> +<span class="lineNum"> 656 </span> : : { +<span class="lineNum"> 657 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Warning: Unable to determine HOME directory.\n&quot;</span> +<span class="lineNum"> 658 </span> : : &quot; No .fwknoprc file processed.&quot;); +<span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 660 </span> : : } +<span class="lineNum"> 661 </span> : : +<span class="lineNum"> 662 </span> :<span class="lineNoCov"> 0 : strlcpy(rcfile, homedir, MAX_PATH_LEN);</span> +<span class="lineNum"> 663 </span> : : +<span class="lineNum"> 664 </span> :<span class="lineNoCov"> 0 : rcf_offset = strlen(rcfile);</span> +<span class="lineNum"> 665 </span> : : +<span class="lineNum"> 666 </span> : : /* Sanity check the path to .fwknoprc. +<span class="lineNum"> 667 </span> : : * The preceeding path plus the path separator and '.fwknoprc' = 11 +<span class="lineNum"> 668 </span> : : * cannot exceed MAX_PATH_LEN. +<span class="lineNum"> 669 </span> : : */ +<span class="lineNum"> 670 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rcf_offset &gt; (MAX_PATH_LEN - 11))</span> +<span class="lineNum"> 671 </span> : : { +<span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Warning: Path to .fwknoprc file is too long.\n&quot;</span> +<span class="lineNum"> 673 </span> : : &quot; No .fwknoprc file processed.&quot;); +<span class="lineNum"> 674 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 675 </span> : : } +<span class="lineNum"> 676 </span> : : +<span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : rcfile[rcf_offset] = PATH_SEP;</span> +<span class="lineNum"> 678 </span> :<span class="lineNoCov"> 0 : strlcat(rcfile, &quot;.fwknoprc&quot;, MAX_PATH_LEN);</span> +<span class="lineNum"> 679 </span> : : } +<span class="lineNum"> 680 </span> : : else +<span class="lineNum"> 681 </span> : : { +<span class="lineNum"> 682 </span> :<span class="lineCov"> 2890 : strlcpy(rcfile, options-&gt;rc_file, MAX_PATH_LEN);</span> +<span class="lineNum"> 683 </span> : : } +<span class="lineNum"> 684 </span> : : +<span class="lineNum"> 685 </span> : : /* Check rc file permissions - if anything other than user read/write, +<span class="lineNum"> 686 </span> : : * then throw a warning. This change was made to help ensure that the +<span class="lineNum"> 687 </span> : : * client consumes a proper rc file with strict permissions set (thanks +<span class="lineNum"> 688 </span> : : * to Fernando Arnaboldi from IOActive for pointing this out). +<span class="lineNum"> 689 </span> : : */ +<span class="lineNum"> 690 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(verify_file_perms_ownership(rcfile) != 1)</span> +<span class="lineNum"> 691 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 692 </span> : : +<span class="lineNum"> 693 </span> :<span class="lineCov"> 2890 : return;</span> +<span class="lineNum"> 694 </span> : : } +<a name="695"><span class="lineNum"> 695 </span> : : </a> +<span class="lineNum"> 696 </span> : : static void +<span class="lineNum"> 697 </span> :<span class="lineCov"> 566 : keys_status(fko_cli_options_t *options)</span> +<span class="lineNum"> 698 </span> : : { +<span class="lineNum"> 699 </span> :<span class="lineCov"> 566 : FILE *key_gen_file_ptr = NULL;</span> +<span class="lineNum"> 700 </span> :<span class="lineCov"> 566 : char rcfile[MAX_PATH_LEN] = {0};</span> +<span class="lineNum"> 701 </span> : : +<span class="lineNum"> 702 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;key_gen == 1)</span> +<span class="lineNum"> 703 </span> : : { +<span class="lineNum"> 704 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;key_gen_file[0] != '\0')</span> +<span class="lineNum"> 705 </span> : : { +<span class="lineNum"> 706 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((key_gen_file_ptr = fopen(options-&gt;key_gen_file, &quot;w&quot;)) == NULL)</span> +<span class="lineNum"> 707 </span> : : { +<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Unable to create key gen file: %s: %s&quot;,</span> +<span class="lineNum"> 709 </span> :<span class="lineNoCov"> 0 : options-&gt;key_gen_file, strerror(errno));</span> +<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 711 </span> : : } +<span class="lineNum"> 712 </span> : : fprintf(key_gen_file_ptr, &quot;KEY_BASE64: %s\nHMAC_KEY_BASE64: %s\n&quot;, +<span class="lineNum"> 713 </span> :<span class="lineNoCov"> 0 : options-&gt;key_base64, options-&gt;hmac_key_base64);</span> +<span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : fclose(key_gen_file_ptr);</span> +<span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 716 </span> : : &quot;[+] Wrote Rijndael and HMAC keys to: %s&quot;, +<span class="lineNum"> 717 </span> : : options-&gt;key_gen_file); +<span class="lineNum"> 718 </span> : : } +<span class="lineNum"> 719 </span> : : else +<span class="lineNum"> 720 </span> : : { +<span class="lineNum"> 721 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;save_rc_stanza == 1)</span> +<span class="lineNum"> 722 </span> : : { +<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : set_rc_file(rcfile, options);</span> +<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 725 </span> : : &quot;[+] Wrote Rijndael and HMAC keys to rc file: %s&quot;, rcfile); +<span class="lineNum"> 726 </span> : : } +<span class="lineNum"> 727 </span> : : else +<span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 729 </span> : : &quot;KEY_BASE64: %s\nHMAC_KEY_BASE64: %s&quot;, +<span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : options-&gt;key_base64, options-&gt;hmac_key_base64);</span> +<span class="lineNum"> 731 </span> : : } +<span class="lineNum"> 732 </span> : : +<span class="lineNum"> 733 </span> : : /* Always exit out in --key-gen mode since the fwknopd server +<span class="lineNum"> 734 </span> : : * has no way to know what the new keys are +<span class="lineNum"> 735 </span> : : */ +<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : exit(EXIT_SUCCESS);</span> +<span class="lineNum"> 737 </span> : : } +<span class="lineNum"> 738 </span> :<span class="lineCov"> 566 : }</span> +<span class="lineNum"> 739 </span> : : +<span class="lineNum"> 740 </span> : : +<span class="lineNum"> 741 </span> : : /* Parse any time offset from the command line +<a name="742"><span class="lineNum"> 742 </span> : : */</a> +<span class="lineNum"> 743 </span> : : static int +<span class="lineNum"> 744 </span> :<span class="lineCov"> 9046 : parse_time_offset(const char *offset_str, int *offset)</span> +<span class="lineNum"> 745 </span> : : { +<span class="lineNum"> 746 </span> : : int i, j; +<span class="lineNum"> 747 </span> :<span class="lineCov"> 9046 : int offset_type = TIME_OFFSET_SECONDS;</span> +<span class="lineNum"> 748 </span> :<span class="lineCov"> 9046 : int os_len = strlen(offset_str);</span> +<span class="lineNum"> 749 </span> :<span class="lineCov"> 9046 : int is_err = 0;</span> +<span class="lineNum"> 750 </span> : : +<span class="lineNum"> 751 </span> :<span class="lineCov"> 9046 : char offset_digits[MAX_TIME_STR_LEN] = {0};</span> +<span class="lineNum"> 752 </span> : : +<span class="lineNum"> 753 </span> :<span class="lineCov"> 9046 : j=0;</span> +<span class="lineNum"> 754 </span> [<span class="branchCov" title="Branch 0 was taken 66192 times"> + </span><span class="branchCov" title="Branch 1 was taken 3941 times"> + </span>]:<span class="lineCov"> 70133 : for (i=0; i &lt; os_len; i++) {</span> +<span class="lineNum"> 755 </span> [<span class="branchCov" title="Branch 1 was taken 26111 times"> + </span><span class="branchCov" title="Branch 2 was taken 40081 times"> + </span>]:<span class="lineCov"> 66192 : if (isdigit(offset_str[i])) {</span> +<span class="lineNum"> 756 </span> :<span class="lineCov"> 26111 : offset_digits[j] = offset_str[i];</span> +<span class="lineNum"> 757 </span> :<span class="lineCov"> 26111 : j++;</span> +<span class="lineNum"> 758 </span> [<span class="branchCov" title="Branch 0 was taken 25020 times"> + </span><span class="branchCov" title="Branch 1 was taken 1091 times"> + </span>]:<span class="lineCov"> 26111 : if(j &gt;= MAX_TIME_STR_LEN)</span> +<span class="lineNum"> 759 </span> : : { +<span class="lineNum"> 760 </span> : : return 0; +<span class="lineNum"> 761 </span> : : } +<span class="lineNum"> 762 </span> [<span class="branchCov" title="Branch 0 was taken 38707 times"> + </span><span class="branchCov" title="Branch 1 was taken 1374 times"> + </span>]:<span class="lineCov"> 40081 : } else if (offset_str[i] == 'm' || offset_str[i] == 'M') {</span> +<span class="lineNum"> 763 </span> : : offset_type = TIME_OFFSET_MINUTES; +<span class="lineNum"> 764 </span> : : break; +<span class="lineNum"> 765 </span> [<span class="branchCov" title="Branch 0 was taken 38070 times"> + </span><span class="branchCov" title="Branch 1 was taken 637 times"> + </span>]:<span class="lineCov"> 38707 : } else if (offset_str[i] == 'h' || offset_str[i] == 'H') {</span> +<span class="lineNum"> 766 </span> : : offset_type = TIME_OFFSET_HOURS; +<span class="lineNum"> 767 </span> : : break; +<span class="lineNum"> 768 </span> [<span class="branchCov" title="Branch 0 was taken 36067 times"> + </span><span class="branchCov" title="Branch 1 was taken 2003 times"> + </span>]:<span class="lineCov"> 38070 : } else if (offset_str[i] == 'd' || offset_str[i] == 'D') {</span> +<span class="lineNum"> 769 </span> : : offset_type = TIME_OFFSET_DAYS; +<span class="lineNum"> 770 </span> : : break; +<span class="lineNum"> 771 </span> : : } +<span class="lineNum"> 772 </span> : : } +<span class="lineNum"> 773 </span> : : +<span class="lineNum"> 774 </span> :<span class="lineCov"> 7955 : offset_digits[j] = '\0';</span> +<span class="lineNum"> 775 </span> : : +<span class="lineNum"> 776 </span> [<span class="branchCov" title="Branch 0 was taken 4925 times"> + </span><span class="branchCov" title="Branch 1 was taken 3030 times"> + </span>]:<span class="lineCov"> 7955 : if (j &lt; 1)</span> +<span class="lineNum"> 777 </span> : : return 0; +<span class="lineNum"> 778 </span> : : +<span class="lineNum"> 779 </span> :<span class="lineCov"> 4925 : *offset = strtol_wrapper(offset_digits, 0, (2 &lt;&lt; 15),</span> +<span class="lineNum"> 780 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 781 </span> : : +<span class="lineNum"> 782 </span> : : /* Apply the offset_type multiplier +<span class="lineNum"> 783 </span> : : */ +<span class="lineNum"> 784 </span> :<span class="lineCov"> 4925 : *offset *= offset_type;</span> +<span class="lineNum"> 785 </span> : : +<span class="lineNum"> 786 </span> :<span class="lineCov"> 4925 : return is_err == 0 ? 1 : 0;</span> +<span class="lineNum"> 787 </span> : : } +<a name="788"><span class="lineNum"> 788 </span> : : </a> +<span class="lineNum"> 789 </span> : : static int +<span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : create_fwknoprc(const char *rcfile)</span> +<span class="lineNum"> 791 </span> : : { +<span class="lineNum"> 792 </span> :<span class="lineNoCov"> 0 : FILE *rc = NULL;</span> +<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : int rcfile_fd = -1;</span> +<span class="lineNum"> 794 </span> : : +<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;[*] Creating initial rc file: %s.&quot;, rcfile);</span> +<span class="lineNum"> 796 </span> : : +<span class="lineNum"> 797 </span> : : /* Try to create the initial rcfile with user read/write rights only. +<span class="lineNum"> 798 </span> : : * If the rcfile already exists, an error is returned */ +<span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : rcfile_fd = open(rcfile, FWKNOPRC_OFLAGS ,FWKNOPRC_MODE);</span> +<span class="lineNum"> 800 </span> : : +<span class="lineNum"> 801 </span> : : // If an error occured ... +<span class="lineNum"> 802 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (rcfile_fd == -1) {</span> +<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to create initial rc file: %s: %s&quot;,</span> +<span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> +<span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 806 </span> : : } +<span class="lineNum"> 807 </span> : : +<span class="lineNum"> 808 </span> : : // Free the rcfile descriptor +<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : close(rcfile_fd);</span> +<span class="lineNum"> 810 </span> : : +<span class="lineNum"> 811 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc = fopen(rcfile, &quot;w&quot;)) == NULL)</span> +<span class="lineNum"> 812 </span> : : { +<span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to write default setup to rcfile: %s: %s&quot;,</span> +<span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> +<span class="lineNum"> 815 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 816 </span> : : } +<span class="lineNum"> 817 </span> : : +<span class="lineNum"> 818 </span> : : fprintf(rc, +<span class="lineNum"> 819 </span> : : &quot;# .fwknoprc\n&quot; +<span class="lineNum"> 820 </span> : : &quot;##############################################################################\n&quot; +<span class="lineNum"> 821 </span> : : &quot;#\n&quot; +<span class="lineNum"> 822 </span> : : &quot;# Firewall Knock Operator (fwknop) client rc file.\n&quot; +<span class="lineNum"> 823 </span> : : &quot;#\n&quot; +<span class="lineNum"> 824 </span> : : &quot;# This file contains user-specific fwknop client configuration default\n&quot; +<span class="lineNum"> 825 </span> : : &quot;# and named parameter sets for specific invocations of the fwknop client.\n&quot; +<span class="lineNum"> 826 </span> : : &quot;#\n&quot; +<span class="lineNum"> 827 </span> : : &quot;# Each section (or stanza) is identified and started by a line in this\n&quot; +<span class="lineNum"> 828 </span> : : &quot;# file that contains a single identifier surrounded by square brackets.\n&quot; +<span class="lineNum"> 829 </span> : : &quot;# It is this identifier (or name) that is used from the fwknop command line\n&quot; +<span class="lineNum"> 830 </span> : : &quot;# via the '-n &lt;name&gt;' argument to reference the corresponding stanza.\n&quot; +<span class="lineNum"> 831 </span> : : &quot;#\n&quot; +<span class="lineNum"> 832 </span> : : &quot;# The parameters within the stanza typically match corresponding client \n&quot; +<span class="lineNum"> 833 </span> : : &quot;# command-line parameters.\n&quot; +<span class="lineNum"> 834 </span> : : &quot;#\n&quot; +<span class="lineNum"> 835 </span> : : &quot;# The first one should always be `[default]' as it defines the global\n&quot; +<span class="lineNum"> 836 </span> : : &quot;# default settings for the user. These override the program defaults\n&quot; +<span class="lineNum"> 837 </span> : : &quot;# for these parameters. If a named stanza is used, its entries will\n&quot; +<span class="lineNum"> 838 </span> : : &quot;# override any of the default values. Command-line options will trump them\n&quot; +<span class="lineNum"> 839 </span> : : &quot;# all.\n&quot; +<span class="lineNum"> 840 </span> : : &quot;#\n&quot; +<span class="lineNum"> 841 </span> : : &quot;# Subsequent stanzas will have only the overriding and destination\n&quot; +<span class="lineNum"> 842 </span> : : &quot;# specific parameters.\n&quot; +<span class="lineNum"> 843 </span> : : &quot;#\n&quot; +<span class="lineNum"> 844 </span> : : &quot;# Lines starting with `#' and empty lines are ignored.\n&quot; +<span class="lineNum"> 845 </span> : : &quot;#\n&quot; +<span class="lineNum"> 846 </span> : : &quot;# See the fwknop.8 man page for a complete list of valid parameters\n&quot; +<span class="lineNum"> 847 </span> : : &quot;# and their values.\n&quot; +<span class="lineNum"> 848 </span> : : &quot;#\n&quot; +<span class="lineNum"> 849 </span> : : &quot;##############################################################################\n&quot; +<span class="lineNum"> 850 </span> : : &quot;#\n&quot; +<span class="lineNum"> 851 </span> : : &quot;# We start with the 'default' stanza. Uncomment and edit for your\n&quot; +<span class="lineNum"> 852 </span> : : &quot;# preferences. The client will use its built-in default for those items\n&quot; +<span class="lineNum"> 853 </span> : : &quot;# that are commented out.\n&quot; +<span class="lineNum"> 854 </span> : : &quot;#\n&quot; +<span class="lineNum"> 855 </span> : : &quot;[default]\n&quot; +<span class="lineNum"> 856 </span> : : &quot;\n&quot; +<span class="lineNum"> 857 </span> : : &quot;#DIGEST_TYPE sha256\n&quot; +<span class="lineNum"> 858 </span> : : &quot;#FW_TIMEOUT 30\n&quot; +<span class="lineNum"> 859 </span> : : &quot;#SPA_SERVER_PORT 62201\n&quot; +<span class="lineNum"> 860 </span> : : &quot;#SPA_SERVER_PROTO udp\n&quot; +<span class="lineNum"> 861 </span> : : &quot;#ALLOW_IP &lt;ip addr&gt;\n&quot; +<span class="lineNum"> 862 </span> : : &quot;#SPOOF_USER &lt;username&gt;\n&quot; +<span class="lineNum"> 863 </span> : : &quot;#SPOOF_SOURCE_IP &lt;IPaddr&gt;\n&quot; +<span class="lineNum"> 864 </span> : : &quot;#TIME_OFFSET 0\n&quot; +<span class="lineNum"> 865 </span> : : &quot;#USE_GPG N\n&quot; +<span class="lineNum"> 866 </span> : : &quot;#GPG_HOMEDIR /path/to/.gnupg\n&quot; +<span class="lineNum"> 867 </span> : : &quot;#GPG_EXE /path/to/gpg\n&quot; +<span class="lineNum"> 868 </span> : : &quot;#GPG_SIGNER &lt;signer ID&gt;\n&quot; +<span class="lineNum"> 869 </span> : : &quot;#GPG_RECIPIENT &lt;recipient ID&gt;\n&quot; +<span class="lineNum"> 870 </span> : : &quot;#NO_SAVE_ARGS N\n&quot; +<span class="lineNum"> 871 </span> : : &quot;\n&quot; +<span class="lineNum"> 872 </span> : : &quot;# User-provided named stanzas:\n&quot; +<span class="lineNum"> 873 </span> : : &quot;\n&quot; +<span class="lineNum"> 874 </span> : : &quot;# Example for a destination server of 192.168.1.20 to open access to\n&quot; +<span class="lineNum"> 875 </span> : : &quot;# SSH for an IP that is resolved externally, and one with a NAT request\n&quot; +<span class="lineNum"> 876 </span> : : &quot;# for a specific source IP that maps port 8088 on the server\n&quot; +<span class="lineNum"> 877 </span> : : &quot;# to port 88 on 192.168.1.55 with timeout.\n&quot; +<span class="lineNum"> 878 </span> : : &quot;#\n&quot; +<span class="lineNum"> 879 </span> : : &quot;#[myssh]\n&quot; +<span class="lineNum"> 880 </span> : : &quot;#SPA_SERVER 192.168.1.20\n&quot; +<span class="lineNum"> 881 </span> : : &quot;#ACCESS tcp/22\n&quot; +<span class="lineNum"> 882 </span> : : &quot;#ALLOW_IP resolve\n&quot; +<span class="lineNum"> 883 </span> : : &quot;#\n&quot; +<span class="lineNum"> 884 </span> : : &quot;#[mynatreq]\n&quot; +<span class="lineNum"> 885 </span> : : &quot;#SPA_SERVER 192.168.1.20\n&quot; +<span class="lineNum"> 886 </span> : : &quot;#ACCESS tcp/8088\n&quot; +<span class="lineNum"> 887 </span> : : &quot;#ALLOW_IP 10.21.2.6\n&quot; +<span class="lineNum"> 888 </span> : : &quot;#NAT_ACCESS 192.168.1.55,88\n&quot; +<span class="lineNum"> 889 </span> : : &quot;#CLIENT_TIMEOUT 60\n&quot; +<span class="lineNum"> 890 </span> : : &quot;#\n&quot; +<span class="lineNum"> 891 </span> : : &quot;\n&quot; +<span class="lineNum"> 892 </span> : : ); +<span class="lineNum"> 893 </span> : : +<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> +<span class="lineNum"> 895 </span> : : +<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 897 </span> : : } +<a name="898"><span class="lineNum"> 898 </span> : : </a> +<span class="lineNum"> 899 </span> : : static int +<span class="lineNum"> 900 </span> :<span class="lineCov"> 108412 : parse_rc_param(fko_cli_options_t *options, const char *var_name, char * val)</span> +<span class="lineNum"> 901 </span> : : { +<span class="lineNum"> 902 </span> : : int tmpint, is_err; +<span class="lineNum"> 903 </span> :<span class="lineCov"> 108412 : int parse_error = 0; /* 0 if the variable has been successfully processed, &lt; 0 otherwise */</span> +<span class="lineNum"> 904 </span> : : fko_var_t *var; /* Pointer on an fwknop variable structure */ +<span class="lineNum"> 905 </span> : : +<span class="lineNum"> 906 </span> :<span class="lineCov"> 108412 : log_msg(LOG_VERBOSITY_DEBUG, &quot;parse_rc_param() : Parsing variable %s...&quot;, var_name);</span> +<span class="lineNum"> 907 </span> : : +<span class="lineNum"> 908 </span> : : /* Lookup the variable according to its name. */ +<span class="lineNum"> 909 </span> :<span class="lineCov"> 108412 : var = lookup_var_by_name(var_name);</span> +<span class="lineNum"> 910 </span> : : +<span class="lineNum"> 911 </span> : : /* The variable is not handled if its pointer is NULL */ +<span class="lineNum"> 912 </span> [<span class="branchCov" title="Branch 0 was taken 65637 times"> + </span><span class="branchCov" title="Branch 1 was taken 42775 times"> + </span>]:<span class="lineCov"> 108412 : if (var == NULL)</span> +<span class="lineNum"> 913 </span> : : parse_error = -1; +<span class="lineNum"> 914 </span> : : +<span class="lineNum"> 915 </span> : : /* Digest Type */ +<span class="lineNum"> 916 </span> [<span class="branchCov" title="Branch 0 was taken 4540 times"> + </span><span class="branchCov" title="Branch 1 was taken 61097 times"> + </span>]:<span class="lineCov"> 65637 : else if (var-&gt;pos == FWKNOP_CLI_ARG_DIGEST_TYPE)</span> +<span class="lineNum"> 917 </span> : : { +<span class="lineNum"> 918 </span> :<span class="lineCov"> 4540 : tmpint = digest_strtoint(val);</span> +<span class="lineNum"> 919 </span> [<span class="branchCov" title="Branch 0 was taken 2279 times"> + </span><span class="branchCov" title="Branch 1 was taken 2261 times"> + </span>]:<span class="lineCov"> 4540 : if(tmpint &lt; 0)</span> +<span class="lineNum"> 920 </span> : : parse_error = -1; +<span class="lineNum"> 921 </span> : : else +<span class="lineNum"> 922 </span> :<span class="lineCov"> 2279 : options-&gt;digest_type = tmpint;</span> +<span class="lineNum"> 923 </span> : : } +<span class="lineNum"> 924 </span> : : /* Server protocol */ +<span class="lineNum"> 925 </span> [<span class="branchCov" title="Branch 0 was taken 3306 times"> + </span><span class="branchCov" title="Branch 1 was taken 57791 times"> + </span>]:<span class="lineCov"> 61097 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SERVER_PROTO)</span> +<span class="lineNum"> 926 </span> : : { +<span class="lineNum"> 927 </span> :<span class="lineCov"> 3306 : tmpint = proto_strtoint(val);</span> +<span class="lineNum"> 928 </span> [<span class="branchCov" title="Branch 0 was taken 2427 times"> + </span><span class="branchCov" title="Branch 1 was taken 879 times"> + </span>]:<span class="lineCov"> 3306 : if(tmpint &lt; 0)</span> +<span class="lineNum"> 929 </span> : : parse_error = -1; +<span class="lineNum"> 930 </span> : : else +<span class="lineNum"> 931 </span> :<span class="lineCov"> 2427 : options-&gt;spa_proto = tmpint;</span> +<span class="lineNum"> 932 </span> : : } +<span class="lineNum"> 933 </span> : : /* Server port */ +<span class="lineNum"> 934 </span> [<span class="branchCov" title="Branch 0 was taken 1485 times"> + </span><span class="branchCov" title="Branch 1 was taken 56306 times"> + </span>]:<span class="lineCov"> 57791 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SERVER_PORT)</span> +<span class="lineNum"> 935 </span> : : { +<span class="lineNum"> 936 </span> :<span class="lineCov"> 1485 : tmpint = strtol_wrapper(val, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 937 </span> [<span class="branchCov" title="Branch 0 was taken 1391 times"> + </span><span class="branchCov" title="Branch 1 was taken 94 times"> + </span>]:<span class="lineCov"> 1485 : if(is_err == FKO_SUCCESS)</span> +<span class="lineNum"> 938 </span> :<span class="lineCov"> 1391 : options-&gt;spa_dst_port = tmpint;</span> +<span class="lineNum"> 939 </span> : : else +<span class="lineNum"> 940 </span> : : parse_error = -1; +<span class="lineNum"> 941 </span> : : } +<span class="lineNum"> 942 </span> : : /* Source port */ +<span class="lineNum"> 943 </span> [<span class="branchCov" title="Branch 0 was taken 201 times"> + </span><span class="branchCov" title="Branch 1 was taken 56105 times"> + </span>]:<span class="lineCov"> 56306 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SOURCE_PORT)</span> +<span class="lineNum"> 944 </span> : : { +<span class="lineNum"> 945 </span> :<span class="lineCov"> 201 : tmpint = strtol_wrapper(val, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 946 </span> [<span class="branchCov" title="Branch 0 was taken 87 times"> + </span><span class="branchCov" title="Branch 1 was taken 114 times"> + </span>]:<span class="lineCov"> 201 : if(is_err == FKO_SUCCESS)</span> +<span class="lineNum"> 947 </span> :<span class="lineCov"> 87 : options-&gt;spa_src_port = tmpint;</span> +<span class="lineNum"> 948 </span> : : else +<span class="lineNum"> 949 </span> : : parse_error = -1; +<span class="lineNum"> 950 </span> : : } +<span class="lineNum"> 951 </span> : : /* Firewall rule timeout */ +<span class="lineNum"> 952 </span> [<span class="branchCov" title="Branch 0 was taken 192 times"> + </span><span class="branchCov" title="Branch 1 was taken 55913 times"> + </span>]:<span class="lineCov"> 56105 : else if (var-&gt;pos == FWKNOP_CLI_ARG_FW_TIMEOUT)</span> +<span class="lineNum"> 953 </span> : : { +<span class="lineNum"> 954 </span> :<span class="lineCov"> 192 : tmpint = strtol_wrapper(val, 0, (2 &lt;&lt; 15), NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 955 </span> [<span class="branchCov" title="Branch 0 was taken 87 times"> + </span><span class="branchCov" title="Branch 1 was taken 105 times"> + </span>]:<span class="lineCov"> 192 : if(is_err == FKO_SUCCESS)</span> +<span class="lineNum"> 956 </span> :<span class="lineCov"> 87 : options-&gt;fw_timeout = tmpint;</span> +<span class="lineNum"> 957 </span> : : else +<span class="lineNum"> 958 </span> : : parse_error = -1; +<span class="lineNum"> 959 </span> : : } +<span class="lineNum"> 960 </span> : : /* Allow IP */ +<span class="lineNum"> 961 </span> [<span class="branchCov" title="Branch 0 was taken 6803 times"> + </span><span class="branchCov" title="Branch 1 was taken 49110 times"> + </span>]:<span class="lineCov"> 55913 : else if (var-&gt;pos == FWKNOP_CLI_ARG_ALLOW_IP)</span> +<span class="lineNum"> 962 </span> : : { +<span class="lineNum"> 963 </span> : : /* In case this was set previously +<span class="lineNum"> 964 </span> : : */ +<span class="lineNum"> 965 </span> :<span class="lineCov"> 6803 : options-&gt;resolve_ip_http_https = 0;</span> +<span class="lineNum"> 966 </span> : : +<span class="lineNum"> 967 </span> : : /* use source, resolve, or an actual IP +<span class="lineNum"> 968 </span> : : */ +<span class="lineNum"> 969 </span> [<span class="branchCov" title="Branch 0 was taken 72 times"> + </span><span class="branchCov" title="Branch 1 was taken 6731 times"> + </span>]:<span class="lineCov"> 6803 : if(strcasecmp(val, &quot;source&quot;) == 0)</span> +<span class="lineNum"> 970 </span> :<span class="lineCov"> 72 : strlcpy(options-&gt;allow_ip_str, &quot;0.0.0.0&quot;, sizeof(options-&gt;allow_ip_str));</span> +<span class="lineNum"> 971 </span> [<span class="branchCov" title="Branch 0 was taken 35 times"> + </span><span class="branchCov" title="Branch 1 was taken 6696 times"> + </span>]:<span class="lineCov"> 6731 : else if(strcasecmp(val, &quot;resolve&quot;) == 0)</span> +<span class="lineNum"> 972 </span> :<span class="lineCov"> 35 : options-&gt;resolve_ip_http_https = 1;</span> +<span class="lineNum"> 973 </span> : : else /* Assume IP address and validate */ +<span class="lineNum"> 974 </span> : : { +<span class="lineNum"> 975 </span> :<span class="lineCov"> 6696 : strlcpy(options-&gt;allow_ip_str, val, sizeof(options-&gt;allow_ip_str));</span> +<span class="lineNum"> 976 </span> [<span class="branchCov" title="Branch 1 was taken 4218 times"> + </span><span class="branchCov" title="Branch 2 was taken 2478 times"> + </span>]:<span class="lineCov"> 6696 : if(! is_valid_ipv4_addr(options-&gt;allow_ip_str))</span> +<span class="lineNum"> 977 </span> :<span class="lineCov"> 4218 : parse_error = -1;</span> +<span class="lineNum"> 978 </span> : : } +<span class="lineNum"> 979 </span> : : } +<span class="lineNum"> 980 </span> : : /* Time Offset */ +<span class="lineNum"> 981 </span> [<span class="branchCov" title="Branch 0 was taken 9046 times"> + </span><span class="branchCov" title="Branch 1 was taken 40064 times"> + </span>]:<span class="lineCov"> 49110 : else if (var-&gt;pos == FWKNOP_CLI_ARG_TIME_OFFSET)</span> +<span class="lineNum"> 982 </span> : : { +<span class="lineNum"> 983 </span> [<span class="branchCov" title="Branch 0 was taken 1522 times"> + </span><span class="branchCov" title="Branch 1 was taken 7524 times"> + </span>]:<span class="lineCov"> 9046 : if(val[0] == '-')</span> +<span class="lineNum"> 984 </span> : : { +<span class="lineNum"> 985 </span> :<span class="lineCov"> 1522 : val++;</span> +<span class="lineNum"> 986 </span> [<span class="branchCov" title="Branch 1 was taken 190 times"> + </span><span class="branchCov" title="Branch 2 was taken 1332 times"> + </span>]:<span class="lineCov"> 1522 : if(! parse_time_offset(val, &amp;options-&gt;time_offset_minus))</span> +<span class="lineNum"> 987 </span> :<span class="lineCov"> 190 : parse_error = -1;</span> +<span class="lineNum"> 988 </span> : : } +<span class="lineNum"> 989 </span> : : else +<span class="lineNum"> 990 </span> [<span class="branchCov" title="Branch 1 was taken 5656 times"> + </span><span class="branchCov" title="Branch 2 was taken 1868 times"> + </span>]:<span class="lineCov"> 7524 : if (! parse_time_offset(val, &amp;options-&gt;time_offset_plus))</span> +<span class="lineNum"> 991 </span> :<span class="lineCov"> 5656 : parse_error = -1;</span> +<span class="lineNum"> 992 </span> : : +<span class="lineNum"> 993 </span> [<span class="branchCov" title="Branch 0 was taken 5846 times"> + </span><span class="branchCov" title="Branch 1 was taken 3200 times"> + </span>]:<span class="lineCov"> 9046 : if(parse_error == -1)</span> +<span class="lineNum"> 994 </span> :<span class="lineCov"> 5846 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 995 </span> : : &quot;TIME_OFFSET argument '%s' invalid.&quot;, val); +<span class="lineNum"> 996 </span> : : } +<span class="lineNum"> 997 </span> : : /* symmetric encryption mode */ +<span class="lineNum"> 998 </span> [<span class="branchCov" title="Branch 0 was taken 4826 times"> + </span><span class="branchCov" title="Branch 1 was taken 35238 times"> + </span>]:<span class="lineCov"> 40064 : else if (var-&gt;pos == FWKNOP_CLI_ARG_ENCRYPTION_MODE)</span> +<span class="lineNum"> 999 </span> : : { +<span class="lineNum"> 1000 </span> :<span class="lineCov"> 4826 : tmpint = enc_mode_strtoint(val);</span> +<span class="lineNum"> 1001 </span> [<span class="branchCov" title="Branch 0 was taken 2017 times"> + </span><span class="branchCov" title="Branch 1 was taken 2809 times"> + </span>]:<span class="lineCov"> 4826 : if(tmpint &lt; 0)</span> +<span class="lineNum"> 1002 </span> : : parse_error = -1; +<span class="lineNum"> 1003 </span> : : else +<span class="lineNum"> 1004 </span> :<span class="lineCov"> 2017 : options-&gt;encryption_mode = tmpint;</span> +<span class="lineNum"> 1005 </span> : : } +<span class="lineNum"> 1006 </span> : : /* Use GPG ? */ +<span class="lineNum"> 1007 </span> [<span class="branchCov" title="Branch 0 was taken 2094 times"> + </span><span class="branchCov" title="Branch 1 was taken 33144 times"> + </span>]:<span class="lineCov"> 35238 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_GPG)</span> +<span class="lineNum"> 1008 </span> : : { +<span class="lineNum"> 1009 </span> [<span class="branchCov" title="Branch 1 was taken 152 times"> + </span><span class="branchCov" title="Branch 2 was taken 1942 times"> + </span>]:<span class="lineCov"> 2094 : if (is_yes_str(val))</span> +<span class="lineNum"> 1010 </span> :<span class="lineCov"> 152 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 1011 </span> : : else; +<span class="lineNum"> 1012 </span> : : } +<span class="lineNum"> 1013 </span> : : /* Use GPG Agent ? */ +<span class="lineNum"> 1014 </span> [<span class="branchCov" title="Branch 0 was taken 1314 times"> + </span><span class="branchCov" title="Branch 1 was taken 31830 times"> + </span>]:<span class="lineCov"> 33144 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_GPG_AGENT)</span> +<span class="lineNum"> 1015 </span> : : { +<span class="lineNum"> 1016 </span> [<span class="branchCov" title="Branch 1 was taken 102 times"> + </span><span class="branchCov" title="Branch 2 was taken 1212 times"> + </span>]:<span class="lineCov"> 1314 : if (is_yes_str(val))</span> +<span class="lineNum"> 1017 </span> :<span class="lineCov"> 102 : options-&gt;use_gpg_agent = 1;</span> +<span class="lineNum"> 1018 </span> : : else; +<span class="lineNum"> 1019 </span> : : } +<span class="lineNum"> 1020 </span> : : /* No GPG signing passphrase ? */ +<span class="lineNum"> 1021 </span> [<span class="branchCov" title="Branch 0 was taken 170 times"> + </span><span class="branchCov" title="Branch 1 was taken 31660 times"> + </span>]:<span class="lineCov"> 31830 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW)</span> +<span class="lineNum"> 1022 </span> : : { +<span class="lineNum"> 1023 </span> [<span class="branchCov" title="Branch 1 was taken 68 times"> + </span><span class="branchCov" title="Branch 2 was taken 102 times"> + </span>]:<span class="lineCov"> 170 : if (is_yes_str(val))</span> +<span class="lineNum"> 1024 </span> :<span class="lineCov"> 68 : options-&gt;gpg_no_signing_pw = 1;</span> +<span class="lineNum"> 1025 </span> : : else; +<span class="lineNum"> 1026 </span> : : } +<span class="lineNum"> 1027 </span> : : /* GPG Recipient */ +<span class="lineNum"> 1028 </span> [<span class="branchCov" title="Branch 0 was taken 129 times"> + </span><span class="branchCov" title="Branch 1 was taken 31531 times"> + </span>]:<span class="lineCov"> 31660 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_RECIPIENT)</span> +<span class="lineNum"> 1029 </span> : : { +<span class="lineNum"> 1030 </span> :<span class="lineCov"> 129 : strlcpy(options-&gt;gpg_recipient_key, val, sizeof(options-&gt;gpg_recipient_key));</span> +<span class="lineNum"> 1031 </span> : : } +<span class="lineNum"> 1032 </span> : : /* GPG Signer */ +<span class="lineNum"> 1033 </span> [<span class="branchCov" title="Branch 0 was taken 87 times"> + </span><span class="branchCov" title="Branch 1 was taken 31444 times"> + </span>]:<span class="lineCov"> 31531 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_SIGNER)</span> +<span class="lineNum"> 1034 </span> : : { +<span class="lineNum"> 1035 </span> :<span class="lineCov"> 87 : strlcpy(options-&gt;gpg_signer_key, val, sizeof(options-&gt;gpg_signer_key));</span> +<span class="lineNum"> 1036 </span> : : } +<span class="lineNum"> 1037 </span> : : /* GPG Homedir */ +<span class="lineNum"> 1038 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 31444 times"> + </span>]:<span class="lineCov"> 31444 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_HOMEDIR)</span> +<span class="lineNum"> 1039 </span> : : { +<span class="lineNum"> 1040 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_home_dir, val, sizeof(options-&gt;gpg_home_dir));</span> +<span class="lineNum"> 1041 </span> : : } +<span class="lineNum"> 1042 </span> : : /* GPG path */ +<span class="lineNum"> 1043 </span> [<span class="branchCov" title="Branch 0 was taken 80 times"> + </span><span class="branchCov" title="Branch 1 was taken 31364 times"> + </span>]:<span class="lineCov"> 31444 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_EXE_PATH)</span> +<span class="lineNum"> 1044 </span> : : { +<span class="lineNum"> 1045 </span> :<span class="lineCov"> 80 : strlcpy(options-&gt;gpg_exe, val, sizeof(options-&gt;gpg_exe));</span> +<span class="lineNum"> 1046 </span> : : } +<span class="lineNum"> 1047 </span> : : /* Spoof User */ +<span class="lineNum"> 1048 </span> [<span class="branchCov" title="Branch 0 was taken 2977 times"> + </span><span class="branchCov" title="Branch 1 was taken 28387 times"> + </span>]:<span class="lineCov"> 31364 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPOOF_USER)</span> +<span class="lineNum"> 1049 </span> : : { +<span class="lineNum"> 1050 </span> :<span class="lineCov"> 2977 : strlcpy(options-&gt;spoof_user, val, sizeof(options-&gt;spoof_user));</span> +<span class="lineNum"> 1051 </span> : : } +<span class="lineNum"> 1052 </span> : : /* Spoof Source IP */ +<span class="lineNum"> 1053 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 28387 times"> + </span>]:<span class="lineCov"> 28387 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPOOF_SOURCE_IP)</span> +<span class="lineNum"> 1054 </span> : : { +<span class="lineNum"> 1055 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spoof_ip_src_str, val, sizeof(options-&gt;spoof_ip_src_str));</span> +<span class="lineNum"> 1056 </span> : : } +<span class="lineNum"> 1057 </span> : : /* ACCESS request */ +<span class="lineNum"> 1058 </span> [<span class="branchCov" title="Branch 0 was taken 1930 times"> + </span><span class="branchCov" title="Branch 1 was taken 26457 times"> + </span>]:<span class="lineCov"> 28387 : else if (var-&gt;pos == FWKNOP_CLI_ARG_ACCESS)</span> +<span class="lineNum"> 1059 </span> : : { +<span class="lineNum"> 1060 </span> :<span class="lineCov"> 1930 : strlcpy(options-&gt;access_str, val, sizeof(options-&gt;access_str));</span> +<span class="lineNum"> 1061 </span> : : } +<span class="lineNum"> 1062 </span> : : /* SPA Server (destination) */ +<span class="lineNum"> 1063 </span> [<span class="branchCov" title="Branch 0 was taken 2026 times"> + </span><span class="branchCov" title="Branch 1 was taken 24431 times"> + </span>]:<span class="lineCov"> 26457 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SERVER)</span> +<span class="lineNum"> 1064 </span> : : { +<span class="lineNum"> 1065 </span> :<span class="lineCov"> 2026 : strlcpy(options-&gt;spa_server_str, val, sizeof(options-&gt;spa_server_str));</span> +<span class="lineNum"> 1066 </span> : : } +<span class="lineNum"> 1067 </span> : : /* Rand port ? */ +<span class="lineNum"> 1068 </span> [<span class="branchCov" title="Branch 0 was taken 147 times"> + </span><span class="branchCov" title="Branch 1 was taken 24284 times"> + </span>]:<span class="lineCov"> 24431 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RAND_PORT)</span> +<span class="lineNum"> 1069 </span> : : { +<span class="lineNum"> 1070 </span> [<span class="branchCov" title="Branch 1 was taken 76 times"> + </span><span class="branchCov" title="Branch 2 was taken 71 times"> + </span>]:<span class="lineCov"> 147 : if (is_yes_str(val))</span> +<span class="lineNum"> 1071 </span> :<span class="lineCov"> 76 : options-&gt;rand_port = 1;</span> +<span class="lineNum"> 1072 </span> : : else; +<span class="lineNum"> 1073 </span> : : } +<span class="lineNum"> 1074 </span> : : /* Rijndael key */ +<span class="lineNum"> 1075 </span> [<span class="branchCov" title="Branch 0 was taken 1879 times"> + </span><span class="branchCov" title="Branch 1 was taken 22405 times"> + </span>]:<span class="lineCov"> 24284 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_RIJNDAEL)</span> +<span class="lineNum"> 1076 </span> : : { +<span class="lineNum"> 1077 </span> :<span class="lineCov"> 1879 : strlcpy(options-&gt;key, val, sizeof(options-&gt;key));</span> +<span class="lineNum"> 1078 </span> :<span class="lineCov"> 1879 : options-&gt;have_key = 1;</span> +<span class="lineNum"> 1079 </span> : : } +<span class="lineNum"> 1080 </span> : : /* Rijndael key (base-64 encoded) */ +<span class="lineNum"> 1081 </span> [<span class="branchCov" title="Branch 0 was taken 5377 times"> + </span><span class="branchCov" title="Branch 1 was taken 17028 times"> + </span>]:<span class="lineCov"> 22405 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64)</span> +<span class="lineNum"> 1082 </span> : : { +<span class="lineNum"> 1083 </span> [<span class="branchCov" title="Branch 1 was taken 2308 times"> + </span><span class="branchCov" title="Branch 2 was taken 3069 times"> + </span>]:<span class="lineCov"> 5377 : if (! is_base64((unsigned char *) val, strlen(val)))</span> +<span class="lineNum"> 1084 </span> : : { +<span class="lineNum"> 1085 </span> :<span class="lineCov"> 2308 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1086 </span> : : &quot;KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, +<span class="lineNum"> 1087 </span> : : val); +<span class="lineNum"> 1088 </span> :<span class="lineCov"> 2308 : parse_error = -1;</span> +<span class="lineNum"> 1089 </span> : : } +<span class="lineNum"> 1090 </span> :<span class="lineCov"> 5377 : strlcpy(options-&gt;key_base64, val, sizeof(options-&gt;key_base64));</span> +<span class="lineNum"> 1091 </span> :<span class="lineCov"> 5377 : options-&gt;have_base64_key = 1;</span> +<span class="lineNum"> 1092 </span> : : } +<span class="lineNum"> 1093 </span> : : /* GnuPG signing passphrase */ +<span class="lineNum"> 1094 </span> [<span class="branchCov" title="Branch 0 was taken 103 times"> + </span><span class="branchCov" title="Branch 1 was taken 16925 times"> + </span>]:<span class="lineCov"> 17028 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_SIGNING_PW)</span> +<span class="lineNum"> 1095 </span> : : { +<span class="lineNum"> 1096 </span> :<span class="lineCov"> 103 : strlcpy(options-&gt;key, val, sizeof(options-&gt;key));</span> +<span class="lineNum"> 1097 </span> :<span class="lineCov"> 103 : options-&gt;have_key = 1;</span> +<span class="lineNum"> 1098 </span> : : } +<span class="lineNum"> 1099 </span> : : /* GnuPG signing passphrase (base-64 encoded) */ +<span class="lineNum"> 1100 </span> [<span class="branchCov" title="Branch 0 was taken 143 times"> + </span><span class="branchCov" title="Branch 1 was taken 16782 times"> + </span>]:<span class="lineCov"> 16925 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64)</span> +<span class="lineNum"> 1101 </span> : : { +<span class="lineNum"> 1102 </span> [<span class="branchCov" title="Branch 1 was taken 97 times"> + </span><span class="branchCov" title="Branch 2 was taken 46 times"> + </span>]:<span class="lineCov"> 143 : if (! is_base64((unsigned char *) val, strlen(val)))</span> +<span class="lineNum"> 1103 </span> : : { +<span class="lineNum"> 1104 </span> :<span class="lineCov"> 97 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1105 </span> : : &quot;GPG_SIGNING_KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, +<span class="lineNum"> 1106 </span> : : val); +<span class="lineNum"> 1107 </span> :<span class="lineCov"> 97 : parse_error = -1;</span> +<span class="lineNum"> 1108 </span> : : } +<span class="lineNum"> 1109 </span> :<span class="lineCov"> 143 : strlcpy(options-&gt;key_base64, val, sizeof(options-&gt;key_base64));</span> +<span class="lineNum"> 1110 </span> :<span class="lineCov"> 143 : options-&gt;have_base64_key = 1;</span> +<span class="lineNum"> 1111 </span> : : } +<span class="lineNum"> 1112 </span> : : /* HMAC digest type */ +<span class="lineNum"> 1113 </span> [<span class="branchCov" title="Branch 0 was taken 5471 times"> + </span><span class="branchCov" title="Branch 1 was taken 11311 times"> + </span>]:<span class="lineCov"> 16782 : else if (var-&gt;pos == FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE)</span> +<span class="lineNum"> 1114 </span> : : { +<span class="lineNum"> 1115 </span> :<span class="lineCov"> 5471 : tmpint = hmac_digest_strtoint(val);</span> +<span class="lineNum"> 1116 </span> [<span class="branchCov" title="Branch 0 was taken 2597 times"> + </span><span class="branchCov" title="Branch 1 was taken 2874 times"> + </span>]:<span class="lineCov"> 5471 : if(tmpint &lt; 0)</span> +<span class="lineNum"> 1117 </span> : : { +<span class="lineNum"> 1118 </span> :<span class="lineCov"> 2597 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1119 </span> : : &quot;HMAC_DIGEST_TYPE argument '%s' must be one of {md5,sha1,sha256,sha384,sha512}&quot;, +<span class="lineNum"> 1120 </span> : : val); +<span class="lineNum"> 1121 </span> :<span class="lineCov"> 2597 : parse_error = -1;</span> +<span class="lineNum"> 1122 </span> : : } +<span class="lineNum"> 1123 </span> : : else +<span class="lineNum"> 1124 </span> : : { +<span class="lineNum"> 1125 </span> :<span class="lineCov"> 2874 : options-&gt;hmac_type = tmpint;</span> +<span class="lineNum"> 1126 </span> : : } +<span class="lineNum"> 1127 </span> : : } +<span class="lineNum"> 1128 </span> : : /* HMAC key (base64 encoded) */ +<span class="lineNum"> 1129 </span> [<span class="branchCov" title="Branch 0 was taken 1742 times"> + </span><span class="branchCov" title="Branch 1 was taken 9569 times"> + </span>]:<span class="lineCov"> 11311 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_HMAC_BASE64)</span> +<span class="lineNum"> 1130 </span> : : { +<span class="lineNum"> 1131 </span> [<span class="branchCov" title="Branch 1 was taken 875 times"> + </span><span class="branchCov" title="Branch 2 was taken 867 times"> + </span>]:<span class="lineCov"> 1742 : if (! is_base64((unsigned char *) val, strlen(val)))</span> +<span class="lineNum"> 1132 </span> : : { +<span class="lineNum"> 1133 </span> :<span class="lineCov"> 875 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1134 </span> : : &quot;HMAC_KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, +<span class="lineNum"> 1135 </span> : : val); +<span class="lineNum"> 1136 </span> :<span class="lineCov"> 875 : parse_error = -1;</span> +<span class="lineNum"> 1137 </span> : : } +<span class="lineNum"> 1138 </span> :<span class="lineCov"> 1742 : strlcpy(options-&gt;hmac_key_base64, val, sizeof(options-&gt;hmac_key_base64));</span> +<span class="lineNum"> 1139 </span> :<span class="lineCov"> 1742 : options-&gt;have_hmac_base64_key = 1;</span> +<span class="lineNum"> 1140 </span> :<span class="lineCov"> 1742 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 1141 </span> : : } +<span class="lineNum"> 1142 </span> : : +<span class="lineNum"> 1143 </span> : : /* HMAC key */ +<span class="lineNum"> 1144 </span> [<span class="branchCov" title="Branch 0 was taken 1008 times"> + </span><span class="branchCov" title="Branch 1 was taken 8561 times"> + </span>]:<span class="lineCov"> 9569 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_HMAC)</span> +<span class="lineNum"> 1145 </span> : : { +<span class="lineNum"> 1146 </span> :<span class="lineCov"> 1008 : strlcpy(options-&gt;hmac_key, val, sizeof(options-&gt;hmac_key));</span> +<span class="lineNum"> 1147 </span> :<span class="lineCov"> 1008 : options-&gt;have_hmac_key = 1;</span> +<span class="lineNum"> 1148 </span> :<span class="lineCov"> 1008 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 1149 </span> : : } +<span class="lineNum"> 1150 </span> : : +<span class="lineNum"> 1151 </span> : : /* --use-hmac */ +<span class="lineNum"> 1152 </span> [<span class="branchCov" title="Branch 0 was taken 3682 times"> + </span><span class="branchCov" title="Branch 1 was taken 4879 times"> + </span>]:<span class="lineCov"> 8561 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_HMAC)</span> +<span class="lineNum"> 1153 </span> : : { +<span class="lineNum"> 1154 </span> [<span class="branchCov" title="Branch 1 was taken 1716 times"> + </span><span class="branchCov" title="Branch 2 was taken 1966 times"> + </span>]:<span class="lineCov"> 3682 : if (is_yes_str(val))</span> +<span class="lineNum"> 1155 </span> :<span class="lineCov"> 1716 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 1156 </span> : : } +<span class="lineNum"> 1157 </span> : : /* --use-wget-user-agent */ +<span class="lineNum"> 1158 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4879 times"> + </span>]:<span class="lineCov"> 4879 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_WGET_USER_AGENT)</span> +<span class="lineNum"> 1159 </span> : : { +<span class="lineNum"> 1160 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> +<span class="lineNum"> 1161 </span> :<span class="lineNoCov"> 0 : options-&gt;use_wget_user_agent = 1;</span> +<span class="lineNum"> 1162 </span> : : } +<span class="lineNum"> 1163 </span> : : /* Key file */ +<span class="lineNum"> 1164 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4879 times"> + </span>]:<span class="lineCov"> 4879 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_FILE)</span> +<span class="lineNum"> 1165 </span> : : { +<span class="lineNum"> 1166 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;get_key_file, val, sizeof(options-&gt;get_key_file));</span> +<span class="lineNum"> 1167 </span> : : } +<span class="lineNum"> 1168 </span> : : /* HMAC key file */ +<span class="lineNum"> 1169 </span> [<span class="branchCov" title="Branch 0 was taken 76 times"> + </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4879 : else if (var-&gt;pos == FWKNOP_CLI_ARG_HMAC_KEY_FILE)</span> +<span class="lineNum"> 1170 </span> : : { +<span class="lineNum"> 1171 </span> :<span class="lineCov"> 76 : strlcpy(options-&gt;get_key_file, val,</span> +<span class="lineNum"> 1172 </span> : : sizeof(options-&gt;get_hmac_key_file)); +<span class="lineNum"> 1173 </span> : : } +<span class="lineNum"> 1174 </span> : : /* NAT Access Request */ +<span class="lineNum"> 1175 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_ACCESS)</span> +<span class="lineNum"> 1176 </span> : : { +<span class="lineNum"> 1177 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;nat_access_str, val, sizeof(options-&gt;nat_access_str));</span> +<span class="lineNum"> 1178 </span> : : } +<span class="lineNum"> 1179 </span> : : /* HTTP User Agent */ +<span class="lineNum"> 1180 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_HTTP_USER_AGENT)</span> +<span class="lineNum"> 1181 </span> : : { +<span class="lineNum"> 1182 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;http_user_agent, val, sizeof(options-&gt;http_user_agent));</span> +<span class="lineNum"> 1183 </span> : : } +<span class="lineNum"> 1184 </span> : : /* Resolve URL */ +<span class="lineNum"> 1185 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_URL)</span> +<span class="lineNum"> 1186 </span> : : { +<span class="lineNum"> 1187 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> +<span class="lineNum"> 1188 </span> :<span class="lineNoCov"> 0 : free(options-&gt;resolve_url);</span> +<span class="lineNum"> 1189 </span> :<span class="lineNoCov"> 0 : tmpint = strlen(val)+1;</span> +<span class="lineNum"> 1190 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_url = calloc(1, tmpint);</span> +<span class="lineNum"> 1191 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url == NULL)</span> +<span class="lineNum"> 1192 </span> : : { +<span class="lineNum"> 1193 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,&quot;Memory allocation error for resolve URL.&quot;);</span> +<span class="lineNum"> 1194 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1195 </span> : : } +<span class="lineNum"> 1196 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;resolve_url, val, tmpint);</span> +<span class="lineNum"> 1197 </span> : : } +<span class="lineNum"> 1198 </span> : : /* wget command */ +<span class="lineNum"> 1199 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_WGET_CMD)</span> +<span class="lineNum"> 1200 </span> : : { +<span class="lineNum"> 1201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin != NULL)</span> +<span class="lineNum"> 1202 </span> :<span class="lineNoCov"> 0 : free(options-&gt;wget_bin);</span> +<span class="lineNum"> 1203 </span> :<span class="lineNoCov"> 0 : tmpint = strlen(val)+1;</span> +<span class="lineNum"> 1204 </span> :<span class="lineNoCov"> 0 : options-&gt;wget_bin = calloc(1, tmpint);</span> +<span class="lineNum"> 1205 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin == NULL)</span> +<span class="lineNum"> 1206 </span> : : { +<span class="lineNum"> 1207 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,&quot;Memory allocation error for wget command path.&quot;);</span> +<span class="lineNum"> 1208 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1209 </span> : : } +<span class="lineNum"> 1210 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;wget_bin, val, tmpint);</span> +<span class="lineNum"> 1211 </span> : : } +<span class="lineNum"> 1212 </span> : : /* NAT Local ? */ +<span class="lineNum"> 1213 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_LOCAL)</span> +<span class="lineNum"> 1214 </span> : : { +<span class="lineNum"> 1215 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> +<span class="lineNum"> 1216 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_local = 1;</span> +<span class="lineNum"> 1217 </span> : : else; +<span class="lineNum"> 1218 </span> : : } +<span class="lineNum"> 1219 </span> : : /* NAT rand port ? */ +<span class="lineNum"> 1220 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_RAND_PORT)</span> +<span class="lineNum"> 1221 </span> : : { +<span class="lineNum"> 1222 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> +<span class="lineNum"> 1223 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_rand_port = 1;</span> +<span class="lineNum"> 1224 </span> : : else; +<span class="lineNum"> 1225 </span> : : } +<span class="lineNum"> 1226 </span> : : /* NAT port */ +<span class="lineNum"> 1227 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_PORT)</span> +<span class="lineNum"> 1228 </span> : : { +<span class="lineNum"> 1229 </span> :<span class="lineNoCov"> 0 : tmpint = strtol_wrapper(val, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 1230 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err == FKO_SUCCESS)</span> +<span class="lineNum"> 1231 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_port = tmpint;</span> +<span class="lineNum"> 1232 </span> : : else +<span class="lineNum"> 1233 </span> : : parse_error = -1; +<span class="lineNum"> 1234 </span> : : } +<span class="lineNum"> 1235 </span> : : /* VERBOSE level */ +<span class="lineNum"> 1236 </span> [<span class="branchCov" title="Branch 0 was taken 2894 times"> + </span><span class="branchCov" title="Branch 1 was taken 1909 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_VERBOSE)</span> +<span class="lineNum"> 1237 </span> : : { +<span class="lineNum"> 1238 </span> [<span class="branchCov" title="Branch 1 was taken 1174 times"> + </span><span class="branchCov" title="Branch 2 was taken 1720 times"> + </span>]:<span class="lineCov"> 2894 : if (is_yes_str(val))</span> +<span class="lineNum"> 1239 </span> :<span class="lineCov"> 1174 : options-&gt;verbose = 1;</span> +<span class="lineNum"> 1240 </span> : : else +<span class="lineNum"> 1241 </span> : : { +<span class="lineNum"> 1242 </span> :<span class="lineCov"> 1720 : tmpint = strtol_wrapper(val, 0, LOG_LAST_VERBOSITY - 1, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 1243 </span> [<span class="branchCov" title="Branch 0 was taken 1558 times"> + </span><span class="branchCov" title="Branch 1 was taken 162 times"> + </span>]:<span class="lineCov"> 1720 : if(is_err == FKO_SUCCESS)</span> +<span class="lineNum"> 1244 </span> :<span class="lineCov"> 1558 : options-&gt;verbose = tmpint;</span> +<span class="lineNum"> 1245 </span> : : else +<span class="lineNum"> 1246 </span> : : parse_error = -1; +<span class="lineNum"> 1247 </span> : : } +<span class="lineNum"> 1248 </span> : : +<span class="lineNum"> 1249 </span> [<span class="branchCov" title="Branch 0 was taken 2732 times"> + </span><span class="branchCov" title="Branch 1 was taken 162 times"> + </span>]:<span class="lineCov"> 2894 : if (parse_error == 0)</span> +<span class="lineNum"> 1250 </span> :<span class="lineCov"> 2732 : log_set_verbosity(LOG_DEFAULT_VERBOSITY + options-&gt;verbose);</span> +<span class="lineNum"> 1251 </span> : : } +<span class="lineNum"> 1252 </span> : : /* RESOLVE_IP_HTTPS ? */ +<span class="lineNum"> 1253 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1909 times"> + </span>]:<span class="lineCov"> 1909 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS)</span> +<span class="lineNum"> 1254 </span> : : { +<span class="lineNum"> 1255 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> +<span class="lineNum"> 1256 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> +<span class="lineNum"> 1257 </span> : : else; +<span class="lineNum"> 1258 </span> : : } +<span class="lineNum"> 1259 </span> : : /* RESOLVE_IP_HTTP ? This actually results in HTTPS resolution by default +<span class="lineNum"> 1260 </span> : : * unless --resolve-http-only is also given +<span class="lineNum"> 1261 </span> : : */ +<span class="lineNum"> 1262 </span> [<span class="branchCov" title="Branch 0 was taken 1909 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1909 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_IP_HTTP)</span> +<span class="lineNum"> 1263 </span> : : { +<span class="lineNum"> 1264 </span> [<span class="branchCov" title="Branch 1 was taken 73 times"> + </span><span class="branchCov" title="Branch 2 was taken 1836 times"> + </span>]:<span class="lineCov"> 1909 : if (is_yes_str(val))</span> +<span class="lineNum"> 1265 </span> :<span class="lineCov"> 73 : options-&gt;resolve_ip_http_https = 1;</span> +<span class="lineNum"> 1266 </span> : : else; +<span class="lineNum"> 1267 </span> : : } +<span class="lineNum"> 1268 </span> : : /* RESOLVE_HTTP_ONLY ? Force HTTP instead of HTTPS IP resolution. +<span class="lineNum"> 1269 </span> : : */ +<span class="lineNum"> 1270 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY)</span> +<span class="lineNum"> 1271 </span> : : { +<span class="lineNum"> 1272 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> +<span class="lineNum"> 1273 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_http_only = 1;</span> +<span class="lineNum"> 1274 </span> : : else; +<span class="lineNum"> 1275 </span> : : } +<span class="lineNum"> 1276 </span> : : /* avoid saving .fwknop.run by default */ +<span class="lineNum"> 1277 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NO_SAVE_ARGS)</span> +<span class="lineNum"> 1278 </span> : : { +<span class="lineNum"> 1279 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> +<span class="lineNum"> 1280 </span> :<span class="lineNoCov"> 0 : options-&gt;no_save_args = 1;</span> +<span class="lineNum"> 1281 </span> : : else; +<span class="lineNum"> 1282 </span> : : } +<span class="lineNum"> 1283 </span> : : /* The variable is not a configuration variable */ +<span class="lineNum"> 1284 </span> : : else +<span class="lineNum"> 1285 </span> : : { +<span class="lineNum"> 1286 </span> : : parse_error = -1; +<span class="lineNum"> 1287 </span> : : } +<span class="lineNum"> 1288 </span> : : +<span class="lineNum"> 1289 </span> :<span class="lineCov"> 108412 : return(parse_error);</span> +<span class="lineNum"> 1290 </span> : : } +<span class="lineNum"> 1291 </span> : : +<span class="lineNum"> 1292 </span> : : /** +<span class="lineNum"> 1293 </span> : : * @brief Write a cli parameter to a file handle +<span class="lineNum"> 1294 </span> : : * +<span class="lineNum"> 1295 </span> : : * This function writes into a file handle a command line parameter +<span class="lineNum"> 1296 </span> : : * +<span class="lineNum"> 1297 </span> : : * @param fhandle File handle to write the new parameter to +<span class="lineNum"> 1298 </span> : : * @param var_pos Variable position +<span class="lineNum"> 1299 </span> : : * @param options FKO command line option structure +<a name="1300"><span class="lineNum"> 1300 </span> : : */</a> +<span class="lineNum"> 1301 </span> : : static void +<span class="lineNum"> 1302 </span> :<span class="lineNoCov"> 0 : add_single_var_to_rc(FILE* fhandle, short var_pos, fko_cli_options_t *options)</span> +<span class="lineNum"> 1303 </span> : : { +<span class="lineNum"> 1304 </span> :<span class="lineNoCov"> 0 : char val[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1305 </span> : : fko_var_t *var; +<span class="lineNum"> 1306 </span> : : +<span class="lineNum"> 1307 </span> :<span class="lineNoCov"> 0 : var = lookup_var_by_position(var_pos);</span> +<span class="lineNum"> 1308 </span> : : +<span class="lineNum"> 1309 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (var == NULL)</span> +<span class="lineNum"> 1310 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1311 </span> : : +<span class="lineNum"> 1312 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (fhandle == NULL)</span> +<span class="lineNum"> 1313 </span> : : return; +<span class="lineNum"> 1314 </span> : : +<span class="lineNum"> 1315 </span> : : /* Select the argument to add and store its string value into val */ +<span class="lineNum"> 1316 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span> :<span class="lineNoCov"> 0 : switch (var-&gt;pos)</span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span><span class="branchNoExec" title="Branch 8 was not executed"> # </span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 9 was not executed"> # </span><span class="branchNoExec" title="Branch 10 was not executed"> # </span><span class="branchNoExec" title="Branch 11 was not executed"> # </span><span class="branchNoExec" title="Branch 12 was not executed"> # </span><span class="branchNoExec" title="Branch 13 was not executed"> # </span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 14 was not executed"> # </span><span class="branchNoExec" title="Branch 15 was not executed"> # </span><span class="branchNoExec" title="Branch 16 was not executed"> # </span><span class="branchNoExec" title="Branch 17 was not executed"> # </span><span class="branchNoExec" title="Branch 18 was not executed"> # </span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 19 was not executed"> # </span><span class="branchNoExec" title="Branch 20 was not executed"> # </span><span class="branchNoExec" title="Branch 21 was not executed"> # </span><span class="branchNoExec" title="Branch 22 was not executed"> # </span><span class="branchNoExec" title="Branch 23 was not executed"> # </span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 24 was not executed"> # </span><span class="branchNoExec" title="Branch 25 was not executed"> # </span><span class="branchNoExec" title="Branch 26 was not executed"> # </span><span class="branchNoExec" title="Branch 27 was not executed"> # </span><span class="branchNoExec" title="Branch 28 was not executed"> # </span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 29 was not executed"> # </span><span class="branchNoExec" title="Branch 30 was not executed"> # </span><span class="branchNoExec" title="Branch 31 was not executed"> # </span><span class="branchNoExec" title="Branch 32 was not executed"> # </span><span class="branchNoExec" title="Branch 33 was not executed"> # </span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 34 was not executed"> # </span><span class="branchNoExec" title="Branch 35 was not executed"> # </span><span class="branchNoExec" title="Branch 36 was not executed"> # </span><span class="branchNoExec" title="Branch 37 was not executed"> # </span><span class="branchNoExec" title="Branch 38 was not executed"> # </span> +<span class="lineNum"> </span> <span class="branchNoExec" title="Branch 39 was not executed"> # </span><span class="branchNoExec" title="Branch 40 was not executed"> # </span><span class="branchNoExec" title="Branch 41 was not executed"> # </span>] +<span class="lineNum"> 1317 </span> : : { +<span class="lineNum"> 1318 </span> : : case FWKNOP_CLI_ARG_DIGEST_TYPE : +<span class="lineNum"> 1319 </span> :<span class="lineNoCov"> 0 : digest_inttostr(options-&gt;digest_type, val, sizeof(val));</span> +<span class="lineNum"> 1320 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1321 </span> : : case FWKNOP_CLI_ARG_SPA_SERVER_PROTO : +<span class="lineNum"> 1322 </span> :<span class="lineNoCov"> 0 : proto_inttostr(options-&gt;spa_proto, val, sizeof(val));</span> +<span class="lineNum"> 1323 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1324 </span> : : case FWKNOP_CLI_ARG_SPA_SERVER_PORT : +<span class="lineNum"> 1325 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;spa_dst_port);</span> +<span class="lineNum"> 1326 </span> : : break; +<span class="lineNum"> 1327 </span> : : case FWKNOP_CLI_ARG_SPA_SOURCE_PORT : +<span class="lineNum"> 1328 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;spa_src_port);</span> +<span class="lineNum"> 1329 </span> : : break; +<span class="lineNum"> 1330 </span> : : case FWKNOP_CLI_ARG_FW_TIMEOUT : +<span class="lineNum"> 1331 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;fw_timeout);</span> +<span class="lineNum"> 1332 </span> : : break; +<span class="lineNum"> 1333 </span> : : case FWKNOP_CLI_ARG_ALLOW_IP : +<span class="lineNum"> 1334 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;allow_ip_str, sizeof(val));</span> +<span class="lineNum"> 1335 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1336 </span> : : case FWKNOP_CLI_ARG_TIME_OFFSET : +<span class="lineNum"> 1337 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;time_offset_minus != 0)</span> +<span class="lineNum"> 1338 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;-%d&quot;, options-&gt;time_offset_minus);</span> +<span class="lineNum"> 1339 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (options-&gt;time_offset_plus != 0)</span> +<span class="lineNum"> 1340 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;time_offset_plus);</span> +<span class="lineNum"> 1341 </span> : : else; +<span class="lineNum"> 1342 </span> : : break; +<span class="lineNum"> 1343 </span> : : case FWKNOP_CLI_ARG_ENCRYPTION_MODE : +<span class="lineNum"> 1344 </span> :<span class="lineNoCov"> 0 : enc_mode_inttostr(options-&gt;encryption_mode, val, sizeof(val));</span> +<span class="lineNum"> 1345 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1346 </span> : : case FWKNOP_CLI_ARG_USE_GPG : +<span class="lineNum"> 1347 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_gpg, val, sizeof(val));</span> +<span class="lineNum"> 1348 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1349 </span> : : case FWKNOP_CLI_ARG_USE_GPG_AGENT : +<span class="lineNum"> 1350 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_gpg_agent, val, sizeof(val));</span> +<span class="lineNum"> 1351 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1352 </span> : : case FWKNOP_CLI_ARG_GPG_RECIPIENT : +<span class="lineNum"> 1353 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_recipient_key, sizeof(val));</span> +<span class="lineNum"> 1354 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1355 </span> : : case FWKNOP_CLI_ARG_GPG_SIGNER : +<span class="lineNum"> 1356 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_signer_key, sizeof(val));</span> +<span class="lineNum"> 1357 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1358 </span> : : case FWKNOP_CLI_ARG_GPG_HOMEDIR : +<span class="lineNum"> 1359 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_home_dir, sizeof(val));</span> +<span class="lineNum"> 1360 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1361 </span> : : case FWKNOP_CLI_ARG_GPG_EXE_PATH : +<span class="lineNum"> 1362 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_exe, sizeof(val));</span> +<span class="lineNum"> 1363 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1364 </span> : : case FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW : +<span class="lineNum"> 1365 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;gpg_no_signing_pw, val, sizeof(val));</span> +<span class="lineNum"> 1366 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1367 </span> : : case FWKNOP_CLI_ARG_SPOOF_USER : +<span class="lineNum"> 1368 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;spoof_user, sizeof(val));</span> +<span class="lineNum"> 1369 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1370 </span> : : case FWKNOP_CLI_ARG_SPOOF_SOURCE_IP : +<span class="lineNum"> 1371 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;spoof_ip_src_str, sizeof(val));</span> +<span class="lineNum"> 1372 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1373 </span> : : case FWKNOP_CLI_ARG_ACCESS : +<span class="lineNum"> 1374 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;access_str, sizeof(val));</span> +<span class="lineNum"> 1375 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1376 </span> : : case FWKNOP_CLI_ARG_SPA_SERVER : +<span class="lineNum"> 1377 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;spa_server_str, sizeof(val));</span> +<span class="lineNum"> 1378 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1379 </span> : : case FWKNOP_CLI_ARG_RAND_PORT : +<span class="lineNum"> 1380 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;rand_port, val, sizeof(val));</span> +<span class="lineNum"> 1381 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1382 </span> : : case FWKNOP_CLI_ARG_KEY_FILE : +<span class="lineNum"> 1383 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;get_key_file, sizeof(val));</span> +<span class="lineNum"> 1384 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1385 </span> : : case FWKNOP_CLI_ARG_HMAC_KEY_FILE : +<span class="lineNum"> 1386 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;get_hmac_key_file, sizeof(val));</span> +<span class="lineNum"> 1387 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1388 </span> : : case FWKNOP_CLI_ARG_KEY_RIJNDAEL: +<span class="lineNum"> 1389 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;key, sizeof(val));</span> +<span class="lineNum"> 1390 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1391 </span> : : case FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64: +<span class="lineNum"> 1392 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;key_base64, sizeof(val));</span> +<span class="lineNum"> 1393 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1394 </span> : : case FWKNOP_CLI_ARG_KEY_HMAC_BASE64: +<span class="lineNum"> 1395 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;hmac_key_base64, sizeof(val));</span> +<span class="lineNum"> 1396 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1397 </span> : : case FWKNOP_CLI_ARG_KEY_HMAC: +<span class="lineNum"> 1398 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;hmac_key, sizeof(val));</span> +<span class="lineNum"> 1399 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1400 </span> : : case FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE : +<span class="lineNum"> 1401 </span> :<span class="lineNoCov"> 0 : hmac_digest_inttostr(options-&gt;hmac_type, val, sizeof(val));</span> +<span class="lineNum"> 1402 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1403 </span> : : case FWKNOP_CLI_ARG_USE_HMAC : +<span class="lineNum"> 1404 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_hmac, val, sizeof(val));</span> +<span class="lineNum"> 1405 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1406 </span> : : case FWKNOP_CLI_ARG_USE_WGET_USER_AGENT : +<span class="lineNum"> 1407 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_wget_user_agent, val, sizeof(val));</span> +<span class="lineNum"> 1408 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1409 </span> : : case FWKNOP_CLI_ARG_NAT_ACCESS : +<span class="lineNum"> 1410 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;nat_access_str, sizeof(val));</span> +<span class="lineNum"> 1411 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1412 </span> : : case FWKNOP_CLI_ARG_HTTP_USER_AGENT : +<span class="lineNum"> 1413 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;http_user_agent, sizeof(val));</span> +<span class="lineNum"> 1414 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1415 </span> : : case FWKNOP_CLI_ARG_RESOLVE_URL : +<span class="lineNum"> 1416 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;resolve_url != NULL)</span> +<span class="lineNum"> 1417 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;resolve_url, sizeof(val));</span> +<span class="lineNum"> 1418 </span> : : else; +<span class="lineNum"> 1419 </span> : : break; +<span class="lineNum"> 1420 </span> : : case FWKNOP_CLI_ARG_NAT_LOCAL : +<span class="lineNum"> 1421 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;nat_local, val, sizeof(val));</span> +<span class="lineNum"> 1422 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1423 </span> : : case FWKNOP_CLI_ARG_NAT_RAND_PORT : +<span class="lineNum"> 1424 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;nat_rand_port, val, sizeof(val));</span> +<span class="lineNum"> 1425 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1426 </span> : : case FWKNOP_CLI_ARG_NAT_PORT : +<span class="lineNum"> 1427 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;nat_port);</span> +<span class="lineNum"> 1428 </span> : : break; +<span class="lineNum"> 1429 </span> : : case FWKNOP_CLI_ARG_VERBOSE: +<span class="lineNum"> 1430 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;verbose == 0) || (options-&gt;verbose == 1))</span> +<span class="lineNum"> 1431 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;verbose, val, sizeof(val));</span> +<span class="lineNum"> 1432 </span> : : else +<span class="lineNum"> 1433 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;verbose);</span> +<span class="lineNum"> 1434 </span> : : break; +<span class="lineNum"> 1435 </span> : : case FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS: +<span class="lineNum"> 1436 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;resolve_ip_http_https, val, sizeof(val));</span> +<span class="lineNum"> 1437 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1438 </span> : : case FWKNOP_CLI_ARG_RESOLVE_IP_HTTP: +<span class="lineNum"> 1439 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;resolve_ip_http_https, val, sizeof(val));</span> +<span class="lineNum"> 1440 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1441 </span> : : case FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY: +<span class="lineNum"> 1442 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;resolve_http_only, val, sizeof(val));</span> +<span class="lineNum"> 1443 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1444 </span> : : case FWKNOP_CLI_ARG_WGET_CMD : +<span class="lineNum"> 1445 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;wget_bin != NULL)</span> +<span class="lineNum"> 1446 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;wget_bin, sizeof(val));</span> +<span class="lineNum"> 1447 </span> : : break; +<span class="lineNum"> 1448 </span> : : case FWKNOP_CLI_ARG_NO_SAVE_ARGS : +<span class="lineNum"> 1449 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;no_save_args, val, sizeof(val));</span> +<span class="lineNum"> 1450 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1451 </span> : : default: +<span class="lineNum"> 1452 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Warning from add_single_var_to_rc() : Bad variable position %u&quot;, var-&gt;pos);</span> +<span class="lineNum"> 1453 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1454 </span> : : } +<span class="lineNum"> 1455 </span> : : +<span class="lineNum"> 1456 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;add_single_var_to_rc() : Updating param (%u) %s to %s&quot;,</span> +<span class="lineNum"> 1457 </span> :<span class="lineNoCov"> 0 : var-&gt;pos, var-&gt;name, val);</span> +<span class="lineNum"> 1458 </span> : : +<span class="lineNum"> 1459 </span> :<span class="lineNoCov"> 0 : fprintf(fhandle, RC_PARAM_TEMPLATE, var-&gt;name, val);</span> +<span class="lineNum"> 1460 </span> : : } +<span class="lineNum"> 1461 </span> : : +<span class="lineNum"> 1462 </span> : : /** +<span class="lineNum"> 1463 </span> : : * @brief Add configuration variables in a file +<span class="lineNum"> 1464 </span> : : * +<span class="lineNum"> 1465 </span> : : * The parameters are selected by a bitmask and extracted from the +<span class="lineNum"> 1466 </span> : : * fko_cli_options_t structure. +<span class="lineNum"> 1467 </span> : : * +<span class="lineNum"> 1468 </span> : : * @param rc File handle on the file to write to +<span class="lineNum"> 1469 </span> : : * @param options fko_cli_options_t structure containing the values of the parameters +<span class="lineNum"> 1470 </span> : : * @param bitmask Bitmask used to select the parameters to add +<a name="1471"><span class="lineNum"> 1471 </span> : : */</a> +<span class="lineNum"> 1472 </span> : : static void +<span class="lineNum"> 1473 </span> :<span class="lineNoCov"> 0 : add_multiple_vars_to_rc(FILE* rc, fko_cli_options_t *options, fko_var_bitmask_t *bitmask)</span> +<span class="lineNum"> 1474 </span> : : { +<span class="lineNum"> 1475 </span> :<span class="lineNoCov"> 0 : short ndx = 0; /* Index of a configuration variable in fko_var_array table */</span> +<span class="lineNum"> 1476 </span> : : short position; /* Position of the configuration variable */ +<span class="lineNum"> 1477 </span> : : +<span class="lineNum"> 1478 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(fko_var_array) ; ndx++)</span> +<span class="lineNum"> 1479 </span> : : { +<span class="lineNum"> 1480 </span> :<span class="lineNoCov"> 0 : position = fko_var_array[ndx].pos;</span> +<span class="lineNum"> 1481 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bitmask_has_var(position, bitmask))</span> +<span class="lineNum"> 1482 </span> :<span class="lineNoCov"> 0 : add_single_var_to_rc(rc, position, options);</span> +<span class="lineNum"> 1483 </span> : : } +<span class="lineNum"> 1484 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 1485 </span> : : +<span class="lineNum"> 1486 </span> : : /** +<span class="lineNum"> 1487 </span> : : * @brief Process the fwknoprc file and lookup a section to extract its settings. +<span class="lineNum"> 1488 </span> : : * +<span class="lineNum"> 1489 </span> : : * This function aims at loading the settings for a specific section in +<span class="lineNum"> 1490 </span> : : * a fwknoprc file. +<span class="lineNum"> 1491 </span> : : * +<span class="lineNum"> 1492 </span> : : * @param section_name Name of the section to lookup. +<span class="lineNum"> 1493 </span> : : * @param options Fwknop option structure where settings have to +<span class="lineNum"> 1494 </span> : : * be stored. +<span class="lineNum"> 1495 </span> : : * +<span class="lineNum"> 1496 </span> : : * @return 0 if the section has been found and processed successfully +<span class="lineNum"> 1497 </span> : : * a negative value if one or more errors occured +<a name="1498"><span class="lineNum"> 1498 </span> : : */</a> +<span class="lineNum"> 1499 </span> : : static int +<span class="lineNum"> 1500 </span> :<span class="lineCov"> 2890 : process_rc_section(char *section_name, fko_cli_options_t *options)</span> +<span class="lineNum"> 1501 </span> : : { +<span class="lineNum"> 1502 </span> : : FILE *rc; +<span class="lineNum"> 1503 </span> :<span class="lineCov"> 2890 : int line_num = 0, do_exit = 0;</span> +<span class="lineNum"> 1504 </span> :<span class="lineCov"> 2890 : char line[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1505 </span> :<span class="lineCov"> 2890 : char rcfile[MAX_PATH_LEN] = {0};</span> +<span class="lineNum"> 1506 </span> :<span class="lineCov"> 2890 : char curr_stanza[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1507 </span> : : rc_file_param_t param; +<span class="lineNum"> 1508 </span> :<span class="lineCov"> 2890 : int rc_section_found = 0;</span> +<span class="lineNum"> 1509 </span> : : +<span class="lineNum"> 1510 </span> :<span class="lineCov"> 2890 : set_rc_file(rcfile, options);</span> +<span class="lineNum"> 1511 </span> : : +<span class="lineNum"> 1512 </span> : : /* Open the rc file for reading, if it does not exist, then create +<span class="lineNum"> 1513 </span> : : * an initial .fwknoprc file with defaults and go on. +<span class="lineNum"> 1514 </span> : : */ +<span class="lineNum"> 1515 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if ((rc = fopen(rcfile, &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 1516 </span> : : { +<span class="lineNum"> 1517 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == ENOENT)</span> +<span class="lineNum"> 1518 </span> : : { +<span class="lineNum"> 1519 </span> :<span class="lineNoCov"> 0 : if(create_fwknoprc(rcfile) != 0)</span> +<span class="lineNum"> 1520 </span> : : return -1; +<span class="lineNum"> 1521 </span> : : } +<span class="lineNum"> 1522 </span> : : else +<span class="lineNum"> 1523 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to open rc file: %s: %s&quot;,</span> +<span class="lineNum"> 1524 </span> : : rcfile, strerror(errno)); +<span class="lineNum"> 1525 </span> : : +<span class="lineNum"> 1526 </span> : : return -1; +<span class="lineNum"> 1527 </span> : : } +<span class="lineNum"> 1528 </span> : : +<span class="lineNum"> 1529 </span> :<span class="lineCov"> 2890 : log_msg(LOG_VERBOSITY_DEBUG, &quot;process_rc_section() : Parsing section '%s' ...&quot;,</span> +<span class="lineNum"> 1530 </span> : : section_name); +<span class="lineNum"> 1531 </span> : : +<span class="lineNum"> 1532 </span> [<span class="branchCov" title="Branch 0 was taken 193333 times"> + </span><span class="branchCov" title="Branch 1 was taken 2122 times"> + </span>]:<span class="lineCov"> 198345 : while ((fgets(line, MAX_LINE_LEN, rc)) != NULL)</span> +<span class="lineNum"> 1533 </span> : : { +<span class="lineNum"> 1534 </span> :<span class="lineCov"> 193333 : line_num++;</span> +<span class="lineNum"> 1535 </span> :<span class="lineCov"> 193333 : line[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 1536 </span> : : +<span class="lineNum"> 1537 </span> : : /* Get past comments and empty lines (note: we only look at the +<span class="lineNum"> 1538 </span> : : * first character. +<span class="lineNum"> 1539 </span> : : */ +<span class="lineNum"> 1540 </span>[<span class="branchCov" title="Branch 0 was taken 154338 times"> + </span><span class="branchCov" title="Branch 1 was taken 38995 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 154338 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 193333 : if(IS_EMPTY_LINE(line[0]))</span> +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 153359 times"> + </span><span class="branchCov" title="Branch 5 was taken 979 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 985 times"> + </span><span class="branchCov" title="Branch 7 was taken 152374 times"> + </span>] +<span class="lineNum"> 1541 </span> :<span class="lineCov"> 40959 : continue;</span> +<span class="lineNum"> 1542 </span> : : +<span class="lineNum"> 1543 </span> : : /* Check which section we are working on */ +<span class="lineNum"> 1544 </span> [<span class="branchCov" title="Branch 1 was taken 8786 times"> + </span><span class="branchCov" title="Branch 2 was taken 143588 times"> + </span>]:<span class="lineCov"> 152374 : if (is_rc_section(line, strlen(line), curr_stanza, sizeof(curr_stanza)))</span> +<span class="lineNum"> 1545 </span> : : { +<span class="lineNum"> 1546 </span> :<span class="lineCov"> 8786 : rc_section_found = (strcasecmp(curr_stanza, section_name) == 0) ? 1 : 0;</span> +<span class="lineNum"> 1547 </span> : : +<span class="lineNum"> 1548 </span> [<span class="branchCov" title="Branch 0 was taken 3063 times"> + </span><span class="branchCov" title="Branch 1 was taken 5723 times"> + </span>]:<span class="lineCov"> 8786 : if (strcasecmp(curr_stanza, options-&gt;use_rc_stanza) == 0)</span> +<span class="lineNum"> 1549 </span> :<span class="lineCov"> 3063 : options-&gt;got_named_stanza = 1;</span> +<span class="lineNum"> 1550 </span> : : +<span class="lineNum"> 1551 </span> :<span class="lineCov"> 8786 : continue;</span> +<span class="lineNum"> 1552 </span> : : } +<span class="lineNum"> 1553 </span> : : +<span class="lineNum"> 1554 </span> : : /* We are not in the good section */ +<span class="lineNum"> 1555 </span> [<span class="branchCov" title="Branch 0 was taken 34408 times"> + </span><span class="branchCov" title="Branch 1 was taken 109180 times"> + </span>]:<span class="lineCov"> 143588 : else if (rc_section_found == 0)</span> +<span class="lineNum"> 1556 </span> :<span class="lineCov"> 34408 : continue;</span> +<span class="lineNum"> 1557 </span> : : +<span class="lineNum"> 1558 </span> : : /* We have not found a valid parameter */ +<span class="lineNum"> 1559 </span> [<span class="branchCov" title="Branch 1 was taken 108412 times"> + </span><span class="branchCov" title="Branch 2 was taken 768 times"> + </span>]:<span class="lineCov"> 109180 : else if (is_rc_param(line, &amp;param) == 0)</span> +<span class="lineNum"> 1560 </span> : : { +<span class="lineNum"> 1561 </span> : : do_exit = 1; /* We don't allow improperly formatted lines */ +<span class="lineNum"> 1562 </span> : : break; +<span class="lineNum"> 1563 </span> : : } +<span class="lineNum"> 1564 </span> : : +<span class="lineNum"> 1565 </span> : : /* We have a valid parameter */ +<span class="lineNum"> 1566 </span> : : else +<span class="lineNum"> 1567 </span> : : { +<span class="lineNum"> 1568 </span> [<span class="branchCov" title="Branch 1 was taken 65140 times"> + </span><span class="branchCov" title="Branch 2 was taken 43272 times"> + </span>]:<span class="lineCov"> 108412 : if(parse_rc_param(options, param.name, param.val) &lt; 0)</span> +<span class="lineNum"> 1569 </span> : : { +<span class="lineNum"> 1570 </span> :<span class="lineCov"> 65140 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1571 </span> : : &quot;Parameter error in %s, line %i: var=%s, val=%s&quot;, +<span class="lineNum"> 1572 </span> : : rcfile, line_num, param.name, param.val); +<span class="lineNum"> 1573 </span> :<span class="lineCov"> 192565 : do_exit = 1;</span> +<span class="lineNum"> 1574 </span> : : } +<span class="lineNum"> 1575 </span> : : } +<span class="lineNum"> 1576 </span> : : } +<span class="lineNum"> 1577 </span> : : +<span class="lineNum"> 1578 </span> :<span class="lineCov"> 2890 : fclose(rc);</span> +<span class="lineNum"> 1579 </span> : : +<span class="lineNum"> 1580 </span> [<span class="branchCov" title="Branch 0 was taken 1476 times"> + </span><span class="branchCov" title="Branch 1 was taken 1414 times"> + </span>]:<span class="lineCov"> 2890 : if (do_exit)</span> +<span class="lineNum"> 1581 </span> :<span class="lineCov"> 1476 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1582 </span> : : +<span class="lineNum"> 1583 </span> : : return 0; +<span class="lineNum"> 1584 </span> : : } +<span class="lineNum"> 1585 </span> : : +<span class="lineNum"> 1586 </span> : : /** +<span class="lineNum"> 1587 </span> : : * @brief Update the user rc file with the new parameters for a selected stanza. +<span class="lineNum"> 1588 </span> : : * +<span class="lineNum"> 1589 </span> : : * This function writes the new configuration in a temporary file and renames it +<span class="lineNum"> 1590 </span> : : * as the new rc file afterwards. All of the previous parameters for the +<span class="lineNum"> 1591 </span> : : * selected stanza are removed and replaced by the arguments from the command +<span class="lineNum"> 1592 </span> : : * line. +<span class="lineNum"> 1593 </span> : : * +<span class="lineNum"> 1594 </span> : : * @param options structure containing all of the fko settings +<span class="lineNum"> 1595 </span> : : * @param args_bitmask command line argument bitmask +<a name="1596"><span class="lineNum"> 1596 </span> : : */</a> +<span class="lineNum"> 1597 </span> : : static void +<span class="lineNum"> 1598 </span> :<span class="lineNoCov"> 0 : update_rc(fko_cli_options_t *options, fko_var_bitmask_t *bitmask)</span> +<span class="lineNum"> 1599 </span> : : { +<span class="lineNum"> 1600 </span> : : FILE *rc; +<span class="lineNum"> 1601 </span> : : FILE *rc_update; +<span class="lineNum"> 1602 </span> :<span class="lineNoCov"> 0 : int rcfile_fd = -1;</span> +<span class="lineNum"> 1603 </span> :<span class="lineNoCov"> 0 : int stanza_found = 0;</span> +<span class="lineNum"> 1604 </span> :<span class="lineNoCov"> 0 : int stanza_updated = 0;</span> +<span class="lineNum"> 1605 </span> :<span class="lineNoCov"> 0 : char line[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1606 </span> :<span class="lineNoCov"> 0 : char rcfile[MAX_PATH_LEN] = {0};</span> +<span class="lineNum"> 1607 </span> :<span class="lineNoCov"> 0 : char rcfile_update[MAX_PATH_LEN] = {0};</span> +<span class="lineNum"> 1608 </span> :<span class="lineNoCov"> 0 : char curr_stanza[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1609 </span> : : rc_file_param_t param; /* Structure to contain a conf. variable name with its value */ +<span class="lineNum"> 1610 </span> : : fko_var_t *var; +<span class="lineNum"> 1611 </span> : : +<span class="lineNum"> 1612 </span> :<span class="lineNoCov"> 0 : set_rc_file(rcfile, options);</span> +<span class="lineNum"> 1613 </span> : : +<span class="lineNum"> 1614 </span> :<span class="lineNoCov"> 0 : strlcpy(rcfile_update, rcfile, sizeof(rcfile_update));</span> +<span class="lineNum"> 1615 </span> :<span class="lineNoCov"> 0 : strlcat(rcfile_update, &quot;.updated&quot;, sizeof(rcfile_update));</span> +<span class="lineNum"> 1616 </span> : : +<span class="lineNum"> 1617 </span> : : /* Create a new temporary rc file */ +<span class="lineNum"> 1618 </span> :<span class="lineNoCov"> 0 : rcfile_fd = open(rcfile_update, FWKNOPRC_OFLAGS, FWKNOPRC_MODE);</span> +<span class="lineNum"> 1619 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (rcfile_fd == -1)</span> +<span class="lineNum"> 1620 </span> : : { +<span class="lineNum"> 1621 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1622 </span> : : &quot;update_rc() : Unable to create temporary rc file: %s: %s&quot;, +<span class="lineNum"> 1623 </span> :<span class="lineNoCov"> 0 : rcfile_update, strerror(errno));</span> +<span class="lineNum"> 1624 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1625 </span> : : } +<span class="lineNum"> 1626 </span> :<span class="lineNoCov"> 0 : close(rcfile_fd);</span> +<span class="lineNum"> 1627 </span> : : +<span class="lineNum"> 1628 </span> : : /* Open the current rcfile and a temporary one respectively in read and +<span class="lineNum"> 1629 </span> : : * write mode */ +<span class="lineNum"> 1630 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc = fopen(rcfile, &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 1631 </span> : : { +<span class="lineNum"> 1632 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1633 </span> : : &quot;update_rc() : Unable to open rc file: %s: %s&quot;, +<span class="lineNum"> 1634 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> +<span class="lineNum"> 1635 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1636 </span> : : } +<span class="lineNum"> 1637 </span> : : +<span class="lineNum"> 1638 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc_update = fopen(rcfile_update, &quot;w&quot;)) == NULL)</span> +<span class="lineNum"> 1639 </span> : : { +<span class="lineNum"> 1640 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1641 </span> : : &quot;update_rc() : Unable to open rc file: %s: %s&quot;, +<span class="lineNum"> 1642 </span> :<span class="lineNoCov"> 0 : rcfile_update, strerror(errno));</span> +<span class="lineNum"> 1643 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> +<span class="lineNum"> 1644 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1645 </span> : : } +<span class="lineNum"> 1646 </span> : : +<span class="lineNum"> 1647 </span> : : /* Go through the file line by line */ +<span class="lineNum"> 1648 </span> : : stanza_found = 0; +<span class="lineNum"> 1649 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ((fgets(line, MAX_LINE_LEN, rc)) != NULL)</span> +<span class="lineNum"> 1650 </span> : : { +<span class="lineNum"> 1651 </span> :<span class="lineNoCov"> 0 : line[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 1652 </span> : : +<span class="lineNum"> 1653 </span> : : /* Get past comments and empty lines (note: we only look at the +<span class="lineNum"> 1654 </span> : : * first character. +<span class="lineNum"> 1655 </span> : : */ +<span class="lineNum"> 1656 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_EMPTY_LINE(line[0]))</span> +<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] +<span class="lineNum"> 1657 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 1658 </span> : : +<span class="lineNum"> 1659 </span> : : /* If we find a section... */ +<span class="lineNum"> 1660 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_rc_section(line, strlen(line), curr_stanza, sizeof(curr_stanza)) == 1)</span> +<span class="lineNum"> 1661 </span> : : { +<span class="lineNum"> 1662 </span> : : /* and we have already parsed the section we wanted to save, we +<span class="lineNum"> 1663 </span> : : * can update our parameters */ +<span class="lineNum"> 1664 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (stanza_found)</span> +<span class="lineNum"> 1665 </span> : : { +<span class="lineNum"> 1666 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;update_rc() : Updating %s stanza&quot;, options-&gt;use_rc_stanza);</span> +<span class="lineNum"> 1667 </span> :<span class="lineNoCov"> 0 : add_multiple_vars_to_rc(rc_update, options, bitmask);</span> +<span class="lineNum"> 1668 </span> : : fprintf(rc_update, &quot;\n&quot;); +<span class="lineNum"> 1669 </span> :<span class="lineNoCov"> 0 : stanza_found = 0;</span> +<span class="lineNum"> 1670 </span> :<span class="lineNoCov"> 0 : stanza_updated = 1;</span> +<span class="lineNum"> 1671 </span> : : } +<span class="lineNum"> 1672 </span> : : +<span class="lineNum"> 1673 </span> : : /* and this is the one we are looking for, we set the stanza +<span class="lineNum"> 1674 </span> : : * as found */ +<span class="lineNum"> 1675 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (strncasecmp(curr_stanza, options-&gt;use_rc_stanza, MAX_LINE_LEN) == 0)</span> +<span class="lineNum"> 1676 </span> : : stanza_found = 1; +<span class="lineNum"> 1677 </span> : : +<span class="lineNum"> 1678 </span> : : /* otherwise we disable the stanza */ +<span class="lineNum"> 1679 </span> : : else +<span class="lineNum"> 1680 </span> :<span class="lineNoCov"> 0 : stanza_found = 0;</span> +<span class="lineNum"> 1681 </span> : : } +<span class="lineNum"> 1682 </span> : : +<span class="lineNum"> 1683 </span> : : /* If we are processing a parameter for our stanza */ +<span class="lineNum"> 1684 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (stanza_found)</span> +<span class="lineNum"> 1685 </span> : : { +<span class="lineNum"> 1686 </span> : : /* and the user has specified a force option, there is no need to +<span class="lineNum"> 1687 </span> : : * check for critical variables */ +<span class="lineNum"> 1688 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;force_save_rc_stanza)</span> +<span class="lineNum"> 1689 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 1690 </span> : : +<span class="lineNum"> 1691 </span> : : /* ask the user what to do with the critical var found in the +<span class="lineNum"> 1692 </span> : : * rcfile */ +<span class="lineNum"> 1693 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (is_rc_param(line, &amp;param))</span> +<span class="lineNum"> 1694 </span> : : { +<span class="lineNum"> 1695 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( ((var=lookup_var_by_name(param.name)) != NULL)</span> +<span class="lineNum"> 1696 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; var_is_critical(var-&gt;pos) )</span> +<span class="lineNum"> 1697 </span> : : { +<span class="lineNum"> 1698 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ask_overwrite_var(var-&gt;name, curr_stanza))</span> +<span class="lineNum"> 1699 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 1700 </span> : : else +<span class="lineNum"> 1701 </span> :<span class="lineNoCov"> 0 : remove_var_from_bitmask(var-&gt;pos, bitmask);</span> +<span class="lineNum"> 1702 </span> : : } +<span class="lineNum"> 1703 </span> : : else +<span class="lineNum"> 1704 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 1705 </span> : : } +<span class="lineNum"> 1706 </span> : : else +<span class="lineNum"> 1707 </span> : : { +<span class="lineNum"> 1708 </span> : : /* is_rc_param() returns false only when there is an +<span class="lineNum"> 1709 </span> : : * improperly formatted line - bail +<span class="lineNum"> 1710 </span> : : */ +<span class="lineNum"> 1711 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> +<span class="lineNum"> 1712 </span> :<span class="lineNoCov"> 0 : fclose(rc_update);</span> +<span class="lineNum"> 1713 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1714 </span> : : } +<span class="lineNum"> 1715 </span> : : } +<span class="lineNum"> 1716 </span> : : +<span class="lineNum"> 1717 </span> : : /* We're not processing any important variables from our stanza and no new +<span class="lineNum"> 1718 </span> : : * stanza */ +<span class="lineNum"> 1719 </span> : : else; +<span class="lineNum"> 1720 </span> : : +<span class="lineNum"> 1721 </span> : : /* Add the line to the new rcfile */ +<span class="lineNum"> 1722 </span> : : fprintf(rc_update, &quot;%s&quot;, line); +<span class="lineNum"> 1723 </span> : : } +<span class="lineNum"> 1724 </span> : : +<span class="lineNum"> 1725 </span> : : /* The configuration has not been updated yet */ +<span class="lineNum"> 1726 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (stanza_updated == 0)</span> +<span class="lineNum"> 1727 </span> : : { +<span class="lineNum"> 1728 </span> : : /* but the stanza has been found, We update it now. */ +<span class="lineNum"> 1729 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (stanza_found == 1)</span> +<span class="lineNum"> 1730 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;update_rc() : Updating %s stanza&quot;,</span> +<span class="lineNum"> 1731 </span> :<span class="lineNoCov"> 0 : options-&gt;use_rc_stanza);</span> +<span class="lineNum"> 1732 </span> : : +<span class="lineNum"> 1733 </span> : : /* otherwise we append the new settings to the file */ +<span class="lineNum"> 1734 </span> : : else +<span class="lineNum"> 1735 </span> : : { +<span class="lineNum"> 1736 </span> : : fprintf(rc_update, &quot;\n&quot;); +<span class="lineNum"> 1737 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;update_rc() : Inserting new %s stanza&quot;,</span> +<span class="lineNum"> 1738 </span> :<span class="lineNoCov"> 0 : options-&gt;use_rc_stanza);</span> +<span class="lineNum"> 1739 </span> :<span class="lineNoCov"> 0 : fprintf(rc_update, RC_SECTION_TEMPLATE, options-&gt;use_rc_stanza);</span> +<span class="lineNum"> 1740 </span> : : } +<span class="lineNum"> 1741 </span> : : +<span class="lineNum"> 1742 </span> :<span class="lineNoCov"> 0 : add_multiple_vars_to_rc(rc_update, options, bitmask);</span> +<span class="lineNum"> 1743 </span> : : } +<span class="lineNum"> 1744 </span> : : +<span class="lineNum"> 1745 </span> : : /* otherwise we have already done everything. Nothing to do. */ +<span class="lineNum"> 1746 </span> : : else; +<span class="lineNum"> 1747 </span> : : +<span class="lineNum"> 1748 </span> : : /* Close file handles */ +<span class="lineNum"> 1749 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> +<span class="lineNum"> 1750 </span> :<span class="lineNoCov"> 0 : fclose(rc_update);</span> +<span class="lineNum"> 1751 </span> : : +<span class="lineNum"> 1752 </span> : : /* Renamed the temporary file as the new rc file */ +<span class="lineNum"> 1753 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (remove(rcfile) != 0)</span> +<span class="lineNum"> 1754 </span> : : { +<span class="lineNum"> 1755 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1756 </span> : : &quot;update_rc() : Unable to remove %s to %s : %s&quot;, +<span class="lineNum"> 1757 </span> :<span class="lineNoCov"> 0 : rcfile_update, rcfile, strerror(errno));</span> +<span class="lineNum"> 1758 </span> : : } +<span class="lineNum"> 1759 </span> : : +<span class="lineNum"> 1760 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (rename(rcfile_update, rcfile) != 0)</span> +<span class="lineNum"> 1761 </span> : : { +<span class="lineNum"> 1762 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1763 </span> : : &quot;update_rc() : Unable to rename %s to %s&quot;, +<span class="lineNum"> 1764 </span> : : rcfile_update, rcfile); +<span class="lineNum"> 1765 </span> : : } +<span class="lineNum"> 1766 </span> : : } +<span class="lineNum"> 1767 </span> : : +<span class="lineNum"> 1768 </span> : : /* Sanity and bounds checks for the various options. +<a name="1769"><span class="lineNum"> 1769 </span> : : */</a> +<span class="lineNum"> 1770 </span> : : static void +<span class="lineNum"> 1771 </span> :<span class="lineCov"> 609 : validate_options(fko_cli_options_t *options)</span> +<span class="lineNum"> 1772 </span> : : { +<span class="lineNum"> 1773 </span> : : +<span class="lineNum"> 1774 </span> [<span class="branchCov" title="Branch 0 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 609 : if ( (options-&gt;use_rc_stanza[0] != 0x0)</span> +<span class="lineNum"> 1775 </span> : : &amp;&amp; (options-&gt;got_named_stanza == 0) +<span class="lineNum"> 1776 </span> [<span class="branchCov" title="Branch 0 was taken 39 times"> + </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>]:<span class="lineCov"> 609 : &amp;&amp; (options-&gt;save_rc_stanza == 0) )</span> +<span class="lineNum"> 1777 </span> : : { +<span class="lineNum"> 1778 </span> :<span class="lineCov"> 39 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1779 </span> : : &quot;Named configuration stanza: [%s] was not found.&quot;, +<span class="lineNum"> 1780 </span> :<span class="lineCov"> 39 : options-&gt;use_rc_stanza);</span> +<span class="lineNum"> 1781 </span> : : +<span class="lineNum"> 1782 </span> :<span class="lineCov"> 39 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1783 </span> : : } +<span class="lineNum"> 1784 </span> : : +<span class="lineNum"> 1785 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 570 : if ( (options-&gt;save_rc_stanza == 1) &amp;&amp; (options-&gt;use_rc_stanza[0] == 0) )</span> +<span class="lineNum"> 1786 </span> : : { +<span class="lineNum"> 1787 </span> : : /* Set the stanza name to the -D arg value +<span class="lineNum"> 1788 </span> : : */ +<span class="lineNum"> 1789 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_server_str[0] == 0x0)</span> +<span class="lineNum"> 1790 </span> : : { +<span class="lineNum"> 1791 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1792 </span> : : &quot;Must use --destination unless --test mode is used&quot;); +<span class="lineNum"> 1793 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1794 </span> : : } +<span class="lineNum"> 1795 </span> : : +<span class="lineNum"> 1796 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;use_rc_stanza, options-&gt;spa_server_str, sizeof(options-&gt;use_rc_stanza));</span> +<span class="lineNum"> 1797 </span> : : } +<span class="lineNum"> 1798 </span> : : +<span class="lineNum"> 1799 </span> : : /* Must have a destination unless we are just testing or getting the +<span class="lineNum"> 1800 </span> : : * the version, and must use one of [-s|-R|-a]. +<span class="lineNum"> 1801 </span> : : */ +<span class="lineNum"> 1802 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>]:<span class="lineCov"> 570 : if(!options-&gt;test</span> +<span class="lineNum"> 1803 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;key_gen</span> +<span class="lineNum"> 1804 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;version</span> +<span class="lineNum"> 1805 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;show_last_command</span> +<span class="lineNum"> 1806 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;run_last_command)</span> +<span class="lineNum"> 1807 </span> : : { +<span class="lineNum"> 1808 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_server_str[0] == 0x0)</span> +<span class="lineNum"> 1809 </span> : : { +<span class="lineNum"> 1810 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1811 </span> : : &quot;Must use --destination unless --test mode is used&quot;); +<span class="lineNum"> 1812 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1813 </span> : : } +<span class="lineNum"> 1814 </span> : : +<span class="lineNum"> 1815 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;resolve_url != NULL)</span> +<span class="lineNum"> 1816 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> +<span class="lineNum"> 1817 </span> : : +<span class="lineNum"> 1818 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!options-&gt;resolve_ip_http_https)</span> +<span class="lineNum"> 1819 </span> : : { +<span class="lineNum"> 1820 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;allow_ip_str[0] == 0x0)</span> +<span class="lineNum"> 1821 </span> : : { +<span class="lineNum"> 1822 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1823 </span> : : &quot;Must use one of [-s|-R|-a] to specify IP for SPA access.&quot;); +<span class="lineNum"> 1824 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1825 </span> : : } +<span class="lineNum"> 1826 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(options-&gt;verbose</span> +<span class="lineNum"> 1827 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncmp(options-&gt;allow_ip_str, &quot;0.0.0.0&quot;, strlen(&quot;0.0.0.0&quot;)) == 0)</span> +<span class="lineNum"> 1828 </span> : : { +<span class="lineNum"> 1829 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1830 </span> : : &quot;[-] WARNING: Should use -a or -R to harden SPA against potential MITM attacks&quot;); +<span class="lineNum"> 1831 </span> : : } +<span class="lineNum"> 1832 </span> : : } +<span class="lineNum"> 1833 </span> : : } +<span class="lineNum"> 1834 </span> : : +<span class="lineNum"> 1835 </span> : : /* Make sure -a overrides IP resolution +<span class="lineNum"> 1836 </span> : : */ +<span class="lineNum"> 1837 </span> [<span class="branchCov" title="Branch 0 was taken 570 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 570 : if(options-&gt;allow_ip_str[0] != 0x0</span> +<span class="lineNum"> 1838 </span> [<span class="branchCov" title="Branch 0 was taken 570 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 570 : &amp;&amp; strncasecmp(options-&gt;allow_ip_str, &quot;resolve&quot;, strlen(&quot;resolve&quot;)) != 0)</span> +<span class="lineNum"> 1839 </span> : : { +<span class="lineNum"> 1840 </span> :<span class="lineCov"> 570 : options-&gt;resolve_ip_http_https = 0;</span> +<span class="lineNum"> 1841 </span> : : +<span class="lineNum"> 1842 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 570 times"> + </span>]:<span class="lineCov"> 570 : if(! is_valid_ipv4_addr(options-&gt;allow_ip_str))</span> +<span class="lineNum"> 1843 </span> : : { +<span class="lineNum"> 1844 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1845 </span> : : &quot;Invalid allow IP specified for SPA access&quot;); +<span class="lineNum"> 1846 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1847 </span> : : } +<span class="lineNum"> 1848 </span> : : } +<span class="lineNum"> 1849 </span> : : +<span class="lineNum"> 1850 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>]:<span class="lineCov"> 570 : if (options-&gt;spoof_ip_src_str[0] != 0x00)</span> +<span class="lineNum"> 1851 </span> : : { +<span class="lineNum"> 1852 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(options-&gt;spoof_ip_src_str))</span> +<span class="lineNum"> 1853 </span> : : { +<span class="lineNum"> 1854 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Invalid spoof IP&quot;);</span> +<span class="lineNum"> 1855 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1856 </span> : : } +<span class="lineNum"> 1857 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;spa_proto != FKO_PROTO_TCP_RAW</span> +<span class="lineNum"> 1858 </span> :<span class="lineNoCov"> 0 : &amp;&amp; options-&gt;spa_proto != FKO_PROTO_UDP_RAW</span> +<span class="lineNum"> 1859 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; options-&gt;spa_proto != FKO_PROTO_ICMP)</span> +<span class="lineNum"> 1860 </span> : : { +<span class="lineNum"> 1861 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1862 </span> : : &quot;Must set -P &lt;udpraw|tcpraw|icmp&gt; with a spoofed source IP&quot;); +<span class="lineNum"> 1863 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1864 </span> : : } +<span class="lineNum"> 1865 </span> : : } +<span class="lineNum"> 1866 </span> : : +<span class="lineNum"> 1867 </span>[<span class="branchCov" title="Branch 0 was taken 570 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 68 times"> + </span><span class="branchCov" title="Branch 3 was taken 502 times"> + </span>]:<span class="lineCov"> 570 : if(options-&gt;resolve_ip_http_https || options-&gt;spa_proto == FKO_PROTO_HTTP)</span> +<span class="lineNum"> 1868 </span> [<span class="branchCov" title="Branch 0 was taken 68 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 68 : if (options-&gt;http_user_agent[0] == '\0')</span> +<span class="lineNum"> 1869 </span> :<span class="lineCov"> 68 : snprintf(options-&gt;http_user_agent, HTTP_MAX_USER_AGENT_LEN,</span> +<span class="lineNum"> 1870 </span> : : &quot;%s%s&quot;, &quot;Fwknop/&quot;, MY_VERSION); +<span class="lineNum"> 1871 </span> : : +<span class="lineNum"> 1872 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 570 : if(options-&gt;http_proxy[0] != 0x0 &amp;&amp; options-&gt;spa_proto != FKO_PROTO_HTTP)</span> +<span class="lineNum"> 1873 </span> : : { +<span class="lineNum"> 1874 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1875 </span> : : &quot;Cannot set --http-proxy with a non-HTTP protocol.&quot;); +<span class="lineNum"> 1876 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1877 </span> : : } +<span class="lineNum"> 1878 </span> : : +<span class="lineNum"> 1879 </span> : : /* If we are using gpg, we must at least have the recipient set. +<span class="lineNum"> 1880 </span> : : */ +<span class="lineNum"> 1881 </span> [<span class="branchCov" title="Branch 0 was taken 8 times"> + </span><span class="branchCov" title="Branch 1 was taken 562 times"> + </span>]:<span class="lineCov"> 570 : if(options-&gt;use_gpg)</span> +<span class="lineNum"> 1882 </span> : : { +<span class="lineNum"> 1883 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 8 : if(strlen(options-&gt;gpg_recipient_key) == 0)</span> +<span class="lineNum"> 1884 </span> : : { +<span class="lineNum"> 1885 </span> :<span class="lineCov"> 4 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1886 </span> : : &quot;Must specify --gpg-recipient-key when GPG is used.&quot;); +<span class="lineNum"> 1887 </span> :<span class="lineCov"> 4 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1888 </span> : : } +<span class="lineNum"> 1889 </span> : : } +<span class="lineNum"> 1890 </span> : : +<span class="lineNum"> 1891 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;encryption_mode == FKO_ENC_MODE_ASYMMETRIC</span> +<span class="lineNum"> 1892 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; ! options-&gt;use_gpg)</span> +<span class="lineNum"> 1893 </span> : : { +<span class="lineNum"> 1894 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1895 </span> : : &quot;Must specify GPG recipient/signing keys when Asymmetric encryption mode is used.&quot;); +<span class="lineNum"> 1896 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1897 </span> : : } +<span class="lineNum"> 1898 </span> : : +<span class="lineNum"> 1899 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV</span> +<span class="lineNum"> 1900 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; options-&gt;use_hmac)</span> +<span class="lineNum"> 1901 </span> : : { +<span class="lineNum"> 1902 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1903 </span> : : &quot;Legacy encryption mode is incompatible with HMAC usage.&quot;); +<span class="lineNum"> 1904 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 1905 </span> : : } +<span class="lineNum"> 1906 </span> : : +<span class="lineNum"> 1907 </span> : : /* Validate HMAC digest type +<span class="lineNum"> 1908 </span> : : */ +<span class="lineNum"> 1909 </span>[<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchCov" title="Branch 1 was taken 99 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 66 times"> + </span><span class="branchCov" title="Branch 3 was taken 401 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;use_hmac &amp;&amp; options-&gt;hmac_type == FKO_HMAC_UNKNOWN)</span> +<span class="lineNum"> 1910 </span> :<span class="lineCov"> 66 : options-&gt;hmac_type = FKO_DEFAULT_HMAC_MODE;</span> +<span class="lineNum"> 1911 </span> : : +<span class="lineNum"> 1912 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 566 : if(options-&gt;key_gen &amp;&amp; options-&gt;hmac_type == FKO_HMAC_UNKNOWN)</span> +<span class="lineNum"> 1913 </span> :<span class="lineNoCov"> 0 : options-&gt;hmac_type = FKO_DEFAULT_HMAC_MODE;</span> +<span class="lineNum"> 1914 </span> : : +<span class="lineNum"> 1915 </span> :<span class="lineCov"> 566 : return;</span> +<span class="lineNum"> 1916 </span> : : } +<span class="lineNum"> 1917 </span> : : +<span class="lineNum"> 1918 </span> : : /* Establish a few defaults such as UDP/62201 for sending the SPA +<span class="lineNum"> 1919 </span> : : * packet (can be changed with --server-proto/--server-port) +<a name="1920"><span class="lineNum"> 1920 </span> : : */</a> +<span class="lineNum"> 1921 </span> : : static void +<span class="lineNum"> 1922 </span> :<span class="lineCov"> 2085 : set_defaults(fko_cli_options_t *options)</span> +<span class="lineNum"> 1923 </span> : : { +<span class="lineNum"> 1924 </span> :<span class="lineCov"> 2085 : options-&gt;spa_proto = FKO_DEFAULT_PROTO;</span> +<span class="lineNum"> 1925 </span> :<span class="lineCov"> 2085 : options-&gt;spa_dst_port = FKO_DEFAULT_PORT;</span> +<span class="lineNum"> 1926 </span> :<span class="lineCov"> 2085 : options-&gt;fw_timeout = -1;</span> +<span class="lineNum"> 1927 </span> : : +<span class="lineNum"> 1928 </span> :<span class="lineCov"> 2085 : options-&gt;key_len = FKO_DEFAULT_KEY_LEN;</span> +<span class="lineNum"> 1929 </span> :<span class="lineCov"> 2085 : options-&gt;hmac_key_len = FKO_DEFAULT_HMAC_KEY_LEN;</span> +<span class="lineNum"> 1930 </span> :<span class="lineCov"> 2085 : options-&gt;hmac_type = FKO_HMAC_UNKNOWN; /* updated when HMAC key is used */</span> +<span class="lineNum"> 1931 </span> : : +<span class="lineNum"> 1932 </span> :<span class="lineCov"> 2085 : options-&gt;spa_icmp_type = ICMP_ECHOREPLY; /* only used in '-P icmp' mode */</span> +<span class="lineNum"> 1933 </span> :<span class="lineCov"> 2085 : options-&gt;spa_icmp_code = 0; /* only used in '-P icmp' mode */</span> +<span class="lineNum"> 1934 </span> : : +<span class="lineNum"> 1935 </span> :<span class="lineCov"> 2085 : options-&gt;input_fd = FD_INVALID;</span> +<span class="lineNum"> 1936 </span> : : +<span class="lineNum"> 1937 </span> :<span class="lineCov"> 2085 : return;</span> +<span class="lineNum"> 1938 </span> : : } +<span class="lineNum"> 1939 </span> : : +<span class="lineNum"> 1940 </span> : : /* Initialize program configuration via config file and/or command-line +<span class="lineNum"> 1941 </span> : : * switches. +<a name="1942"><span class="lineNum"> 1942 </span> : : */</a> +<span class="lineNum"> 1943 </span> : : void +<span class="lineNum"> 1944 </span> :<span class="lineCov"> 2085 : config_init(fko_cli_options_t *options, int argc, char **argv)</span> +<span class="lineNum"> 1945 </span> : : { +<span class="lineNum"> 1946 </span> :<span class="lineCov"> 2085 : int cmd_arg, index, is_err, rlen=0;</span> +<span class="lineNum"> 1947 </span> : : fko_var_bitmask_t var_bitmask; +<span class="lineNum"> 1948 </span> :<span class="lineCov"> 2085 : char rcfile[MAX_PATH_LEN] = {0};</span> +<span class="lineNum"> 1949 </span> : : +<span class="lineNum"> 1950 </span> : : /* Zero out options, opts_track and bitmask. +<span class="lineNum"> 1951 </span> : : */ +<span class="lineNum"> 1952 </span> : : memset(options, 0x00, sizeof(fko_cli_options_t)); +<span class="lineNum"> 1953 </span> : : memset(&amp;var_bitmask, 0x00, sizeof(fko_var_bitmask_t)); +<span class="lineNum"> 1954 </span> : : +<span class="lineNum"> 1955 </span> : : /* Make sure a few reasonable defaults are set +<span class="lineNum"> 1956 </span> : : */ +<span class="lineNum"> 1957 </span> :<span class="lineCov"> 2085 : set_defaults(options);</span> +<span class="lineNum"> 1958 </span> : : +<span class="lineNum"> 1959 </span> : : /* First pass over cmd_line args to see if a named-stanza in the +<span class="lineNum"> 1960 </span> : : * rc file is used. +<span class="lineNum"> 1961 </span> : : */ +<span class="lineNum"> 1962 </span> [<span class="branchCov" title="Branch 1 was taken 8340 times"> + </span><span class="branchCov" title="Branch 2 was taken 2085 times"> + </span>]:<span class="lineCov"> 12510 : while ((cmd_arg = getopt_long(argc, argv,</span> +<span class="lineNum"> 1963 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { +<span class="lineNum"> 1964 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2085 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 8340 : switch(cmd_arg) {</span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchCov" title="Branch 6 was taken 2085 times"> + </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span> +<span class="lineNum"> </span> <span class="branchCov" title="Branch 8 was taken 4170 times"> + </span>] +<span class="lineNum"> 1965 </span> : : case 'h': +<span class="lineNum"> 1966 </span> :<span class="lineNoCov"> 0 : usage();</span> +<span class="lineNum"> 1967 </span> :<span class="lineNoCov"> 0 : exit(EXIT_SUCCESS);</span> +<span class="lineNum"> 1968 </span> : : case NO_SAVE_ARGS: +<span class="lineNum"> 1969 </span> :<span class="lineNoCov"> 0 : options-&gt;no_save_args = 1;</span> +<span class="lineNum"> 1970 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1971 </span> : : case 'n': +<span class="lineNum"> 1972 </span> :<span class="lineCov"> 2085 : strlcpy(options-&gt;use_rc_stanza, optarg, sizeof(options-&gt;use_rc_stanza));</span> +<span class="lineNum"> 1973 </span> :<span class="lineCov"> 2085 : break;</span> +<span class="lineNum"> 1974 </span> : : case SAVE_RC_STANZA: +<span class="lineNum"> 1975 </span> :<span class="lineNoCov"> 0 : options-&gt;save_rc_stanza = 1;</span> +<span class="lineNum"> 1976 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1977 </span> : : case STANZA_LIST: +<span class="lineNum"> 1978 </span> :<span class="lineNoCov"> 0 : options-&gt;stanza_list = 1;</span> +<span class="lineNum"> 1979 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1980 </span> : : case 'E': +<span class="lineNum"> 1981 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;args_save_file, optarg, sizeof(options-&gt;args_save_file));</span> +<span class="lineNum"> 1982 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1983 </span> : : case RC_FILE_PATH: +<span class="lineNum"> 1984 </span> :<span class="lineCov"> 2085 : strlcpy(options-&gt;rc_file, optarg, sizeof(options-&gt;rc_file));</span> +<span class="lineNum"> 1985 </span> :<span class="lineCov"> 2085 : break;</span> +<span class="lineNum"> 1986 </span> : : case 'v': +<span class="lineNum"> 1987 </span> :<span class="lineNoCov"> 0 : options-&gt;verbose++;</span> +<span class="lineNum"> 1988 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_VERBOSE, &amp;var_bitmask);</span> +<span class="lineNum"> 1989 </span> :<span class="lineCov"> 6255 : break;</span> +<span class="lineNum"> 1990 </span> : : } +<span class="lineNum"> 1991 </span> : : } +<span class="lineNum"> 1992 </span> : : +<span class="lineNum"> 1993 </span> : : /* Update the verbosity level for the log module */ +<span class="lineNum"> 1994 </span> :<span class="lineCov"> 2085 : log_set_verbosity(LOG_DEFAULT_VERBOSITY + options-&gt;verbose);</span> +<span class="lineNum"> 1995 </span> : : +<span class="lineNum"> 1996 </span> : : /* Dump the configured stanzas from an rcfile */ +<span class="lineNum"> 1997 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2085 times"> + </span>]:<span class="lineCov"> 2085 : if (options-&gt;stanza_list == 1)</span> +<span class="lineNum"> 1998 </span> : : { +<span class="lineNum"> 1999 </span> :<span class="lineNoCov"> 0 : set_rc_file(rcfile, options);</span> +<span class="lineNum"> 2000 </span> :<span class="lineNoCov"> 0 : exit(dump_configured_stanzas_from_rcfile(rcfile));</span> +<span class="lineNum"> 2001 </span> : : } +<span class="lineNum"> 2002 </span> : : +<span class="lineNum"> 2003 </span> : : /* First process the .fwknoprc file. +<span class="lineNum"> 2004 </span> : : */ +<span class="lineNum"> 2005 </span> :<span class="lineCov"> 2085 : process_rc_section(RC_SECTION_DEFAULT, options);</span> +<span class="lineNum"> 2006 </span> : : +<span class="lineNum"> 2007 </span> : : /* Load the user specified stanza from .fwknoprc file */ +<span class="lineNum"> 2008 </span>[<span class="branchCov" title="Branch 0 was taken 805 times"> + </span><span class="branchCov" title="Branch 1 was taken 39 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 805 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 844 : if ( (options-&gt;got_named_stanza) &amp;&amp; (options-&gt;save_rc_stanza == 0) )</span> +<span class="lineNum"> 2009 </span> :<span class="lineCov"> 805 : process_rc_section(options-&gt;use_rc_stanza, options);</span> +<span class="lineNum"> 2010 </span> : : +<span class="lineNum"> 2011 </span> : : /* Reset the options index so we can run through them again. +<span class="lineNum"> 2012 </span> : : */ +<span class="lineNum"> 2013 </span> :<span class="lineCov"> 609 : optind = 0;</span> +<span class="lineNum"> 2014 </span> : : +<span class="lineNum"> 2015 </span> [<span class="branchCov" title="Branch 1 was taken 2436 times"> + </span><span class="branchCov" title="Branch 2 was taken 609 times"> + </span>]:<span class="lineCov"> 3654 : while ((cmd_arg = getopt_long(argc, argv,</span> +<span class="lineNum"> 2016 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { +<span class="lineNum"> 2017 </span> : : +<span class="lineNum"> 2018 </span> [<span class="branchCov" title="Branch 0 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 2436 : switch(cmd_arg) {</span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchNoCov" title="Branch 6 was not taken"> - </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span><span class="branchNoCov" title="Branch 8 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 9 was not taken"> - </span><span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchNoCov" title="Branch 11 was not taken"> - </span><span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchNoCov" title="Branch 13 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchNoCov" title="Branch 15 was not taken"> - </span><span class="branchNoCov" title="Branch 16 was not taken"> - </span><span class="branchNoCov" title="Branch 17 was not taken"> - </span><span class="branchNoCov" title="Branch 18 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 19 was not taken"> - </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span><span class="branchNoCov" title="Branch 21 was not taken"> - </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span><span class="branchNoCov" title="Branch 23 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span><span class="branchNoCov" title="Branch 25 was not taken"> - </span><span class="branchNoCov" title="Branch 26 was not taken"> - </span><span class="branchNoCov" title="Branch 27 was not taken"> - </span><span class="branchNoCov" title="Branch 28 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 29 was not taken"> - </span><span class="branchNoCov" title="Branch 30 was not taken"> - </span><span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchCov" title="Branch 32 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 33 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 34 was not taken"> - </span><span class="branchNoCov" title="Branch 35 was not taken"> - </span><span class="branchNoCov" title="Branch 36 was not taken"> - </span><span class="branchNoCov" title="Branch 37 was not taken"> - </span><span class="branchNoCov" title="Branch 38 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 39 was not taken"> - </span><span class="branchNoCov" title="Branch 40 was not taken"> - </span><span class="branchCov" title="Branch 41 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 42 was not taken"> - </span><span class="branchNoCov" title="Branch 43 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 44 was not taken"> - </span><span class="branchNoCov" title="Branch 45 was not taken"> - </span><span class="branchNoCov" title="Branch 46 was not taken"> - </span><span class="branchNoCov" title="Branch 47 was not taken"> - </span><span class="branchNoCov" title="Branch 48 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 49 was not taken"> - </span><span class="branchNoCov" title="Branch 50 was not taken"> - </span><span class="branchNoCov" title="Branch 51 was not taken"> - </span><span class="branchNoCov" title="Branch 52 was not taken"> - </span><span class="branchNoCov" title="Branch 53 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 54 was not taken"> - </span><span class="branchNoCov" title="Branch 55 was not taken"> - </span><span class="branchNoCov" title="Branch 56 was not taken"> - </span><span class="branchNoCov" title="Branch 57 was not taken"> - </span><span class="branchNoCov" title="Branch 58 was not taken"> - </span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 59 was not taken"> - </span><span class="branchNoCov" title="Branch 60 was not taken"> - </span><span class="branchNoCov" title="Branch 61 was not taken"> - </span><span class="branchCov" title="Branch 62 was taken 609 times"> + </span>] +<span class="lineNum"> 2019 </span> : : case 'a': +<span class="lineNum"> 2020 </span> :<span class="lineCov"> 609 : strlcpy(options-&gt;allow_ip_str, optarg, sizeof(options-&gt;allow_ip_str));</span> +<span class="lineNum"> 2021 </span> :<span class="lineCov"> 609 : add_var_to_bitmask(FWKNOP_CLI_ARG_ALLOW_IP, &amp;var_bitmask);</span> +<span class="lineNum"> 2022 </span> :<span class="lineCov"> 2436 : break;</span> +<span class="lineNum"> 2023 </span> : : case 'A': +<span class="lineNum"> 2024 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;access_str, optarg, sizeof(options-&gt;access_str));</span> +<span class="lineNum"> 2025 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_ACCESS, &amp;var_bitmask);</span> +<span class="lineNum"> 2026 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2027 </span> : : case 'b': +<span class="lineNum"> 2028 </span> :<span class="lineNoCov"> 0 : options-&gt;save_packet_file_append = 1;</span> +<span class="lineNum"> 2029 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2030 </span> : : case 'B': +<span class="lineNum"> 2031 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;save_packet_file, optarg, sizeof(options-&gt;save_packet_file));</span> +<span class="lineNum"> 2032 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2033 </span> : : case 'C': +<span class="lineNum"> 2034 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;server_command, optarg, sizeof(options-&gt;server_command));</span> +<span class="lineNum"> 2035 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2036 </span> : : case 'D': +<span class="lineNum"> 2037 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spa_server_str, optarg, sizeof(options-&gt;spa_server_str));</span> +<span class="lineNum"> 2038 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SERVER, &amp;var_bitmask);</span> +<span class="lineNum"> 2039 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2040 </span> : : case 'E': +<span class="lineNum"> 2041 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;args_save_file, optarg, sizeof(options-&gt;args_save_file));</span> +<span class="lineNum"> 2042 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2043 </span> : : case 'f': +<span class="lineNum"> 2044 </span> :<span class="lineNoCov"> 0 : options-&gt;fw_timeout = strtol_wrapper(optarg, 0,</span> +<span class="lineNum"> 2045 </span> : : (2 &lt;&lt; 16), NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2046 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 2047 </span> : : { +<span class="lineNum"> 2048 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;--fw-timeout must be within [%d-%d]&quot;,</span> +<span class="lineNum"> 2049 </span> : : 0, (2 &lt;&lt; 16)); +<span class="lineNum"> 2050 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2051 </span> : : } +<span class="lineNum"> 2052 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_FW_TIMEOUT, &amp;var_bitmask);</span> +<span class="lineNum"> 2053 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2054 </span> : : case FAULT_INJECTION_TAG: +<span class="lineNum"> 2055 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 2056 </span> : : strlcpy(options-&gt;fault_injection_tag, optarg, sizeof(options-&gt;fault_injection_tag)); +<span class="lineNum"> 2057 </span> : : #else +<span class="lineNum"> 2058 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2059 </span> : : &quot;fwknop not compiled with fault injection support.&quot;, optarg); +<span class="lineNum"> 2060 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2061 </span> : : #endif +<span class="lineNum"> 2062 </span> : : break; +<span class="lineNum"> 2063 </span> : : case 'g': +<span class="lineNum"> 2064 </span> : : case GPG_ENCRYPTION: +<span class="lineNum"> 2065 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 2066 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> +<span class="lineNum"> 2067 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2068 </span> : : case 'G': +<span class="lineNum"> 2069 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;get_key_file, optarg, sizeof(options-&gt;get_key_file));</span> +<span class="lineNum"> 2070 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_FILE, &amp;var_bitmask);</span> +<span class="lineNum"> 2071 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2072 </span> : : case GET_HMAC_KEY: +<span class="lineNum"> 2073 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;get_hmac_key_file, optarg,</span> +<span class="lineNum"> 2074 </span> : : sizeof(options-&gt;get_hmac_key_file)); +<span class="lineNum"> 2075 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 2076 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_HMAC_KEY_FILE, &amp;var_bitmask);</span> +<span class="lineNum"> 2077 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2078 </span> : : case 'H': +<span class="lineNum"> 2079 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_proto = FKO_PROTO_HTTP;</span> +<span class="lineNum"> 2080 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;http_proxy, optarg, sizeof(options-&gt;http_proxy));</span> +<span class="lineNum"> 2081 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2082 </span> : : case 'k': +<span class="lineNum"> 2083 </span> :<span class="lineNoCov"> 0 : options-&gt;key_gen = 1;</span> +<span class="lineNum"> 2084 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2085 </span> : : case 'K': +<span class="lineNum"> 2086 </span> :<span class="lineNoCov"> 0 : options-&gt;key_gen = 1;</span> +<span class="lineNum"> 2087 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;key_gen_file, optarg, sizeof(options-&gt;key_gen_file));</span> +<span class="lineNum"> 2088 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2089 </span> : : case KEY_RIJNDAEL: +<span class="lineNum"> 2090 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;key, optarg, sizeof(options-&gt;key));</span> +<span class="lineNum"> 2091 </span> :<span class="lineNoCov"> 0 : options-&gt;have_key = 1;</span> +<span class="lineNum"> 2092 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask);</span> +<span class="lineNum"> 2093 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2094 </span> : : case KEY_RIJNDAEL_BASE64: +<span class="lineNum"> 2095 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) optarg, strlen(optarg)))</span> +<span class="lineNum"> 2096 </span> : : { +<span class="lineNum"> 2097 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2098 </span> : : &quot;Base64 encoded Rijndael argument '%s' doesn't look like base64-encoded data.&quot;, +<span class="lineNum"> 2099 </span> : : optarg); +<span class="lineNum"> 2100 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2101 </span> : : } +<span class="lineNum"> 2102 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;key_base64, optarg, sizeof(options-&gt;key_base64));</span> +<span class="lineNum"> 2103 </span> :<span class="lineNoCov"> 0 : options-&gt;have_base64_key = 1;</span> +<span class="lineNum"> 2104 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, &amp;var_bitmask);</span> +<span class="lineNum"> 2105 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2106 </span> : : case KEY_HMAC_BASE64: +<span class="lineNum"> 2107 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) optarg, strlen(optarg)))</span> +<span class="lineNum"> 2108 </span> : : { +<span class="lineNum"> 2109 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2110 </span> : : &quot;Base64 encoded HMAC argument '%s' doesn't look like base64-encoded data.&quot;, +<span class="lineNum"> 2111 </span> : : optarg); +<span class="lineNum"> 2112 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2113 </span> : : } +<span class="lineNum"> 2114 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;hmac_key_base64, optarg, sizeof(options-&gt;hmac_key_base64));</span> +<span class="lineNum"> 2115 </span> :<span class="lineNoCov"> 0 : options-&gt;have_hmac_base64_key = 1;</span> +<span class="lineNum"> 2116 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 2117 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_HMAC_BASE64, &amp;var_bitmask);</span> +<span class="lineNum"> 2118 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> +<span class="lineNum"> 2119 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2120 </span> : : case KEY_HMAC: +<span class="lineNum"> 2121 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;hmac_key, optarg, sizeof(options-&gt;hmac_key));</span> +<span class="lineNum"> 2122 </span> :<span class="lineNoCov"> 0 : options-&gt;have_hmac_key = 1;</span> +<span class="lineNum"> 2123 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 2124 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_HMAC, &amp;var_bitmask);</span> +<span class="lineNum"> 2125 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> +<span class="lineNum"> 2126 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2127 </span> : : case KEY_LEN: +<span class="lineNum"> 2128 </span> :<span class="lineNoCov"> 0 : options-&gt;key_len = strtol_wrapper(optarg, 1,</span> +<span class="lineNum"> 2129 </span> : : MAX_KEY_LEN, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2130 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 2131 </span> : : { +<span class="lineNum"> 2132 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2133 </span> : : &quot;Invalid key length '%s', must be in [%d-%d]&quot;, +<span class="lineNum"> 2134 </span> : : optarg, 1, MAX_KEY_LEN); +<span class="lineNum"> 2135 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2136 </span> : : } +<span class="lineNum"> 2137 </span> : : break; +<span class="lineNum"> 2138 </span> : : case HMAC_DIGEST_TYPE: +<span class="lineNum"> 2139 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;hmac_type = hmac_digest_strtoint(optarg)) &lt; 0)</span> +<span class="lineNum"> 2140 </span> : : { +<span class="lineNum"> 2141 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2142 </span> : : &quot;* Invalid hmac digest type: %s, use {md5,sha1,sha256,sha384,sha512}&quot;, +<span class="lineNum"> 2143 </span> : : optarg); +<span class="lineNum"> 2144 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2145 </span> : : } +<span class="lineNum"> 2146 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE, &amp;var_bitmask);</span> +<span class="lineNum"> 2147 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> +<span class="lineNum"> 2148 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 2149 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2150 </span> : : case HMAC_KEY_LEN: +<span class="lineNum"> 2151 </span> :<span class="lineNoCov"> 0 : options-&gt;hmac_key_len = strtol_wrapper(optarg, 1,</span> +<span class="lineNum"> 2152 </span> : : MAX_KEY_LEN, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2153 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 2154 </span> : : { +<span class="lineNum"> 2155 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2156 </span> : : &quot;Invalid hmac key length '%s', must be in [%d-%d]&quot;, +<span class="lineNum"> 2157 </span> : : optarg, 1, MAX_KEY_LEN); +<span class="lineNum"> 2158 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2159 </span> : : } +<span class="lineNum"> 2160 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> +<span class="lineNum"> 2161 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 2162 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2163 </span> : : case SPA_ICMP_TYPE: +<span class="lineNum"> 2164 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_icmp_type = strtol_wrapper(optarg, 0,</span> +<span class="lineNum"> 2165 </span> : : MAX_ICMP_TYPE, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2166 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 2167 </span> : : { +<span class="lineNum"> 2168 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2169 </span> : : &quot;Invalid icmp type '%s', must be in [%d-%d]&quot;, +<span class="lineNum"> 2170 </span> : : optarg, 0, MAX_ICMP_TYPE); +<span class="lineNum"> 2171 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2172 </span> : : } +<span class="lineNum"> 2173 </span> : : break; +<span class="lineNum"> 2174 </span> : : case SPA_ICMP_CODE: +<span class="lineNum"> 2175 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_icmp_code = strtol_wrapper(optarg, 0,</span> +<span class="lineNum"> 2176 </span> : : MAX_ICMP_CODE, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2177 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 2178 </span> : : { +<span class="lineNum"> 2179 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2180 </span> : : &quot;Invalid icmp code '%s', must be in [%d-%d]&quot;, +<span class="lineNum"> 2181 </span> : : optarg, 0, MAX_ICMP_CODE); +<span class="lineNum"> 2182 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2183 </span> : : } +<span class="lineNum"> 2184 </span> : : break; +<span class="lineNum"> 2185 </span> : : case 'l': +<span class="lineNum"> 2186 </span> :<span class="lineNoCov"> 0 : options-&gt;run_last_command = 1;</span> +<span class="lineNum"> 2187 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2188 </span> : : case 'm': +<span class="lineNum"> 2189 </span> : : case FKO_DIGEST_NAME: +<span class="lineNum"> 2190 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;digest_type = digest_strtoint(optarg)) &lt; 0)</span> +<span class="lineNum"> 2191 </span> : : { +<span class="lineNum"> 2192 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2193 </span> : : &quot;* Invalid digest type: %s, use {md5,sha1,sha256,sha384,sha512}&quot;, +<span class="lineNum"> 2194 </span> : : optarg); +<span class="lineNum"> 2195 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2196 </span> : : } +<span class="lineNum"> 2197 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_DIGEST_TYPE, &amp;var_bitmask);</span> +<span class="lineNum"> 2198 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2199 </span> : : case 'M': +<span class="lineNum"> 2200 </span> : : case ENCRYPTION_MODE: +<span class="lineNum"> 2201 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;encryption_mode = enc_mode_strtoint(optarg)) &lt; 0)</span> +<span class="lineNum"> 2202 </span> : : { +<span class="lineNum"> 2203 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 2204 </span> : : &quot;* Invalid encryption mode: %s, use {CBC,CTR,legacy,Asymmetric}&quot;, +<span class="lineNum"> 2205 </span> : : optarg); +<span class="lineNum"> 2206 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2207 </span> : : } +<span class="lineNum"> 2208 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_ENCRYPTION_MODE, &amp;var_bitmask);</span> +<span class="lineNum"> 2209 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2210 </span> : : case NO_SAVE_ARGS: +<span class="lineNum"> 2211 </span> :<span class="lineNoCov"> 0 : options-&gt;no_save_args = 1;</span> +<span class="lineNum"> 2212 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NO_SAVE_ARGS, &amp;var_bitmask);</span> +<span class="lineNum"> 2213 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2214 </span> : : case 'n': +<span class="lineNum"> 2215 </span> : : /* We already handled this earlier, so we do nothing here +<span class="lineNum"> 2216 </span> : : */ +<span class="lineNum"> 2217 </span> : : break; +<span class="lineNum"> 2218 </span> : : case 'N': +<span class="lineNum"> 2219 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;nat_access_str, optarg, sizeof(options-&gt;nat_access_str));</span> +<span class="lineNum"> 2220 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_ACCESS, &amp;var_bitmask);</span> +<span class="lineNum"> 2221 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2222 </span> : : case 'p': +<span class="lineNum"> 2223 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_dst_port = strtol_wrapper(optarg, 0,</span> +<span class="lineNum"> 2224 </span> : : MAX_PORT, EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2225 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SERVER_PORT, &amp;var_bitmask);</span> +<span class="lineNum"> 2226 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2227 </span> : : case 'P': +<span class="lineNum"> 2228 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;spa_proto = proto_strtoint(optarg)) &lt; 0)</span> +<span class="lineNum"> 2229 </span> : : { +<span class="lineNum"> 2230 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Unrecognized protocol: %s&quot;, optarg);</span> +<span class="lineNum"> 2231 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2232 </span> : : } +<span class="lineNum"> 2233 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SERVER_PROTO, &amp;var_bitmask);</span> +<span class="lineNum"> 2234 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2235 </span> : : case 'Q': +<span class="lineNum"> 2236 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spoof_ip_src_str, optarg, sizeof(options-&gt;spoof_ip_src_str));</span> +<span class="lineNum"> 2237 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPOOF_SOURCE_IP, &amp;var_bitmask);</span> +<span class="lineNum"> 2238 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2239 </span> : : case RC_FILE_PATH: +<span class="lineNum"> 2240 </span> :<span class="lineCov"> 609 : strlcpy(options-&gt;rc_file, optarg, sizeof(options-&gt;rc_file));</span> +<span class="lineNum"> 2241 </span> :<span class="lineCov"> 609 : break;</span> +<span class="lineNum"> 2242 </span> : : case 'r': +<span class="lineNum"> 2243 </span> :<span class="lineNoCov"> 0 : options-&gt;rand_port = 1;</span> +<span class="lineNum"> 2244 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RAND_PORT, &amp;var_bitmask);</span> +<span class="lineNum"> 2245 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2246 </span> : : case 'R': +<span class="lineNum"> 2247 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> +<span class="lineNum"> 2248 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS, &amp;var_bitmask);</span> +<span class="lineNum"> 2249 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2250 </span> : : case RESOLVE_HTTP_ONLY: +<span class="lineNum"> 2251 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_http_only = 1;</span> +<span class="lineNum"> 2252 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> +<span class="lineNum"> 2253 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY, &amp;var_bitmask);</span> +<span class="lineNum"> 2254 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS, &amp;var_bitmask);</span> +<span class="lineNum"> 2255 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2256 </span> : : case RESOLVE_URL: +<span class="lineNum"> 2257 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> +<span class="lineNum"> 2258 </span> :<span class="lineNoCov"> 0 : free(options-&gt;resolve_url);</span> +<span class="lineNum"> 2259 </span> :<span class="lineNoCov"> 0 : rlen = strlen(optarg) + 1;</span> +<span class="lineNum"> 2260 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_url = calloc(1, rlen);</span> +<span class="lineNum"> 2261 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url == NULL)</span> +<span class="lineNum"> 2262 </span> : : { +<span class="lineNum"> 2263 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Memory allocation error for resolve URL.&quot;);</span> +<span class="lineNum"> 2264 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2265 </span> : : } +<span class="lineNum"> 2266 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;resolve_url, optarg, rlen);</span> +<span class="lineNum"> 2267 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_URL, &amp;var_bitmask);</span> +<span class="lineNum"> 2268 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2269 </span> : : case 'w': +<span class="lineNum"> 2270 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin != NULL)</span> +<span class="lineNum"> 2271 </span> :<span class="lineNoCov"> 0 : free(options-&gt;wget_bin);</span> +<span class="lineNum"> 2272 </span> :<span class="lineNoCov"> 0 : rlen = strlen(optarg) + 1;</span> +<span class="lineNum"> 2273 </span> :<span class="lineNoCov"> 0 : options-&gt;wget_bin = calloc(1, rlen);</span> +<span class="lineNum"> 2274 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin == NULL)</span> +<span class="lineNum"> 2275 </span> : : { +<span class="lineNum"> 2276 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Memory allocation error for resolve URL.&quot;);</span> +<span class="lineNum"> 2277 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2278 </span> : : } +<span class="lineNum"> 2279 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;wget_bin, optarg, rlen);</span> +<span class="lineNum"> 2280 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_WGET_CMD, &amp;var_bitmask);</span> +<span class="lineNum"> 2281 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2282 </span> : : case SHOW_LAST_ARGS: +<span class="lineNum"> 2283 </span> :<span class="lineNoCov"> 0 : options-&gt;show_last_command = 1;</span> +<span class="lineNum"> 2284 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2285 </span> : : case 's': +<span class="lineNum"> 2286 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;allow_ip_str, &quot;0.0.0.0&quot;, sizeof(options-&gt;allow_ip_str));</span> +<span class="lineNum"> 2287 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2288 </span> : : case 'S': +<span class="lineNum"> 2289 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_src_port = strtol_wrapper(optarg, 0,</span> +<span class="lineNum"> 2290 </span> : : MAX_PORT, EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2291 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SOURCE_PORT, &amp;var_bitmask);</span> +<span class="lineNum"> 2292 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2293 </span> : : case SAVE_RC_STANZA: +<span class="lineNum"> 2294 </span> : : /* We already handled this earlier, so we do nothing here +<span class="lineNum"> 2295 </span> : : */ +<span class="lineNum"> 2296 </span> : : break; +<span class="lineNum"> 2297 </span> : : case 'T': +<span class="lineNum"> 2298 </span> :<span class="lineCov"> 609 : options-&gt;test = 1;</span> +<span class="lineNum"> 2299 </span> :<span class="lineCov"> 609 : break;</span> +<span class="lineNum"> 2300 </span> : : case 'u': +<span class="lineNum"> 2301 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;http_user_agent, optarg, sizeof(options-&gt;http_user_agent));</span> +<span class="lineNum"> 2302 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_HTTP_USER_AGENT, &amp;var_bitmask);</span> +<span class="lineNum"> 2303 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2304 </span> : : case 'U': +<span class="lineNum"> 2305 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spoof_user, optarg, sizeof(options-&gt;spoof_user));</span> +<span class="lineNum"> 2306 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPOOF_USER, &amp;var_bitmask);</span> +<span class="lineNum"> 2307 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2308 </span> : : case 'v': +<span class="lineNum"> 2309 </span> : : /* Handled earlier. +<span class="lineNum"> 2310 </span> : : */ +<span class="lineNum"> 2311 </span> : : break; +<span class="lineNum"> 2312 </span> : : case 'V': +<span class="lineNum"> 2313 </span> :<span class="lineNoCov"> 0 : options-&gt;version = 1;</span> +<span class="lineNum"> 2314 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2315 </span> : : case GPG_RECIP_KEY: +<span class="lineNum"> 2316 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 2317 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_recipient_key, optarg, sizeof(options-&gt;gpg_recipient_key));</span> +<span class="lineNum"> 2318 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> +<span class="lineNum"> 2319 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_RECIPIENT, &amp;var_bitmask);</span> +<span class="lineNum"> 2320 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2321 </span> : : case GPG_SIGNER_KEY: +<span class="lineNum"> 2322 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 2323 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_signer_key, optarg, sizeof(options-&gt;gpg_signer_key));</span> +<span class="lineNum"> 2324 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> +<span class="lineNum"> 2325 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_SIGNER, &amp;var_bitmask);</span> +<span class="lineNum"> 2326 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2327 </span> : : case GPG_HOME_DIR: +<span class="lineNum"> 2328 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 2329 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_home_dir, optarg, sizeof(options-&gt;gpg_home_dir));</span> +<span class="lineNum"> 2330 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> +<span class="lineNum"> 2331 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_HOMEDIR, &amp;var_bitmask);</span> +<span class="lineNum"> 2332 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2333 </span> : : case GPG_EXE_PATH: +<span class="lineNum"> 2334 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 2335 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_exe, optarg, sizeof(options-&gt;gpg_exe));</span> +<span class="lineNum"> 2336 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> +<span class="lineNum"> 2337 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_EXE_PATH, &amp;var_bitmask);</span> +<span class="lineNum"> 2338 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2339 </span> : : case GPG_AGENT: +<span class="lineNum"> 2340 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 2341 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg_agent = 1;</span> +<span class="lineNum"> 2342 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> +<span class="lineNum"> 2343 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG_AGENT, &amp;var_bitmask);</span> +<span class="lineNum"> 2344 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2345 </span> : : case GPG_ALLOW_NO_SIGNING_PW: +<span class="lineNum"> 2346 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> +<span class="lineNum"> 2347 </span> :<span class="lineNoCov"> 0 : options-&gt;gpg_no_signing_pw = 1;</span> +<span class="lineNum"> 2348 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> +<span class="lineNum"> 2349 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW, &amp;var_bitmask);</span> +<span class="lineNum"> 2350 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2351 </span> : : case NAT_LOCAL: +<span class="lineNum"> 2352 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_local = 1;</span> +<span class="lineNum"> 2353 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_LOCAL, &amp;var_bitmask);</span> +<span class="lineNum"> 2354 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2355 </span> : : case NAT_RAND_PORT: +<span class="lineNum"> 2356 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_rand_port = 1;</span> +<span class="lineNum"> 2357 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_RAND_PORT, &amp;var_bitmask);</span> +<span class="lineNum"> 2358 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2359 </span> : : case NAT_PORT: +<span class="lineNum"> 2360 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_port = strtol_wrapper(optarg, 0,</span> +<span class="lineNum"> 2361 </span> : : MAX_PORT, EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2362 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_PORT, &amp;var_bitmask);</span> +<span class="lineNum"> 2363 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2364 </span> : : case TIME_OFFSET_PLUS: +<span class="lineNum"> 2365 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! parse_time_offset(optarg, &amp;options-&gt;time_offset_plus))</span> +<span class="lineNum"> 2366 </span> : : { +<span class="lineNum"> 2367 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 2368 </span> : : &quot;Invalid time offset: '%s'&quot;, optarg); +<span class="lineNum"> 2369 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2370 </span> : : } +<span class="lineNum"> 2371 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_TIME_OFFSET, &amp;var_bitmask);</span> +<span class="lineNum"> 2372 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2373 </span> : : case TIME_OFFSET_MINUS: +<span class="lineNum"> 2374 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! parse_time_offset(optarg, &amp;options-&gt;time_offset_minus))</span> +<span class="lineNum"> 2375 </span> : : { +<span class="lineNum"> 2376 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 2377 </span> : : &quot;Invalid time offset: '%s'&quot;, optarg); +<span class="lineNum"> 2378 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2379 </span> : : } +<span class="lineNum"> 2380 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_TIME_OFFSET, &amp;var_bitmask);</span> +<span class="lineNum"> 2381 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2382 </span> : : case USE_HMAC: +<span class="lineNum"> 2383 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> +<span class="lineNum"> 2384 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> +<span class="lineNum"> 2385 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2386 </span> : : case USE_WGET_USER_AGENT: +<span class="lineNum"> 2387 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_WGET_USER_AGENT, &amp;var_bitmask);</span> +<span class="lineNum"> 2388 </span> :<span class="lineNoCov"> 0 : options-&gt;use_wget_user_agent = 1;</span> +<span class="lineNum"> 2389 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2390 </span> : : case FORCE_SAVE_RC_STANZA: +<span class="lineNum"> 2391 </span> :<span class="lineNoCov"> 0 : options-&gt;force_save_rc_stanza = 1;</span> +<span class="lineNum"> 2392 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2393 </span> : : case FD_SET_STDIN: +<span class="lineNum"> 2394 </span> :<span class="lineNoCov"> 0 : options-&gt;input_fd = STDIN_FILENO;</span> +<span class="lineNum"> 2395 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2396 </span> : : case FD_SET_ALT: +<span class="lineNum"> 2397 </span> : : #ifdef WIN32 +<span class="lineNum"> 2398 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;Read password from FD not supported on Windows&quot;); +<span class="lineNum"> 2399 </span> : : exit(EXIT_FAILURE); +<span class="lineNum"> 2400 </span> : : #endif +<span class="lineNum"> 2401 </span> :<span class="lineNoCov"> 0 : options-&gt;input_fd = strtol_wrapper(optarg, 0,</span> +<span class="lineNum"> 2402 </span> : : -1, EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 2403 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 2404 </span> : : default: +<span class="lineNum"> 2405 </span> :<span class="lineNoCov"> 0 : usage();</span> +<span class="lineNum"> 2406 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 2407 </span> : : } +<span class="lineNum"> 2408 </span> : : } +<span class="lineNum"> 2409 </span> : : +<span class="lineNum"> 2410 </span> : : /* Now that we have all of our options set, we can validate them */ +<span class="lineNum"> 2411 </span> :<span class="lineCov"> 609 : validate_options(options);</span> +<span class="lineNum"> 2412 </span> : : +<span class="lineNum"> 2413 </span> : : /* Generate Rijndael + HMAC keys from /dev/random and base64 encode +<span class="lineNum"> 2414 </span> : : */ +<span class="lineNum"> 2415 </span> :<span class="lineCov"> 566 : generate_keys(options);</span> +<span class="lineNum"> 2416 </span> : : +<span class="lineNum"> 2417 </span> : : /* We can upgrade our settings with the parameters set on the command +<span class="lineNum"> 2418 </span> : : * line by the user */ +<span class="lineNum"> 2419 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (options-&gt;save_rc_stanza == 1)</span> +<span class="lineNum"> 2420 </span> : : { +<span class="lineNum"> 2421 </span> : : /* If we are asked to generate keys, we add them to the bitmask so +<span class="lineNum"> 2422 </span> : : * that they can be added to the stanza when updated */ +<span class="lineNum"> 2423 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;key_gen == 1)</span> +<span class="lineNum"> 2424 </span> : : { +<span class="lineNum"> 2425 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, &amp;var_bitmask);</span> +<span class="lineNum"> 2426 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_HMAC_BASE64, &amp;var_bitmask);</span> +<span class="lineNum"> 2427 </span> : : } +<span class="lineNum"> 2428 </span> : : else; +<span class="lineNum"> 2429 </span> : : +<span class="lineNum"> 2430 </span> :<span class="lineNoCov"> 0 : update_rc(options, &amp;var_bitmask);</span> +<span class="lineNum"> 2431 </span> : : } +<span class="lineNum"> 2432 </span> : : else; +<span class="lineNum"> 2433 </span> : : +<span class="lineNum"> 2434 </span> :<span class="lineCov"> 566 : keys_status(options);</span> +<span class="lineNum"> 2435 </span> : : +<span class="lineNum"> 2436 </span> :<span class="lineCov"> 566 : return;</span> +<span class="lineNum"> 2437 </span> : : } +<span class="lineNum"> 2438 </span> : : +<span class="lineNum"> 2439 </span> : : /* Print usage message... +<a name="2440"><span class="lineNum"> 2440 </span> : : */</a> +<span class="lineNum"> 2441 </span> : : void +<span class="lineNum"> 2442 </span> :<span class="lineNoCov"> 0 : usage(void)</span> +<span class="lineNum"> 2443 </span> : : { +<span class="lineNum"> 2444 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 2445 </span> : : &quot;\n%s client version %s\n%s - http://%s/fwknop/\n&quot;, +<span class="lineNum"> 2446 </span> : : MY_NAME, MY_VERSION, MY_DESC, HTTP_RESOLVE_HOST); +<span class="lineNum"> 2447 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 2448 </span> : : &quot;Usage: fwknop -A &lt;port list&gt; [-s|-R|-a] -D &lt;spa_server&gt; [options]\n\n&quot; +<span class="lineNum"> 2449 </span> : : &quot; -n, --named-config Specify a named configuration stanza in the\n&quot; +<span class="lineNum"> 2450 </span> : : &quot; '$HOME/.fwknoprc' file to provide some of all\n&quot; +<span class="lineNum"> 2451 </span> : : &quot; of the configuration parameters.\n&quot; +<span class="lineNum"> 2452 </span> : : &quot; If more arguments are set through the command\n&quot; +<span class="lineNum"> 2453 </span> : : &quot; line, the configuration is updated accordingly.\n&quot; +<span class="lineNum"> 2454 </span> : : &quot; -A, --access Provide a list of ports/protocols to open\n&quot; +<span class="lineNum"> 2455 </span> : : &quot; on the server (e.g. 'tcp/22').\n&quot; +<span class="lineNum"> 2456 </span> : : &quot; -a, --allow-ip Specify IP address to allow within the SPA\n&quot; +<span class="lineNum"> 2457 </span> : : &quot; packet (e.g. '123.2.3.4'). If \n&quot; +<span class="lineNum"> 2458 </span> : : &quot; -D, --destination Specify the hostname or IP address of the\n&quot; +<span class="lineNum"> 2459 </span> : : &quot; fwknop server.\n&quot; +<span class="lineNum"> 2460 </span> : : &quot; --use-hmac Add an HMAC to the outbound SPA packet for\n&quot; +<span class="lineNum"> 2461 </span> : : &quot; authenticated encryption.\n&quot; +<span class="lineNum"> 2462 </span> : : &quot; -h, --help Print this usage message and exit.\n&quot; +<span class="lineNum"> 2463 </span> : : &quot; -B, --save-packet Save the generated packet data to the\n&quot; +<span class="lineNum"> 2464 </span> : : &quot; specified file.\n&quot; +<span class="lineNum"> 2465 </span> : : &quot; -b, --save-packet-append Append the generated packet data to the\n&quot; +<span class="lineNum"> 2466 </span> : : &quot; file specified with the -B option.\n&quot; +<span class="lineNum"> 2467 </span> : : &quot; -C, --server-cmd Specify a command that the fwknop server will\n&quot; +<span class="lineNum"> 2468 </span> : : &quot; execute on behalf of the fwknop client..\n&quot; +<span class="lineNum"> 2469 </span> : : &quot; -N, --nat-access Gain NAT access to an internal service.\n&quot; +<span class="lineNum"> 2470 </span> : : &quot; -p, --server-port Set the destination port for outgoing SPA\n&quot; +<span class="lineNum"> 2471 </span> : : &quot; packet.\n&quot; +<span class="lineNum"> 2472 </span> : : &quot; -P, --server-proto Set the protocol (udp, tcp, http, tcpraw,\n&quot; +<span class="lineNum"> 2473 </span> : : &quot; icmp) for the outgoing SPA packet.\n&quot; +<span class="lineNum"> 2474 </span> : : &quot; Note: The 'tcpraw' and 'icmp' modes use raw\n&quot; +<span class="lineNum"> 2475 </span> : : &quot; sockets and thus require root access to use.\n&quot; +<span class="lineNum"> 2476 </span> : : &quot; -s, --source-ip Tell the fwknopd server to accept whatever\n&quot; +<span class="lineNum"> 2477 </span> : : &quot; source IP the SPA packet has as the IP that\n&quot; +<span class="lineNum"> 2478 </span> : : &quot; needs access (not recommended, and the\n&quot; +<span class="lineNum"> 2479 </span> : : &quot; fwknopd server can ignore such requests).\n&quot; +<span class="lineNum"> 2480 </span> : : &quot; -S, --source-port Set the source port for outgoing SPA packet.\n&quot; +<span class="lineNum"> 2481 </span> : : &quot; -Q, --spoof-source Set the source IP for outgoing SPA packet.\n&quot; +<span class="lineNum"> 2482 </span> : : &quot; -R, --resolve-ip-https Resolve the external network IP by\n&quot; +<span class="lineNum"> 2483 </span> : : &quot; connecting to a URL such as the default of:\n&quot; +<span class="lineNum"> 2484 </span> : : &quot; https://&quot; HTTP_RESOLVE_HOST HTTP_RESOLVE_URL &quot;\n&quot; +<span class="lineNum"> 2485 </span> : : &quot; with wget in --secure-protocol mode (SSL).\n&quot; +<span class="lineNum"> 2486 </span> : : &quot; The URL can be overridden with the\n&quot; +<span class="lineNum"> 2487 </span> : : &quot; --resolve-url option.\n&quot; +<span class="lineNum"> 2488 </span> : : &quot; --resolve-http-only Force external IP resolution via HTTP instead\n&quot; +<span class="lineNum"> 2489 </span> : : &quot; HTTPS (via the URL mentioned above). This is\n&quot; +<span class="lineNum"> 2490 </span> : : &quot; not recommended since it would open fwknop\n&quot; +<span class="lineNum"> 2491 </span> : : &quot; to potential MITM attacks if the IP resolution\n&quot; +<span class="lineNum"> 2492 </span> : : &quot; HTTP connection is altered en-route by a third\n&quot; +<span class="lineNum"> 2493 </span> : : &quot; party.\n&quot; +<span class="lineNum"> 2494 </span> : : &quot; --resolve-url Override the default URL used for resolving\n&quot; +<span class="lineNum"> 2495 </span> : : &quot; the source IP address.\n&quot; +<span class="lineNum"> 2496 </span> : : &quot; -u, --user-agent Set the HTTP User-Agent for resolving the\n&quot; +<span class="lineNum"> 2497 </span> : : &quot; external IP via -R, or for sending SPA\n&quot; +<span class="lineNum"> 2498 </span> : : &quot; packets over HTTP. The default is\n&quot; +<span class="lineNum"> 2499 </span> : : &quot; Fwknop/&lt;version&gt; if this option is not used.\n&quot; +<span class="lineNum"> 2500 </span> : : &quot; --use-wget-user-agent Use the default wget User-Agent string instead\n&quot; +<span class="lineNum"> 2501 </span> : : &quot; of Fwknop/&lt;version&gt;.\n&quot; +<span class="lineNum"> 2502 </span> : : &quot; -w, --wget-cmd Manually set the path to wget in -R mode.\n&quot; +<span class="lineNum"> 2503 </span> : : &quot; -H, --http-proxy Specify an HTTP proxy host through which the\n&quot; +<span class="lineNum"> 2504 </span> : : &quot; SPA packet will be sent. The port can also be\n&quot; +<span class="lineNum"> 2505 </span> : : &quot; specified here by following the host/ip with\n&quot; +<span class="lineNum"> 2506 </span> : : &quot; \&quot;:&lt;port&gt;\&quot;.\n&quot; +<span class="lineNum"> 2507 </span> : : &quot; -U, --spoof-user Set the username within outgoing SPA packet.\n&quot; +<span class="lineNum"> 2508 </span> : : &quot; -l, --last-cmd Run the fwknop client with the same command\n&quot; +<span class="lineNum"> 2509 </span> : : &quot; line args as the last time it was executed\n&quot; +<span class="lineNum"> 2510 </span> : : &quot; (args are read from the ~/.fwknop.run file).\n&quot; +<span class="lineNum"> 2511 </span> : : &quot; -G, --get-key Load an encryption key/password from a file.\n&quot; +<span class="lineNum"> 2512 </span> : : &quot; --stdin Read the encryption key/password from stdin\n&quot; +<span class="lineNum"> 2513 </span> : : &quot; --fd Specify the file descriptor to read the\n&quot; +<span class="lineNum"> 2514 </span> : : &quot; encryption key/password from.\n&quot; +<span class="lineNum"> 2515 </span> : : &quot; -k, --key-gen Generate SPA Rijndael + HMAC keys.\n&quot; +<span class="lineNum"> 2516 </span> : : &quot; -K, --key-gen-file Write generated Rijndael + HMAC keys to a\n&quot; +<span class="lineNum"> 2517 </span> : : &quot; file\n&quot; +<span class="lineNum"> 2518 </span> : : &quot; --key-rijndael Specify the Rijndael key. Since the password is\n&quot; +<span class="lineNum"> 2519 </span> : : &quot; visible to utilities (like 'ps' under Unix)\n&quot; +<span class="lineNum"> 2520 </span> : : &quot; this form should only be used where security is\n&quot; +<span class="lineNum"> 2521 </span> : : &quot; not important.\n&quot; +<span class="lineNum"> 2522 </span> : : &quot; --key-base64-rijndael Specify the base64 encoded Rijndael key. Since\n&quot; +<span class="lineNum"> 2523 </span> : : &quot; the password is visible to utilities (like 'ps'\n&quot; +<span class="lineNum"> 2524 </span> : : &quot; under Unix) this form should only be used where\n&quot; +<span class="lineNum"> 2525 </span> : : &quot; security is not important.\n&quot; +<span class="lineNum"> 2526 </span> : : &quot; --key-base64-hmac Specify the base64 encoded HMAC key. Since the\n&quot; +<span class="lineNum"> 2527 </span> : : &quot; password is visible to utilities (like 'ps'\n&quot; +<span class="lineNum"> 2528 </span> : : &quot; under Unix) this form should only be used where\n&quot; +<span class="lineNum"> 2529 </span> : : &quot; security is not important.\n&quot; +<span class="lineNum"> 2530 </span> : : &quot; -r, --rand-port Send the SPA packet over a randomly assigned\n&quot; +<span class="lineNum"> 2531 </span> : : &quot; port (requires a broader pcap filter on the\n&quot; +<span class="lineNum"> 2532 </span> : : &quot; server side than the default of udp 62201).\n&quot; +<span class="lineNum"> 2533 </span> : : &quot; -T, --test Build the SPA packet but do not send it over\n&quot; +<span class="lineNum"> 2534 </span> : : &quot; the network.\n&quot; +<span class="lineNum"> 2535 </span> : : &quot; -v, --verbose Set verbose mode (may specify multiple times).\n&quot; +<span class="lineNum"> 2536 </span> : : &quot; -V, --version Print version number.\n&quot; +<span class="lineNum"> 2537 </span> : : &quot; -m, --digest-type Specify the message digest algorithm to use.\n&quot; +<span class="lineNum"> 2538 </span> : : &quot; (md5, sha1, sha256, sha384, or sha512). The\n&quot; +<span class="lineNum"> 2539 </span> : : &quot; default is sha256.\n&quot; +<span class="lineNum"> 2540 </span> : : &quot; -M, --encryption-mode Specify the encryption mode when AES is used\n&quot; +<span class="lineNum"> 2541 </span> : : &quot; for encrypting SPA packets.The default is CBC\n&quot; +<span class="lineNum"> 2542 </span> : : &quot; mode, but others can be chosen such as CFB or\n&quot; +<span class="lineNum"> 2543 </span> : : &quot; OFB as long as this is also specified in the\n&quot; +<span class="lineNum"> 2544 </span> : : &quot; access.conf file on the server side. Note that\n&quot; +<span class="lineNum"> 2545 </span> : : &quot; the string ``legacy'' can be specified in order\n&quot; +<span class="lineNum"> 2546 </span> : : &quot; to generate SPA packets with the old initialization\n&quot; +<span class="lineNum"> 2547 </span> : : &quot; vector strategy used by versions of *fwknop*\n&quot; +<span class="lineNum"> 2548 </span> : : &quot; before 2.5.\n&quot; +<span class="lineNum"> 2549 </span> : : &quot; -f, --fw-timeout Specify SPA server firewall timeout from the\n&quot; +<span class="lineNum"> 2550 </span> : : &quot; client side.\n&quot; +<span class="lineNum"> 2551 </span> : : &quot; --hmac-digest-type Set the HMAC digest algorithm (default is\n&quot; +<span class="lineNum"> 2552 </span> : : &quot; sha256). Options are md5, sha1, sha256,\n&quot; +<span class="lineNum"> 2553 </span> : : &quot; sha384, or sha512.\n&quot; +<span class="lineNum"> 2554 </span> : : &quot; --icmp-type Set the ICMP type (used with '-P icmp')\n&quot; +<span class="lineNum"> 2555 </span> : : &quot; --icmp-code Set the ICMP code (used with '-P icmp')\n&quot; +<span class="lineNum"> 2556 </span> : : &quot; --gpg-encryption Use GPG encryption (default is Rijndael).\n&quot; +<span class="lineNum"> 2557 </span> : : &quot; --gpg-recipient-key Specify the recipient GPG key name or ID.\n&quot; +<span class="lineNum"> 2558 </span> : : &quot; --gpg-signer-key Specify the signer's GPG key name or ID.\n&quot; +<span class="lineNum"> 2559 </span> : : &quot; --gpg-home-dir Specify the GPG home directory.\n&quot; +<span class="lineNum"> 2560 </span> : : &quot; --gpg-agent Use GPG agent if available.\n&quot; +<span class="lineNum"> 2561 </span> : : &quot; --gpg-exe Set path to GPG binary.\n&quot; +<span class="lineNum"> 2562 </span> : : &quot; --no-save-args Do not save fwknop command line args to the\n&quot; +<span class="lineNum"> 2563 </span> : : &quot; $HOME/fwknop.run file\n&quot; +<span class="lineNum"> 2564 </span> : : &quot; --rc-file Specify path to the fwknop rc file (default\n&quot; +<span class="lineNum"> 2565 </span> : : &quot; is $HOME/.fwknoprc)\n&quot; +<span class="lineNum"> 2566 </span> : : &quot; --save-rc-stanza Save command line arguments to the\n&quot; +<span class="lineNum"> 2567 </span> : : &quot; $HOME/.fwknoprc stanza specified with the\n&quot; +<span class="lineNum"> 2568 </span> : : &quot; -n option.\n&quot; +<span class="lineNum"> 2569 </span> : : &quot; --force-stanza Used with --save-rc-stanza to overwrite all of\n&quot; +<span class="lineNum"> 2570 </span> : : &quot; the variables for the specified stanza\n&quot; +<span class="lineNum"> 2571 </span> : : &quot; --stanza-list Dump a list of the stanzas found in\n&quot; +<span class="lineNum"> 2572 </span> : : &quot; $HOME/.fwknoprc\n&quot; +<span class="lineNum"> 2573 </span> : : &quot; --nat-local Access a local service via a forwarded port\n&quot; +<span class="lineNum"> 2574 </span> : : &quot; on the fwknopd server system.\n&quot; +<span class="lineNum"> 2575 </span> : : &quot; --nat-port Specify the port to forward to access a\n&quot; +<span class="lineNum"> 2576 </span> : : &quot; service via NAT.\n&quot; +<span class="lineNum"> 2577 </span> : : &quot; --nat-rand-port Have the fwknop client assign a random port\n&quot; +<span class="lineNum"> 2578 </span> : : &quot; for NAT access.\n&quot; +<span class="lineNum"> 2579 </span> : : &quot; --show-last Show the last fwknop command line arguments.\n&quot; +<span class="lineNum"> 2580 </span> : : &quot; --time-offset-plus Add time to outgoing SPA packet timestamp.\n&quot; +<span class="lineNum"> 2581 </span> : : &quot; --time-offset-minus Subtract time from outgoing SPA packet\n&quot; +<span class="lineNum"> 2582 </span> : : &quot; timestamp.\n&quot; +<span class="lineNum"> 2583 </span> : : ); +<span class="lineNum"> 2584 </span> : : +<span class="lineNum"> 2585 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 2586 </span> : : } +<span class="lineNum"> 2587 </span> : : +<span class="lineNum"> 2588 </span> : : #ifdef HAVE_C_UNIT_TESTS +<span class="lineNum"> 2589 </span> : : +<span class="lineNum"> 2590 </span> : : DECLARE_TEST_SUITE_INIT(config_init) +<span class="lineNum"> 2591 </span> : : { +<span class="lineNum"> 2592 </span> : : log_set_verbosity(LOG_VERBOSITY_ERROR); +<span class="lineNum"> 2593 </span> : : return 0; +<span class="lineNum"> 2594 </span> : : } +<span class="lineNum"> 2595 </span> : : +<span class="lineNum"> 2596 </span> : : DECLARE_TEST_SUITE_CLEANUP(config_init) +<span class="lineNum"> 2597 </span> : : { +<span class="lineNum"> 2598 </span> : : return 0; +<span class="lineNum"> 2599 </span> : : } +<span class="lineNum"> 2600 </span> : : +<span class="lineNum"> 2601 </span> : : DECLARE_UTEST(critical_var, &quot;Check critcial vars&quot;) +<span class="lineNum"> 2602 </span> : : { +<span class="lineNum"> 2603 </span> : : CU_ASSERT(var_is_critical(FWKNOP_CLI_ARG_KEY_RIJNDAEL) == 1); +<span class="lineNum"> 2604 </span> : : CU_ASSERT(var_is_critical(FWKNOP_CLI_ARG_WGET_CMD) == 0); +<span class="lineNum"> 2605 </span> : : } +<span class="lineNum"> 2606 </span> : : +<span class="lineNum"> 2607 </span> : : DECLARE_UTEST(check_var_bitmask, &quot;Check var_bitmask functions&quot;) +<span class="lineNum"> 2608 </span> : : { +<span class="lineNum"> 2609 </span> : : fko_var_bitmask_t var_bitmask; +<span class="lineNum"> 2610 </span> : : +<span class="lineNum"> 2611 </span> : : memset(&amp;var_bitmask, 0x00, sizeof(fko_var_bitmask_t)); +<span class="lineNum"> 2612 </span> : : +<span class="lineNum"> 2613 </span> : : add_var_to_bitmask(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask); +<span class="lineNum"> 2614 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask) == 1); +<span class="lineNum"> 2615 </span> : : CU_ASSERT(var_bitmask.dw[0] == 1); +<span class="lineNum"> 2616 </span> : : remove_var_from_bitmask(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask); +<span class="lineNum"> 2617 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask) == 0); +<span class="lineNum"> 2618 </span> : : CU_ASSERT(var_bitmask.dw[0] == 0); +<span class="lineNum"> 2619 </span> : : +<span class="lineNum"> 2620 </span> : : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask); +<span class="lineNum"> 2621 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask) == 1); +<span class="lineNum"> 2622 </span> : : remove_var_from_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask); +<span class="lineNum"> 2623 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask) == 0); +<span class="lineNum"> 2624 </span> : : +<span class="lineNum"> 2625 </span> : : add_var_to_bitmask(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask); +<span class="lineNum"> 2626 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask) == 1); +<span class="lineNum"> 2627 </span> : : remove_var_from_bitmask(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask); +<span class="lineNum"> 2628 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask) == 0); +<span class="lineNum"> 2629 </span> : : +<span class="lineNum"> 2630 </span> : : add_var_to_bitmask(FWKNOP_CLI_LAST_ARG+32, &amp;var_bitmask); +<span class="lineNum"> 2631 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG+32, &amp;var_bitmask) == 0); +<span class="lineNum"> 2632 </span> : : +<span class="lineNum"> 2633 </span> : : add_var_to_bitmask(FWKNOP_CLI_LAST_ARG+34, &amp;var_bitmask); +<span class="lineNum"> 2634 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG+34, &amp;var_bitmask) == 0); +<span class="lineNum"> 2635 </span> : : } +<span class="lineNum"> 2636 </span> : : +<span class="lineNum"> 2637 </span> : : int register_ts_config_init(void) +<span class="lineNum"> 2638 </span> : : { +<span class="lineNum"> 2639 </span> : : ts_init(&amp;TEST_SUITE(config_init), TEST_SUITE_DESCR(config_init), TEST_SUITE_INIT(config_init), TEST_SUITE_CLEANUP(config_init)); +<span class="lineNum"> 2640 </span> : : ts_add_utest(&amp;TEST_SUITE(config_init), UTEST_FCT(critical_var), UTEST_DESCR(critical_var)); +<span class="lineNum"> 2641 </span> : : ts_add_utest(&amp;TEST_SUITE(config_init), UTEST_FCT(check_var_bitmask), UTEST_DESCR(check_var_bitmask)); +<span class="lineNum"> 2642 </span> : : +<span class="lineNum"> 2643 </span> : : return register_ts(&amp;TEST_SUITE(config_init)); +<span class="lineNum"> 2644 </span> : : } +<span class="lineNum"> 2645 </span> : : +<span class="lineNum"> 2646 </span> : : #endif /* HAVE_C_UNIT_TESTS */ +<span class="lineNum"> 2647 </span> : : +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html new file mode 100644 index 00000000..0a6925e2 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html @@ -0,0 +1,153 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/fwknop.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - fwknop.c<span style="font-size: 80%;"> (<a href="fwknop.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">245</td> + <td class="headerCovTableEntry">496</td> + <td class="headerCovTableEntryLo">49.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntryLo">66.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">129</td> + <td class="headerCovTableEntry">328</td> + <td class="headerCovTableEntryLo">39.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fwknop.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1288">zero_buf_wrapper</a></td> + <td class="coverFnHi">5660</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#145">main</a></td> + <td class="coverFnHi">2085</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1331">clean_exit</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1088">set_message_type</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1052">save_args</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#921">prev_exec</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#664">free_configs</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1030">get_save_file</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#756">set_access_buf</a></td> + <td class="coverFnHi">565</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1124">get_keys</a></td> + <td class="coverFnHi">439</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1282">errmsg</a></td> + <td class="coverFnHi">176</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#681">get_rand_port</a></td> + <td class="coverFnHi">5</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#728">ipv4_str_has_port</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#983">run_last_args</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#826">set_nat_access</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#952">show_last_command</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#102">is_hostname_str_with_port</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#77">is_ipv6_str.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html new file mode 100644 index 00000000..0989d771 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html @@ -0,0 +1,153 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/fwknop.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - fwknop.c<span style="font-size: 80%;"> (<a href="fwknop.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">245</td> + <td class="headerCovTableEntry">496</td> + <td class="headerCovTableEntryLo">49.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntryLo">66.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">129</td> + <td class="headerCovTableEntry">328</td> + <td class="headerCovTableEntryLo">39.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fwknop.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1331">clean_exit</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1282">errmsg</a></td> + <td class="coverFnHi">176</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#664">free_configs</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1124">get_keys</a></td> + <td class="coverFnHi">439</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#681">get_rand_port</a></td> + <td class="coverFnHi">5</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1030">get_save_file</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#728">ipv4_str_has_port</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#102">is_hostname_str_with_port</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#77">is_ipv6_str.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#145">main</a></td> + <td class="coverFnHi">2085</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#921">prev_exec</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#983">run_last_args</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1052">save_args</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#756">set_access_buf</a></td> + <td class="coverFnHi">565</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1088">set_message_type</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#826">set_nat_access</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#952">show_last_command</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknop.c.gcov.html#1288">zero_buf_wrapper</a></td> + <td class="coverFnHi">5660</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html new file mode 100644 index 00000000..58f758b3 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html @@ -0,0 +1,1440 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/fwknop.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - fwknop.c<span style="font-size: 80%;"> (source / <a href="fwknop.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">245</td> + <td class="headerCovTableEntry">496</td> + <td class="headerCovTableEntryLo">49.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntryLo">66.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">129</td> + <td class="headerCovTableEntry">328</td> + <td class="headerCovTableEntryLo">39.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /**</a> +<span class="lineNum"> 2 </span> : : * @file fwknop.c +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * @brief The fwknop client. +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 7 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 8 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * License (GNU General Public License): +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 13 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 14 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 15 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 16 </span> : : * +<span class="lineNum"> 17 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : : * +<span class="lineNum"> 22 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 25 </span> : : * USA +<span class="lineNum"> 26 </span> : : */ +<span class="lineNum"> 27 </span> : : +<span class="lineNum"> 28 </span> : : #include &quot;fwknop.h&quot; +<span class="lineNum"> 29 </span> : : #include &quot;config_init.h&quot; +<span class="lineNum"> 30 </span> : : #include &quot;spa_comm.h&quot; +<span class="lineNum"> 31 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;getpasswd.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #include &lt;sys/stat.h&gt; +<span class="lineNum"> 35 </span> : : #include &lt;fcntl.h&gt; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : +<span class="lineNum"> 38 </span> : : /* prototypes +<span class="lineNum"> 39 </span> : : */ +<span class="lineNum"> 40 </span> : : static int get_keys(fko_ctx_t ctx, fko_cli_options_t *options, +<span class="lineNum"> 41 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len); +<span class="lineNum"> 42 </span> : : static void errmsg(const char *msg, const int err); +<span class="lineNum"> 43 </span> : : static int prev_exec(fko_cli_options_t *options, int argc, char **argv); +<span class="lineNum"> 44 </span> : : static int get_save_file(char *args_save_file); +<span class="lineNum"> 45 </span> : : static int show_last_command(const char * const args_save_file); +<span class="lineNum"> 46 </span> : : static int save_args(int argc, char **argv, const char * const args_save_file); +<span class="lineNum"> 47 </span> : : static int run_last_args(fko_cli_options_t *options, +<span class="lineNum"> 48 </span> : : const char * const args_save_file); +<span class="lineNum"> 49 </span> : : static int set_message_type(fko_ctx_t ctx, fko_cli_options_t *options); +<span class="lineNum"> 50 </span> : : static int set_nat_access(fko_ctx_t ctx, fko_cli_options_t *options, +<span class="lineNum"> 51 </span> : : const char * const access_buf); +<span class="lineNum"> 52 </span> : : static int set_access_buf(fko_ctx_t ctx, fko_cli_options_t *options, +<span class="lineNum"> 53 </span> : : char *access_buf); +<span class="lineNum"> 54 </span> : : static int get_rand_port(fko_ctx_t ctx); +<span class="lineNum"> 55 </span> : : int resolve_ip_https(fko_cli_options_t *options); +<span class="lineNum"> 56 </span> : : int resolve_ip_http(fko_cli_options_t *options); +<span class="lineNum"> 57 </span> : : static void clean_exit(fko_ctx_t ctx, fko_cli_options_t *opts, +<span class="lineNum"> 58 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len, +<span class="lineNum"> 59 </span> : : unsigned int exit_status); +<span class="lineNum"> 60 </span> : : static void zero_buf_wrapper(char *buf, int len); +<span class="lineNum"> 61 </span> : : static int is_hostname_str_with_port(const char *str, +<span class="lineNum"> 62 </span> : : char *hostname, size_t hostname_bufsize, int *port); +<span class="lineNum"> 63 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 64 </span> : : static int enable_fault_injections(fko_cli_options_t * const opts); +<span class="lineNum"> 65 </span> : : #endif +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> : : #define NAT_ACCESS_STR_TEMPLATE &quot;%s,%d&quot; /*!&lt; Template for a nat access string ip,port with sscanf*/ +<span class="lineNum"> 68 </span> : : #define HOSTNAME_BUFSIZE 64 /*!&lt; Maximum size of a hostname string */ +<span class="lineNum"> 69 </span> : : #define CTX_DUMP_BUFSIZE 4096 /*!&lt; Maximum size allocated to a FKO context dump */ +<span class="lineNum"> 70 </span> : : +<span class="lineNum"> 71 </span> : : /** +<span class="lineNum"> 72 </span> : : * @brief Check whether a string is an ipv6 address or not +<span class="lineNum"> 73 </span> : : * +<span class="lineNum"> 74 </span> : : * @param str String to check for an ipv6 address. +<span class="lineNum"> 75 </span> : : * +<span class="lineNum"> 76 </span> : : * @return 1 if the string is an ipv6 address, 0 otherwise. +<a name="77"><span class="lineNum"> 77 </span> : : */</a> +<span class="lineNum"> 78 </span> : : static int +<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : is_ipv6_str(char *str)</span> +<span class="lineNum"> 80 </span> : : { +<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 82 </span> : : } +<span class="lineNum"> 83 </span> : : +<span class="lineNum"> 84 </span> : : /** +<span class="lineNum"> 85 </span> : : * @brief Check a string to find out if it is built as 'hostname,port' +<span class="lineNum"> 86 </span> : : * +<span class="lineNum"> 87 </span> : : * This function check if we can extract an hostname and a port from the string. +<span class="lineNum"> 88 </span> : : * If yes, we return 1, and both the hostname buffer and the port number are set +<span class="lineNum"> 89 </span> : : * accordingly. +<span class="lineNum"> 90 </span> : : * +<span class="lineNum"> 91 </span> : : * We could have used sscanf() here with a template &quot;%[^,],%u&quot;, but this way we +<span class="lineNum"> 92 </span> : : * do not limit the size of the value copy in the hostname destination buffer. +<span class="lineNum"> 93 </span> : : * Limiting the string in the sscanf() can be done but would prevent any easy change +<span class="lineNum"> 94 </span> : : * for the hostname buffer size. +<span class="lineNum"> 95 </span> : : * +<span class="lineNum"> 96 </span> : : * @param str String to parse. +<span class="lineNum"> 97 </span> : : * @param hostname Buffer where to store the hostname value read from @str. +<span class="lineNum"> 98 </span> : : * @param hostname_bufsize Hostname buffer size. +<span class="lineNum"> 99 </span> : : * @param port Value of the port read from @str. +<span class="lineNum"> 100 </span> : : * +<span class="lineNum"> 101 </span> : : * @return 1 if the string is built as 'hostname,port', 0 otherwise. +<a name="102"><span class="lineNum"> 102 </span> : : */</a> +<span class="lineNum"> 103 </span> : : static int +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : is_hostname_str_with_port(const char *str, char *hostname, size_t hostname_bufsize, int *port)</span> +<span class="lineNum"> 105 </span> : : { +<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : int valid = 0; /* Result of the function */</span> +<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : char buf[MAX_LINE_LEN] = {0}; /* Copy of the buffer eg. &quot;hostname,port&quot; */</span> +<span class="lineNum"> 108 </span> : : char *h; /* Pointer on the hostname string */ +<span class="lineNum"> 109 </span> : : char *p; /* Ponter on the port string */ +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> : : memset(hostname, 0, hostname_bufsize); +<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : *port = 0;</span> +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : /* Replace the comma in the string with a NULL char to split the +<span class="lineNum"> 115 </span> : : * buffer in two strings (hostname and port) */ +<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, str, sizeof(buf));</span> +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : p = strchr(buf, ',');</span> +<span class="lineNum"> 118 </span> : : +<span class="lineNum"> 119 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(p != NULL)</span> +<span class="lineNum"> 120 </span> : : { +<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : *p++ = 0;</span> +<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : h = buf;</span> +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : *port = atoi(p);</span> +<span class="lineNum"> 125 </span> : : +<span class="lineNum"> 126 </span> : : /* If the string does not match an ipv4 or ipv6 address we assume this +<span class="lineNum"> 127 </span> : : * is an hostname. We make sure the port is in the good range too */ +<span class="lineNum"> 128 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( (is_valid_ipv4_addr(buf) == 0)</span> +<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (is_ipv6_str(buf) == 0)</span> +<span class="lineNum"> 130 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; ((*port &gt; 0) &amp;&amp; (*port &lt; 65536)) )</span> +<span class="lineNum"> 131 </span> : : { +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : strlcpy(hostname, h, hostname_bufsize);</span> +<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : valid = 1;</span> +<span class="lineNum"> 134 </span> : : } +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> : : /* The port is out of range or the ip is an ipv6 or ipv4 address */ +<span class="lineNum"> 137 </span> : : else; +<span class="lineNum"> 138 </span> : : } +<span class="lineNum"> 139 </span> : : +<span class="lineNum"> 140 </span> : : /* No port found in the string, let's skip */ +<span class="lineNum"> 141 </span> : : else; +<span class="lineNum"> 142 </span> : : +<span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : return valid;</span> +<span class="lineNum"> 144 </span> : : } +<a name="145"><span class="lineNum"> 145 </span> : : </a> +<span class="lineNum"> 146 </span> : : int +<span class="lineNum"> 147 </span> :<span class="lineCov"> 2085 : main(int argc, char **argv)</span> +<span class="lineNum"> 148 </span> : : { +<span class="lineNum"> 149 </span> :<span class="lineCov"> 2085 : fko_ctx_t ctx = NULL;</span> +<span class="lineNum"> 150 </span> :<span class="lineCov"> 2085 : fko_ctx_t ctx2 = NULL;</span> +<span class="lineNum"> 151 </span> : : int res; +<span class="lineNum"> 152 </span> :<span class="lineCov"> 2085 : char *spa_data=NULL, *version=NULL;</span> +<span class="lineNum"> 153 </span> :<span class="lineCov"> 2085 : char access_buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 154 </span> :<span class="lineCov"> 2085 : char key[MAX_KEY_LEN+1] = {0};</span> +<span class="lineNum"> 155 </span> :<span class="lineCov"> 2085 : char hmac_key[MAX_KEY_LEN+1] = {0};</span> +<span class="lineNum"> 156 </span> :<span class="lineCov"> 2085 : int key_len = 0, orig_key_len = 0, hmac_key_len = 0, enc_mode;</span> +<span class="lineNum"> 157 </span> :<span class="lineCov"> 2085 : int tmp_port = 0;</span> +<span class="lineNum"> 158 </span> : : char dump_buf[CTX_DUMP_BUFSIZE]; +<span class="lineNum"> 159 </span> : : +<span class="lineNum"> 160 </span> : : fko_cli_options_t options; +<span class="lineNum"> 161 </span> : : +<span class="lineNum"> 162 </span> : : memset(&amp;options, 0x0, sizeof(fko_cli_options_t)); +<span class="lineNum"> 163 </span> : : +<span class="lineNum"> 164 </span> : : /* Initialize the log module */ +<span class="lineNum"> 165 </span> :<span class="lineCov"> 2085 : log_new();</span> +<span class="lineNum"> 166 </span> : : +<span class="lineNum"> 167 </span> : : /* Handle command line +<span class="lineNum"> 168 </span> : : */ +<span class="lineNum"> 169 </span> :<span class="lineCov"> 2085 : config_init(&amp;options, argc, argv);</span> +<span class="lineNum"> 170 </span> : : +<span class="lineNum"> 171 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 172 </span> : : /* Set any fault injection points early +<span class="lineNum"> 173 </span> : : */ +<span class="lineNum"> 174 </span> : : if(! enable_fault_injections(&amp;options)) +<span class="lineNum"> 175 </span> : : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key, +<span class="lineNum"> 176 </span> : : &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 177 </span> : : #endif +<span class="lineNum"> 178 </span> : : +<span class="lineNum"> 179 </span> : : /* Handle previous execution arguments if required +<span class="lineNum"> 180 </span> : : */ +<span class="lineNum"> 181 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(prev_exec(&amp;options, argc, argv) != 1)</span> +<span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key,</span> +<span class="lineNum"> 183 </span> : : &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 184 </span> : : +<span class="lineNum"> 185 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options.show_last_command)</span> +<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key,</span> +<span class="lineNum"> 187 </span> : : &amp;hmac_key_len, EXIT_SUCCESS); +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> : : /* Intialize the context +<span class="lineNum"> 190 </span> : : */ +<span class="lineNum"> 191 </span> :<span class="lineCov"> 566 : res = fko_new(&amp;ctx);</span> +<span class="lineNum"> 192 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 193 </span> : : { +<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_new&quot;, res);</span> +<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key,</span> +<span class="lineNum"> 196 </span> : : &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 197 </span> : : } +<span class="lineNum"> 198 </span> : : +<span class="lineNum"> 199 </span> : : /* Display version info and exit. +<span class="lineNum"> 200 </span> : : */ +<span class="lineNum"> 201 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options.version)</span> +<span class="lineNum"> 202 </span> : : { +<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : fko_get_version(ctx, &amp;version);</span> +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;fwknop client %s, FKO protocol version %s\n&quot;,</span> +<span class="lineNum"> 206 </span> : : MY_VERSION, version); +<span class="lineNum"> 207 </span> : : +<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 209 </span> : : hmac_key, &amp;hmac_key_len, EXIT_SUCCESS); +<span class="lineNum"> 210 </span> : : } +<span class="lineNum"> 211 </span> : : +<span class="lineNum"> 212 </span> : : /* Set client timeout +<span class="lineNum"> 213 </span> : : */ +<span class="lineNum"> 214 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 563 times"> + </span>]:<span class="lineCov"> 566 : if(options.fw_timeout &gt;= 0)</span> +<span class="lineNum"> 215 </span> : : { +<span class="lineNum"> 216 </span> :<span class="lineCov"> 3 : res = fko_set_spa_client_timeout(ctx, options.fw_timeout);</span> +<span class="lineNum"> 217 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 3 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 218 </span> : : { +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_client_timeout&quot;, res);</span> +<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 221 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 222 </span> : : } +<span class="lineNum"> 223 </span> : : } +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> : : /* Set the SPA packet message type based on command line options +<span class="lineNum"> 226 </span> : : */ +<span class="lineNum"> 227 </span> :<span class="lineCov"> 566 : res = set_message_type(ctx, &amp;options);</span> +<span class="lineNum"> 228 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 229 </span> : : { +<span class="lineNum"> 230 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_message_type&quot;, res);</span> +<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 232 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 233 </span> : : } +<span class="lineNum"> 234 </span> : : +<span class="lineNum"> 235 </span> : : /* Adjust the SPA timestamp if necessary +<span class="lineNum"> 236 </span> : : */ +<span class="lineNum"> 237 </span> [<span class="branchCov" title="Branch 0 was taken 75 times"> + </span><span class="branchCov" title="Branch 1 was taken 491 times"> + </span>]:<span class="lineCov"> 566 : if(options.time_offset_plus &gt; 0)</span> +<span class="lineNum"> 238 </span> : : { +<span class="lineNum"> 239 </span> :<span class="lineCov"> 75 : res = fko_set_timestamp(ctx, options.time_offset_plus);</span> +<span class="lineNum"> 240 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 75 times"> + </span>]:<span class="lineCov"> 75 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 241 </span> : : { +<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_timestamp&quot;, res);</span> +<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 244 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 245 </span> : : } +<span class="lineNum"> 246 </span> : : } +<span class="lineNum"> 247 </span> [<span class="branchCov" title="Branch 0 was taken 428 times"> + </span><span class="branchCov" title="Branch 1 was taken 138 times"> + </span>]:<span class="lineCov"> 566 : if(options.time_offset_minus &gt; 0)</span> +<span class="lineNum"> 248 </span> : : { +<span class="lineNum"> 249 </span> :<span class="lineCov"> 428 : res = fko_set_timestamp(ctx, -options.time_offset_minus);</span> +<span class="lineNum"> 250 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 427 times"> + </span>]:<span class="lineCov"> 428 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 251 </span> : : { +<span class="lineNum"> 252 </span> :<span class="lineCov"> 1 : errmsg(&quot;fko_set_timestamp&quot;, res);</span> +<span class="lineNum"> 253 </span> :<span class="lineCov"> 1 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 254 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 255 </span> : : } +<span class="lineNum"> 256 </span> : : } +<span class="lineNum"> 257 </span> : : +<span class="lineNum"> 258 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 565 times"> + </span>]:<span class="lineCov"> 565 : if(options.server_command[0] != 0x0)</span> +<span class="lineNum"> 259 </span> : : { +<span class="lineNum"> 260 </span> : : /* Set the access message to a command that the server will +<span class="lineNum"> 261 </span> : : * execute +<span class="lineNum"> 262 </span> : : */ +<span class="lineNum"> 263 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s%s&quot;, +<span class="lineNum"> 264 </span> : : options.allow_ip_str, &quot;,&quot;, options.server_command); +<span class="lineNum"> 265 </span> : : } +<span class="lineNum"> 266 </span> : : else +<span class="lineNum"> 267 </span> : : { +<span class="lineNum"> 268 </span> : : /* Resolve the client's public facing IP address if requestesd. +<span class="lineNum"> 269 </span> : : * if this fails, consider it fatal. +<span class="lineNum"> 270 </span> : : */ +<span class="lineNum"> 271 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 565 times"> + </span>]:<span class="lineCov"> 565 : if (options.resolve_ip_http_https)</span> +<span class="lineNum"> 272 </span> : : { +<span class="lineNum"> 273 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options.resolve_http_only)</span> +<span class="lineNum"> 274 </span> : : { +<span class="lineNum"> 275 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(resolve_ip_http(&amp;options) &lt; 0)</span> +<span class="lineNum"> 276 </span> : : { +<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 278 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 279 </span> : : } +<span class="lineNum"> 280 </span> : : } +<span class="lineNum"> 281 </span> : : else +<span class="lineNum"> 282 </span> : : { +<span class="lineNum"> 283 </span> : : /* Default to HTTPS */ +<span class="lineNum"> 284 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(resolve_ip_https(&amp;options) &lt; 0)</span> +<span class="lineNum"> 285 </span> : : { +<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 287 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 288 </span> : : } +<span class="lineNum"> 289 </span> : : } +<span class="lineNum"> 290 </span> : : } +<span class="lineNum"> 291 </span> : : +<span class="lineNum"> 292 </span> : : /* Set a message string by combining the allow IP and the +<span class="lineNum"> 293 </span> : : * port/protocol. The fwknopd server allows no port/protocol +<span class="lineNum"> 294 </span> : : * to be specified as well, so in this case append the string +<span class="lineNum"> 295 </span> : : * &quot;none/0&quot; to the allow IP. +<span class="lineNum"> 296 </span> : : */ +<span class="lineNum"> 297 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 565 times"> + </span>]:<span class="lineCov"> 565 : if(set_access_buf(ctx, &amp;options, access_buf) != 1)</span> +<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 299 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 300 </span> : : } +<span class="lineNum"> 301 </span> :<span class="lineCov"> 565 : res = fko_set_spa_message(ctx, access_buf);</span> +<span class="lineNum"> 302 </span> [<span class="branchCov" title="Branch 0 was taken 98 times"> + </span><span class="branchCov" title="Branch 1 was taken 467 times"> + </span>]:<span class="lineCov"> 565 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 303 </span> : : { +<span class="lineNum"> 304 </span> :<span class="lineCov"> 98 : errmsg(&quot;fko_set_spa_message&quot;, res);</span> +<span class="lineNum"> 305 </span> :<span class="lineCov"> 98 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 306 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 307 </span> : : } +<span class="lineNum"> 308 </span> : : +<span class="lineNum"> 309 </span> : : /* Set NAT access string +<span class="lineNum"> 310 </span> : : */ +<span class="lineNum"> 311 </span>[<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 467 times"> + </span>]:<span class="lineCov"> 467 : if (options.nat_local || options.nat_access_str[0] != 0x0)</span> +<span class="lineNum"> 312 </span> : : { +<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : res = set_nat_access(ctx, &amp;options, access_buf);</span> +<span class="lineNum"> 314 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 315 </span> : : { +<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_nat_access_str&quot;, res);</span> +<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 318 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 319 </span> : : } +<span class="lineNum"> 320 </span> : : } +<span class="lineNum"> 321 </span> : : +<span class="lineNum"> 322 </span> : : /* Set username +<span class="lineNum"> 323 </span> : : */ +<span class="lineNum"> 324 </span> [<span class="branchCov" title="Branch 0 was taken 378 times"> + </span><span class="branchCov" title="Branch 1 was taken 89 times"> + </span>]:<span class="lineCov"> 467 : if(options.spoof_user[0] != 0x0)</span> +<span class="lineNum"> 325 </span> : : { +<span class="lineNum"> 326 </span> :<span class="lineCov"> 378 : res = fko_set_username(ctx, options.spoof_user);</span> +<span class="lineNum"> 327 </span> [<span class="branchCov" title="Branch 0 was taken 25 times"> + </span><span class="branchCov" title="Branch 1 was taken 353 times"> + </span>]:<span class="lineCov"> 378 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 328 </span> : : { +<span class="lineNum"> 329 </span> :<span class="lineCov"> 25 : errmsg(&quot;fko_set_username&quot;, res);</span> +<span class="lineNum"> 330 </span> :<span class="lineCov"> 25 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 331 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 332 </span> : : } +<span class="lineNum"> 333 </span> : : } +<span class="lineNum"> 334 </span> : : +<span class="lineNum"> 335 </span> : : /* Set up for using GPG if specified. +<span class="lineNum"> 336 </span> : : */ +<span class="lineNum"> 337 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 439 times"> + </span>]:<span class="lineCov"> 442 : if(options.use_gpg)</span> +<span class="lineNum"> 338 </span> : : { +<span class="lineNum"> 339 </span> : : /* If use-gpg-agent was not specified, then remove the GPG_AGENT_INFO +<span class="lineNum"> 340 </span> : : * ENV variable if it exists. +<span class="lineNum"> 341 </span> : : */ +<span class="lineNum"> 342 </span> : : #ifndef WIN32 +<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 3 : if(!options.use_gpg_agent)</span> +<span class="lineNum"> 344 </span> :<span class="lineCov"> 2 : unsetenv(&quot;GPG_AGENT_INFO&quot;);</span> +<span class="lineNum"> 345 </span> : : #endif +<span class="lineNum"> 346 </span> : : +<span class="lineNum"> 347 </span> :<span class="lineCov"> 3 : res = fko_set_spa_encryption_type(ctx, FKO_ENCRYPTION_GPG);</span> +<span class="lineNum"> 348 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 3 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 349 </span> : : { +<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_type&quot;, res);</span> +<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 352 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 353 </span> : : } +<span class="lineNum"> 354 </span> : : +<span class="lineNum"> 355 </span> : : /* Set gpg path if necessary +<span class="lineNum"> 356 </span> : : */ +<span class="lineNum"> 357 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 3 : if(strlen(options.gpg_exe) &gt; 0)</span> +<span class="lineNum"> 358 </span> : : { +<span class="lineNum"> 359 </span> :<span class="lineCov"> 1 : res = fko_set_gpg_exe(ctx, options.gpg_exe);</span> +<span class="lineNum"> 360 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 361 </span> : : { +<span class="lineNum"> 362 </span> :<span class="lineCov"> 1 : errmsg(&quot;fko_set_gpg_exe&quot;, res);</span> +<span class="lineNum"> 363 </span> :<span class="lineCov"> 1 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 364 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 365 </span> : : } +<span class="lineNum"> 366 </span> : : } +<span class="lineNum"> 367 </span> : : +<span class="lineNum"> 368 </span> : : /* If a GPG home dir was specified, set it here. Note: Setting +<span class="lineNum"> 369 </span> : : * this has to occur before calling any of the other GPG-related +<span class="lineNum"> 370 </span> : : * functions. +<span class="lineNum"> 371 </span> : : */ +<span class="lineNum"> 372 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(strlen(options.gpg_home_dir) &gt; 0)</span> +<span class="lineNum"> 373 </span> : : { +<span class="lineNum"> 374 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_home_dir(ctx, options.gpg_home_dir);</span> +<span class="lineNum"> 375 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 376 </span> : : { +<span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_gpg_home_dir&quot;, res);</span> +<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 379 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 380 </span> : : } +<span class="lineNum"> 381 </span> : : } +<span class="lineNum"> 382 </span> : : +<span class="lineNum"> 383 </span> :<span class="lineCov"> 2 : res = fko_set_gpg_recipient(ctx, options.gpg_recipient_key);</span> +<span class="lineNum"> 384 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 385 </span> : : { +<span class="lineNum"> 386 </span> :<span class="lineCov"> 2 : errmsg(&quot;fko_set_gpg_recipient&quot;, res);</span> +<span class="lineNum"> 387 </span> : : +<span class="lineNum"> 388 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(IS_GPG_ERROR(res))</span> +<span class="lineNum"> 389 </span> :<span class="lineCov"> 2 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s&quot;, fko_gpg_errstr(ctx));</span> +<span class="lineNum"> 390 </span> :<span class="lineCov"> 2 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 391 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 392 </span> : : } +<span class="lineNum"> 393 </span> : : +<span class="lineNum"> 394 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(options.gpg_signer_key) &gt; 0)</span> +<span class="lineNum"> 395 </span> : : { +<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_signer(ctx, options.gpg_signer_key);</span> +<span class="lineNum"> 397 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 398 </span> : : { +<span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_gpg_signer&quot;, res);</span> +<span class="lineNum"> 400 </span> : : +<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_GPG_ERROR(res))</span> +<span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s&quot;, fko_gpg_errstr(ctx));</span> +<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 404 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 405 </span> : : } +<span class="lineNum"> 406 </span> : : } +<span class="lineNum"> 407 </span> : : +<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : res = fko_set_spa_encryption_mode(ctx, FKO_ENC_MODE_ASYMMETRIC);</span> +<span class="lineNum"> 409 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 410 </span> : : { +<span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_mode&quot;, res);</span> +<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 413 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 414 </span> : : } +<span class="lineNum"> 415 </span> : : } +<span class="lineNum"> 416 </span> : : +<span class="lineNum"> 417 </span>[<span class="branchCov" title="Branch 0 was taken 383 times"> + </span><span class="branchCov" title="Branch 1 was taken 56 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 383 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 439 : if(options.encryption_mode &amp;&amp; !options.use_gpg)</span> +<span class="lineNum"> 418 </span> : : { +<span class="lineNum"> 419 </span> :<span class="lineCov"> 383 : res = fko_set_spa_encryption_mode(ctx, options.encryption_mode);</span> +<span class="lineNum"> 420 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 383 times"> + </span>]:<span class="lineCov"> 383 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 421 </span> : : { +<span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_mode&quot;, res);</span> +<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 424 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 425 </span> : : } +<span class="lineNum"> 426 </span> : : } +<span class="lineNum"> 427 </span> : : +<span class="lineNum"> 428 </span> : : /* Set Digest type. +<span class="lineNum"> 429 </span> : : */ +<span class="lineNum"> 430 </span> [<span class="branchCov" title="Branch 0 was taken 372 times"> + </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 439 : if(options.digest_type)</span> +<span class="lineNum"> 431 </span> : : { +<span class="lineNum"> 432 </span> :<span class="lineCov"> 372 : res = fko_set_spa_digest_type(ctx, options.digest_type);</span> +<span class="lineNum"> 433 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 372 times"> + </span>]:<span class="lineCov"> 372 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 434 </span> : : { +<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_digest_type&quot;, res);</span> +<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 437 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 438 </span> : : } +<span class="lineNum"> 439 </span> : : } +<span class="lineNum"> 440 </span> : : +<span class="lineNum"> 441 </span> : : /* Acquire the necessary encryption/hmac keys +<span class="lineNum"> 442 </span> : : */ +<span class="lineNum"> 443 </span> [<span class="branchCov" title="Branch 1 was taken 5 times"> + </span><span class="branchCov" title="Branch 2 was taken 434 times"> + </span>]:<span class="lineCov"> 439 : if(get_keys(ctx, &amp;options, key, &amp;key_len, hmac_key, &amp;hmac_key_len) != 1)</span> +<span class="lineNum"> 444 </span> :<span class="lineCov"> 5 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> +<span class="lineNum"> 445 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 446 </span> : : +<span class="lineNum"> 447 </span> :<span class="lineCov"> 434 : orig_key_len = key_len;</span> +<span class="lineNum"> 448 </span> : : +<span class="lineNum"> 449 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(options.encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV</span> +<span class="lineNum"> 450 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; key_len &gt; 16)</span> +<span class="lineNum"> 451 </span> : : { +<span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 453 </span> : : &quot;WARNING: Encryption key in '-M legacy' mode must be &lt;= 16 bytes&quot;); +<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 455 </span> : : &quot;long - truncating before sending SPA packet. Upgrading remote&quot;); +<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 457 </span> : : &quot;fwknopd is recommended.&quot;); +<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : key_len = 16;</span> +<span class="lineNum"> 459 </span> : : } +<span class="lineNum"> 460 </span> : : +<span class="lineNum"> 461 </span> : : /* Finalize the context data (encrypt and encode the SPA data) +<span class="lineNum"> 462 </span> : : */ +<span class="lineNum"> 463 </span> :<span class="lineCov"> 434 : res = fko_spa_data_final(ctx, key, key_len, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 464 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 434 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 465 </span> : : { +<span class="lineNum"> 466 </span> :<span class="lineCov"> 18 : errmsg(&quot;fko_spa_data_final&quot;, res);</span> +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 18 : if(IS_GPG_ERROR(res))</span> +<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s&quot;, fko_gpg_errstr(ctx));</span> +<span class="lineNum"> 470 </span> :<span class="lineCov"> 18 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 471 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 472 </span> : : } +<span class="lineNum"> 473 </span> : : +<span class="lineNum"> 474 </span> : : /* Display the context data. +<span class="lineNum"> 475 </span> : : */ +<span class="lineNum"> 476 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if (options.verbose || options.test)</span> +<span class="lineNum"> 477 </span> : : { +<span class="lineNum"> 478 </span> :<span class="lineCov"> 416 : res = dump_ctx_to_buffer(ctx, dump_buf, sizeof(dump_buf));</span> +<span class="lineNum"> 479 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if (res == FKO_SUCCESS)</span> +<span class="lineNum"> 480 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_NORMAL, &quot;%s&quot;, dump_buf);</span> +<span class="lineNum"> 481 </span> : : else +<span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to dump FKO context: %s&quot;,</span> +<span class="lineNum"> 483 </span> : : fko_errstr(res)); +<span class="lineNum"> 484 </span> : : } +<span class="lineNum"> 485 </span> : : +<span class="lineNum"> 486 </span> : : /* Save packet data payload if requested. +<span class="lineNum"> 487 </span> : : */ +<span class="lineNum"> 488 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if (options.save_packet_file[0] != 0x0)</span> +<span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : write_spa_packet_data(ctx, &amp;options);</span> +<span class="lineNum"> 490 </span> : : +<span class="lineNum"> 491 </span> : : /* SPA packet random destination port handling +<span class="lineNum"> 492 </span> : : */ +<span class="lineNum"> 493 </span> [<span class="branchCov" title="Branch 0 was taken 5 times"> + </span><span class="branchCov" title="Branch 1 was taken 411 times"> + </span>]:<span class="lineCov"> 416 : if (options.rand_port)</span> +<span class="lineNum"> 494 </span> : : { +<span class="lineNum"> 495 </span> :<span class="lineCov"> 5 : tmp_port = get_rand_port(ctx);</span> +<span class="lineNum"> 496 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(tmp_port &lt; 0)</span> +<span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 498 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 499 </span> :<span class="lineCov"> 5 : options.spa_dst_port = tmp_port;</span> +<span class="lineNum"> 500 </span> : : } +<span class="lineNum"> 501 </span> : : +<span class="lineNum"> 502 </span> : : /* If we are using one the &quot;raw&quot; modes (normally because +<span class="lineNum"> 503 </span> : : * we're going to spoof the SPA packet source IP), then select +<span class="lineNum"> 504 </span> : : * a random source port unless the source port is already set +<span class="lineNum"> 505 </span> : : */ +<span class="lineNum"> 506 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if ((options.spa_proto == FKO_PROTO_TCP_RAW</span> +<span class="lineNum"> 507 </span> :<span class="lineCov"> 416 : || options.spa_proto == FKO_PROTO_UDP_RAW</span> +<span class="lineNum"> 508 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : || options.spa_proto == FKO_PROTO_ICMP)</span> +<span class="lineNum"> 509 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options.spa_src_port)</span> +<span class="lineNum"> 510 </span> : : { +<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : tmp_port = get_rand_port(ctx);</span> +<span class="lineNum"> 512 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tmp_port &lt; 0)</span> +<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 514 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : options.spa_src_port = tmp_port;</span> +<span class="lineNum"> 516 </span> : : } +<span class="lineNum"> 517 </span> : : +<span class="lineNum"> 518 </span> :<span class="lineCov"> 416 : res = send_spa_packet(ctx, &amp;options);</span> +<span class="lineNum"> 519 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res &lt; 0)</span> +<span class="lineNum"> 520 </span> : : { +<span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet: packet not sent.&quot;);</span> +<span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 523 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 524 </span> : : } +<span class="lineNum"> 525 </span> : : else +<span class="lineNum"> 526 </span> : : { +<span class="lineNum"> 527 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot;send_spa_packet: bytes sent: %i&quot;, res);</span> +<span class="lineNum"> 528 </span> : : } +<span class="lineNum"> 529 </span> : : +<span class="lineNum"> 530 </span> : : /* Run through a decode cycle in test mode (--DSS XXX: This test/decode +<span class="lineNum"> 531 </span> : : * portion should be moved elsewhere). +<span class="lineNum"> 532 </span> : : */ +<span class="lineNum"> 533 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if (options.test)</span> +<span class="lineNum"> 534 </span> : : { +<span class="lineNum"> 535 </span> : : /************** Decoding now *****************/ +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> : : /* Now we create a new context based on data from the first one. +<span class="lineNum"> 538 </span> : : */ +<span class="lineNum"> 539 </span> :<span class="lineCov"> 416 : res = fko_get_spa_data(ctx, &amp;spa_data);</span> +<span class="lineNum"> 540 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 541 </span> : : { +<span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_get_spa_data&quot;, res);</span> +<span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 544 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 545 </span> : : } +<span class="lineNum"> 546 </span> : : +<span class="lineNum"> 547 </span> : : /* Pull the encryption mode. +<span class="lineNum"> 548 </span> : : */ +<span class="lineNum"> 549 </span> :<span class="lineCov"> 416 : res = fko_get_spa_encryption_mode(ctx, &amp;enc_mode);</span> +<span class="lineNum"> 550 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 551 </span> : : { +<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_get_spa_encryption_mode&quot;, res);</span> +<span class="lineNum"> 553 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 555 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 558 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 559 </span> : : } +<span class="lineNum"> 560 </span> : : +<span class="lineNum"> 561 </span> : : /* If gpg-home-dir is specified, we have to defer decrypting if we +<span class="lineNum"> 562 </span> : : * use the fko_new_with_data() function because we need to set the +<span class="lineNum"> 563 </span> : : * gpg home dir after the context is created, but before we attempt +<span class="lineNum"> 564 </span> : : * to decrypt the data. Therefore we either pass NULL for the +<span class="lineNum"> 565 </span> : : * decryption key to fko_new_with_data() or use fko_new() to create +<span class="lineNum"> 566 </span> : : * an empty context, populate it with the encrypted data, set our +<span class="lineNum"> 567 </span> : : * options, then decode it. +<span class="lineNum"> 568 </span> : : * +<span class="lineNum"> 569 </span> : : * This also verifies the HMAC and truncates it if there are no +<span class="lineNum"> 570 </span> : : * problems. +<span class="lineNum"> 571 </span> : : */ +<span class="lineNum"> 572 </span> :<span class="lineCov"> 416 : res = fko_new_with_data(&amp;ctx2, spa_data, NULL,</span> +<span class="lineNum"> 573 </span> : : 0, enc_mode, hmac_key, hmac_key_len, options.hmac_type); +<span class="lineNum"> 574 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 575 </span> : : { +<span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_new_with_data&quot;, res);</span> +<span class="lineNum"> 577 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 578 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 579 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 580 </span> :<span class="lineNoCov"> 0 : ctx2 = NULL;</span> +<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 582 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 583 </span> : : } +<span class="lineNum"> 584 </span> : : +<span class="lineNum"> 585 </span> :<span class="lineCov"> 416 : res = fko_set_spa_encryption_mode(ctx2, enc_mode);</span> +<span class="lineNum"> 586 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 587 </span> : : { +<span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_mode&quot;, res);</span> +<span class="lineNum"> 589 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 591 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : ctx2 = NULL;</span> +<span class="lineNum"> 593 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 594 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 595 </span> : : } +<span class="lineNum"> 596 </span> : : +<span class="lineNum"> 597 </span> : : /* See if we are using gpg and if we need to set the GPG home dir. +<span class="lineNum"> 598 </span> : : */ +<span class="lineNum"> 599 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(options.use_gpg)</span> +<span class="lineNum"> 600 </span> : : { +<span class="lineNum"> 601 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(options.gpg_home_dir) &gt; 0)</span> +<span class="lineNum"> 602 </span> : : { +<span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_home_dir(ctx2, options.gpg_home_dir);</span> +<span class="lineNum"> 604 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 605 </span> : : { +<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_gpg_home_dir&quot;, res);</span> +<span class="lineNum"> 607 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 609 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : ctx2 = NULL;</span> +<span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 612 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 613 </span> : : } +<span class="lineNum"> 614 </span> : : } +<span class="lineNum"> 615 </span> : : } +<span class="lineNum"> 616 </span> : : +<span class="lineNum"> 617 </span> : : /* Decrypt +<span class="lineNum"> 618 </span> : : */ +<span class="lineNum"> 619 </span> :<span class="lineCov"> 416 : res = fko_decrypt_spa_data(ctx2, key, key_len);</span> +<span class="lineNum"> 620 </span> : : +<span class="lineNum"> 621 </span> [<span class="branchCov" title="Branch 0 was taken 31 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 622 </span> : : { +<span class="lineNum"> 623 </span> :<span class="lineCov"> 31 : errmsg(&quot;fko_decrypt_spa_data&quot;, res);</span> +<span class="lineNum"> 624 </span> : : +<span class="lineNum"> 625 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 31 : if(IS_GPG_ERROR(res)) {</span> +<span class="lineNum"> 626 </span> : : /* we most likely could not decrypt the gpg-encrypted data +<span class="lineNum"> 627 </span> : : * because we don't have access to the private key associated +<span class="lineNum"> 628 </span> : : * with the public key we used for encryption. Since this is +<span class="lineNum"> 629 </span> : : * expected, return 0 instead of an error condition (so calling +<span class="lineNum"> 630 </span> : : * programs like the fwknop test suite don't interpret this as +<span class="lineNum"> 631 </span> : : * an unrecoverable error), but print the error string for +<span class="lineNum"> 632 </span> : : * debugging purposes. The test suite does run a series of +<span class="lineNum"> 633 </span> : : * tests that use a single key pair for encryption and +<span class="lineNum"> 634 </span> : : * authentication, so decryption become possible for these +<span class="lineNum"> 635 </span> : : * tests. */ +<span class="lineNum"> 636 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s\n%s&quot;, fko_gpg_errstr(ctx2),</span> +<span class="lineNum"> 637 </span> : : &quot;No access to recipient private key?&quot;); +<span class="lineNum"> 638 </span> : : } +<span class="lineNum"> 639 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 31 times"> + </span>]:<span class="lineCov"> 31 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 641 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 642 </span> :<span class="lineCov"> 31 : ctx2 = NULL;</span> +<span class="lineNum"> 643 </span> :<span class="lineCov"> 31 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 644 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); +<span class="lineNum"> 645 </span> : : } +<span class="lineNum"> 646 </span> : : +<span class="lineNum"> 647 </span> :<span class="lineCov"> 385 : res = dump_ctx_to_buffer(ctx2, dump_buf, sizeof(dump_buf));</span> +<span class="lineNum"> 648 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (res == FKO_SUCCESS)</span> +<span class="lineNum"> 649 </span> :<span class="lineCov"> 385 : log_msg(LOG_VERBOSITY_NORMAL, &quot;\nDump of the Decoded Data\n%s&quot;, dump_buf);</span> +<span class="lineNum"> 650 </span> : : else +<span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to dump FKO context: %s&quot;, fko_errstr(res));</span> +<span class="lineNum"> 652 </span> : : +<span class="lineNum"> 653 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 655 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 656 </span> :<span class="lineCov"> 385 : ctx2 = NULL;</span> +<span class="lineNum"> 657 </span> : : } +<span class="lineNum"> 658 </span> : : +<span class="lineNum"> 659 </span> :<span class="lineCov"> 385 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> +<span class="lineNum"> 660 </span> : : hmac_key, &amp;hmac_key_len, EXIT_SUCCESS); +<span class="lineNum"> 661 </span> : : +<span class="lineNum"> 662 </span> : : return EXIT_SUCCESS; /* quiet down a gcc warning */ +<span class="lineNum"> 663 </span> : : } +<a name="664"><span class="lineNum"> 664 </span> : : </a> +<span class="lineNum"> 665 </span> : : void +<span class="lineNum"> 666 </span> :<span class="lineCov"> 566 : free_configs(fko_cli_options_t *opts)</span> +<span class="lineNum"> 667 </span> : : { +<span class="lineNum"> 668 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (opts-&gt;resolve_url != NULL)</span> +<span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : free(opts-&gt;resolve_url);</span> +<span class="lineNum"> 670 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (opts-&gt;wget_bin != NULL)</span> +<span class="lineNum"> 671 </span> :<span class="lineNoCov"> 0 : free(opts-&gt;wget_bin);</span> +<span class="lineNum"> 672 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;key, MAX_KEY_LEN+1);</span> +<span class="lineNum"> 673 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;key_base64, MAX_B64_KEY_LEN+1);</span> +<span class="lineNum"> 674 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;hmac_key, MAX_KEY_LEN+1);</span> +<span class="lineNum"> 675 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;hmac_key_base64, MAX_B64_KEY_LEN+1);</span> +<span class="lineNum"> 676 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;gpg_recipient_key, MAX_GPG_KEY_ID);</span> +<span class="lineNum"> 677 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;gpg_signer_key, MAX_GPG_KEY_ID);</span> +<span class="lineNum"> 678 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;gpg_home_dir, MAX_PATH_LEN);</span> +<span class="lineNum"> 679 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;server_command, MAX_LINE_LEN);</span> +<span class="lineNum"> 680 </span> :<span class="lineCov"> 566 : }</span> +<a name="681"><span class="lineNum"> 681 </span> : : </a> +<span class="lineNum"> 682 </span> : : static int +<span class="lineNum"> 683 </span> :<span class="lineCov"> 5 : get_rand_port(fko_ctx_t ctx)</span> +<span class="lineNum"> 684 </span> : : { +<span class="lineNum"> 685 </span> :<span class="lineCov"> 5 : char *rand_val = NULL;</span> +<span class="lineNum"> 686 </span> :<span class="lineCov"> 5 : char port_str[MAX_PORT_STR_LEN+1] = {0};</span> +<span class="lineNum"> 687 </span> : : int tmpint, is_err; +<span class="lineNum"> 688 </span> :<span class="lineCov"> 5 : int port = 0;</span> +<span class="lineNum"> 689 </span> :<span class="lineCov"> 5 : int res = 0;</span> +<span class="lineNum"> 690 </span> : : +<span class="lineNum"> 691 </span> :<span class="lineCov"> 5 : res = fko_get_rand_value(ctx, &amp;rand_val);</span> +<span class="lineNum"> 692 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 693 </span> : : { +<span class="lineNum"> 694 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;get_rand_port(), fko_get_rand_value&quot;, res);</span> +<span class="lineNum"> 695 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 696 </span> : : } +<span class="lineNum"> 697 </span> : : +<span class="lineNum"> 698 </span> :<span class="lineCov"> 5 : strlcpy(port_str, rand_val, sizeof(port_str));</span> +<span class="lineNum"> 699 </span> : : +<span class="lineNum"> 700 </span> :<span class="lineCov"> 5 : tmpint = strtol_wrapper(port_str, 0, -1, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 701 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 702 </span> : : { +<span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 704 </span> : : &quot;[*] get_rand_port(), could not convert rand_val str '%s', to integer&quot;, +<span class="lineNum"> 705 </span> : : rand_val); +<span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 707 </span> : : } +<span class="lineNum"> 708 </span> : : +<span class="lineNum"> 709 </span> : : /* Convert to a random value between 1024 and 65535 +<span class="lineNum"> 710 </span> : : */ +<span class="lineNum"> 711 </span> :<span class="lineCov"> 5 : port = (MIN_HIGH_PORT + (tmpint % (MAX_PORT - MIN_HIGH_PORT)));</span> +<span class="lineNum"> 712 </span> : : +<span class="lineNum"> 713 </span> : : /* Force libfko to calculate a new random value since we don't want to +<span class="lineNum"> 714 </span> : : * give anyone a hint (via the port value) about the contents of the +<span class="lineNum"> 715 </span> : : * encrypted SPA data. +<span class="lineNum"> 716 </span> : : */ +<span class="lineNum"> 717 </span> :<span class="lineCov"> 5 : res = fko_set_rand_value(ctx, NULL);</span> +<span class="lineNum"> 718 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 719 </span> : : { +<span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;get_rand_port(), fko_get_rand_value&quot;, res);</span> +<span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 722 </span> : : } +<span class="lineNum"> 723 </span> : : +<span class="lineNum"> 724 </span> : : return port; +<span class="lineNum"> 725 </span> : : } +<span class="lineNum"> 726 </span> : : +<span class="lineNum"> 727 </span> : : /* See if the string is of the format &quot;&lt;ipv4 addr&gt;:&lt;port&gt;&quot;, +<a name="728"><span class="lineNum"> 728 </span> : : */</a> +<span class="lineNum"> 729 </span> : : static int +<span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : ipv4_str_has_port(char *str)</span> +<span class="lineNum"> 731 </span> : : { +<span class="lineNum"> 732 </span> : : int o1, o2, o3, o4, p; +<span class="lineNum"> 733 </span> : : +<span class="lineNum"> 734 </span> : : /* Force the ':' (if any) to a ',' +<span class="lineNum"> 735 </span> : : */ +<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : char *ndx = strchr(str, ':');</span> +<span class="lineNum"> 737 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx != NULL)</span> +<span class="lineNum"> 738 </span> :<span class="lineNoCov"> 0 : *ndx = ',';</span> +<span class="lineNum"> 739 </span> : : +<span class="lineNum"> 740 </span> : : /* Check format and values. +<span class="lineNum"> 741 </span> : : */ +<span class="lineNum"> 742 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sscanf(str, &quot;%u.%u.%u.%u,%u&quot;, &amp;o1, &amp;o2, &amp;o3, &amp;o4, &amp;p)) == 5</span> +<span class="lineNum"> 743 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o1 &gt;= 0 &amp;&amp; o1 &lt;= 255</span> +<span class="lineNum"> 744 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o2 &gt;= 0 &amp;&amp; o2 &lt;= 255</span> +<span class="lineNum"> 745 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o3 &gt;= 0 &amp;&amp; o3 &lt;= 255</span> +<span class="lineNum"> 746 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o4 &gt;= 0 &amp;&amp; o4 &lt;= 255</span> +<span class="lineNum"> 747 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; p &gt; 0 &amp;&amp; p &lt; 65536)</span> +<span class="lineNum"> 748 </span> : : { +<span class="lineNum"> 749 </span> : : return 1; +<span class="lineNum"> 750 </span> : : } +<span class="lineNum"> 751 </span> : : +<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 753 </span> : : } +<span class="lineNum"> 754 </span> : : +<span class="lineNum"> 755 </span> : : /* Set access buf +<a name="756"><span class="lineNum"> 756 </span> : : */</a> +<span class="lineNum"> 757 </span> : : static int +<span class="lineNum"> 758 </span> :<span class="lineCov"> 565 : set_access_buf(fko_ctx_t ctx, fko_cli_options_t *options, char *access_buf)</span> +<span class="lineNum"> 759 </span> : : { +<span class="lineNum"> 760 </span> :<span class="lineCov"> 565 : char *ndx = NULL, tmp_nat_port[MAX_PORT_STR_LEN+1] = {0};</span> +<span class="lineNum"> 761 </span> :<span class="lineCov"> 565 : int nat_port = 0;</span> +<span class="lineNum"> 762 </span> : : +<span class="lineNum"> 763 </span> [<span class="branchCov" title="Branch 0 was taken 525 times"> + </span><span class="branchCov" title="Branch 1 was taken 40 times"> + </span>]:<span class="lineCov"> 565 : if(options-&gt;access_str[0] != 0x0)</span> +<span class="lineNum"> 764 </span> : : { +<span class="lineNum"> 765 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 525 times"> + </span>]:<span class="lineCov"> 525 : if (options-&gt;nat_rand_port)</span> +<span class="lineNum"> 766 </span> : : { +<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : nat_port = get_rand_port(ctx);</span> +<span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_port = nat_port;</span> +<span class="lineNum"> 769 </span> : : } +<span class="lineNum"> 770 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 525 times"> + </span>]:<span class="lineCov"> 525 : else if (options-&gt;nat_port)</span> +<span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : nat_port = options-&gt;nat_port;</span> +<span class="lineNum"> 772 </span> : : +<span class="lineNum"> 773 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 525 times"> + </span>]:<span class="lineCov"> 525 : if(nat_port &gt; 0 &amp;&amp; nat_port &lt;= MAX_PORT)</span> +<span class="lineNum"> 774 </span> : : { +<span class="lineNum"> 775 </span> : : /* Replace the access string port with the NAT port since the +<span class="lineNum"> 776 </span> : : * NAT port is manually specified (--nat-port) or derived from +<span class="lineNum"> 777 </span> : : * random data (--nat-rand-port). In the NAT modes, the fwknopd +<span class="lineNum"> 778 </span> : : * server uses the port in the access string as the one to NAT, +<span class="lineNum"> 779 </span> : : * and access is granted via this translated port to whatever is +<span class="lineNum"> 780 </span> : : * specified with --nat-access &lt;IP:port&gt; (so this service is the +<span class="lineNum"> 781 </span> : : * utlimate target of the incoming connection after the SPA +<span class="lineNum"> 782 </span> : : * packet is sent). +<span class="lineNum"> 783 </span> : : */ +<span class="lineNum"> 784 </span> :<span class="lineNoCov"> 0 : ndx = strchr(options-&gt;access_str, '/');</span> +<span class="lineNum"> 785 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> +<span class="lineNum"> 786 </span> : : { +<span class="lineNum"> 787 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Expecting &lt;proto&gt;/&lt;port&gt; for -A arg.&quot;);</span> +<span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 789 </span> : : } +<span class="lineNum"> 790 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s&quot;, +<span class="lineNum"> 791 </span> :<span class="lineNoCov"> 0 : options-&gt;allow_ip_str, &quot;,&quot;);</span> +<span class="lineNum"> 792 </span> : : +<span class="lineNum"> 793 </span> : : /* This adds in the protocol + '/' char +<span class="lineNum"> 794 </span> : : */ +<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : strlcat(access_buf, options-&gt;access_str,</span> +<span class="lineNum"> 796 </span> :<span class="lineNoCov"> 0 : strlen(access_buf) + (ndx - options-&gt;access_str) + 2);</span> +<span class="lineNum"> 797 </span> : : +<span class="lineNum"> 798 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (strchr(ndx+1, '/') != NULL)</span> +<span class="lineNum"> 799 </span> : : { +<span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 801 </span> : : &quot;[*] NAT for multiple ports/protocols not yet supported.&quot;); +<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 803 </span> : : } +<span class="lineNum"> 804 </span> : : +<span class="lineNum"> 805 </span> : : /* Now add the NAT port +<span class="lineNum"> 806 </span> : : */ +<span class="lineNum"> 807 </span> : : snprintf(tmp_nat_port, MAX_PORT_STR_LEN+1, &quot;%d&quot;, nat_port); +<span class="lineNum"> 808 </span> :<span class="lineNoCov"> 0 : strlcat(access_buf, tmp_nat_port,</span> +<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : strlen(access_buf)+MAX_PORT_STR_LEN+1);</span> +<span class="lineNum"> 810 </span> : : } +<span class="lineNum"> 811 </span> : : else +<span class="lineNum"> 812 </span> : : { +<span class="lineNum"> 813 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s%s&quot;, +<span class="lineNum"> 814 </span> :<span class="lineCov"> 525 : options-&gt;allow_ip_str, &quot;,&quot;, options-&gt;access_str);</span> +<span class="lineNum"> 815 </span> : : } +<span class="lineNum"> 816 </span> : : } +<span class="lineNum"> 817 </span> : : else +<span class="lineNum"> 818 </span> : : { +<span class="lineNum"> 819 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s%s&quot;, +<span class="lineNum"> 820 </span> :<span class="lineCov"> 40 : options-&gt;allow_ip_str, &quot;,&quot;, &quot;none/0&quot;);</span> +<span class="lineNum"> 821 </span> : : } +<span class="lineNum"> 822 </span> : : return 1; +<span class="lineNum"> 823 </span> : : } +<span class="lineNum"> 824 </span> : : +<span class="lineNum"> 825 </span> : : /* Set NAT access string +<a name="826"><span class="lineNum"> 826 </span> : : */</a> +<span class="lineNum"> 827 </span> : : static int +<span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : set_nat_access(fko_ctx_t ctx, fko_cli_options_t *options, const char * const access_buf)</span> +<span class="lineNum"> 829 </span> : : { +<span class="lineNum"> 830 </span> :<span class="lineNoCov"> 0 : char nat_access_buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 831 </span> :<span class="lineNoCov"> 0 : char tmp_access_port[MAX_PORT_STR_LEN+1] = {0}, *ndx = NULL;</span> +<span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : int access_port = 0, i = 0, is_err = 0;</span> +<span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : char dst_ip_str[INET_ADDRSTRLEN] = {0};</span> +<span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : char hostname[HOSTNAME_BUFSIZE] = {0};</span> +<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : int port = 0;</span> +<span class="lineNum"> 836 </span> : : struct addrinfo hints; +<span class="lineNum"> 837 </span> : : +<span class="lineNum"> 838 </span> : : memset(&amp;hints, 0 , sizeof(hints)); +<span class="lineNum"> 839 </span> : : +<span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : ndx = strchr(options-&gt;access_str, '/');</span> +<span class="lineNum"> 841 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> +<span class="lineNum"> 842 </span> : : { +<span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Expecting &lt;proto&gt;/&lt;port&gt; for -A arg.&quot;);</span> +<span class="lineNum"> 844 </span> :<span class="lineNoCov"> 0 : return FKO_ERROR_INVALID_DATA;</span> +<span class="lineNum"> 845 </span> : : } +<span class="lineNum"> 846 </span> :<span class="lineNoCov"> 0 : ndx++;</span> +<span class="lineNum"> 847 </span> : : +<span class="lineNum"> 848 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(*ndx != '\0' &amp;&amp; isdigit(*ndx) &amp;&amp; i &lt; MAX_PORT_STR_LEN)</span> +<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span>] +<span class="lineNum"> 849 </span> : : { +<span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : tmp_access_port[i] = *ndx;</span> +<span class="lineNum"> 851 </span> :<span class="lineNoCov"> 0 : ndx++;</span> +<span class="lineNum"> 852 </span> :<span class="lineNoCov"> 0 : i++;</span> +<span class="lineNum"> 853 </span> : : } +<span class="lineNum"> 854 </span> :<span class="lineNoCov"> 0 : tmp_access_port[i] = '\0';</span> +<span class="lineNum"> 855 </span> : : +<span class="lineNum"> 856 </span> :<span class="lineNoCov"> 0 : access_port = strtol_wrapper(tmp_access_port, 1,</span> +<span class="lineNum"> 857 </span> : : MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 858 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 859 </span> : : { +<span class="lineNum"> 860 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Invalid port value '%d' for -A arg.&quot;,</span> +<span class="lineNum"> 861 </span> : : access_port); +<span class="lineNum"> 862 </span> :<span class="lineNoCov"> 0 : return FKO_ERROR_INVALID_DATA;</span> +<span class="lineNum"> 863 </span> : : } +<span class="lineNum"> 864 </span> : : +<span class="lineNum"> 865 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;nat_local &amp;&amp; options-&gt;nat_access_str[0] == 0x0)</span> +<span class="lineNum"> 866 </span> : : { +<span class="lineNum"> 867 </span> : : snprintf(nat_access_buf, MAX_LINE_LEN, NAT_ACCESS_STR_TEMPLATE, +<span class="lineNum"> 868 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_server_str, access_port);</span> +<span class="lineNum"> 869 </span> : : } +<span class="lineNum"> 870 </span> : : +<span class="lineNum"> 871 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (nat_access_buf[0] == 0x0 &amp;&amp; options-&gt;nat_access_str[0] != 0x0)</span> +<span class="lineNum"> 872 </span> : : { +<span class="lineNum"> 873 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ipv4_str_has_port(options-&gt;nat_access_str))</span> +<span class="lineNum"> 874 </span> : : { +<span class="lineNum"> 875 </span> : : snprintf(nat_access_buf, MAX_LINE_LEN, &quot;%s&quot;, +<span class="lineNum"> 876 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_access_str);</span> +<span class="lineNum"> 877 </span> : : } +<span class="lineNum"> 878 </span> : : else +<span class="lineNum"> 879 </span> : : { +<span class="lineNum"> 880 </span> : : snprintf(nat_access_buf, MAX_LINE_LEN, NAT_ACCESS_STR_TEMPLATE, +<span class="lineNum"> 881 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_access_str, access_port);</span> +<span class="lineNum"> 882 </span> : : } +<span class="lineNum"> 883 </span> : : } +<span class="lineNum"> 884 </span> : : +<span class="lineNum"> 885 </span> : : /* Check if there is a hostname to resolve as an ip address in the NAT access buffer */ +<span class="lineNum"> 886 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_hostname_str_with_port(nat_access_buf, hostname, sizeof(hostname), &amp;port))</span> +<span class="lineNum"> 887 </span> : : { +<span class="lineNum"> 888 </span> : : /* Speed up the name resolution by forcing ipv4 (AF_INET). +<span class="lineNum"> 889 </span> : : * A NULL pointer could be used instead if there is no constraint. +<span class="lineNum"> 890 </span> : : * Maybe when ipv6 support will be enable the structure could initialize the +<span class="lineNum"> 891 </span> : : * family to either AF_INET or AF_INET6 */ +<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : hints.ai_family = AF_INET;</span> +<span class="lineNum"> 893 </span> : : +<span class="lineNum"> 894 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (resolve_dest_adr(hostname, &amp;hints, dst_ip_str, sizeof(dst_ip_str)) != 0)</span> +<span class="lineNum"> 895 </span> : : { +<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Unable to resolve %s as an ip address&quot;,</span> +<span class="lineNum"> 897 </span> : : hostname); +<span class="lineNum"> 898 </span> :<span class="lineNoCov"> 0 : return FKO_ERROR_INVALID_DATA;</span> +<span class="lineNum"> 899 </span> : : } +<span class="lineNum"> 900 </span> : : +<span class="lineNum"> 901 </span> :<span class="lineNoCov"> 0 : snprintf(nat_access_buf, MAX_LINE_LEN, NAT_ACCESS_STR_TEMPLATE,</span> +<span class="lineNum"> 902 </span> : : dst_ip_str, port); +<span class="lineNum"> 903 </span> : : } +<span class="lineNum"> 904 </span> : : +<span class="lineNum"> 905 </span> : : /* Nothing to resolve */ +<span class="lineNum"> 906 </span> : : else; +<span class="lineNum"> 907 </span> : : +<span class="lineNum"> 908 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;nat_rand_port)</span> +<span class="lineNum"> 909 </span> : : { +<span class="lineNum"> 910 </span> : : /* Must print to stdout what the random port is since +<span class="lineNum"> 911 </span> : : * if not then the user will not which port will be +<span class="lineNum"> 912 </span> : : * opened/NAT'd on the fwknopd side +<span class="lineNum"> 913 </span> : : */ +<span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 915 </span> : : &quot;[+] Randomly assigned port '%d' on: '%s' will grant access to: '%s'&quot;, +<span class="lineNum"> 916 </span> : : options-&gt;nat_port, access_buf, nat_access_buf); +<span class="lineNum"> 917 </span> : : } +<span class="lineNum"> 918 </span> : : +<span class="lineNum"> 919 </span> :<span class="lineNoCov"> 0 : return fko_set_spa_nat_access(ctx, nat_access_buf);</span> +<span class="lineNum"> 920 </span> : : } +<a name="921"><span class="lineNum"> 921 </span> : : </a> +<span class="lineNum"> 922 </span> : : static int +<span class="lineNum"> 923 </span> :<span class="lineCov"> 566 : prev_exec(fko_cli_options_t *options, int argc, char **argv)</span> +<span class="lineNum"> 924 </span> : : { +<span class="lineNum"> 925 </span> :<span class="lineCov"> 566 : char args_save_file[MAX_PATH_LEN] = {0};</span> +<span class="lineNum"> 926 </span> :<span class="lineCov"> 566 : int res = 1;</span> +<span class="lineNum"> 927 </span> : : +<span class="lineNum"> 928 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;args_save_file[0] != 0x0)</span> +<span class="lineNum"> 929 </span> : : { +<span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : strlcpy(args_save_file, options-&gt;args_save_file, sizeof(args_save_file));</span> +<span class="lineNum"> 931 </span> : : } +<span class="lineNum"> 932 </span> : : else +<span class="lineNum"> 933 </span> : : { +<span class="lineNum"> 934 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (get_save_file(args_save_file) != 1)</span> +<span class="lineNum"> 935 </span> : : { +<span class="lineNum"> 936 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Unable to determine args save file&quot;);</span> +<span class="lineNum"> 937 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 938 </span> : : } +<span class="lineNum"> 939 </span> : : } +<span class="lineNum"> 940 </span> : : +<span class="lineNum"> 941 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;run_last_command)</span> +<span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : res = run_last_args(options, args_save_file);</span> +<span class="lineNum"> 943 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : else if(options-&gt;show_last_command)</span> +<span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : res = show_last_command(args_save_file);</span> +<span class="lineNum"> 945 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : else if (!options-&gt;no_save_args)</span> +<span class="lineNum"> 946 </span> :<span class="lineCov"> 566 : res = save_args(argc, argv, args_save_file);</span> +<span class="lineNum"> 947 </span> : : +<span class="lineNum"> 948 </span> :<span class="lineCov"> 566 : return res;</span> +<span class="lineNum"> 949 </span> : : } +<span class="lineNum"> 950 </span> : : +<span class="lineNum"> 951 </span> : : /* Show the last command that was executed +<a name="952"><span class="lineNum"> 952 </span> : : */</a> +<span class="lineNum"> 953 </span> : : static int +<span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : show_last_command(const char * const args_save_file)</span> +<span class="lineNum"> 955 </span> : : { +<span class="lineNum"> 956 </span> :<span class="lineNoCov"> 0 : char args_str[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 957 </span> :<span class="lineNoCov"> 0 : FILE *args_file_ptr = NULL;</span> +<span class="lineNum"> 958 </span> : : +<span class="lineNum"> 959 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(verify_file_perms_ownership(args_save_file) != 1)</span> +<span class="lineNum"> 960 </span> : : return 0; +<span class="lineNum"> 961 </span> : : +<span class="lineNum"> 962 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((args_file_ptr = fopen(args_save_file, &quot;r&quot;)) == NULL) {</span> +<span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open args file: %s&quot;,</span> +<span class="lineNum"> 964 </span> : : args_save_file); +<span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 966 </span> : : } +<span class="lineNum"> 967 </span> : : +<span class="lineNum"> 968 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((fgets(args_str, MAX_LINE_LEN, args_file_ptr)) != NULL) {</span> +<span class="lineNum"> 969 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 970 </span> : : &quot;Last fwknop client command line: %s&quot;, args_str); +<span class="lineNum"> 971 </span> : : } else { +<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 973 </span> : : &quot;Could not read line from file: %s&quot;, args_save_file); +<span class="lineNum"> 974 </span> :<span class="lineNoCov"> 0 : fclose(args_file_ptr);</span> +<span class="lineNum"> 975 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 976 </span> : : } +<span class="lineNum"> 977 </span> :<span class="lineNoCov"> 0 : fclose(args_file_ptr);</span> +<span class="lineNum"> 978 </span> : : +<span class="lineNum"> 979 </span> :<span class="lineNoCov"> 0 : return 1;</span> +<span class="lineNum"> 980 </span> : : } +<span class="lineNum"> 981 </span> : : +<span class="lineNum"> 982 </span> : : /* Get the command line arguments from the previous invocation +<a name="983"><span class="lineNum"> 983 </span> : : */</a> +<span class="lineNum"> 984 </span> : : static int +<span class="lineNum"> 985 </span> :<span class="lineNoCov"> 0 : run_last_args(fko_cli_options_t *options, const char * const args_save_file)</span> +<span class="lineNum"> 986 </span> : : { +<span class="lineNum"> 987 </span> :<span class="lineNoCov"> 0 : FILE *args_file_ptr = NULL;</span> +<span class="lineNum"> 988 </span> :<span class="lineNoCov"> 0 : int argc_new = 0, args_broken = 0;</span> +<span class="lineNum"> 989 </span> :<span class="lineNoCov"> 0 : char args_str[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 990 </span> : : char *argv_new[MAX_CMDLINE_ARGS]; /* should be way more than enough */ +<span class="lineNum"> 991 </span> : : +<span class="lineNum"> 992 </span> : : memset(argv_new, 0x0, sizeof(argv_new)); +<span class="lineNum"> 993 </span> : : +<span class="lineNum"> 994 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(verify_file_perms_ownership(args_save_file) != 1)</span> +<span class="lineNum"> 995 </span> : : return 0; +<span class="lineNum"> 996 </span> : : +<span class="lineNum"> 997 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((args_file_ptr = fopen(args_save_file, &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 998 </span> : : { +<span class="lineNum"> 999 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open args file: %s&quot;,</span> +<span class="lineNum"> 1000 </span> : : args_save_file); +<span class="lineNum"> 1001 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1002 </span> : : } +<span class="lineNum"> 1003 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((fgets(args_str, MAX_LINE_LEN, args_file_ptr)) != NULL)</span> +<span class="lineNum"> 1004 </span> : : { +<span class="lineNum"> 1005 </span> :<span class="lineNoCov"> 0 : args_str[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 1006 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;verbose)</span> +<span class="lineNum"> 1007 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;Executing: %s&quot;, args_str);</span> +<span class="lineNum"> 1008 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(args_str, argv_new, &amp;argc_new, options) != 1)</span> +<span class="lineNum"> 1009 </span> : : { +<span class="lineNum"> 1010 </span> :<span class="lineNoCov"> 0 : args_broken = 1;</span> +<span class="lineNum"> 1011 </span> : : } +<span class="lineNum"> 1012 </span> : : } +<span class="lineNum"> 1013 </span> :<span class="lineNoCov"> 0 : fclose(args_file_ptr);</span> +<span class="lineNum"> 1014 </span> : : +<span class="lineNum"> 1015 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(args_broken)</span> +<span class="lineNum"> 1016 </span> : : return 0; +<span class="lineNum"> 1017 </span> : : +<span class="lineNum"> 1018 </span> : : /* Reset the options index so we can run through them again. +<span class="lineNum"> 1019 </span> : : */ +<span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : optind = 0;</span> +<span class="lineNum"> 1021 </span> : : +<span class="lineNum"> 1022 </span> :<span class="lineNoCov"> 0 : config_init(options, argc_new, argv_new);</span> +<span class="lineNum"> 1023 </span> : : +<span class="lineNum"> 1024 </span> : : /* Since we passed in our own copies, free up malloc'd memory +<span class="lineNum"> 1025 </span> : : */ +<span class="lineNum"> 1026 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 1027 </span> : : +<span class="lineNum"> 1028 </span> :<span class="lineNoCov"> 0 : return 1;</span> +<span class="lineNum"> 1029 </span> : : } +<a name="1030"><span class="lineNum"> 1030 </span> : : </a> +<span class="lineNum"> 1031 </span> : : static int +<span class="lineNum"> 1032 </span> :<span class="lineCov"> 566 : get_save_file(char *args_save_file)</span> +<span class="lineNum"> 1033 </span> : : { +<span class="lineNum"> 1034 </span> :<span class="lineCov"> 566 : char *homedir = NULL;</span> +<span class="lineNum"> 1035 </span> :<span class="lineCov"> 566 : int rv = 0;</span> +<span class="lineNum"> 1036 </span> : : +<span class="lineNum"> 1037 </span> : : #ifdef WIN32 +<span class="lineNum"> 1038 </span> : : homedir = getenv(&quot;USERPROFILE&quot;); +<span class="lineNum"> 1039 </span> : : #else +<span class="lineNum"> 1040 </span> :<span class="lineCov"> 566 : homedir = getenv(&quot;HOME&quot;);</span> +<span class="lineNum"> 1041 </span> : : #endif +<span class="lineNum"> 1042 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if (homedir != NULL) {</span> +<span class="lineNum"> 1043 </span> : : snprintf(args_save_file, MAX_PATH_LEN, &quot;%s%c%s&quot;, +<span class="lineNum"> 1044 </span> : : homedir, PATH_SEP, &quot;.fwknop.run&quot;); +<span class="lineNum"> 1045 </span> :<span class="lineCov"> 566 : rv = 1;</span> +<span class="lineNum"> 1046 </span> : : } +<span class="lineNum"> 1047 </span> : : +<span class="lineNum"> 1048 </span> :<span class="lineCov"> 566 : return rv;</span> +<span class="lineNum"> 1049 </span> : : } +<span class="lineNum"> 1050 </span> : : +<span class="lineNum"> 1051 </span> : : /* Save our command line arguments +<a name="1052"><span class="lineNum"> 1052 </span> : : */</a> +<span class="lineNum"> 1053 </span> : : static int +<span class="lineNum"> 1054 </span> :<span class="lineCov"> 566 : save_args(int argc, char **argv, const char * const args_save_file)</span> +<span class="lineNum"> 1055 </span> : : { +<span class="lineNum"> 1056 </span> :<span class="lineCov"> 566 : char args_str[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1057 </span> :<span class="lineCov"> 566 : int i = 0, args_str_len = 0, args_file_fd = -1;</span> +<span class="lineNum"> 1058 </span> : : +<span class="lineNum"> 1059 </span> :<span class="lineCov"> 566 : args_file_fd = open(args_save_file, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);</span> +<span class="lineNum"> 1060 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if (args_file_fd == -1) {</span> +<span class="lineNum"> 1061 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open args file: %s&quot;,</span> +<span class="lineNum"> 1062 </span> : : args_save_file); +<span class="lineNum"> 1063 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1064 </span> : : } +<span class="lineNum"> 1065 </span> : : else { +<span class="lineNum"> 1066 </span> [<span class="branchCov" title="Branch 0 was taken 4528 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 5094 : for (i=0; i &lt; argc; i++) {</span> +<span class="lineNum"> 1067 </span> :<span class="lineCov"> 4528 : args_str_len += strlen(argv[i]);</span> +<span class="lineNum"> 1068 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4528 times"> + </span>]:<span class="lineCov"> 4528 : if (args_str_len &gt;= MAX_PATH_LEN) {</span> +<span class="lineNum"> 1069 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;argument string too long, exiting.&quot;);</span> +<span class="lineNum"> 1070 </span> :<span class="lineNoCov"> 0 : close(args_file_fd);</span> +<span class="lineNum"> 1071 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1072 </span> : : } +<span class="lineNum"> 1073 </span> :<span class="lineCov"> 4528 : strlcat(args_str, argv[i], sizeof(args_str));</span> +<span class="lineNum"> 1074 </span> :<span class="lineCov"> 4528 : strlcat(args_str, &quot; &quot;, sizeof(args_str));</span> +<span class="lineNum"> 1075 </span> : : } +<span class="lineNum"> 1076 </span> :<span class="lineCov"> 566 : strlcat(args_str, &quot;\n&quot;, sizeof(args_str));</span> +<span class="lineNum"> 1077 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(write(args_file_fd, args_str, strlen(args_str))</span> +<span class="lineNum"> 1078 </span> :<span class="lineCov"> 566 : != strlen(args_str)) {</span> +<span class="lineNum"> 1079 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 1080 </span> : : &quot;warning, did not write expected number of bytes to args save file&quot;); +<span class="lineNum"> 1081 </span> : : } +<span class="lineNum"> 1082 </span> :<span class="lineCov"> 566 : close(args_file_fd);</span> +<span class="lineNum"> 1083 </span> : : } +<span class="lineNum"> 1084 </span> :<span class="lineCov"> 566 : return 1;</span> +<span class="lineNum"> 1085 </span> : : } +<span class="lineNum"> 1086 </span> : : +<span class="lineNum"> 1087 </span> : : /* Set the SPA packet message type +<a name="1088"><span class="lineNum"> 1088 </span> : : */</a> +<span class="lineNum"> 1089 </span> : : static int +<span class="lineNum"> 1090 </span> :<span class="lineCov"> 566 : set_message_type(fko_ctx_t ctx, fko_cli_options_t *options)</span> +<span class="lineNum"> 1091 </span> : : { +<span class="lineNum"> 1092 </span> : : short message_type; +<span class="lineNum"> 1093 </span> : : +<span class="lineNum"> 1094 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if(options-&gt;server_command[0] != 0x0)</span> +<span class="lineNum"> 1095 </span> : : { +<span class="lineNum"> 1096 </span> : : message_type = FKO_COMMAND_MSG; +<span class="lineNum"> 1097 </span> : : } +<span class="lineNum"> 1098 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : else if(options-&gt;nat_local)</span> +<span class="lineNum"> 1099 </span> : : { +<span class="lineNum"> 1100 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;fw_timeout &gt;= 0)</span> +<span class="lineNum"> 1101 </span> : : message_type = FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG; +<span class="lineNum"> 1102 </span> : : else +<span class="lineNum"> 1103 </span> :<span class="lineNoCov"> 0 : message_type = FKO_LOCAL_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 1104 </span> : : } +<span class="lineNum"> 1105 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : else if(options-&gt;nat_access_str[0] != 0x0)</span> +<span class="lineNum"> 1106 </span> : : { +<span class="lineNum"> 1107 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;fw_timeout &gt;= 0)</span> +<span class="lineNum"> 1108 </span> : : message_type = FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG; +<span class="lineNum"> 1109 </span> : : else +<span class="lineNum"> 1110 </span> :<span class="lineNoCov"> 0 : message_type = FKO_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 1111 </span> : : } +<span class="lineNum"> 1112 </span> : : else +<span class="lineNum"> 1113 </span> : : { +<span class="lineNum"> 1114 </span> [<span class="branchCov" title="Branch 0 was taken 563 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 566 : if (options-&gt;fw_timeout &gt;= 0)</span> +<span class="lineNum"> 1115 </span> : : message_type = FKO_CLIENT_TIMEOUT_ACCESS_MSG; +<span class="lineNum"> 1116 </span> : : else +<span class="lineNum"> 1117 </span> :<span class="lineCov"> 563 : message_type = FKO_ACCESS_MSG;</span> +<span class="lineNum"> 1118 </span> : : } +<span class="lineNum"> 1119 </span> : : +<span class="lineNum"> 1120 </span> :<span class="lineCov"> 566 : return fko_set_spa_message_type(ctx, message_type);</span> +<span class="lineNum"> 1121 </span> : : } +<span class="lineNum"> 1122 </span> : : +<span class="lineNum"> 1123 </span> : : /* Prompt for and receive a user password. +<a name="1124"><span class="lineNum"> 1124 </span> : : */</a> +<span class="lineNum"> 1125 </span> : : static int +<span class="lineNum"> 1126 </span> :<span class="lineCov"> 439 : get_keys(fko_ctx_t ctx, fko_cli_options_t *options,</span> +<span class="lineNum"> 1127 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len) +<span class="lineNum"> 1128 </span> : : { +<span class="lineNum"> 1129 </span> :<span class="lineCov"> 439 : char *key_tmp = NULL, *hmac_key_tmp = NULL;</span> +<span class="lineNum"> 1130 </span> :<span class="lineCov"> 439 : int use_hmac = 0, res = 0;</span> +<span class="lineNum"> 1131 </span> : : +<span class="lineNum"> 1132 </span> : : memset(key, 0x0, MAX_KEY_LEN+1); +<span class="lineNum"> 1133 </span> : : memset(hmac_key, 0x0, MAX_KEY_LEN+1); +<span class="lineNum"> 1134 </span> : : +<span class="lineNum"> 1135 </span> [<span class="branchCov" title="Branch 0 was taken 426 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>]:<span class="lineCov"> 439 : if(options-&gt;have_key)</span> +<span class="lineNum"> 1136 </span> : : { +<span class="lineNum"> 1137 </span> :<span class="lineCov"> 426 : strlcpy(key, options-&gt;key, MAX_KEY_LEN+1);</span> +<span class="lineNum"> 1138 </span> :<span class="lineCov"> 426 : *key_len = strlen(key);</span> +<span class="lineNum"> 1139 </span> : : } +<span class="lineNum"> 1140 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 13 : else if(options-&gt;have_base64_key)</span> +<span class="lineNum"> 1141 </span> : : { +<span class="lineNum"> 1142 </span> :<span class="lineCov"> 9 : *key_len = fko_base64_decode(options-&gt;key_base64,</span> +<span class="lineNum"> 1143 </span> :<span class="lineCov"> 9 : (unsigned char *) options-&gt;key);</span> +<span class="lineNum"> 1144 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 9 : if(*key_len &gt; 0 &amp;&amp; *key_len &lt; MAX_KEY_LEN)</span> +<span class="lineNum"> 1145 </span> : : { +<span class="lineNum"> 1146 </span> :<span class="lineCov"> 9 : memcpy(key, options-&gt;key, *key_len);</span> +<span class="lineNum"> 1147 </span> : : } +<span class="lineNum"> 1148 </span> : : else +<span class="lineNum"> 1149 </span> : : { +<span class="lineNum"> 1150 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Invalid key length: '%d', must be in [1,%d]&quot;,</span> +<span class="lineNum"> 1151 </span> : : *key_len, MAX_KEY_LEN); +<span class="lineNum"> 1152 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1153 </span> : : } +<span class="lineNum"> 1154 </span> : : } +<span class="lineNum"> 1155 </span> : : else +<span class="lineNum"> 1156 </span> : : { +<span class="lineNum"> 1157 </span> : : /* If --get-key file was specified grab the key/password from it. +<span class="lineNum"> 1158 </span> : : */ +<span class="lineNum"> 1159 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 4 : if(options-&gt;get_key_file[0] != 0x0)</span> +<span class="lineNum"> 1160 </span> : : { +<span class="lineNum"> 1161 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(get_key_file(key, key_len, options-&gt;get_key_file, ctx, options) != 1)</span> +<span class="lineNum"> 1162 </span> : : { +<span class="lineNum"> 1163 </span> : : return 0; +<span class="lineNum"> 1164 </span> : : } +<span class="lineNum"> 1165 </span> : : } +<span class="lineNum"> 1166 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : else if(options-&gt;use_gpg)</span> +<span class="lineNum"> 1167 </span> : : { +<span class="lineNum"> 1168 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;use_gpg_agent)</span> +<span class="lineNum"> 1169 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 1170 </span> : : &quot;[+] GPG mode set, signing passphrase acquired via gpg-agent&quot;); +<span class="lineNum"> 1171 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(options-&gt;gpg_no_signing_pw)</span> +<span class="lineNum"> 1172 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 1173 </span> : : &quot;[+] GPG mode set, signing passphrase not required&quot;); +<span class="lineNum"> 1174 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(strlen(options-&gt;gpg_signer_key))</span> +<span class="lineNum"> 1175 </span> : : { +<span class="lineNum"> 1176 </span> :<span class="lineNoCov"> 0 : key_tmp = getpasswd(&quot;Enter passphrase for signing: &quot;, options-&gt;input_fd);</span> +<span class="lineNum"> 1177 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_tmp == NULL)</span> +<span class="lineNum"> 1178 </span> : : { +<span class="lineNum"> 1179 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] getpasswd() key error.&quot;);</span> +<span class="lineNum"> 1180 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1181 </span> : : } +<span class="lineNum"> 1182 </span> :<span class="lineNoCov"> 0 : strlcpy(key, key_tmp, MAX_KEY_LEN+1);</span> +<span class="lineNum"> 1183 </span> :<span class="lineNoCov"> 0 : *key_len = strlen(key);</span> +<span class="lineNum"> 1184 </span> : : } +<span class="lineNum"> 1185 </span> : : } +<span class="lineNum"> 1186 </span> : : else +<span class="lineNum"> 1187 </span> : : { +<span class="lineNum"> 1188 </span> :<span class="lineCov"> 2 : key_tmp = getpasswd(&quot;Enter encryption key: &quot;, options-&gt;input_fd);</span> +<span class="lineNum"> 1189 </span> : : +<span class="lineNum"> 1190 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(key_tmp == NULL)</span> +<span class="lineNum"> 1191 </span> : : { +<span class="lineNum"> 1192 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] getpasswd() key error.&quot;);</span> +<span class="lineNum"> 1193 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1194 </span> : : } +<span class="lineNum"> 1195 </span> :<span class="lineCov"> 2 : strlcpy(key, key_tmp, MAX_KEY_LEN+1);</span> +<span class="lineNum"> 1196 </span> :<span class="lineCov"> 2 : *key_len = strlen(key);</span> +<span class="lineNum"> 1197 </span> : : } +<span class="lineNum"> 1198 </span> : : } +<span class="lineNum"> 1199 </span> : : +<span class="lineNum"> 1200 </span> [<span class="branchCov" title="Branch 0 was taken 242 times"> + </span><span class="branchCov" title="Branch 1 was taken 195 times"> + </span>]:<span class="lineCov"> 437 : if(options-&gt;have_hmac_key)</span> +<span class="lineNum"> 1201 </span> : : { +<span class="lineNum"> 1202 </span> :<span class="lineCov"> 242 : strlcpy(hmac_key, options-&gt;hmac_key, MAX_KEY_LEN+1);</span> +<span class="lineNum"> 1203 </span> :<span class="lineCov"> 242 : *hmac_key_len = strlen(hmac_key);</span> +<span class="lineNum"> 1204 </span> :<span class="lineCov"> 242 : use_hmac = 1;</span> +<span class="lineNum"> 1205 </span> : : } +<span class="lineNum"> 1206 </span> [<span class="branchCov" title="Branch 0 was taken 114 times"> + </span><span class="branchCov" title="Branch 1 was taken 81 times"> + </span>]:<span class="lineCov"> 195 : else if(options-&gt;have_hmac_base64_key)</span> +<span class="lineNum"> 1207 </span> : : { +<span class="lineNum"> 1208 </span> :<span class="lineCov"> 114 : *hmac_key_len = fko_base64_decode(options-&gt;hmac_key_base64,</span> +<span class="lineNum"> 1209 </span> :<span class="lineCov"> 114 : (unsigned char *) options-&gt;hmac_key);</span> +<span class="lineNum"> 1210 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 112 times"> + </span>]:<span class="lineCov"> 114 : if(*hmac_key_len &gt; MAX_KEY_LEN || *hmac_key_len &lt; 0)</span> +<span class="lineNum"> 1211 </span> : : { +<span class="lineNum"> 1212 </span> :<span class="lineCov"> 2 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1213 </span> : : &quot;[*] Invalid decoded key length: '%d', must be in [0,%d]&quot;, +<span class="lineNum"> 1214 </span> : : *hmac_key_len, MAX_KEY_LEN); +<span class="lineNum"> 1215 </span> :<span class="lineCov"> 2 : return 0;</span> +<span class="lineNum"> 1216 </span> : : } +<span class="lineNum"> 1217 </span> :<span class="lineCov"> 112 : memcpy(hmac_key, options-&gt;hmac_key, *hmac_key_len);</span> +<span class="lineNum"> 1218 </span> :<span class="lineCov"> 112 : use_hmac = 1;</span> +<span class="lineNum"> 1219 </span> : : } +<span class="lineNum"> 1220 </span> [<span class="branchCov" title="Branch 0 was taken 8 times"> + </span><span class="branchCov" title="Branch 1 was taken 73 times"> + </span>]:<span class="lineCov"> 81 : else if (options-&gt;use_hmac)</span> +<span class="lineNum"> 1221 </span> : : { +<span class="lineNum"> 1222 </span> : : /* If --get-key file was specified grab the key/password from it. +<span class="lineNum"> 1223 </span> : : */ +<span class="lineNum"> 1224 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8 times"> + </span>]:<span class="lineCov"> 8 : if(options-&gt;get_hmac_key_file[0] != 0x0)</span> +<span class="lineNum"> 1225 </span> : : { +<span class="lineNum"> 1226 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(get_key_file(hmac_key, hmac_key_len,</span> +<span class="lineNum"> 1227 </span> :<span class="lineNoCov"> 0 : options-&gt;get_hmac_key_file, ctx, options) != 1)</span> +<span class="lineNum"> 1228 </span> : : { +<span class="lineNum"> 1229 </span> : : return 0; +<span class="lineNum"> 1230 </span> : : } +<span class="lineNum"> 1231 </span> : : use_hmac = 1; +<span class="lineNum"> 1232 </span> : : } +<span class="lineNum"> 1233 </span> : : else +<span class="lineNum"> 1234 </span> : : { +<span class="lineNum"> 1235 </span> :<span class="lineCov"> 8 : hmac_key_tmp = getpasswd(&quot;Enter HMAC key: &quot;, options-&gt;input_fd);</span> +<span class="lineNum"> 1236 </span> : : +<span class="lineNum"> 1237 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8 times"> + </span>]:<span class="lineCov"> 8 : if(hmac_key_tmp == NULL)</span> +<span class="lineNum"> 1238 </span> : : { +<span class="lineNum"> 1239 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] getpasswd() key error.&quot;);</span> +<span class="lineNum"> 1240 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1241 </span> : : } +<span class="lineNum"> 1242 </span> : : +<span class="lineNum"> 1243 </span> :<span class="lineCov"> 8 : strlcpy(hmac_key, hmac_key_tmp, MAX_KEY_LEN+1);</span> +<span class="lineNum"> 1244 </span> :<span class="lineCov"> 8 : *hmac_key_len = strlen(hmac_key);</span> +<span class="lineNum"> 1245 </span> :<span class="lineCov"> 8 : use_hmac = 1;</span> +<span class="lineNum"> 1246 </span> : : } +<span class="lineNum"> 1247 </span> : : } +<span class="lineNum"> 1248 </span> : : +<span class="lineNum"> 1249 </span> [<span class="branchCov" title="Branch 0 was taken 362 times"> + </span><span class="branchCov" title="Branch 1 was taken 73 times"> + </span>]:<span class="lineCov"> 435 : if (use_hmac)</span> +<span class="lineNum"> 1250 </span> : : { +<span class="lineNum"> 1251 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 362 times"> + </span>]:<span class="lineCov"> 362 : if(*hmac_key_len &lt; 0 || *hmac_key_len &gt; MAX_KEY_LEN)</span> +<span class="lineNum"> 1252 </span> : : { +<span class="lineNum"> 1253 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Invalid HMAC key length: '%d', must be in [0,%d]&quot;,</span> +<span class="lineNum"> 1254 </span> : : *hmac_key_len, MAX_KEY_LEN); +<span class="lineNum"> 1255 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1256 </span> : : } +<span class="lineNum"> 1257 </span> : : +<span class="lineNum"> 1258 </span> : : /* Make sure the same key is not used for both encryption and the HMAC +<span class="lineNum"> 1259 </span> : : */ +<span class="lineNum"> 1260 </span> [<span class="branchCov" title="Branch 0 was taken 98 times"> + </span><span class="branchCov" title="Branch 1 was taken 264 times"> + </span>]:<span class="lineCov"> 362 : if(*hmac_key_len == *key_len)</span> +<span class="lineNum"> 1261 </span> : : { +<span class="lineNum"> 1262 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 97 times"> + </span>]:<span class="lineCov"> 98 : if(memcmp(hmac_key, key, *key_len) == 0)</span> +<span class="lineNum"> 1263 </span> : : { +<span class="lineNum"> 1264 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1265 </span> : : &quot;[*] The encryption passphrase and HMAC key should not be identical, no SPA packet sent. Exiting.&quot;); +<span class="lineNum"> 1266 </span> :<span class="lineCov"> 1 : return 0;</span> +<span class="lineNum"> 1267 </span> : : } +<span class="lineNum"> 1268 </span> : : } +<span class="lineNum"> 1269 </span> : : +<span class="lineNum"> 1270 </span> :<span class="lineCov"> 361 : res = fko_set_spa_hmac_type(ctx, options-&gt;hmac_type);</span> +<span class="lineNum"> 1271 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 361 times"> + </span>]:<span class="lineCov"> 361 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 1272 </span> : : { +<span class="lineNum"> 1273 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_hmac_type&quot;, res);</span> +<span class="lineNum"> 1274 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1275 </span> : : } +<span class="lineNum"> 1276 </span> : : } +<span class="lineNum"> 1277 </span> : : +<span class="lineNum"> 1278 </span> : : return 1; +<span class="lineNum"> 1279 </span> : : } +<span class="lineNum"> 1280 </span> : : +<span class="lineNum"> 1281 </span> : : /* Display an FKO error message. +<a name="1282"><span class="lineNum"> 1282 </span> : : */</a> +<span class="lineNum"> 1283 </span> : : void +<span class="lineNum"> 1284 </span> :<span class="lineCov"> 176 : errmsg(const char *msg, const int err) {</span> +<span class="lineNum"> 1285 </span> :<span class="lineCov"> 176 : log_msg(LOG_VERBOSITY_ERROR, &quot;%s: %s: Error %i - %s&quot;,</span> +<span class="lineNum"> 1286 </span> : : MY_NAME, msg, err, fko_errstr(err)); +<span class="lineNum"> 1287 </span> :<span class="lineCov"> 176 : }</span> +<a name="1288"><span class="lineNum"> 1288 </span> : : </a> +<span class="lineNum"> 1289 </span> : : static void +<span class="lineNum"> 1290 </span> :<span class="lineCov"> 5660 : zero_buf_wrapper(char *buf, int len)</span> +<span class="lineNum"> 1291 </span> : : { +<span class="lineNum"> 1292 </span> : : +<span class="lineNum"> 1293 </span> [<span class="branchCov" title="Branch 0 was taken 5327 times"> + </span><span class="branchCov" title="Branch 1 was taken 333 times"> + </span>]:<span class="lineCov"> 5660 : if(buf == NULL || len == 0)</span> +<span class="lineNum"> 1294 </span> : : return; +<span class="lineNum"> 1295 </span> : : +<span class="lineNum"> 1296 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 5327 times"> + </span>]:<span class="lineCov"> 5327 : if(zero_buf(buf, len) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 1297 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1298 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 1299 </span> : : +<span class="lineNum"> 1300 </span> : : return; +<span class="lineNum"> 1301 </span> : : } +<span class="lineNum"> 1302 </span> : : +<span class="lineNum"> 1303 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 1304 </span> : : static int +<span class="lineNum"> 1305 </span> : : enable_fault_injections(fko_cli_options_t * const opts) +<span class="lineNum"> 1306 </span> : : { +<span class="lineNum"> 1307 </span> : : int rv = 1; +<span class="lineNum"> 1308 </span> : : if(opts-&gt;fault_injection_tag[0] != 0x0) +<span class="lineNum"> 1309 </span> : : { +<span class="lineNum"> 1310 </span> : : if(opts-&gt;verbose) +<span class="lineNum"> 1311 </span> : : log_msg(LOG_VERBOSITY_NORMAL, &quot;[+] Enable fault injection tag: %s&quot;, +<span class="lineNum"> 1312 </span> : : opts-&gt;fault_injection_tag); +<span class="lineNum"> 1313 </span> : : if(fiu_init(0) != 0) +<span class="lineNum"> 1314 </span> : : { +<span class="lineNum"> 1315 </span> : : log_msg(LOG_VERBOSITY_WARNING, &quot;[*] Unable to set fault injection tag: %s&quot;, +<span class="lineNum"> 1316 </span> : : opts-&gt;fault_injection_tag); +<span class="lineNum"> 1317 </span> : : rv = 0; +<span class="lineNum"> 1318 </span> : : } +<span class="lineNum"> 1319 </span> : : if(fiu_enable(opts-&gt;fault_injection_tag, 1, NULL, 0) != 0) +<span class="lineNum"> 1320 </span> : : { +<span class="lineNum"> 1321 </span> : : log_msg(LOG_VERBOSITY_WARNING, &quot;[*] Unable to set fault injection tag: %s&quot;, +<span class="lineNum"> 1322 </span> : : opts-&gt;fault_injection_tag); +<span class="lineNum"> 1323 </span> : : rv = 0; +<span class="lineNum"> 1324 </span> : : } +<span class="lineNum"> 1325 </span> : : } +<span class="lineNum"> 1326 </span> : : return rv; +<span class="lineNum"> 1327 </span> : : } +<span class="lineNum"> 1328 </span> : : #endif +<span class="lineNum"> 1329 </span> : : +<span class="lineNum"> 1330 </span> : : /* free up memory and exit +<a name="1331"><span class="lineNum"> 1331 </span> : : */</a> +<span class="lineNum"> 1332 </span> : : static void +<span class="lineNum"> 1333 </span> :<span class="lineCov"> 566 : clean_exit(fko_ctx_t ctx, fko_cli_options_t *opts,</span> +<span class="lineNum"> 1334 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len, +<span class="lineNum"> 1335 </span> : : unsigned int exit_status) +<span class="lineNum"> 1336 </span> : : { +<span class="lineNum"> 1337 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 1338 </span> : : if(opts-&gt;fault_injection_tag[0] != 0x0) +<span class="lineNum"> 1339 </span> : : fiu_disable(opts-&gt;fault_injection_tag); +<span class="lineNum"> 1340 </span> : : #endif +<span class="lineNum"> 1341 </span> : : +<span class="lineNum"> 1342 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 1343 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 1344 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 1345 </span> :<span class="lineCov"> 566 : ctx = NULL;</span> +<span class="lineNum"> 1346 </span> :<span class="lineCov"> 566 : free_configs(opts);</span> +<span class="lineNum"> 1347 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(key, *key_len);</span> +<span class="lineNum"> 1348 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(hmac_key, *hmac_key_len);</span> +<span class="lineNum"> 1349 </span> :<span class="lineCov"> 566 : *key_len = 0;</span> +<span class="lineNum"> 1350 </span> :<span class="lineCov"> 566 : *hmac_key_len = 0;</span> +<span class="lineNum"> 1351 </span> :<span class="lineCov"> 566 : exit(exit_status);</span> +<span class="lineNum"> 1352 </span> : : } +<span class="lineNum"> 1353 </span> : : +<span class="lineNum"> 1354 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html new file mode 100644 index 00000000..3d618f6d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/getpasswd.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - getpasswd.c<span style="font-size: 80%;"> (<a href="getpasswd.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntry">78</td> + <td class="headerCovTableEntryLo">59.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">15</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">26.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="getpasswd.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="getpasswd.c.gcov.html#61">read_passwd_from_stream</a></td> + <td class="coverFnHi">10</td> + </tr> + <tr> + <td class="coverFn"><a href="getpasswd.c.gcov.html#129">getpasswd</a></td> + <td class="coverFnHi">10</td> + </tr> + <tr> + <td class="coverFn"><a href="getpasswd.c.gcov.html#216">get_key_file</a></td> + <td class="coverFnHi">2</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html new file mode 100644 index 00000000..6bbc448c --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/getpasswd.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - getpasswd.c<span style="font-size: 80%;"> (<a href="getpasswd.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntry">78</td> + <td class="headerCovTableEntryLo">59.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">15</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">26.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="getpasswd.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="getpasswd.c.gcov.html#216">get_key_file</a></td> + <td class="coverFnHi">2</td> + </tr> + <tr> + <td class="coverFn"><a href="getpasswd.c.gcov.html#129">getpasswd</a></td> + <td class="coverFnHi">10</td> + </tr> + <tr> + <td class="coverFn"><a href="getpasswd.c.gcov.html#61">read_passwd_from_stream</a></td> + <td class="coverFnHi">10</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html new file mode 100644 index 00000000..07b80b1f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html @@ -0,0 +1,382 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/getpasswd.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - getpasswd.c<span style="font-size: 80%;"> (source / <a href="getpasswd.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntry">78</td> + <td class="headerCovTableEntryLo">59.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">15</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">26.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: getpasswd.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Routines for obtaining a password from a user. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &lt;stdio.h&gt; +<span class="lineNum"> 32 </span> : : #include &lt;signal.h&gt; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #ifdef WIN32 +<span class="lineNum"> 35 </span> : : #include &lt;conio.h&gt; +<span class="lineNum"> 36 </span> : : #else +<span class="lineNum"> 37 </span> : : #include &lt;termios.h&gt; +<span class="lineNum"> 38 </span> : : #endif +<span class="lineNum"> 39 </span> : : +<span class="lineNum"> 40 </span> : : #include &quot;fwknop_common.h&quot; +<span class="lineNum"> 41 </span> : : #include &quot;getpasswd.h&quot; +<span class="lineNum"> 42 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : #define PW_BUFSIZE 128 /*!&lt; Maximum number of chars an encryption key or a password can contain */ +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : #define PW_BREAK_CHAR 0x03 /*!&lt; Ascii code for the Ctrl-C char */ +<span class="lineNum"> 47 </span> : : #define PW_BS_CHAR 0x08 /*!&lt; Ascii code for the backspace char */ +<span class="lineNum"> 48 </span> : : #define PW_LF_CHAR 0x0A /*!&lt; Ascii code for the \n char */ +<span class="lineNum"> 49 </span> : : #define PW_CR_CHAR 0x0D /*!&lt; Ascii code for the \r char */ +<span class="lineNum"> 50 </span> : : #define PW_CLEAR_CHAR 0x15 /*!&lt; Ascii code for the Ctrl-U char */ +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> : : #define ARRAY_FIRST_ELT_ADR(t) &amp;((t)[0]) /*!&lt; Macro to get the first element of an array */ +<span class="lineNum"> 53 </span> : : #define ARRAY_LAST_ELT_ADR(t) &amp;((t)[sizeof(t)-1]) /*!&lt; Macro to get the last element of an array */ +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : /** +<span class="lineNum"> 56 </span> : : * @brief Read a password from a stream object +<span class="lineNum"> 57 </span> : : * +<span class="lineNum"> 58 </span> : : * @param stream Pointer to a FILE object that identifies an input stream. +<span class="lineNum"> 59 </span> : : * +<span class="lineNum"> 60 </span> : : * @return The password buffer or NULL if not set +<a name="61"><span class="lineNum"> 61 </span> : : */</a> +<span class="lineNum"> 62 </span> : : static char * +<span class="lineNum"> 63 </span> :<span class="lineCov"> 10 : read_passwd_from_stream(FILE *stream)</span> +<span class="lineNum"> 64 </span> : : { +<span class="lineNum"> 65 </span> : : static char password[PW_BUFSIZE] = {0}; +<span class="lineNum"> 66 </span> : : int c; +<span class="lineNum"> 67 </span> : : char *ptr; +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> :<span class="lineCov"> 10 : ptr = ARRAY_FIRST_ELT_ADR(password);</span> +<span class="lineNum"> 70 </span> : : +<span class="lineNum"> 71 </span> [<span class="branchCov" title="Branch 0 was taken 10 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 10 : if(stream == NULL)</span> +<span class="lineNum"> 72 </span> : : return password; +<span class="lineNum"> 73 </span> : : +<span class="lineNum"> 74 </span> : : #ifdef WIN32 +<span class="lineNum"> 75 </span> : : while((c = _getch()) != PW_CR_CHAR) +<span class="lineNum"> 76 </span> : : #else +<span class="lineNum"> 77 </span>[<span class="branchCov" title="Branch 1 was taken 89 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 79 times"> + </span><span class="branchCov" title="Branch 4 was taken 10 times"> + </span>]:<span class="lineCov"> 89 : while( ((c = getc(stream)) != EOF) &amp;&amp; (c != PW_LF_CHAR) &amp;&amp; (c != PW_BREAK_CHAR) )</span> +<span class="lineNum"> 78 </span> : : #endif +<span class="lineNum"> 79 </span> : : { +<span class="lineNum"> 80 </span> : : /* Handle a backspace without backing up too far. */ +<span class="lineNum"> 81 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 79 times"> + </span>]:<span class="lineCov"> 79 : if (c == PW_BS_CHAR)</span> +<span class="lineNum"> 82 </span> : : { +<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ptr != ARRAY_FIRST_ELT_ADR(password))</span> +<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : ptr--;</span> +<span class="lineNum"> 85 </span> : : } +<span class="lineNum"> 86 </span> : : +<span class="lineNum"> 87 </span> : : /* Handle a Ctrl-U to clear the password entry and start over */ +<span class="lineNum"> 88 </span> [<span class="branchCov" title="Branch 0 was taken 79 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 79 : else if (c == PW_CLEAR_CHAR)</span> +<span class="lineNum"> 89 </span> : : ptr = ARRAY_FIRST_ELT_ADR(password); +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> : : /* Fill in the password buffer until it reaches the last -1 char. +<span class="lineNum"> 92 </span> : : * The last char is used to NULL terminate the string. */ +<span class="lineNum"> 93 </span> [<span class="branchCov" title="Branch 0 was taken 79 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 79 : else if (ptr &lt; ARRAY_LAST_ELT_ADR(password))</span> +<span class="lineNum"> 94 </span> : : { +<span class="lineNum"> 95 </span> :<span class="lineCov"> 79 : *ptr++ = c;</span> +<span class="lineNum"> 96 </span> : : } +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : /* Discard char */ +<span class="lineNum"> 99 </span> : : else; +<span class="lineNum"> 100 </span> : : } +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> : : /* A CTRL-C char has been detected, we discard the password */ +<span class="lineNum"> 103 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 10 times"> + </span>]:<span class="lineCov"> 10 : if (c == PW_BREAK_CHAR)</span> +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : password[0] = '\0';</span> +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> : : /* Otherwise we NULL terminate the string here. Overflows are handled +<span class="lineNum"> 107 </span> : : * previously, so we can add the char without worrying */ +<span class="lineNum"> 108 </span> : : else +<span class="lineNum"> 109 </span> :<span class="lineCov"> 10 : *ptr = '\0';</span> +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> : : return password; +<span class="lineNum"> 112 </span> : : } +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : /** +<span class="lineNum"> 115 </span> : : * @brief Function for accepting password input from users +<span class="lineNum"> 116 </span> : : * +<span class="lineNum"> 117 </span> : : * The functions reads chars from a buffered stream and store them in a buffer of +<span class="lineNum"> 118 </span> : : * chars. If a file descriptor is supplied then, the password is read from +<span class="lineNum"> 119 </span> : : * the associated stream, otherwise a new buffered stream is created and a +<span class="lineNum"> 120 </span> : : * prompt is displayed to the user. +<span class="lineNum"> 121 </span> : : * +<span class="lineNum"> 122 </span> : : * @param prompt String displayed on the terminal to prompt the user for a +<span class="lineNum"> 123 </span> : : * password or an encryption key +<span class="lineNum"> 124 </span> : : * @param fd File descriptor to use to read the pasword from. If fd is set +<span class="lineNum"> 125 </span> : : * to FD_INVALID, then a new stream is opened. +<span class="lineNum"> 126 </span> : : * +<span class="lineNum"> 127 </span> : : * @return NULL if a problem occured or the user killed the terminal (Ctrl-C)\n +<span class="lineNum"> 128 </span> : : * otherwise the password - empty password is accepted. +<a name="129"><span class="lineNum"> 129 </span> : : */</a> +<span class="lineNum"> 130 </span> : : char* +<span class="lineNum"> 131 </span> :<span class="lineCov"> 10 : getpasswd(const char *prompt, int fd)</span> +<span class="lineNum"> 132 </span> : : { +<span class="lineNum"> 133 </span> :<span class="lineCov"> 10 : char *ptr = NULL;</span> +<span class="lineNum"> 134 </span> :<span class="lineCov"> 10 : FILE *fp = NULL;</span> +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> : : #ifndef WIN32 +<span class="lineNum"> 137 </span> : : sigset_t sig, old_sig; +<span class="lineNum"> 138 </span> : : struct termios ts; +<span class="lineNum"> 139 </span> :<span class="lineCov"> 10 : tcflag_t old_c_lflag = 0;</span> +<span class="lineNum"> 140 </span> : : #else +<span class="lineNum"> 141 </span> : : /* Force stdin on windows. */ +<span class="lineNum"> 142 </span> : : fd = 0; +<span class="lineNum"> 143 </span> : : #endif +<span class="lineNum"> 144 </span> : : +<span class="lineNum"> 145 </span> : : /* If a valid file descriptor is supplied, we try to open a stream from it */ +<span class="lineNum"> 146 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 10 times"> + </span>]:<span class="lineCov"> 10 : if (FD_IS_VALID(fd))</span> +<span class="lineNum"> 147 </span> : : { +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : fp = fdopen(fd, &quot;r&quot;);</span> +<span class="lineNum"> 149 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (fp == NULL)</span> +<span class="lineNum"> 150 </span> : : { +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;getpasswd() - &quot;</span> +<span class="lineNum"> 152 </span> : : &quot;Unable to create a stream from the file descriptor : %s&quot;, +<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : return(NULL);</span> +<span class="lineNum"> 155 </span> : : } +<span class="lineNum"> 156 </span> : : } +<span class="lineNum"> 157 </span> : : +<span class="lineNum"> 158 </span> : : #ifndef WIN32 +<span class="lineNum"> 159 </span> : : /* Otherwise we are going to open a new stream */ +<span class="lineNum"> 160 </span> : : else +<span class="lineNum"> 161 </span> : : { +<span class="lineNum"> 162 </span> [<span class="branchCov" title="Branch 2 was taken 10 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 10 : if((fp = fopen(ctermid(NULL), &quot;r+&quot;)) == NULL)</span> +<span class="lineNum"> 163 </span> : : return(NULL); +<span class="lineNum"> 164 </span> : : +<span class="lineNum"> 165 </span> :<span class="lineCov"> 10 : setbuf(fp, NULL);</span> +<span class="lineNum"> 166 </span> : : +<span class="lineNum"> 167 </span> : : /* Setup blocks for SIGINT and SIGTSTP and save the original signal +<span class="lineNum"> 168 </span> : : * mask. +<span class="lineNum"> 169 </span> : : */ +<span class="lineNum"> 170 </span> :<span class="lineCov"> 10 : sigemptyset(&amp;sig);</span> +<span class="lineNum"> 171 </span> :<span class="lineCov"> 10 : sigaddset(&amp;sig, SIGINT);</span> +<span class="lineNum"> 172 </span> :<span class="lineCov"> 10 : sigaddset(&amp;sig, SIGTSTP);</span> +<span class="lineNum"> 173 </span> :<span class="lineCov"> 10 : sigprocmask(SIG_BLOCK, &amp;sig, &amp;old_sig);</span> +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> : : /* +<span class="lineNum"> 176 </span> : : * Save current tty state for later restoration after we : +<span class="lineNum"> 177 </span> : : * - disable echo of characters to the tty +<span class="lineNum"> 178 </span> : : * - disable signal generation +<span class="lineNum"> 179 </span> : : * - disable cannonical mode (input read line by line mode) +<span class="lineNum"> 180 </span> : : */ +<span class="lineNum"> 181 </span> :<span class="lineCov"> 10 : tcgetattr(fileno(fp), &amp;ts);</span> +<span class="lineNum"> 182 </span> :<span class="lineCov"> 10 : old_c_lflag = ts.c_lflag;</span> +<span class="lineNum"> 183 </span> :<span class="lineCov"> 10 : ts.c_lflag &amp;= ~(ECHO | ICANON | ISIG);</span> +<span class="lineNum"> 184 </span> :<span class="lineCov"> 10 : tcsetattr(fileno(fp), TCSAFLUSH, &amp;ts);</span> +<span class="lineNum"> 185 </span> : : +<span class="lineNum"> 186 </span> :<span class="lineCov"> 10 : fputs(prompt, fp);</span> +<span class="lineNum"> 187 </span> : : } +<span class="lineNum"> 188 </span> : : #else +<span class="lineNum"> 189 </span> : : _cputs(prompt); +<span class="lineNum"> 190 </span> : : #endif +<span class="lineNum"> 191 </span> : : /* Read the password */ +<span class="lineNum"> 192 </span> :<span class="lineCov"> 10 : ptr = read_passwd_from_stream(fp);</span> +<span class="lineNum"> 193 </span> : : +<span class="lineNum"> 194 </span> : : #ifdef WIN32 +<span class="lineNum"> 195 </span> : : /* In Windows, it would be a CR-LF +<span class="lineNum"> 196 </span> : : */ +<span class="lineNum"> 197 </span> : : _putch(PW_CR_CHAR); +<span class="lineNum"> 198 </span> : : _putch(PW_LF_CHAR); +<span class="lineNum"> 199 </span> : : #else +<span class="lineNum"> 200 </span> [<span class="branchCov" title="Branch 0 was taken 10 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 10 : if(! FD_IS_VALID(fd))</span> +<span class="lineNum"> 201 </span> : : { +<span class="lineNum"> 202 </span> : : /* Reset terminal settings +<span class="lineNum"> 203 </span> : : */ +<span class="lineNum"> 204 </span> :<span class="lineCov"> 10 : fputs(&quot;\n&quot;, fp);</span> +<span class="lineNum"> 205 </span> :<span class="lineCov"> 10 : ts.c_lflag = old_c_lflag;</span> +<span class="lineNum"> 206 </span> :<span class="lineCov"> 10 : tcsetattr(fileno(fp), TCSAFLUSH, &amp;ts);</span> +<span class="lineNum"> 207 </span> : : } +<span class="lineNum"> 208 </span> : : #endif +<span class="lineNum"> 209 </span> : : +<span class="lineNum"> 210 </span> :<span class="lineCov"> 10 : fclose(fp);</span> +<span class="lineNum"> 211 </span> : : +<span class="lineNum"> 212 </span> :<span class="lineCov"> 10 : return (ptr);</span> +<span class="lineNum"> 213 </span> : : } +<span class="lineNum"> 214 </span> : : +<span class="lineNum"> 215 </span> : : /* Function for accepting password input from a file +<a name="216"><span class="lineNum"> 216 </span> : : */</a> +<span class="lineNum"> 217 </span> : : int +<span class="lineNum"> 218 </span> :<span class="lineCov"> 2 : get_key_file(char *key, int *key_len, const char *key_file,</span> +<span class="lineNum"> 219 </span> : : fko_ctx_t ctx, const fko_cli_options_t *options) +<span class="lineNum"> 220 </span> : : { +<span class="lineNum"> 221 </span> : : FILE *pwfile_ptr; +<span class="lineNum"> 222 </span> :<span class="lineCov"> 2 : unsigned int numLines = 0, i = 0, found_dst;</span> +<span class="lineNum"> 223 </span> : : +<span class="lineNum"> 224 </span> :<span class="lineCov"> 2 : char conf_line_buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 225 </span> :<span class="lineCov"> 2 : char tmp_char_buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 226 </span> : : char *lptr; +<span class="lineNum"> 227 </span> : : +<span class="lineNum"> 228 </span> : : memset(key, 0x00, MAX_KEY_LEN+1); +<span class="lineNum"> 229 </span> : : +<span class="lineNum"> 230 </span> [<span class="branchCov" title="Branch 1 was taken 1 time"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 2 : if ((pwfile_ptr = fopen(key_file, &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 231 </span> : : { +<span class="lineNum"> 232 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open config file: %s&quot;, key_file);</span> +<span class="lineNum"> 233 </span> :<span class="lineCov"> 1 : return 0;</span> +<span class="lineNum"> 234 </span> : : } +<span class="lineNum"> 235 </span> : : +<span class="lineNum"> 236 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : while ((fgets(conf_line_buf, MAX_LINE_LEN, pwfile_ptr)) != NULL)</span> +<span class="lineNum"> 237 </span> : : { +<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : numLines++;</span> +<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : conf_line_buf[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : lptr = conf_line_buf;</span> +<span class="lineNum"> 241 </span> : : +<span class="lineNum"> 242 </span> : : memset(tmp_char_buf, 0x0, MAX_LINE_LEN); +<span class="lineNum"> 243 </span> : : +<span class="lineNum"> 244 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (*lptr == ' ' || *lptr == '\t' || *lptr == '=')</span> +<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : lptr++;</span> +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> : : /* Get past comments and empty lines. +<span class="lineNum"> 248 </span> : : */ +<span class="lineNum"> 249 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*lptr == '#' || *lptr == '\n' || *lptr == '\r' || *lptr == '\0' || *lptr == ';')</span> +<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] +<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 251 </span> : : +<span class="lineNum"> 252 </span> : : /* Look for a line like &quot;&lt;SPA destination IP&gt;: &lt;password&gt;&quot; - this allows +<span class="lineNum"> 253 </span> : : * multiple keys to be placed within the same file, and the client will +<span class="lineNum"> 254 </span> : : * reference the matching one for the SPA server we are contacting +<span class="lineNum"> 255 </span> : : */ +<span class="lineNum"> 256 </span> : : found_dst = 1; +<span class="lineNum"> 257 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; strlen(options-&gt;spa_server_str); i++)</span> +<span class="lineNum"> 258 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*lptr++ != options-&gt;spa_server_str[i])</span> +<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : found_dst = 0;</span> +<span class="lineNum"> 260 </span> : : +<span class="lineNum"> 261 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! found_dst)</span> +<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 263 </span> : : +<span class="lineNum"> 264 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*lptr == ':')</span> +<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : lptr++;</span> +<span class="lineNum"> 266 </span> : : else +<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 268 </span> : : +<span class="lineNum"> 269 </span> : : /* Skip whitespace until we get to the password +<span class="lineNum"> 270 </span> : : */ +<span class="lineNum"> 271 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (*lptr == ' ' || *lptr == '\t' || *lptr == '=')</span> +<span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : lptr++;</span> +<span class="lineNum"> 273 </span> : : +<span class="lineNum"> 274 </span> : : i = 0; +<span class="lineNum"> 275 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (*lptr != '\0' &amp;&amp; *lptr != '\n') {</span> +<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : key[i] = *lptr;</span> +<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : lptr++;</span> +<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : i++;</span> +<span class="lineNum"> 279 </span> : : } +<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : key[i] = '\0';</span> +<span class="lineNum"> 281 </span> : : } +<span class="lineNum"> 282 </span> : : +<span class="lineNum"> 283 </span> :<span class="lineCov"> 1 : fclose(pwfile_ptr);</span> +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if (key[0] == '\0') {</span> +<span class="lineNum"> 286 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not get key for IP: %s from: %s&quot;,</span> +<span class="lineNum"> 287 </span> :<span class="lineCov"> 1 : options-&gt;spa_server_str, key_file);</span> +<span class="lineNum"> 288 </span> :<span class="lineCov"> 1 : return 0;</span> +<span class="lineNum"> 289 </span> : : } +<span class="lineNum"> 290 </span> : : +<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : *key_len = strlen(key);</span> +<span class="lineNum"> 292 </span> : : +<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : return 1;</span> +<span class="lineNum"> 294 </span> : : } +<span class="lineNum"> 295 </span> : : +<span class="lineNum"> 296 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html new file mode 100644 index 00000000..3468de7f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/http_resolve_host.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - http_resolve_host.c<span style="font-size: 80%;"> (<a href="http_resolve_host.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">172</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">122</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="http_resolve_host.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#58">try_url</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#323">resolve_ip_https</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#514">resolve_ip_http</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#241">parse_url</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html new file mode 100644 index 00000000..b6484263 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/http_resolve_host.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - http_resolve_host.c<span style="font-size: 80%;"> (<a href="http_resolve_host.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">172</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">122</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="http_resolve_host.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#241">parse_url</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#514">resolve_ip_http</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#323">resolve_ip_https</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="http_resolve_host.c.gcov.html#58">try_url</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html new file mode 100644 index 00000000..b9a4cfa3 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html @@ -0,0 +1,649 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/http_resolve_host.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - http_resolve_host.c<span style="font-size: 80%;"> (source / <a href="http_resolve_host.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">172</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">122</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: http_resolve_host.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Routine for using an http request to obtain a client's IP +<span class="lineNum"> 7 </span> : : * address as seen from the outside world. +<span class="lineNum"> 8 </span> : : * +<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 12 </span> : : * +<span class="lineNum"> 13 </span> : : * License (GNU General Public License): +<span class="lineNum"> 14 </span> : : * +<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 19 </span> : : * +<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 24 </span> : : * +<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 28 </span> : : * USA +<span class="lineNum"> 29 </span> : : * +<span class="lineNum"> 30 </span> : : ***************************************************************************** +<span class="lineNum"> 31 </span> : : */ +<span class="lineNum"> 32 </span> : : #include &quot;fwknop_common.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 34 </span> : : +<span class="lineNum"> 35 </span> : : #include &lt;errno.h&gt; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : #ifdef WIN32 +<span class="lineNum"> 38 </span> : : #include &lt;winsock2.h&gt; +<span class="lineNum"> 39 </span> : : #include &lt;ws2tcpip.h&gt; +<span class="lineNum"> 40 </span> : : #else +<span class="lineNum"> 41 </span> : : #if HAVE_SYS_SOCKET_H +<span class="lineNum"> 42 </span> : : #include &lt;sys/socket.h&gt; +<span class="lineNum"> 43 </span> : : #endif +<span class="lineNum"> 44 </span> : : #include &lt;netdb.h&gt; +<span class="lineNum"> 45 </span> : : #include &lt;sys/wait.h&gt; +<span class="lineNum"> 46 </span> : : #endif +<span class="lineNum"> 47 </span> : : +<span class="lineNum"> 48 </span> : : #if AFL_FUZZING +<span class="lineNum"> 49 </span> : : #define AFL_SET_RESOLVE_HOST &quot;192.168.12.123&quot; /* force to non-routable IP */ +<span class="lineNum"> 50 </span> : : #endif +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> : : struct url +<span class="lineNum"> 53 </span> : : { +<span class="lineNum"> 54 </span> : : char port[MAX_PORT_STR_LEN+1]; +<span class="lineNum"> 55 </span> : : char host[MAX_URL_HOST_LEN+1]; +<span class="lineNum"> 56 </span> : : char path[MAX_URL_PATH_LEN+1]; +<span class="lineNum"> 57 </span> : : }; +<a name="58"><span class="lineNum"> 58 </span> : : </a> +<span class="lineNum"> 59 </span> : : static int +<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : try_url(struct url *url, fko_cli_options_t *options)</span> +<span class="lineNum"> 61 </span> : : { +<span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : int sock=-1, sock_success=0, res, error, http_buf_len, i;</span> +<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : int bytes_read = 0, position = 0;</span> +<span class="lineNum"> 64 </span> : : int o1, o2, o3, o4; +<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : struct addrinfo *result=NULL, *rp, hints;</span> +<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : char http_buf[HTTP_MAX_REQUEST_LEN] = {0};</span> +<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : char http_response[HTTP_MAX_RESPONSE_LEN] = {0};</span> +<span class="lineNum"> 68 </span> : : char *ndx; +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> : : #ifdef WIN32 +<span class="lineNum"> 71 </span> : : WSADATA wsa_data; +<span class="lineNum"> 72 </span> : : +<span class="lineNum"> 73 </span> : : /* Winsock needs to be initialized... +<span class="lineNum"> 74 </span> : : */ +<span class="lineNum"> 75 </span> : : res = WSAStartup( MAKEWORD(1,1), &amp;wsa_data ); +<span class="lineNum"> 76 </span> : : if( res != 0 ) +<span class="lineNum"> 77 </span> : : { +<span class="lineNum"> 78 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;Winsock initialization error %d&quot;, res ); +<span class="lineNum"> 79 </span> : : return(-1); +<span class="lineNum"> 80 </span> : : } +<span class="lineNum"> 81 </span> : : #endif +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> : : /* Build our HTTP request to resolve the external IP (this is similar to +<span class="lineNum"> 84 </span> : : * to contacting whatismyip.org, but using a different URL). +<span class="lineNum"> 85 </span> : : */ +<span class="lineNum"> 86 </span> : : snprintf(http_buf, HTTP_MAX_REQUEST_LEN, +<span class="lineNum"> 87 </span> : : &quot;GET %s HTTP/1.0\r\nUser-Agent: %s\r\nAccept: */*\r\n&quot; +<span class="lineNum"> 88 </span> : : &quot;Host: %s\r\nConnection: close\r\n\r\n&quot;, +<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : url-&gt;path,</span> +<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : options-&gt;http_user_agent,</span> +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : url-&gt;host</span> +<span class="lineNum"> 92 </span> : : ); +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : http_buf_len = strlen(http_buf);</span> +<span class="lineNum"> 95 </span> : : +<span class="lineNum"> 96 </span> : : memset(&amp;hints, 0, sizeof(struct addrinfo)); +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ +<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : hints.ai_socktype = SOCK_STREAM;</span> +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : hints.ai_protocol = IPPROTO_TCP;</span> +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> : : #if AFL_FUZZING +<span class="lineNum"> 103 </span> : : /* Make sure to not generate any resolution requests when compiled +<span class="lineNum"> 104 </span> : : * for AFL fuzzing cycles +<span class="lineNum"> 105 </span> : : */ +<span class="lineNum"> 106 </span> : : strlcpy(options-&gt;allow_ip_str, AFL_SET_RESOLVE_HOST, +<span class="lineNum"> 107 </span> : : sizeof(options-&gt;allow_ip_str)); +<span class="lineNum"> 108 </span> : : log_msg(LOG_VERBOSITY_INFO, +<span class="lineNum"> 109 </span> : : &quot;\n[+] AFL fuzzing cycle, force IP resolution to: %s&quot;, +<span class="lineNum"> 110 </span> : : options-&gt;allow_ip_str); +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : return(1); +<span class="lineNum"> 113 </span> : : #endif +<span class="lineNum"> 114 </span> : : +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : error = getaddrinfo(url-&gt;host, url-&gt;port, &amp;hints, &amp;result);</span> +<span class="lineNum"> 116 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (error != 0)</span> +<span class="lineNum"> 117 </span> : : { +<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;error in getaddrinfo: %s&quot;, gai_strerror(error));</span> +<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 120 </span> : : } +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (rp = result; rp != NULL; rp = rp-&gt;ai_next) {</span> +<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : sock = socket(rp-&gt;ai_family, rp-&gt;ai_socktype,</span> +<span class="lineNum"> 124 </span> : : rp-&gt;ai_protocol); +<span class="lineNum"> 125 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> +<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 127 </span> : : +<span class="lineNum"> 128 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((error = (connect(sock, rp-&gt;ai_addr, rp-&gt;ai_addrlen) != -1)))</span> +<span class="lineNum"> 129 </span> : : { +<span class="lineNum"> 130 </span> : : sock_success = 1; +<span class="lineNum"> 131 </span> : : break; /* made it */ +<span class="lineNum"> 132 </span> : : } +<span class="lineNum"> 133 </span> : : else /* close the open socket if there was a connect error */ +<span class="lineNum"> 134 </span> : : { +<span class="lineNum"> 135 </span> : : #ifdef WIN32 +<span class="lineNum"> 136 </span> : : closesocket(sock); +<span class="lineNum"> 137 </span> : : #else +<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : close(sock);</span> +<span class="lineNum"> 139 </span> : : #endif +<span class="lineNum"> 140 </span> : : } +<span class="lineNum"> 141 </span> : : +<span class="lineNum"> 142 </span> : : } +<span class="lineNum"> 143 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(result != NULL)</span> +<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : freeaddrinfo(result);</span> +<span class="lineNum"> 145 </span> : : +<span class="lineNum"> 146 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! sock_success)</span> +<span class="lineNum"> 147 </span> : : { +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve_ip_http: Could not create socket: &quot;, strerror(errno));</span> +<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 150 </span> : : } +<span class="lineNum"> 151 </span> : : +<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;\nHTTP request: %s&quot;, http_buf);</span> +<span class="lineNum"> 153 </span> : : +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : res = send(sock, http_buf, http_buf_len, 0);</span> +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> +<span class="lineNum"> 157 </span> : : { +<span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve_ip_http: write error: &quot;, strerror(errno));</span> +<span class="lineNum"> 159 </span> : : } +<span class="lineNum"> 160 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != http_buf_len)</span> +<span class="lineNum"> 161 </span> : : { +<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 163 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, +<span class="lineNum"> 164 </span> : : res, http_buf_len +<span class="lineNum"> 165 </span> : : ); +<span class="lineNum"> 166 </span> : : } +<span class="lineNum"> 167 </span> : : +<span class="lineNum"> 168 </span> : : do +<span class="lineNum"> 169 </span> : : { +<span class="lineNum"> 170 </span> : : memset(http_buf, 0x0, sizeof(http_buf)); +<span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : bytes_read = recv(sock, http_buf, sizeof(http_buf), 0);</span> +<span class="lineNum"> 172 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( bytes_read &gt; 0 ) {</span> +<span class="lineNum"> 173 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(position + bytes_read &gt;= HTTP_MAX_RESPONSE_LEN)</span> +<span class="lineNum"> 174 </span> : : break; +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : memcpy(&amp;http_response[position], http_buf, bytes_read);</span> +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : position += bytes_read;</span> +<span class="lineNum"> 177 </span> : : } +<span class="lineNum"> 178 </span> : : } +<span class="lineNum"> 179 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ( bytes_read &gt; 0 );</span> +<span class="lineNum"> 180 </span> : : +<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : http_response[HTTP_MAX_RESPONSE_LEN-1] = '\0';</span> +<span class="lineNum"> 182 </span> : : +<span class="lineNum"> 183 </span> : : #ifdef WIN32 +<span class="lineNum"> 184 </span> : : closesocket(sock); +<span class="lineNum"> 185 </span> : : #else +<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : close(sock);</span> +<span class="lineNum"> 187 </span> : : #endif +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;\nHTTP response: %s&quot;, http_response);</span> +<span class="lineNum"> 190 </span> : : +<span class="lineNum"> 191 </span> : : /* Move to the end of the HTTP header and to the start of the content. +<span class="lineNum"> 192 </span> : : */ +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : ndx = strstr(http_response, &quot;\r\n\r\n&quot;);</span> +<span class="lineNum"> 194 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> +<span class="lineNum"> 195 </span> : : { +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Did not find the end of HTTP header.&quot;);</span> +<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 198 </span> : : } +<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : ndx += 4;</span> +<span class="lineNum"> 200 </span> : : +<span class="lineNum"> 201 </span> : : /* Walk along the content to try to find the end of the IP address. +<span class="lineNum"> 202 </span> : : * Note: We are expecting the content to be just an IP address +<span class="lineNum"> 203 </span> : : * (possibly followed by whitespace or other not-digit value). +<span class="lineNum"> 204 </span> : : */ +<span class="lineNum"> 205 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;MAX_IPV4_STR_LEN; i++) {</span> +<span class="lineNum"> 206 </span>[<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! isdigit(*(ndx+i)) &amp;&amp; *(ndx+i) != '.')</span> +<span class="lineNum"> 207 </span> : : break; +<span class="lineNum"> 208 </span> : : } +<span class="lineNum"> 209 </span> : : +<span class="lineNum"> 210 </span> : : /* Terminate at the first non-digit and non-dot. +<span class="lineNum"> 211 </span> : : */ +<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : *(ndx+i) = '\0';</span> +<span class="lineNum"> 213 </span> : : +<span class="lineNum"> 214 </span> : : /* Now that we have what we think is an IP address string. We make +<span class="lineNum"> 215 </span> : : * sure the format and values are sane. +<span class="lineNum"> 216 </span> : : */ +<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sscanf(ndx, &quot;%u.%u.%u.%u&quot;, &amp;o1, &amp;o2, &amp;o3, &amp;o4)) == 4</span> +<span class="lineNum"> 218 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o1 &gt;= 0 &amp;&amp; o1 &lt;= 255</span> +<span class="lineNum"> 219 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o2 &gt;= 0 &amp;&amp; o2 &lt;= 255</span> +<span class="lineNum"> 220 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o3 &gt;= 0 &amp;&amp; o3 &lt;= 255</span> +<span class="lineNum"> 221 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o4 &gt;= 0 &amp;&amp; o4 &lt;= 255)</span> +<span class="lineNum"> 222 </span> : : { +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;allow_ip_str, ndx, sizeof(options-&gt;allow_ip_str));</span> +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO,</span> +<span class="lineNum"> 226 </span> : : &quot;\n[+] Resolved external IP (via http://%s%s) as: %s&quot;, +<span class="lineNum"> 227 </span> : : url-&gt;host, +<span class="lineNum"> 228 </span> : : url-&gt;path, +<span class="lineNum"> 229 </span> : : options-&gt;allow_ip_str); +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : return(1);</span> +<span class="lineNum"> 232 </span> : : } +<span class="lineNum"> 233 </span> : : else +<span class="lineNum"> 234 </span> : : { +<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 236 </span> : : &quot;[-] From http://%s%s\n Invalid IP (%s) in HTTP response:\n\n%s&quot;, +<span class="lineNum"> 237 </span> : : url-&gt;host, url-&gt;path, ndx, http_response); +<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 239 </span> : : } +<span class="lineNum"> 240 </span> : : } +<a name="241"><span class="lineNum"> 241 </span> : : </a> +<span class="lineNum"> 242 </span> : : static int +<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : parse_url(char *res_url, struct url* url)</span> +<span class="lineNum"> 244 </span> : : { +<span class="lineNum"> 245 </span> : : char *s_ndx, *e_ndx; +<span class="lineNum"> 246 </span> : : int tlen, tlen_offset, port, is_err; +<span class="lineNum"> 247 </span> : : +<span class="lineNum"> 248 </span> : : /* Strip off https:// or http:// portion if necessary +<span class="lineNum"> 249 </span> : : */ +<span class="lineNum"> 250 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(res_url, &quot;https://&quot;, 8) == 0)</span> +<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : s_ndx = res_url + 8;</span> +<span class="lineNum"> 252 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(strncasecmp(res_url, &quot;http://&quot;, 7) == 0)</span> +<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : s_ndx = res_url + 7;</span> +<span class="lineNum"> 254 </span> : : else +<span class="lineNum"> 255 </span> : : s_ndx = res_url; +<span class="lineNum"> 256 </span> : : +<span class="lineNum"> 257 </span> : : /* Look for a colon in case an alternate port was specified. +<span class="lineNum"> 258 </span> : : */ +<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : e_ndx = strchr(s_ndx, ':');</span> +<span class="lineNum"> 260 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(e_ndx != NULL)</span> +<span class="lineNum"> 261 </span> : : { +<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : port = strtol_wrapper(e_ndx+1, 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 263 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 264 </span> : : { +<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 266 </span> : : &quot;[*] resolve-url port value is invalid, must be in [%d-%d]&quot;, +<span class="lineNum"> 267 </span> : : 1, MAX_PORT); +<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 269 </span> : : } +<span class="lineNum"> 270 </span> : : +<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : snprintf(url-&gt;port, sizeof(url-&gt;port)-1, &quot;%u&quot;, port);</span> +<span class="lineNum"> 272 </span> : : +<span class="lineNum"> 273 </span> : : /* Get the offset we need to skip the port portion when we +<span class="lineNum"> 274 </span> : : * extract the hostname part. +<span class="lineNum"> 275 </span> : : */ +<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : tlen_offset = strlen(url-&gt;port)+1;</span> +<span class="lineNum"> 277 </span> : : } +<span class="lineNum"> 278 </span> : : else +<span class="lineNum"> 279 </span> : : { +<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;port, &quot;80&quot;, sizeof(url-&gt;port));</span> +<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : tlen_offset = 0;</span> +<span class="lineNum"> 282 </span> : : } +<span class="lineNum"> 283 </span> : : +<span class="lineNum"> 284 </span> : : /* Get rid of any trailing slash +<span class="lineNum"> 285 </span> : : */ +<span class="lineNum"> 286 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res_url[strlen(res_url)-1] == '/')</span> +<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : res_url[strlen(res_url)-1] = '\0';</span> +<span class="lineNum"> 288 </span> : : +<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : e_ndx = strchr(s_ndx, '/');</span> +<span class="lineNum"> 290 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(e_ndx == NULL)</span> +<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : tlen = strlen(s_ndx)+1;</span> +<span class="lineNum"> 292 </span> : : else +<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : tlen = (e_ndx-s_ndx)+1;</span> +<span class="lineNum"> 294 </span> : : +<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : tlen -= tlen_offset;</span> +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tlen &gt; MAX_URL_HOST_LEN)</span> +<span class="lineNum"> 298 </span> : : { +<span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve-url hostname portion is too large.&quot;);</span> +<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 301 </span> : : } +<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;host, s_ndx, tlen);</span> +<span class="lineNum"> 303 </span> : : +<span class="lineNum"> 304 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(e_ndx != NULL)</span> +<span class="lineNum"> 305 </span> : : { +<span class="lineNum"> 306 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(e_ndx) &gt; MAX_URL_PATH_LEN)</span> +<span class="lineNum"> 307 </span> : : { +<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve-url path portion is too large.&quot;);</span> +<span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 310 </span> : : } +<span class="lineNum"> 311 </span> : : +<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;path, e_ndx, sizeof(url-&gt;path));</span> +<span class="lineNum"> 313 </span> : : } +<span class="lineNum"> 314 </span> : : else +<span class="lineNum"> 315 </span> : : { +<span class="lineNum"> 316 </span> : : /* default to &quot;GET /&quot; if there isn't a more specific URL +<span class="lineNum"> 317 </span> : : */ +<span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;path, &quot;/&quot;, sizeof(url-&gt;path));</span> +<span class="lineNum"> 319 </span> : : } +<span class="lineNum"> 320 </span> : : +<span class="lineNum"> 321 </span> : : return(0); +<span class="lineNum"> 322 </span> : : } +<a name="323"><span class="lineNum"> 323 </span> : : </a> +<span class="lineNum"> 324 </span> : : int +<span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : resolve_ip_https(fko_cli_options_t *options)</span> +<span class="lineNum"> 326 </span> : : { +<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : int o1, o2, o3, o4, got_resp=0, i=0;</span> +<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : char *ndx, resp[MAX_IPV4_STR_LEN+1] = {0};</span> +<span class="lineNum"> 329 </span> : : struct url url; /* for validation only */ +<span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : char wget_ssl_cmd[MAX_URL_PATH_LEN] = {0}; /* for verbose logging only */</span> +<span class="lineNum"> 331 </span> : : +<span class="lineNum"> 332 </span> : : #if HAVE_EXECVPE +<span class="lineNum"> 333 </span> : : char *wget_argv[MAX_CMDLINE_ARGS]; /* for execvpe() */ +<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : int wget_argc=0;</span> +<span class="lineNum"> 335 </span> : : int pipe_fd[2]; +<span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : pid_t pid=0;</span> +<span class="lineNum"> 337 </span> : : FILE *output; +<span class="lineNum"> 338 </span> : : int status; +<span class="lineNum"> 339 </span> : : #else +<span class="lineNum"> 340 </span> : : FILE *wget; +<span class="lineNum"> 341 </span> : : #endif +<span class="lineNum"> 342 </span> : : +<span class="lineNum"> 343 </span> : : #if HAVE_EXECVPE +<span class="lineNum"> 344 </span> : : memset(wget_argv, 0x0, sizeof(wget_argv)); +<span class="lineNum"> 345 </span> : : #endif +<span class="lineNum"> 346 </span> : : memset(&amp;url, 0x0, sizeof(url)); +<span class="lineNum"> 347 </span> : : +<span class="lineNum"> 348 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin != NULL)</span> +<span class="lineNum"> 349 </span> : : { +<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : strlcpy(wget_ssl_cmd, options-&gt;wget_bin, sizeof(wget_ssl_cmd));</span> +<span class="lineNum"> 351 </span> : : } +<span class="lineNum"> 352 </span> : : else +<span class="lineNum"> 353 </span> : : { +<span class="lineNum"> 354 </span> : : #ifdef WGET_EXE +<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : strlcpy(wget_ssl_cmd, WGET_EXE, sizeof(wget_ssl_cmd));</span> +<span class="lineNum"> 356 </span> : : #else +<span class="lineNum"> 357 </span> : : log_msg(LOG_VERBOSITY_ERROR, +<span class="lineNum"> 358 </span> : : &quot;[*] Use --wget-cmd &lt;path&gt; to specify path to the wget command.&quot;); +<span class="lineNum"> 359 </span> : : return(-1); +<span class="lineNum"> 360 </span> : : #endif +<span class="lineNum"> 361 </span> : : } +<span class="lineNum"> 362 </span> : : +<span class="lineNum"> 363 </span> : : /* See whether we're supposed to change the default wget user agent +<span class="lineNum"> 364 </span> : : */ +<span class="lineNum"> 365 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! options-&gt;use_wget_user_agent)</span> +<span class="lineNum"> 366 </span> : : { +<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, &quot; -U &quot;, sizeof(wget_ssl_cmd));</span> +<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, options-&gt;http_user_agent, sizeof(wget_ssl_cmd));</span> +<span class="lineNum"> 369 </span> : : } +<span class="lineNum"> 370 </span> : : +<span class="lineNum"> 371 </span> : : /* We collect the IP from wget's stdout +<span class="lineNum"> 372 </span> : : */ +<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd,</span> +<span class="lineNum"> 374 </span> : : &quot; --secure-protocol=auto --quiet -O - &quot;, sizeof(wget_ssl_cmd)); +<span class="lineNum"> 375 </span> : : +<span class="lineNum"> 376 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> +<span class="lineNum"> 377 </span> : : { +<span class="lineNum"> 378 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(options-&gt;resolve_url, &quot;https&quot;, 5) != 0)</span> +<span class="lineNum"> 379 </span> : : { +<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 381 </span> : : &quot;[-] Warning: IP resolution URL '%s' should begin with 'https://' in -R mode.&quot;, +<span class="lineNum"> 382 </span> : : options-&gt;resolve_url); +<span class="lineNum"> 383 </span> : : } +<span class="lineNum"> 384 </span> : : +<span class="lineNum"> 385 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(parse_url(options-&gt;resolve_url, &amp;url) &lt; 0)</span> +<span class="lineNum"> 386 </span> : : { +<span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Error parsing resolve-url&quot;);</span> +<span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 389 </span> : : } +<span class="lineNum"> 390 </span> : : /* tack on the original URL to the wget command +<span class="lineNum"> 391 </span> : : */ +<span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, options-&gt;resolve_url, sizeof(wget_ssl_cmd));</span> +<span class="lineNum"> 393 </span> : : } +<span class="lineNum"> 394 </span> : : else +<span class="lineNum"> 395 </span> : : { +<span class="lineNum"> 396 </span> : : /* tack on the default URL to the wget command +<span class="lineNum"> 397 </span> : : */ +<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, WGET_RESOLVE_URL_SSL, sizeof(wget_ssl_cmd));</span> +<span class="lineNum"> 399 </span> : : } +<span class="lineNum"> 400 </span> : : +<span class="lineNum"> 401 </span> : : #if AFL_FUZZING +<span class="lineNum"> 402 </span> : : /* Make sure to not generate any resolution requests when compiled +<span class="lineNum"> 403 </span> : : * for AFL fuzzing cycles +<span class="lineNum"> 404 </span> : : */ +<span class="lineNum"> 405 </span> : : strlcpy(options-&gt;allow_ip_str, AFL_SET_RESOLVE_HOST, +<span class="lineNum"> 406 </span> : : sizeof(options-&gt;allow_ip_str)); +<span class="lineNum"> 407 </span> : : log_msg(LOG_VERBOSITY_INFO, +<span class="lineNum"> 408 </span> : : &quot;\n[+] AFL fuzzing cycle, force IP resolution to: %s&quot;, +<span class="lineNum"> 409 </span> : : options-&gt;allow_ip_str); +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> : : return(1); +<span class="lineNum"> 412 </span> : : #endif +<span class="lineNum"> 413 </span> : : +<span class="lineNum"> 414 </span> : : #if HAVE_EXECVPE +<span class="lineNum"> 415 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(wget_ssl_cmd, wget_argv, &amp;wget_argc, options) != 1)</span> +<span class="lineNum"> 416 </span> : : { +<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Error converting wget cmd str to argv&quot;);</span> +<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 419 </span> : : } +<span class="lineNum"> 420 </span> : : +<span class="lineNum"> 421 </span> : : /* We drive wget to resolve the external IP via SSL. This may not +<span class="lineNum"> 422 </span> : : * work on all platforms, but is a better strategy for now than +<span class="lineNum"> 423 </span> : : * requiring that fwknop link against an SSL library. +<span class="lineNum"> 424 </span> : : */ +<span class="lineNum"> 425 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pipe(pipe_fd) &lt; 0)</span> +<span class="lineNum"> 426 </span> : : { +<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] pipe() error&quot;);</span> +<span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> +<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 430 </span> : : } +<span class="lineNum"> 431 </span> : : +<span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : pid = fork();</span> +<span class="lineNum"> 433 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (pid == 0)</span> +<span class="lineNum"> 434 </span> : : { +<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[0]);</span> +<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDOUT_FILENO);</span> +<span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDERR_FILENO);</span> +<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : execvpe(wget_argv[0], wget_argv, (char * const *)NULL); /* don't use env */</span> +<span class="lineNum"> 439 </span> : : } +<span class="lineNum"> 440 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pid == -1)</span> +<span class="lineNum"> 441 </span> : : { +<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO, &quot;[*] Could not fork() for wget.&quot;);</span> +<span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> +<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 445 </span> : : } +<span class="lineNum"> 446 </span> : : +<span class="lineNum"> 447 </span> : : /* Only the parent process makes it here +<span class="lineNum"> 448 </span> : : */ +<span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> +<span class="lineNum"> 450 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((output = fdopen(pipe_fd[0], &quot;r&quot;)) != NULL)</span> +<span class="lineNum"> 451 </span> : : { +<span class="lineNum"> 452 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgets(resp, sizeof(resp), output) != NULL)</span> +<span class="lineNum"> 453 </span> : : { +<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : got_resp = 1;</span> +<span class="lineNum"> 455 </span> : : } +<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : fclose(output);</span> +<span class="lineNum"> 457 </span> : : } +<span class="lineNum"> 458 </span> : : else +<span class="lineNum"> 459 </span> : : { +<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO,</span> +<span class="lineNum"> 461 </span> : : &quot;[*] Could not fdopen() pipe output file descriptor.&quot;); +<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> +<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 464 </span> : : } +<span class="lineNum"> 465 </span> : : +<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : waitpid(pid, &amp;status, 0);</span> +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> +<span class="lineNum"> 469 </span> : : +<span class="lineNum"> 470 </span> : : #else /* fall back to popen() */ +<span class="lineNum"> 471 </span> : : wget = popen(wget_ssl_cmd, &quot;r&quot;); +<span class="lineNum"> 472 </span> : : if(wget == NULL) +<span class="lineNum"> 473 </span> : : { +<span class="lineNum"> 474 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Could not run cmd: %s&quot;, +<span class="lineNum"> 475 </span> : : wget_ssl_cmd); +<span class="lineNum"> 476 </span> : : return -1; +<span class="lineNum"> 477 </span> : : } +<span class="lineNum"> 478 </span> : : /* Expecting one line of wget output that contains the resolved IP. +<span class="lineNum"> 479 </span> : : * */ +<span class="lineNum"> 480 </span> : : if ((fgets(resp, sizeof(resp), wget)) != NULL) +<span class="lineNum"> 481 </span> : : { +<span class="lineNum"> 482 </span> : : got_resp = 1; +<span class="lineNum"> 483 </span> : : } +<span class="lineNum"> 484 </span> : : pclose(wget); +<span class="lineNum"> 485 </span> : : #endif +<span class="lineNum"> 486 </span> : : +<span class="lineNum"> 487 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_resp)</span> +<span class="lineNum"> 488 </span> : : { +<span class="lineNum"> 489 </span> : : ndx = resp; +<span class="lineNum"> 490 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;MAX_IPV4_STR_LEN; i++) {</span> +<span class="lineNum"> 491 </span>[<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! isdigit(*(ndx+i)) &amp;&amp; *(ndx+i) != '.')</span> +<span class="lineNum"> 492 </span> : : break; +<span class="lineNum"> 493 </span> : : } +<span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : *(ndx+i) = '\0';</span> +<span class="lineNum"> 495 </span> : : +<span class="lineNum"> 496 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sscanf(ndx, &quot;%u.%u.%u.%u&quot;, &amp;o1, &amp;o2, &amp;o3, &amp;o4)) == 4</span> +<span class="lineNum"> 497 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o1 &gt;= 0 &amp;&amp; o1 &lt;= 255</span> +<span class="lineNum"> 498 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o2 &gt;= 0 &amp;&amp; o2 &lt;= 255</span> +<span class="lineNum"> 499 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o3 &gt;= 0 &amp;&amp; o3 &lt;= 255</span> +<span class="lineNum"> 500 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o4 &gt;= 0 &amp;&amp; o4 &lt;= 255)</span> +<span class="lineNum"> 501 </span> : : { +<span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;allow_ip_str, ndx, sizeof(options-&gt;allow_ip_str));</span> +<span class="lineNum"> 503 </span> : : +<span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO,</span> +<span class="lineNum"> 505 </span> : : &quot;\n[+] Resolved external IP (via '%s') as: %s&quot;, +<span class="lineNum"> 506 </span> : : wget_ssl_cmd, options-&gt;allow_ip_str); +<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : return 1;</span> +<span class="lineNum"> 508 </span> : : } +<span class="lineNum"> 509 </span> : : } +<span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 511 </span> : : &quot;[-] Could not resolve IP via: '%s'&quot;, wget_ssl_cmd); +<span class="lineNum"> 512 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 513 </span> : : } +<a name="514"><span class="lineNum"> 514 </span> : : </a> +<span class="lineNum"> 515 </span> : : int +<span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : resolve_ip_http(fko_cli_options_t *options)</span> +<span class="lineNum"> 517 </span> : : { +<span class="lineNum"> 518 </span> : : int res; +<span class="lineNum"> 519 </span> : : struct url url; +<span class="lineNum"> 520 </span> : : +<span class="lineNum"> 521 </span> : : memset(&amp;url, 0, sizeof(url)); +<span class="lineNum"> 522 </span> : : +<span class="lineNum"> 523 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> +<span class="lineNum"> 524 </span> : : { +<span class="lineNum"> 525 </span> : : /* we only enter this function when the user forces non-HTTPS +<span class="lineNum"> 526 </span> : : * IP resolution +<span class="lineNum"> 527 </span> : : */ +<span class="lineNum"> 528 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(options-&gt;resolve_url, &quot;https&quot;, 5) == 0)</span> +<span class="lineNum"> 529 </span> : : { +<span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 531 </span> : : &quot;[*] https is not supported for --resolve-http-only.&quot;); +<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 533 </span> : : } +<span class="lineNum"> 534 </span> : : +<span class="lineNum"> 535 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(parse_url(options-&gt;resolve_url, &amp;url) &lt; 0)</span> +<span class="lineNum"> 536 </span> : : { +<span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Error parsing resolve-url&quot;);</span> +<span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 539 </span> : : } +<span class="lineNum"> 540 </span> : : +<span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : res = try_url(&amp;url, options);</span> +<span class="lineNum"> 542 </span> : : +<span class="lineNum"> 543 </span> : : } else { +<span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : strlcpy(url.port, &quot;80&quot;, sizeof(url.port));</span> +<span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : strlcpy(url.host, HTTP_RESOLVE_HOST, sizeof(url.host));</span> +<span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : strlcpy(url.path, HTTP_RESOLVE_URL, sizeof(url.path));</span> +<span class="lineNum"> 547 </span> : : +<span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : res = try_url(&amp;url, options);</span> +<span class="lineNum"> 549 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != 1)</span> +<span class="lineNum"> 550 </span> : : { +<span class="lineNum"> 551 </span> : : /* try the backup url (just switches the host to cipherdyne.com) +<span class="lineNum"> 552 </span> : : */ +<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : strlcpy(url.host, HTTP_BACKUP_RESOLVE_HOST, sizeof(url.host));</span> +<span class="lineNum"> 554 </span> : : +<span class="lineNum"> 555 </span> : : #ifndef WIN32 +<span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : sleep(2);</span> +<span class="lineNum"> 557 </span> : : #endif +<span class="lineNum"> 558 </span> :<span class="lineNoCov"> 0 : res = try_url(&amp;url, options);</span> +<span class="lineNum"> 559 </span> : : } +<span class="lineNum"> 560 </span> : : } +<span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 562 </span> : : } +<span class="lineNum"> 563 </span> : : +<span class="lineNum"> 564 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html new file mode 100644 index 00000000..5456a9a7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html @@ -0,0 +1,179 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">690</td> + <td class="headerCovTableEntry">2039</td> + <td class="headerCovTableEntryLo">33.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">39</td> + <td class="headerCovTableEntry">71</td> + <td class="headerCovTableEntryLo">54.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">397</td> + <td class="headerCovTableEntry">1260</td> + <td class="headerCovTableEntryLo">31.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> + </tr> + <tr> + <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 172</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 4</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 122</td> + </tr> + <tr> + <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> + </td> + <td class="coverPerLo">17.8&nbsp;%</td> + <td class="coverNumLo">50 / 281</td> + <td class="coverPerLo">44.4&nbsp;%</td> + <td class="coverNumLo">4 / 9</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">16 / 116</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">23 / 79</td> + <td class="coverPerLo">37.5&nbsp;%</td> + <td class="coverNumLo">3 / 8</td> + <td class="coverPerLo">21.2&nbsp;%</td> + <td class="coverNumLo">11 / 52</td> + </tr> + <tr> + <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> + </td> + <td class="coverPerLo">59.0&nbsp;%</td> + <td class="coverNumLo">46 / 78</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">26.8&nbsp;%</td> + <td class="coverNumLo">15 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">310 / 917</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">14 / 26</td> + <td class="coverPerLo">38.1&nbsp;%</td> + <td class="coverNumLo">222 / 582</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> + </td> + <td class="coverPerLo">49.4&nbsp;%</td> + <td class="coverNumLo">245 / 496</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">12 / 18</td> + <td class="coverPerLo">39.3&nbsp;%</td> + <td class="coverNumLo">129 / 328</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">16 / 16</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html new file mode 100644 index 00000000..7f5bcb65 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html @@ -0,0 +1,179 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">690</td> + <td class="headerCovTableEntry">2039</td> + <td class="headerCovTableEntryLo">33.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">39</td> + <td class="headerCovTableEntry">71</td> + <td class="headerCovTableEntryLo">54.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">397</td> + <td class="headerCovTableEntry">1260</td> + <td class="headerCovTableEntryLo">31.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 172</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 4</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 122</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">23 / 79</td> + <td class="coverPerLo">37.5&nbsp;%</td> + <td class="coverNumLo">3 / 8</td> + <td class="coverPerLo">21.2&nbsp;%</td> + <td class="coverNumLo">11 / 52</td> + </tr> + <tr> + <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> + </td> + <td class="coverPerLo">17.8&nbsp;%</td> + <td class="coverNumLo">50 / 281</td> + <td class="coverPerLo">44.4&nbsp;%</td> + <td class="coverNumLo">4 / 9</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">16 / 116</td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">310 / 917</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">14 / 26</td> + <td class="coverPerLo">38.1&nbsp;%</td> + <td class="coverNumLo">222 / 582</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> + </td> + <td class="coverPerLo">49.4&nbsp;%</td> + <td class="coverNumLo">245 / 496</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">12 / 18</td> + <td class="coverPerLo">39.3&nbsp;%</td> + <td class="coverNumLo">129 / 328</td> + </tr> + <tr> + <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> + </td> + <td class="coverPerLo">59.0&nbsp;%</td> + <td class="coverNumLo">46 / 78</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">26.8&nbsp;%</td> + <td class="coverNumLo">15 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">16 / 16</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html new file mode 100644 index 00000000..970e3437 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html @@ -0,0 +1,179 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">690</td> + <td class="headerCovTableEntry">2039</td> + <td class="headerCovTableEntryLo">33.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">39</td> + <td class="headerCovTableEntry">71</td> + <td class="headerCovTableEntryLo">54.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">397</td> + <td class="headerCovTableEntry">1260</td> + <td class="headerCovTableEntryLo">31.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 172</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 4</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 122</td> + </tr> + <tr> + <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> + </td> + <td class="coverPerLo">17.8&nbsp;%</td> + <td class="coverNumLo">50 / 281</td> + <td class="coverPerLo">44.4&nbsp;%</td> + <td class="coverNumLo">4 / 9</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">16 / 116</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">23 / 79</td> + <td class="coverPerLo">37.5&nbsp;%</td> + <td class="coverNumLo">3 / 8</td> + <td class="coverPerLo">21.2&nbsp;%</td> + <td class="coverNumLo">11 / 52</td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">310 / 917</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">14 / 26</td> + <td class="coverPerLo">38.1&nbsp;%</td> + <td class="coverNumLo">222 / 582</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> + </td> + <td class="coverPerLo">49.4&nbsp;%</td> + <td class="coverNumLo">245 / 496</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">12 / 18</td> + <td class="coverPerLo">39.3&nbsp;%</td> + <td class="coverNumLo">129 / 328</td> + </tr> + <tr> + <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> + </td> + <td class="coverPerLo">59.0&nbsp;%</td> + <td class="coverNumLo">46 / 78</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">26.8&nbsp;%</td> + <td class="coverNumLo">15 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">16 / 16</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html new file mode 100644 index 00000000..9efd8c7f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html @@ -0,0 +1,179 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">690</td> + <td class="headerCovTableEntry">2039</td> + <td class="headerCovTableEntryLo">33.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">39</td> + <td class="headerCovTableEntry">71</td> + <td class="headerCovTableEntryLo">54.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">397</td> + <td class="headerCovTableEntry">1260</td> + <td class="headerCovTableEntryLo">31.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">310 / 917</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">14 / 26</td> + <td class="coverPerLo">38.1&nbsp;%</td> + <td class="coverNumLo">222 / 582</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> + </td> + <td class="coverPerLo">49.4&nbsp;%</td> + <td class="coverNumLo">245 / 496</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">12 / 18</td> + <td class="coverPerLo">39.3&nbsp;%</td> + <td class="coverNumLo">129 / 328</td> + </tr> + <tr> + <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> + </td> + <td class="coverPerLo">59.0&nbsp;%</td> + <td class="coverNumLo">46 / 78</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">26.8&nbsp;%</td> + <td class="coverNumLo">15 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 172</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 4</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 122</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">16 / 16</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + </tr> + <tr> + <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> + </td> + <td class="coverPerLo">17.8&nbsp;%</td> + <td class="coverNumLo">50 / 281</td> + <td class="coverPerLo">44.4&nbsp;%</td> + <td class="coverNumLo">4 / 9</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">16 / 116</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">23 / 79</td> + <td class="coverPerLo">37.5&nbsp;%</td> + <td class="coverNumLo">3 / 8</td> + <td class="coverPerLo">21.2&nbsp;%</td> + <td class="coverNumLo">11 / 52</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html new file mode 100644 index 00000000..f07f4548 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/log_msg.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="log_msg.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#85">log_msg</a></td> + <td class="coverFnHi">195829</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#69">log_set_verbosity</a></td> + <td class="coverFnHi">4817</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#47">log_new</a></td> + <td class="coverFnHi">2085</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html new file mode 100644 index 00000000..04ff855f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/log_msg.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="log_msg.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#85">log_msg</a></td> + <td class="coverFnHi">195829</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#47">log_new</a></td> + <td class="coverFnHi">2085</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#69">log_set_verbosity</a></td> + <td class="coverFnHi">4817</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html new file mode 100644 index 00000000..7a2e0c4f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html @@ -0,0 +1,201 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/log_msg.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - log_msg.c<span style="font-size: 80%;"> (source / <a href="log_msg.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /**</a> +<span class="lineNum"> 2 </span> : : * @file log_msg.c +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * @brief General logging routine that can write to stderr +<span class="lineNum"> 5 </span> : : * and can take variable number of args. +<span class="lineNum"> 6 </span> : : * +<span class="lineNum"> 7 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 8 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 9 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 10 </span> : : * +<span class="lineNum"> 11 </span> : : * License (GNU General Public License): +<span class="lineNum"> 12 </span> : : * +<span class="lineNum"> 13 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 14 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 15 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 16 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 17 </span> : : * +<span class="lineNum"> 18 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 19 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 20 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 21 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 22 </span> : : * +<span class="lineNum"> 23 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 24 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 25 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 26 </span> : : * USA +<span class="lineNum"> 27 </span> : : */ +<span class="lineNum"> 28 </span> : : +<span class="lineNum"> 29 </span> : : #include &quot;fwknop_common.h&quot; +<span class="lineNum"> 30 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 31 </span> : : #include &lt;stdarg.h&gt; +<span class="lineNum"> 32 </span> : : +<span class="lineNum"> 33 </span> : : #define LOG_STREAM_STDERR stderr /*!&lt; Error and warning messages are redirected to stderr */ +<span class="lineNum"> 34 </span> : : #define LOG_STREAM_STDOUT stdout /*!&lt; Normal, info and debug messages are redirected to stdout */ +<span class="lineNum"> 35 </span> : : +<span class="lineNum"> 36 </span> : : typedef struct +<span class="lineNum"> 37 </span> : : { +<span class="lineNum"> 38 </span> : : int verbosity; /*!&lt; Verbosity level (LOG_VERBOSITY_DEBUG...*/ +<span class="lineNum"> 39 </span> : : } log_ctx_t; +<span class="lineNum"> 40 </span> : : +<span class="lineNum"> 41 </span> : : static log_ctx_t log_ctx; /*!&lt; Structure to store the context of the module */ +<span class="lineNum"> 42 </span> : : +<span class="lineNum"> 43 </span> : : /** +<span class="lineNum"> 44 </span> : : * Set up the context for the log module. +<span class="lineNum"> 45 </span> : : * +<span class="lineNum"> 46 </span> : : * This function only initialize the verbosity level +<a name="47"><span class="lineNum"> 47 </span> : : */</a> +<span class="lineNum"> 48 </span> : : void +<span class="lineNum"> 49 </span> :<span class="lineCov"> 2085 : log_new(void)</span> +<span class="lineNum"> 50 </span> : : { +<span class="lineNum"> 51 </span> :<span class="lineCov"> 2085 : log_ctx.verbosity = LOG_DEFAULT_VERBOSITY;</span> +<span class="lineNum"> 52 </span> :<span class="lineCov"> 2085 : }</span> +<span class="lineNum"> 53 </span> : : +<span class="lineNum"> 54 </span> : : /** +<span class="lineNum"> 55 </span> : : * Destroy the context for the log module. +<span class="lineNum"> 56 </span> : : * +<span class="lineNum"> 57 </span> : : * This function is not used at the moment since the module does not open file +<span class="lineNum"> 58 </span> : : * which would require to be closed; +<span class="lineNum"> 59 </span> : : void +<span class="lineNum"> 60 </span> : : log_free(void) +<span class="lineNum"> 61 </span> : : { +<span class="lineNum"> 62 </span> : : } +<span class="lineNum"> 63 </span> : : */ +<span class="lineNum"> 64 </span> : : +<span class="lineNum"> 65 </span> : : /** +<span class="lineNum"> 66 </span> : : * Set the verbosity level for the current context of the log module. +<span class="lineNum"> 67 </span> : : * +<span class="lineNum"> 68 </span> : : * @param level verbosity level to set +<a name="69"><span class="lineNum"> 69 </span> : : */</a> +<span class="lineNum"> 70 </span> : : void +<span class="lineNum"> 71 </span> :<span class="lineCov"> 4817 : log_set_verbosity(int level)</span> +<span class="lineNum"> 72 </span> : : { +<span class="lineNum"> 73 </span> :<span class="lineCov"> 4817 : log_ctx.verbosity = level;</span> +<span class="lineNum"> 74 </span> :<span class="lineCov"> 4817 : }</span> +<span class="lineNum"> 75 </span> : : +<span class="lineNum"> 76 </span> : : /** +<span class="lineNum"> 77 </span> : : * Log a message +<span class="lineNum"> 78 </span> : : * +<span class="lineNum"> 79 </span> : : * This function sends a message to the stream dedicated to the priority +<span class="lineNum"> 80 </span> : : * set. If the verbosity for the context is higher than the one used for +<span class="lineNum"> 81 </span> : : * the message, then the message is discarded. +<span class="lineNum"> 82 </span> : : * +<span class="lineNum"> 83 </span> : : * @param level Verbosity level to used for the message. +<span class="lineNum"> 84 </span> : : * @param msg Message to print +<a name="85"><span class="lineNum"> 85 </span> : : */</a> +<span class="lineNum"> 86 </span> : : void +<span class="lineNum"> 87 </span> :<span class="lineCov"> 195829 : log_msg(int level, char* msg, ...)</span> +<span class="lineNum"> 88 </span> : : { +<span class="lineNum"> 89 </span> : : va_list ap; +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> [<span class="branchCov" title="Branch 0 was taken 84186 times"> + </span><span class="branchCov" title="Branch 1 was taken 111643 times"> + </span>]:<span class="lineCov"> 195829 : if (level &lt;= log_ctx.verbosity)</span> +<span class="lineNum"> 92 </span> : : { +<span class="lineNum"> 93 </span> :<span class="lineCov"> 84186 : va_start(ap, msg);</span> +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> [<span class="branchCov" title="Branch 0 was taken 80747 times"> + </span><span class="branchCov" title="Branch 1 was taken 3439 times"> + </span>]:<span class="lineCov"> 84186 : switch (level)</span> +<span class="lineNum"> 96 </span> : : { +<span class="lineNum"> 97 </span> : : case LOG_VERBOSITY_ERROR: +<span class="lineNum"> 98 </span> : : case LOG_VERBOSITY_WARNING: +<span class="lineNum"> 99 </span> :<span class="lineCov"> 80747 : vfprintf(LOG_STREAM_STDERR, msg, ap);</span> +<span class="lineNum"> 100 </span> :<span class="lineCov"> 80747 : fprintf(LOG_STREAM_STDERR, &quot;\n&quot;);</span> +<span class="lineNum"> 101 </span> : : break; +<span class="lineNum"> 102 </span> : : case LOG_VERBOSITY_NORMAL: +<span class="lineNum"> 103 </span> : : case LOG_VERBOSITY_INFO: +<span class="lineNum"> 104 </span> : : case LOG_VERBOSITY_DEBUG: +<span class="lineNum"> 105 </span> : : default : +<span class="lineNum"> 106 </span> :<span class="lineCov"> 3439 : vfprintf(LOG_STREAM_STDOUT, msg, ap);</span> +<span class="lineNum"> 107 </span> :<span class="lineCov"> 3439 : fprintf(LOG_STREAM_STDOUT, &quot;\n&quot;);</span> +<span class="lineNum"> 108 </span> : : break; +<span class="lineNum"> 109 </span> : : } +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> :<span class="lineCov"> 84186 : va_end(ap);</span> +<span class="lineNum"> 112 </span> : : } +<span class="lineNum"> 113 </span> : : else; +<span class="lineNum"> 114 </span> :<span class="lineCov"> 195829 : }</span> +<span class="lineNum"> 115 </span> : : +<span class="lineNum"> 116 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html new file mode 100644 index 00000000..c6653ef4 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html @@ -0,0 +1,117 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/spa_comm.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - spa_comm.c<span style="font-size: 80%;"> (<a href="spa_comm.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntry">281</td> + <td class="headerCovTableEntryLo">17.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntryLo">44.4 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">116</td> + <td class="headerCovTableEntryLo">13.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="spa_comm.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#33">dump_transmit_options</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#608">send_spa_packet</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#84">send_spa_packet_tcp_or_udp</a></td> + <td class="coverFnHi">349</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#507">send_spa_packet_http</a></td> + <td class="coverFnHi">67</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#740">write_spa_packet_data</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#305">send_spa_packet_udp_raw.isra.1</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#56">chksum</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#404">send_spa_packet_icmp.isra.2</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#192">send_spa_packet_tcp_raw.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html new file mode 100644 index 00000000..5e975717 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html @@ -0,0 +1,117 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/spa_comm.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - spa_comm.c<span style="font-size: 80%;"> (<a href="spa_comm.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntry">281</td> + <td class="headerCovTableEntryLo">17.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntryLo">44.4 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">116</td> + <td class="headerCovTableEntryLo">13.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="spa_comm.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#56">chksum</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#33">dump_transmit_options</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#608">send_spa_packet</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#507">send_spa_packet_http</a></td> + <td class="coverFnHi">67</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#404">send_spa_packet_icmp.isra.2</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#84">send_spa_packet_tcp_or_udp</a></td> + <td class="coverFnHi">349</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#192">send_spa_packet_tcp_raw.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#305">send_spa_packet_udp_raw.isra.1</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="spa_comm.c.gcov.html#740">write_spa_packet_data</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html new file mode 100644 index 00000000..4689376d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html @@ -0,0 +1,869 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/spa_comm.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - spa_comm.c<span style="font-size: 80%;"> (source / <a href="spa_comm.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntry">281</td> + <td class="headerCovTableEntryLo">17.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntryLo">44.4 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">116</td> + <td class="headerCovTableEntryLo">13.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: spa_comm.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Network-related functions for the fwknop client +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;spa_comm.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;utils.h&quot; +<a name="33"><span class="lineNum"> 33 </span> : : </a> +<span class="lineNum"> 34 </span> : : static void +<span class="lineNum"> 35 </span> :<span class="lineCov"> 416 : dump_transmit_options(const fko_cli_options_t *options)</span> +<span class="lineNum"> 36 </span> : : { +<span class="lineNum"> 37 </span> :<span class="lineCov"> 416 : char proto_str[PROTOCOL_BUFSIZE] = {0}; /* Protocol string */</span> +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> :<span class="lineCov"> 416 : proto_inttostr(options-&gt;spa_proto, proto_str, sizeof(proto_str));</span> +<span class="lineNum"> 40 </span> : : +<span class="lineNum"> 41 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot;Generating SPA packet:&quot;);</span> +<span class="lineNum"> 42 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot; protocol: %s&quot;, proto_str);</span> +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 415 times"> + </span>]:<span class="lineCov"> 416 : if (options-&gt;spa_src_port)</span> +<span class="lineNum"> 45 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_INFO, &quot; source port: %d&quot;, options-&gt;spa_src_port);</span> +<span class="lineNum"> 46 </span> : : else +<span class="lineNum"> 47 </span> :<span class="lineCov"> 415 : log_msg(LOG_VERBOSITY_INFO, &quot; source port: &lt;OS assigned&gt;&quot;);</span> +<span class="lineNum"> 48 </span> : : +<span class="lineNum"> 49 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot; destination port: %d&quot;, options-&gt;spa_dst_port);</span> +<span class="lineNum"> 50 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot; IP/host: %s&quot;, options-&gt;spa_server_str);</span> +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> :<span class="lineCov"> 416 : return;</span> +<span class="lineNum"> 53 </span> : : } +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : /* Function to generate a header checksum. +<a name="56"><span class="lineNum"> 56 </span> : : */</a> +<span class="lineNum"> 57 </span> : : unsigned short +<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : chksum(unsigned short *buf, int nbytes)</span> +<span class="lineNum"> 59 </span> : : { +<span class="lineNum"> 60 </span> : : unsigned int sum; +<span class="lineNum"> 61 </span> : : unsigned short oddbyte; +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : sum = 0;</span> +<span class="lineNum"> 64 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (nbytes &gt; 1)</span> +<span class="lineNum"> 65 </span> : : { +<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : sum += *buf++;</span> +<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : nbytes -= 2;</span> +<span class="lineNum"> 68 </span> : : } +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (nbytes == 1)</span> +<span class="lineNum"> 71 </span> : : { +<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : oddbyte = 0;</span> +<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : *((unsigned short *) &amp;oddbyte) = *(unsigned short *) buf;</span> +<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : sum += oddbyte;</span> +<span class="lineNum"> 75 </span> : : } +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : sum = (sum &gt;&gt; 16) + (sum &amp; 0xffff);</span> +<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : sum += (sum &gt;&gt; 16);</span> +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : return (unsigned short) ~sum;</span> +<span class="lineNum"> 81 </span> : : } +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> : : /* Send the SPA data via UDP packet. +<a name="84"><span class="lineNum"> 84 </span> : : */</a> +<span class="lineNum"> 85 </span> : : static int +<span class="lineNum"> 86 </span> :<span class="lineCov"> 349 : send_spa_packet_tcp_or_udp(const char *spa_data, const int sd_len,</span> +<span class="lineNum"> 87 </span> : : const fko_cli_options_t *options) +<span class="lineNum"> 88 </span> : : { +<span class="lineNum"> 89 </span> :<span class="lineCov"> 349 : int sock=-1, sock_success=0, res=0, error;</span> +<span class="lineNum"> 90 </span> :<span class="lineCov"> 349 : struct addrinfo *result=NULL, *rp, hints;</span> +<span class="lineNum"> 91 </span> :<span class="lineCov"> 349 : char port_str[MAX_PORT_STR_LEN+1] = {0};</span> +<span class="lineNum"> 92 </span> : : +<span class="lineNum"> 93 </span> [<span class="branchCov" title="Branch 0 was taken 349 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 349 : if (options-&gt;test)</span> +<span class="lineNum"> 94 </span> : : { +<span class="lineNum"> 95 </span> :<span class="lineCov"> 349 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 96 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); +<span class="lineNum"> 97 </span> :<span class="lineCov"> 349 : return res;</span> +<span class="lineNum"> 98 </span> : : } +<span class="lineNum"> 99 </span> : : +<span class="lineNum"> 100 </span> : : memset(&amp;hints, 0, sizeof(struct addrinfo)); +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> : : hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_proto == FKO_PROTO_UDP)</span> +<span class="lineNum"> 105 </span> : : { +<span class="lineNum"> 106 </span> : : /* Send the SPA data packet via an single UDP packet - this is the +<span class="lineNum"> 107 </span> : : * most common usage. +<span class="lineNum"> 108 </span> : : */ +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : hints.ai_socktype = SOCK_DGRAM;</span> +<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : hints.ai_protocol = IPPROTO_UDP;</span> +<span class="lineNum"> 111 </span> : : } +<span class="lineNum"> 112 </span> : : else +<span class="lineNum"> 113 </span> : : { +<span class="lineNum"> 114 </span> : : /* Send the SPA data packet via an established TCP connection. +<span class="lineNum"> 115 </span> : : */ +<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : hints.ai_socktype = SOCK_STREAM;</span> +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : hints.ai_protocol = IPPROTO_TCP;</span> +<span class="lineNum"> 118 </span> : : } +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : snprintf(port_str, MAX_PORT_STR_LEN+1, &quot;%d&quot;, options-&gt;spa_dst_port);</span> +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> : : #if AFL_FUZZING +<span class="lineNum"> 123 </span> : : /* Make sure to never send SPA packets under AFL fuzzing cycles +<span class="lineNum"> 124 </span> : : */ +<span class="lineNum"> 125 </span> : : log_msg(LOG_VERBOSITY_NORMAL, +<span class="lineNum"> 126 </span> : : &quot;AFL fuzzing enabled, SPA packet not actually sent.&quot;); +<span class="lineNum"> 127 </span> : : return res; +<span class="lineNum"> 128 </span> : : #endif +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : error = getaddrinfo(options-&gt;spa_server_str, port_str, &amp;hints, &amp;result);</span> +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (error != 0)</span> +<span class="lineNum"> 133 </span> : : { +<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;error in getaddrinfo: %s&quot;, gai_strerror(error));</span> +<span class="lineNum"> 135 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 136 </span> : : } +<span class="lineNum"> 137 </span> : : +<span class="lineNum"> 138 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (rp = result; rp != NULL; rp = rp-&gt;ai_next) {</span> +<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : sock = socket(rp-&gt;ai_family, rp-&gt;ai_socktype,</span> +<span class="lineNum"> 140 </span> : : rp-&gt;ai_protocol); +<span class="lineNum"> 141 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((error = (connect(sock, rp-&gt;ai_addr, rp-&gt;ai_addrlen) != -1)))</span> +<span class="lineNum"> 145 </span> : : { +<span class="lineNum"> 146 </span> : : sock_success = 1; +<span class="lineNum"> 147 </span> : : break; /* made it */ +<span class="lineNum"> 148 </span> : : } +<span class="lineNum"> 149 </span> : : else /* close the open socket if there was a connect error */ +<span class="lineNum"> 150 </span> : : { +<span class="lineNum"> 151 </span> : : #ifdef WIN32 +<span class="lineNum"> 152 </span> : : closesocket(sock); +<span class="lineNum"> 153 </span> : : #else +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : close(sock);</span> +<span class="lineNum"> 155 </span> : : #endif +<span class="lineNum"> 156 </span> : : } +<span class="lineNum"> 157 </span> : : } +<span class="lineNum"> 158 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(result != NULL)</span> +<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : freeaddrinfo(result);</span> +<span class="lineNum"> 160 </span> : : +<span class="lineNum"> 161 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! sock_success) {</span> +<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 163 </span> : : &quot;send_spa_packet_tcp_or_udp: Could not create socket: &quot;, +<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 166 </span> : : } +<span class="lineNum"> 167 </span> : : +<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : res = send(sock, spa_data, sd_len, 0);</span> +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> +<span class="lineNum"> 171 </span> : : { +<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_or_udp: write error: &quot;, strerror(errno));</span> +<span class="lineNum"> 173 </span> : : } +<span class="lineNum"> 174 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len)</span> +<span class="lineNum"> 175 </span> : : { +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 177 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, +<span class="lineNum"> 178 </span> : : res, sd_len +<span class="lineNum"> 179 </span> : : ); +<span class="lineNum"> 180 </span> : : } +<span class="lineNum"> 181 </span> : : +<span class="lineNum"> 182 </span> : : #ifdef WIN32 +<span class="lineNum"> 183 </span> : : closesocket(sock); +<span class="lineNum"> 184 </span> : : #else +<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : close(sock);</span> +<span class="lineNum"> 186 </span> : : #endif +<span class="lineNum"> 187 </span> : : +<span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 189 </span> : : } +<span class="lineNum"> 190 </span> : : +<span class="lineNum"> 191 </span> : : /* Send the SPA data via raw TCP packet. +<a name="192"><span class="lineNum"> 192 </span> : : */</a> +<span class="lineNum"> 193 </span> : : static int +<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : send_spa_packet_tcp_raw(const char *spa_data, const int sd_len,</span> +<span class="lineNum"> 195 </span> : : const struct sockaddr_in *saddr, const struct sockaddr_in *daddr, +<span class="lineNum"> 196 </span> : : const fko_cli_options_t *options) +<span class="lineNum"> 197 </span> : : { +<span class="lineNum"> 198 </span> : : #ifdef WIN32 +<span class="lineNum"> 199 </span> : : log_msg(LOG_VERBOSITY_ERROR, +<span class="lineNum"> 200 </span> : : &quot;send_spa_packet_tcp_raw: raw packets are not yet supported.&quot;); +<span class="lineNum"> 201 </span> : : return(-1); +<span class="lineNum"> 202 </span> : : #else +<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : int sock, res = 0;</span> +<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : char pkt_data[2048] = {0}; /* Should be enough for our purposes */</span> +<span class="lineNum"> 205 </span> : : +<span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : struct iphdr *iph = (struct iphdr *) pkt_data;</span> +<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : struct tcphdr *tcph = (struct tcphdr *) (pkt_data + sizeof (struct iphdr));</span> +<span class="lineNum"> 208 </span> : : +<span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : int hdrlen = sizeof(struct iphdr) + sizeof(struct tcphdr);</span> +<span class="lineNum"> 210 </span> : : +<span class="lineNum"> 211 </span> : : /* Values for setsockopt. +<span class="lineNum"> 212 </span> : : */ +<span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : int one = 1;</span> +<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : const int *so_val = &amp;one;</span> +<span class="lineNum"> 215 </span> : : +<span class="lineNum"> 216 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;test)</span> +<span class="lineNum"> 217 </span> : : { +<span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 219 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); +<span class="lineNum"> 220 </span> : : return res; +<span class="lineNum"> 221 </span> : : } +<span class="lineNum"> 222 </span> : : +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);</span> +<span class="lineNum"> 224 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> +<span class="lineNum"> 225 </span> : : { +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_raw: create socket: &quot;, strerror(errno));</span> +<span class="lineNum"> 227 </span> : : return(sock); +<span class="lineNum"> 228 </span> : : } +<span class="lineNum"> 229 </span> : : +<span class="lineNum"> 230 </span> : : /* Put the spa data in place. +<span class="lineNum"> 231 </span> : : */ +<span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : memcpy((pkt_data + hdrlen), spa_data, sd_len);</span> +<span class="lineNum"> 233 </span> : : +<span class="lineNum"> 234 </span> : : /* Construct our own header by filling in the ip/tcp header values, +<span class="lineNum"> 235 </span> : : * starting with the IP header values. +<span class="lineNum"> 236 </span> : : */ +<span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : iph-&gt;ihl = 5;</span> +<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : iph-&gt;version = 4;</span> +<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : iph-&gt;tos = 0;</span> +<span class="lineNum"> 240 </span> : : /* Total size is header plus payload */ +<span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : iph-&gt;tot_len = hdrlen + sd_len;</span> +<span class="lineNum"> 242 </span> : : /* The value here does not matter */ +<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : iph-&gt;id = random() &amp; 0xffff;</span> +<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : iph-&gt;frag_off = 0;</span> +<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : iph-&gt;ttl = RAW_SPA_TTL;</span> +<span class="lineNum"> 246 </span> :<span class="lineNoCov"> 0 : iph-&gt;protocol = IPPROTO_TCP;</span> +<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = 0;</span> +<span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : iph-&gt;saddr = saddr-&gt;sin_addr.s_addr;</span> +<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : iph-&gt;daddr = daddr-&gt;sin_addr.s_addr;</span> +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> : : /* Now the TCP header values. +<span class="lineNum"> 252 </span> : : */ +<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : tcph-&gt;source = saddr-&gt;sin_port;</span> +<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : tcph-&gt;dest = daddr-&gt;sin_port;</span> +<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : tcph-&gt;seq = htonl(1);</span> +<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : tcph-&gt;ack_seq = 0;</span> +<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : tcph-&gt;doff = 5;</span> +<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : tcph-&gt;res1 = 0;</span> +<span class="lineNum"> 259 </span> : : /* TCP flags */ +<span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : tcph-&gt;fin = 0;</span> +<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : tcph-&gt;syn = 1;</span> +<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : tcph-&gt;rst = 0;</span> +<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : tcph-&gt;psh = 0;</span> +<span class="lineNum"> 264 </span> :<span class="lineNoCov"> 0 : tcph-&gt;ack = 0;</span> +<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : tcph-&gt;urg = 0;</span> +<span class="lineNum"> 266 </span> : : +<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : tcph-&gt;res2 = 0;</span> +<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : tcph-&gt;window = htons(32767);</span> +<span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : tcph-&gt;check = 0;</span> +<span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : tcph-&gt;urg_ptr = 0;</span> +<span class="lineNum"> 271 </span> : : +<span class="lineNum"> 272 </span> : : /* No we can compute our checksum. +<span class="lineNum"> 273 </span> : : */ +<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = chksum((unsigned short *)pkt_data, iph-&gt;tot_len);</span> +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> : : /* Make sure the kernel knows the header is included in the data so it +<span class="lineNum"> 277 </span> : : * doesn't try to insert its own header into the packet. +<span class="lineNum"> 278 </span> : : */ +<span class="lineNum"> 279 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, so_val, sizeof(one)) &lt; 0)</span> +<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_raw: setsockopt HDRINCL: &quot;, strerror(errno));</span> +<span class="lineNum"> 281 </span> : : +<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : res = sendto (sock, pkt_data, iph-&gt;tot_len, 0,</span> +<span class="lineNum"> 283 </span> : : (struct sockaddr *)daddr, sizeof(*daddr)); +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> +<span class="lineNum"> 286 </span> : : { +<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_raw: sendto error: &quot;, strerror(errno));</span> +<span class="lineNum"> 288 </span> : : } +<span class="lineNum"> 289 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len + hdrlen) /* account for the header ?*/</span> +<span class="lineNum"> 290 </span> : : { +<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 292 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, +<span class="lineNum"> 293 </span> : : res, sd_len +<span class="lineNum"> 294 </span> : : ); +<span class="lineNum"> 295 </span> : : } +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : close(sock);</span> +<span class="lineNum"> 298 </span> : : +<span class="lineNum"> 299 </span> : : return(res); +<span class="lineNum"> 300 </span> : : +<span class="lineNum"> 301 </span> : : #endif /* !WIN32 */ +<span class="lineNum"> 302 </span> : : } +<span class="lineNum"> 303 </span> : : +<span class="lineNum"> 304 </span> : : /* Send the SPA data via raw UDP packet. +<a name="305"><span class="lineNum"> 305 </span> : : */</a> +<span class="lineNum"> 306 </span> : : static int +<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : send_spa_packet_udp_raw(const char *spa_data, const int sd_len,</span> +<span class="lineNum"> 308 </span> : : const struct sockaddr_in *saddr, const struct sockaddr_in *daddr, +<span class="lineNum"> 309 </span> : : const fko_cli_options_t *options) +<span class="lineNum"> 310 </span> : : { +<span class="lineNum"> 311 </span> : : #ifdef WIN32 +<span class="lineNum"> 312 </span> : : log_msg(LOG_VERBOSITY_ERROR, +<span class="lineNum"> 313 </span> : : &quot;send_spa_packet_udp_raw: raw packets are not yet supported.&quot;); +<span class="lineNum"> 314 </span> : : return(-1); +<span class="lineNum"> 315 </span> : : #else +<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : int sock, res = 0;</span> +<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : char pkt_data[2048] = {0}; /* Should be enough for our purposes */</span> +<span class="lineNum"> 318 </span> : : +<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : struct iphdr *iph = (struct iphdr *) pkt_data;</span> +<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : struct udphdr *udph = (struct udphdr *) (pkt_data + sizeof (struct iphdr));</span> +<span class="lineNum"> 321 </span> : : +<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : int hdrlen = sizeof(struct iphdr) + sizeof(struct udphdr);</span> +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> : : /* Values for setsockopt. +<span class="lineNum"> 325 </span> : : */ +<span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : int one = 1;</span> +<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : const int *so_val = &amp;one;</span> +<span class="lineNum"> 328 </span> : : +<span class="lineNum"> 329 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;test)</span> +<span class="lineNum"> 330 </span> : : { +<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 332 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); +<span class="lineNum"> 333 </span> : : return res; +<span class="lineNum"> 334 </span> : : } +<span class="lineNum"> 335 </span> : : +<span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);</span> +<span class="lineNum"> 337 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> +<span class="lineNum"> 338 </span> : : { +<span class="lineNum"> 339 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_udp_raw: create socket: &quot;, strerror(errno));</span> +<span class="lineNum"> 340 </span> : : return(sock); +<span class="lineNum"> 341 </span> : : } +<span class="lineNum"> 342 </span> : : +<span class="lineNum"> 343 </span> : : /* Put the spa data in place. +<span class="lineNum"> 344 </span> : : */ +<span class="lineNum"> 345 </span> :<span class="lineNoCov"> 0 : memcpy((pkt_data + hdrlen), spa_data, sd_len);</span> +<span class="lineNum"> 346 </span> : : +<span class="lineNum"> 347 </span> : : /* Construct our own header by filling in the ip/udp header values, +<span class="lineNum"> 348 </span> : : * starting with the IP header values. +<span class="lineNum"> 349 </span> : : */ +<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : iph-&gt;ihl = 5;</span> +<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : iph-&gt;version = 4;</span> +<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : iph-&gt;tos = 0;</span> +<span class="lineNum"> 353 </span> : : /* Total size is header plus payload */ +<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : iph-&gt;tot_len = hdrlen + sd_len;</span> +<span class="lineNum"> 355 </span> : : /* The value here does not matter */ +<span class="lineNum"> 356 </span> :<span class="lineNoCov"> 0 : iph-&gt;id = random() &amp; 0xffff;</span> +<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : iph-&gt;frag_off = 0;</span> +<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : iph-&gt;ttl = RAW_SPA_TTL;</span> +<span class="lineNum"> 359 </span> :<span class="lineNoCov"> 0 : iph-&gt;protocol = IPPROTO_UDP;</span> +<span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = 0;</span> +<span class="lineNum"> 361 </span> :<span class="lineNoCov"> 0 : iph-&gt;saddr = saddr-&gt;sin_addr.s_addr;</span> +<span class="lineNum"> 362 </span> :<span class="lineNoCov"> 0 : iph-&gt;daddr = daddr-&gt;sin_addr.s_addr;</span> +<span class="lineNum"> 363 </span> : : +<span class="lineNum"> 364 </span> : : /* Now the UDP header values. +<span class="lineNum"> 365 </span> : : */ +<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : udph-&gt;source = saddr-&gt;sin_port;</span> +<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : udph-&gt;dest = daddr-&gt;sin_port;</span> +<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : udph-&gt;check = 0;</span> +<span class="lineNum"> 369 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : udph-&gt;len = htons(sd_len + sizeof(struct udphdr));</span> +<span class="lineNum"> 370 </span> : : +<span class="lineNum"> 371 </span> : : /* No we can compute our checksum. +<span class="lineNum"> 372 </span> : : */ +<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = chksum((unsigned short *)pkt_data, iph-&gt;tot_len);</span> +<span class="lineNum"> 374 </span> : : +<span class="lineNum"> 375 </span> : : /* Make sure the kernel knows the header is included in the data so it +<span class="lineNum"> 376 </span> : : * doesn't try to insert its own header into the packet. +<span class="lineNum"> 377 </span> : : */ +<span class="lineNum"> 378 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, so_val, sizeof(one)) &lt; 0)</span> +<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_udp_raw: setsockopt HDRINCL: &quot;, strerror(errno));</span> +<span class="lineNum"> 380 </span> : : +<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : res = sendto (sock, pkt_data, iph-&gt;tot_len, 0,</span> +<span class="lineNum"> 382 </span> : : (struct sockaddr *)daddr, sizeof(*daddr)); +<span class="lineNum"> 383 </span> : : +<span class="lineNum"> 384 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> +<span class="lineNum"> 385 </span> : : { +<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_udp_raw: sendto error: &quot;, strerror(errno));</span> +<span class="lineNum"> 387 </span> : : } +<span class="lineNum"> 388 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len + hdrlen) /* account for the header ?*/</span> +<span class="lineNum"> 389 </span> : : { +<span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> +<span class="lineNum"> 391 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, +<span class="lineNum"> 392 </span> : : res, sd_len +<span class="lineNum"> 393 </span> : : ); +<span class="lineNum"> 394 </span> : : } +<span class="lineNum"> 395 </span> : : +<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : close(sock);</span> +<span class="lineNum"> 397 </span> : : +<span class="lineNum"> 398 </span> : : return(res); +<span class="lineNum"> 399 </span> : : +<span class="lineNum"> 400 </span> : : #endif /* !WIN32 */ +<span class="lineNum"> 401 </span> : : } +<span class="lineNum"> 402 </span> : : +<span class="lineNum"> 403 </span> : : /* Send the SPA data via ICMP packet. +<a name="404"><span class="lineNum"> 404 </span> : : */</a> +<span class="lineNum"> 405 </span> : : static int +<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : send_spa_packet_icmp(const char *spa_data, const int sd_len,</span> +<span class="lineNum"> 407 </span> : : const struct sockaddr_in *saddr, const struct sockaddr_in *daddr, +<span class="lineNum"> 408 </span> : : const fko_cli_options_t *options) +<span class="lineNum"> 409 </span> : : { +<span class="lineNum"> 410 </span> : : #ifdef WIN32 +<span class="lineNum"> 411 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: raw packets are not yet supported.&quot;); +<span class="lineNum"> 412 </span> : : return(-1); +<span class="lineNum"> 413 </span> : : #else +<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : int res = 0, sock;</span> +<span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : char pkt_data[2048] = {0};</span> +<span class="lineNum"> 416 </span> : : +<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : struct iphdr *iph = (struct iphdr *) pkt_data;</span> +<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : struct icmphdr *icmph = (struct icmphdr *) (pkt_data + sizeof (struct iphdr));</span> +<span class="lineNum"> 419 </span> : : +<span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : int hdrlen = sizeof(struct iphdr) + sizeof(struct icmphdr);</span> +<span class="lineNum"> 421 </span> : : +<span class="lineNum"> 422 </span> : : /* Values for setsockopt. +<span class="lineNum"> 423 </span> : : */ +<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : int one = 1;</span> +<span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : const int *so_val = &amp;one;</span> +<span class="lineNum"> 426 </span> : : +<span class="lineNum"> 427 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;test)</span> +<span class="lineNum"> 428 </span> : : { +<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 430 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); +<span class="lineNum"> 431 </span> : : return res; +<span class="lineNum"> 432 </span> : : } +<span class="lineNum"> 433 </span> : : +<span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);</span> +<span class="lineNum"> 435 </span> : : +<span class="lineNum"> 436 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> +<span class="lineNum"> 437 </span> : : { +<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: create socket: &quot;, strerror(errno));</span> +<span class="lineNum"> 439 </span> : : return(sock); +<span class="lineNum"> 440 </span> : : } +<span class="lineNum"> 441 </span> : : +<span class="lineNum"> 442 </span> : : /* Put the spa data in place. +<span class="lineNum"> 443 </span> : : */ +<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : memcpy((pkt_data + hdrlen), spa_data, sd_len);</span> +<span class="lineNum"> 445 </span> : : +<span class="lineNum"> 446 </span> : : /* Construct our own header by filling in the ip/icmp header values, +<span class="lineNum"> 447 </span> : : * starting with the IP header values. +<span class="lineNum"> 448 </span> : : */ +<span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : iph-&gt;ihl = 5;</span> +<span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : iph-&gt;version = 4;</span> +<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : iph-&gt;tos = 0;</span> +<span class="lineNum"> 452 </span> : : /* Total size is header plus payload */ +<span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : iph-&gt;tot_len = hdrlen + sd_len;</span> +<span class="lineNum"> 454 </span> : : /* The value here does not matter */ +<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : iph-&gt;id = random() &amp; 0xffff;</span> +<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : iph-&gt;frag_off = 0;</span> +<span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : iph-&gt;ttl = RAW_SPA_TTL;</span> +<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : iph-&gt;protocol = IPPROTO_ICMP;</span> +<span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = 0;</span> +<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : iph-&gt;saddr = saddr-&gt;sin_addr.s_addr;</span> +<span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : iph-&gt;daddr = daddr-&gt;sin_addr.s_addr;</span> +<span class="lineNum"> 462 </span> : : +<span class="lineNum"> 463 </span> : : /* Now the ICMP header values. +<span class="lineNum"> 464 </span> : : */ +<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : icmph-&gt;type = options-&gt;spa_icmp_type;</span> +<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : icmph-&gt;code = options-&gt;spa_icmp_code;</span> +<span class="lineNum"> 467 </span> :<span class="lineNoCov"> 0 : icmph-&gt;checksum = 0;</span> +<span class="lineNum"> 468 </span> : : +<span class="lineNum"> 469 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(icmph-&gt;type == ICMP_ECHO &amp;&amp; icmph-&gt;code == 0)</span> +<span class="lineNum"> 470 </span> : : { +<span class="lineNum"> 471 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : icmph-&gt;un.echo.id = htons(random() &amp; 0xffff);</span> +<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : icmph-&gt;un.echo.sequence = htons(1);</span> +<span class="lineNum"> 473 </span> : : } +<span class="lineNum"> 474 </span> : : +<span class="lineNum"> 475 </span> : : /* No we can compute our checksum. +<span class="lineNum"> 476 </span> : : */ +<span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = chksum((unsigned short *)pkt_data, iph-&gt;tot_len);</span> +<span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : icmph-&gt;checksum = chksum((unsigned short *)icmph, sizeof(struct icmphdr) + sd_len);</span> +<span class="lineNum"> 479 </span> : : +<span class="lineNum"> 480 </span> : : /* Make sure the kernel knows the header is included in the data so it +<span class="lineNum"> 481 </span> : : * doesn't try to insert its own header into the packet. +<span class="lineNum"> 482 </span> : : */ +<span class="lineNum"> 483 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, so_val, sizeof(one)) &lt; 0)</span> +<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: setsockopt HDRINCL: &quot;, strerror(errno));</span> +<span class="lineNum"> 485 </span> : : +<span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : res = sendto (sock, pkt_data, iph-&gt;tot_len, 0,</span> +<span class="lineNum"> 487 </span> : : (struct sockaddr *)daddr, sizeof(*daddr)); +<span class="lineNum"> 488 </span> : : +<span class="lineNum"> 489 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> +<span class="lineNum"> 490 </span> : : { +<span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: sendto error: &quot;, strerror(errno));</span> +<span class="lineNum"> 492 </span> : : } +<span class="lineNum"> 493 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len + hdrlen) /* account for icmp header */</span> +<span class="lineNum"> 494 </span> : : { +<span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;,</span> +<span class="lineNum"> 496 </span> : : res, sd_len); +<span class="lineNum"> 497 </span> : : } +<span class="lineNum"> 498 </span> : : +<span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : close(sock);</span> +<span class="lineNum"> 500 </span> : : +<span class="lineNum"> 501 </span> : : return(res); +<span class="lineNum"> 502 </span> : : +<span class="lineNum"> 503 </span> : : #endif /* !WIN32 */ +<span class="lineNum"> 504 </span> : : } +<span class="lineNum"> 505 </span> : : +<span class="lineNum"> 506 </span> : : /* Send the SPA data packet via an HTTP request +<a name="507"><span class="lineNum"> 507 </span> : : */</a> +<span class="lineNum"> 508 </span> : : static int +<span class="lineNum"> 509 </span> :<span class="lineCov"> 67 : send_spa_packet_http(const char *spa_data, const int sd_len,</span> +<span class="lineNum"> 510 </span> : : fko_cli_options_t *options) +<span class="lineNum"> 511 </span> : : { +<span class="lineNum"> 512 </span> :<span class="lineCov"> 67 : char http_buf[HTTP_MAX_REQUEST_LEN] = {0}, *spa_data_copy = NULL;</span> +<span class="lineNum"> 513 </span> :<span class="lineCov"> 67 : char *ndx = options-&gt;http_proxy;</span> +<span class="lineNum"> 514 </span> :<span class="lineCov"> 67 : int i, proxy_port = 0, is_err;</span> +<span class="lineNum"> 515 </span> : : +<span class="lineNum"> 516 </span> :<span class="lineCov"> 67 : spa_data_copy = malloc(sd_len+1);</span> +<span class="lineNum"> 517 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 67 : if (spa_data_copy == NULL)</span> +<span class="lineNum"> 518 </span> : : { +<span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Fatal, could not allocate memory.&quot;);</span> +<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 521 </span> : : } +<span class="lineNum"> 522 </span> :<span class="lineCov"> 67 : memcpy(spa_data_copy, spa_data, sd_len+1);</span> +<span class="lineNum"> 523 </span> : : +<span class="lineNum"> 524 </span> : : /* Change &quot;+&quot; to &quot;-&quot;, and &quot;/&quot; to &quot;_&quot; for HTTP requests (the server +<span class="lineNum"> 525 </span> : : * side will translate these back before decrypting) +<span class="lineNum"> 526 </span> : : */ +<span class="lineNum"> 527 </span> [<span class="branchCov" title="Branch 0 was taken 12687 times"> + </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 12754 : for (i=0; i &lt; sd_len; i++) {</span> +<span class="lineNum"> 528 </span> [<span class="branchCov" title="Branch 0 was taken 232 times"> + </span><span class="branchCov" title="Branch 1 was taken 12455 times"> + </span>]:<span class="lineCov"> 12687 : if (spa_data_copy[i] == '+') {</span> +<span class="lineNum"> 529 </span> :<span class="lineCov"> 232 : spa_data_copy[i] = '-';</span> +<span class="lineNum"> 530 </span> : : } +<span class="lineNum"> 531 </span> [<span class="branchCov" title="Branch 0 was taken 191 times"> + </span><span class="branchCov" title="Branch 1 was taken 12264 times"> + </span>]:<span class="lineCov"> 12455 : else if (spa_data_copy[i] == '/') {</span> +<span class="lineNum"> 532 </span> :<span class="lineCov"> 191 : spa_data_copy[i] = '_';</span> +<span class="lineNum"> 533 </span> : : } +<span class="lineNum"> 534 </span> : : } +<span class="lineNum"> 535 </span> : : +<span class="lineNum"> 536 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : if(options-&gt;http_proxy[0] == 0x0)</span> +<span class="lineNum"> 537 </span> : : { +<span class="lineNum"> 538 </span> : : snprintf(http_buf, HTTP_MAX_REQUEST_LEN, +<span class="lineNum"> 539 </span> : : &quot;GET /%s HTTP/1.0\r\nUser-Agent: %s\r\nAccept: */*\r\n&quot; +<span class="lineNum"> 540 </span> : : &quot;Host: %s\r\nConnection: close\r\n\r\n&quot;, +<span class="lineNum"> 541 </span> : : spa_data_copy, +<span class="lineNum"> 542 </span> :<span class="lineCov"> 67 : options-&gt;http_user_agent,</span> +<span class="lineNum"> 543 </span> :<span class="lineCov"> 67 : options-&gt;spa_server_str /* hostname or IP */</span> +<span class="lineNum"> 544 </span> : : ); +<span class="lineNum"> 545 </span> : : } +<span class="lineNum"> 546 </span> : : else /* we are sending the SPA packet through an HTTP proxy */ +<span class="lineNum"> 547 </span> : : { +<span class="lineNum"> 548 </span> : : /* Extract the hostname if it was specified as a URL. Actually, +<span class="lineNum"> 549 </span> : : * we just move the start of the hostname to the begining of the +<span class="lineNum"> 550 </span> : : * original string. +<span class="lineNum"> 551 </span> : : */ +<span class="lineNum"> 552 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(ndx, &quot;http://&quot;, 7) == 0)</span> +<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : memmove(ndx, ndx+7, strlen(ndx)+1);</span> +<span class="lineNum"> 554 </span> : : +<span class="lineNum"> 555 </span> : : /* If there is a colon assume the proxy hostame or IP is on the left +<span class="lineNum"> 556 </span> : : * and the proxy port is on the right. So we make the : a \0 and +<span class="lineNum"> 557 </span> : : * extract the port value. +<span class="lineNum"> 558 </span> : : */ +<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : ndx = strchr(options-&gt;http_proxy, ':');</span> +<span class="lineNum"> 560 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx)</span> +<span class="lineNum"> 561 </span> : : { +<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : *ndx = '\0';</span> +<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : proxy_port = strtol_wrapper(ndx+1, 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 564 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 565 </span> : : { +<span class="lineNum"> 566 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 567 </span> : : &quot;[-] proxy port value is invalid, must be in [%d-%d]&quot;, +<span class="lineNum"> 568 </span> : : 1, MAX_PORT); +<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : free(spa_data_copy);</span> +<span class="lineNum"> 570 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 571 </span> : : } +<span class="lineNum"> 572 </span> : : } +<span class="lineNum"> 573 </span> : : +<span class="lineNum"> 574 </span> : : /* If we have a valid port value, use it. +<span class="lineNum"> 575 </span> : : */ +<span class="lineNum"> 576 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(proxy_port)</span> +<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_dst_port = proxy_port;</span> +<span class="lineNum"> 578 </span> : : +<span class="lineNum"> 579 </span> : : snprintf(http_buf, HTTP_MAX_REQUEST_LEN, +<span class="lineNum"> 580 </span> : : &quot;GET http://%s/%s HTTP/1.0\r\nUser-Agent: %s\r\nAccept: */*\r\n&quot; +<span class="lineNum"> 581 </span> : : &quot;Host: %s\r\nConnection: close\r\n\r\n&quot;, +<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_server_str,</span> +<span class="lineNum"> 583 </span> : : spa_data_copy, +<span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : options-&gt;http_user_agent,</span> +<span class="lineNum"> 585 </span> : : options-&gt;http_proxy /* hostname or IP */ +<span class="lineNum"> 586 </span> : : ); +<span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spa_server_str, options-&gt;http_proxy,</span> +<span class="lineNum"> 588 </span> : : sizeof(options-&gt;spa_server_str)); +<span class="lineNum"> 589 </span> : : } +<span class="lineNum"> 590 </span> :<span class="lineCov"> 67 : free(spa_data_copy);</span> +<span class="lineNum"> 591 </span> : : +<span class="lineNum"> 592 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : if (options-&gt;test)</span> +<span class="lineNum"> 593 </span> : : { +<span class="lineNum"> 594 </span> :<span class="lineCov"> 67 : log_msg(LOG_VERBOSITY_INFO, &quot;%s&quot;, http_buf);</span> +<span class="lineNum"> 595 </span> : : +<span class="lineNum"> 596 </span> :<span class="lineCov"> 67 : log_msg(LOG_VERBOSITY_NORMAL,</span> +<span class="lineNum"> 597 </span> : : &quot;Test mode enabled, SPA packet not actually sent.&quot;); +<span class="lineNum"> 598 </span> :<span class="lineCov"> 67 : return 0;</span> +<span class="lineNum"> 599 </span> : : } +<span class="lineNum"> 600 </span> : : +<span class="lineNum"> 601 </span> : : /* In AFL fuzzing mode, the following function will not send +<span class="lineNum"> 602 </span> : : * the SPA packet. +<span class="lineNum"> 603 </span> : : */ +<span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : return send_spa_packet_tcp_or_udp(http_buf, strlen(http_buf), options);</span> +<span class="lineNum"> 605 </span> : : } +<span class="lineNum"> 606 </span> : : +<span class="lineNum"> 607 </span> : : /* Function used to send the SPA data. +<a name="608"><span class="lineNum"> 608 </span> : : */</a> +<span class="lineNum"> 609 </span> : : int +<span class="lineNum"> 610 </span> :<span class="lineCov"> 416 : send_spa_packet(fko_ctx_t ctx, fko_cli_options_t *options)</span> +<span class="lineNum"> 611 </span> : : { +<span class="lineNum"> 612 </span> : : int res, sd_len; +<span class="lineNum"> 613 </span> : : char *spa_data; +<span class="lineNum"> 614 </span> : : struct sockaddr_in saddr, daddr; +<span class="lineNum"> 615 </span> :<span class="lineCov"> 416 : char ip_str[INET_ADDRSTRLEN] = {0}; /* String used to contain the ip addres of an hostname */</span> +<span class="lineNum"> 616 </span> : : struct addrinfo hints; /* Structure used to set hints to resolve hostname */ +<span class="lineNum"> 617 </span> : : #ifdef WIN32 +<span class="lineNum"> 618 </span> : : WSADATA wsa_data; +<span class="lineNum"> 619 </span> : : #endif +<span class="lineNum"> 620 </span> : : +<span class="lineNum"> 621 </span> : : /* Initialize the hint buffer */ +<span class="lineNum"> 622 </span> : : memset(&amp;hints, 0 , sizeof(hints)); +<span class="lineNum"> 623 </span> : : +<span class="lineNum"> 624 </span> : : /* Get our spa data here. +<span class="lineNum"> 625 </span> : : */ +<span class="lineNum"> 626 </span> :<span class="lineCov"> 416 : res = fko_get_spa_data(ctx, &amp;spa_data);</span> +<span class="lineNum"> 627 </span> : : +<span class="lineNum"> 628 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 629 </span> : : { +<span class="lineNum"> 630 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 631 </span> : : &quot;send_spa_packet: Error #%i from fko_get_spa_data: %s&quot;, +<span class="lineNum"> 632 </span> : : res, fko_errstr(res) +<span class="lineNum"> 633 </span> : : ); +<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 635 </span> : : } +<span class="lineNum"> 636 </span> : : +<span class="lineNum"> 637 </span> :<span class="lineCov"> 416 : sd_len = strlen(spa_data);</span> +<span class="lineNum"> 638 </span> : : +<span class="lineNum"> 639 </span> : : #ifdef WIN32 +<span class="lineNum"> 640 </span> : : /* Winsock needs to be initialized... +<span class="lineNum"> 641 </span> : : */ +<span class="lineNum"> 642 </span> : : res = WSAStartup( MAKEWORD(1,1), &amp;wsa_data ); +<span class="lineNum"> 643 </span> : : if( res != 0 ) +<span class="lineNum"> 644 </span> : : { +<span class="lineNum"> 645 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;Winsock initialization error %d&quot;, res ); +<span class="lineNum"> 646 </span> : : return(-1); +<span class="lineNum"> 647 </span> : : } +<span class="lineNum"> 648 </span> : : #endif +<span class="lineNum"> 649 </span> : : +<span class="lineNum"> 650 </span> :<span class="lineCov"> 416 : errno = 0;</span> +<span class="lineNum"> 651 </span> : : +<span class="lineNum"> 652 </span> :<span class="lineCov"> 416 : dump_transmit_options(options);</span> +<span class="lineNum"> 653 </span> : : +<span class="lineNum"> 654 </span> [<span class="branchCov" title="Branch 0 was taken 349 times"> + </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 416 : if (options-&gt;spa_proto == FKO_PROTO_TCP || options-&gt;spa_proto == FKO_PROTO_UDP)</span> +<span class="lineNum"> 655 </span> : : { +<span class="lineNum"> 656 </span> :<span class="lineCov"> 349 : res = send_spa_packet_tcp_or_udp(spa_data, sd_len, options);</span> +<span class="lineNum"> 657 </span> : : } +<span class="lineNum"> 658 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : else if (options-&gt;spa_proto == FKO_PROTO_HTTP)</span> +<span class="lineNum"> 659 </span> : : { +<span class="lineNum"> 660 </span> :<span class="lineCov"> 67 : res = send_spa_packet_http(spa_data, sd_len, options);</span> +<span class="lineNum"> 661 </span> : : } +<span class="lineNum"> 662 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (options-&gt;spa_proto == FKO_PROTO_TCP_RAW</span> +<span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : || options-&gt;spa_proto == FKO_PROTO_UDP_RAW</span> +<span class="lineNum"> 664 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || options-&gt;spa_proto == FKO_PROTO_ICMP)</span> +<span class="lineNum"> 665 </span> : : { +<span class="lineNum"> 666 </span> : : memset(&amp;saddr, 0, sizeof(saddr)); +<span class="lineNum"> 667 </span> : : memset(&amp;daddr, 0, sizeof(daddr)); +<span class="lineNum"> 668 </span> : : +<span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : saddr.sin_family = AF_INET;</span> +<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : daddr.sin_family = AF_INET;</span> +<span class="lineNum"> 671 </span> : : +<span class="lineNum"> 672 </span> : : /* Set source address and port +<span class="lineNum"> 673 </span> : : */ +<span class="lineNum"> 674 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_src_port)</span> +<span class="lineNum"> 675 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : saddr.sin_port = htons(options-&gt;spa_src_port);</span> +<span class="lineNum"> 676 </span> : : else +<span class="lineNum"> 677 </span> : : saddr.sin_port = INADDR_ANY; +<span class="lineNum"> 678 </span> : : +<span class="lineNum"> 679 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spoof_ip_src_str[0] != 0x00) {</span> +<span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : saddr.sin_addr.s_addr = inet_addr(options-&gt;spoof_ip_src_str);</span> +<span class="lineNum"> 681 </span> : : } else +<span class="lineNum"> 682 </span> : : saddr.sin_addr.s_addr = INADDR_ANY; /* default */ +<span class="lineNum"> 683 </span> : : +<span class="lineNum"> 684 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (saddr.sin_addr.s_addr == -1)</span> +<span class="lineNum"> 685 </span> : : { +<span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not set source IP.&quot;);</span> +<span class="lineNum"> 687 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 688 </span> : : } +<span class="lineNum"> 689 </span> : : +<span class="lineNum"> 690 </span> : : /* Set destination port +<span class="lineNum"> 691 </span> : : */ +<span class="lineNum"> 692 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : daddr.sin_port = htons(options-&gt;spa_dst_port);</span> +<span class="lineNum"> 693 </span> : : +<span class="lineNum"> 694 </span> : : /* Set destination address. We use the default protocol to resolve +<span class="lineNum"> 695 </span> : : * the ip address */ +<span class="lineNum"> 696 </span> :<span class="lineNoCov"> 0 : hints.ai_family = AF_INET;</span> +<span class="lineNum"> 697 </span> : : +<span class="lineNum"> 698 </span> : : #if AFL_FUZZING +<span class="lineNum"> 699 </span> : : /* Make sure to never send SPA packets under AFL fuzzing cycles +<span class="lineNum"> 700 </span> : : */ +<span class="lineNum"> 701 </span> : : log_msg(LOG_VERBOSITY_NORMAL, +<span class="lineNum"> 702 </span> : : &quot;AFL fuzzing enabled, SPA packet not actually sent.&quot;); +<span class="lineNum"> 703 </span> : : return res; +<span class="lineNum"> 704 </span> : : #endif +<span class="lineNum"> 705 </span> : : +<span class="lineNum"> 706 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (resolve_dest_adr(options-&gt;spa_server_str, &amp;hints, ip_str, sizeof(ip_str)) != 0)</span> +<span class="lineNum"> 707 </span> : : { +<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Unable to resolve %s as an ip address&quot;,</span> +<span class="lineNum"> 709 </span> : : options-&gt;spa_server_str); +<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 711 </span> : : } +<span class="lineNum"> 712 </span> : : else; +<span class="lineNum"> 713 </span> : : +<span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : daddr.sin_addr.s_addr = inet_addr(ip_str);</span> +<span class="lineNum"> 715 </span> : : +<span class="lineNum"> 716 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_proto == FKO_PROTO_TCP_RAW)</span> +<span class="lineNum"> 717 </span> : : { +<span class="lineNum"> 718 </span> :<span class="lineNoCov"> 0 : res = send_spa_packet_tcp_raw(spa_data, sd_len, &amp;saddr, &amp;daddr, options);</span> +<span class="lineNum"> 719 </span> : : } +<span class="lineNum"> 720 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (options-&gt;spa_proto == FKO_PROTO_UDP_RAW)</span> +<span class="lineNum"> 721 </span> : : { +<span class="lineNum"> 722 </span> :<span class="lineNoCov"> 0 : res = send_spa_packet_udp_raw(spa_data, sd_len, &amp;saddr, &amp;daddr, options);</span> +<span class="lineNum"> 723 </span> : : } +<span class="lineNum"> 724 </span> : : else +<span class="lineNum"> 725 </span> : : { +<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : res = send_spa_packet_icmp(spa_data, sd_len, &amp;saddr, &amp;daddr, options);</span> +<span class="lineNum"> 727 </span> : : } +<span class="lineNum"> 728 </span> : : } +<span class="lineNum"> 729 </span> : : else +<span class="lineNum"> 730 </span> : : { +<span class="lineNum"> 731 </span> : : /* --DSS XXX: What to we really want to do here? */ +<span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;%i is not a valid or supported protocol.&quot;,</span> +<span class="lineNum"> 733 </span> : : options-&gt;spa_proto); +<span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : res = -1;</span> +<span class="lineNum"> 735 </span> : : } +<span class="lineNum"> 736 </span> : : +<span class="lineNum"> 737 </span> :<span class="lineCov"> 416 : return res;</span> +<span class="lineNum"> 738 </span> : : } +<span class="lineNum"> 739 </span> : : +<a name="740"><span class="lineNum"> 740 </span> : : /* Function to write SPA packet data to the filesystem</a> +<span class="lineNum"> 741 </span> : : */ +<span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : int write_spa_packet_data(fko_ctx_t ctx, const fko_cli_options_t *options)</span> +<span class="lineNum"> 743 </span> : : { +<span class="lineNum"> 744 </span> : : FILE *fp; +<span class="lineNum"> 745 </span> : : char *spa_data; +<span class="lineNum"> 746 </span> : : int res; +<span class="lineNum"> 747 </span> : : +<span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_data(ctx, &amp;spa_data);</span> +<span class="lineNum"> 749 </span> : : +<span class="lineNum"> 750 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 751 </span> : : { +<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 753 </span> : : &quot;write_spa_packet_data: Error #%i from fko_get_spa_data: %s&quot;, +<span class="lineNum"> 754 </span> : : res, fko_errstr(res) +<span class="lineNum"> 755 </span> : : ); +<span class="lineNum"> 756 </span> : : +<span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 758 </span> : : } +<span class="lineNum"> 759 </span> : : +<span class="lineNum"> 760 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;save_packet_file_append)</span> +<span class="lineNum"> 761 </span> : : { +<span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : fp = fopen(options-&gt;save_packet_file, &quot;a&quot;);</span> +<span class="lineNum"> 763 </span> : : } +<span class="lineNum"> 764 </span> : : else +<span class="lineNum"> 765 </span> : : { +<span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : unlink(options-&gt;save_packet_file);</span> +<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : fp = fopen(options-&gt;save_packet_file, &quot;w&quot;);</span> +<span class="lineNum"> 768 </span> : : } +<span class="lineNum"> 769 </span> : : +<span class="lineNum"> 770 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fp == NULL)</span> +<span class="lineNum"> 771 </span> : : { +<span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;write_spa_packet_data: &quot;, strerror(errno));</span> +<span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 774 </span> : : } +<span class="lineNum"> 775 </span> : : +<span class="lineNum"> 776 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : fprintf(fp, &quot;%s\n&quot;,</span> +<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : (spa_data == NULL) ? &quot;&lt;NULL&gt;&quot; : spa_data);</span> +<span class="lineNum"> 778 </span> : : +<span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : fclose(fp);</span> +<span class="lineNum"> 780 </span> : : +<span class="lineNum"> 781 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 782 </span> : : } +<span class="lineNum"> 783 </span> : : +<span class="lineNum"> 784 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html new file mode 100644 index 00000000..6dd192cd --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html @@ -0,0 +1,113 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/utils.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">23</td> + <td class="headerCovTableEntry">79</td> + <td class="headerCovTableEntryLo">29.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntryLo">37.5 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">52</td> + <td class="headerCovTableEntryLo">21.2 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="utils.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#257">proto_strtoint</a></td> + <td class="coverFnHi">3306</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#58">verify_file_perms_ownership</a></td> + <td class="coverFnHi">2890</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#225">proto_inttostr</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#309">strtoargv</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#277">add_argv.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#159">resolve_dest_adr</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#352">free_argv</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#135">get_in_addr</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html new file mode 100644 index 00000000..8f796204 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html @@ -0,0 +1,113 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/utils.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">23</td> + <td class="headerCovTableEntry">79</td> + <td class="headerCovTableEntryLo">29.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntryLo">37.5 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">52</td> + <td class="headerCovTableEntryLo">21.2 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="utils.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#277">add_argv.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#352">free_argv</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#135">get_in_addr</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#225">proto_inttostr</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#257">proto_strtoint</a></td> + <td class="coverFnHi">3306</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#159">resolve_dest_adr</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#309">strtoargv</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#58">verify_file_perms_ownership</a></td> + <td class="coverFnHi">2890</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html new file mode 100644 index 00000000..e5bd922f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html @@ -0,0 +1,456 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/utils.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - utils.c<span style="font-size: 80%;"> (source / <a href="utils.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">23</td> + <td class="headerCovTableEntry">79</td> + <td class="headerCovTableEntryLo">29.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntryLo">37.5 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">52</td> + <td class="headerCovTableEntryLo">21.2 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: utils.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: General/Generic functions for the fwknop client. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fwknop_common.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 34 </span> : : #ifndef WIN32 +<span class="lineNum"> 35 </span> : : #include &lt;arpa/inet.h&gt; +<span class="lineNum"> 36 </span> : : #endif +<span class="lineNum"> 37 </span> : : +<span class="lineNum"> 38 </span> : : static void *get_in_addr(struct sockaddr *sa); +<span class="lineNum"> 39 </span> : : +<span class="lineNum"> 40 </span> : : /** +<span class="lineNum"> 41 </span> : : * Structure to handle a protocol string and its associated integer value +<span class="lineNum"> 42 </span> : : */ +<span class="lineNum"> 43 </span> : : typedef struct fko_protocol +<span class="lineNum"> 44 </span> : : { +<span class="lineNum"> 45 </span> : : const char str[PROTOCOL_BUFSIZE]; /*!&lt; String which represents a protocol value for the FKO library */ +<span class="lineNum"> 46 </span> : : int val; /*!&lt; Value of the protocol according to the FKO library */ +<span class="lineNum"> 47 </span> : : } fko_protocol_t; +<span class="lineNum"> 48 </span> : : +<span class="lineNum"> 49 </span> : : static fko_protocol_t fko_protocol_array[] = +<span class="lineNum"> 50 </span> : : { +<span class="lineNum"> 51 </span> : : { &quot;udpraw&quot;, FKO_PROTO_UDP_RAW }, +<span class="lineNum"> 52 </span> : : { &quot;udp&quot;, FKO_PROTO_UDP }, +<span class="lineNum"> 53 </span> : : { &quot;tcpraw&quot;, FKO_PROTO_TCP_RAW }, +<span class="lineNum"> 54 </span> : : { &quot;tcp&quot;, FKO_PROTO_TCP }, +<span class="lineNum"> 55 </span> : : { &quot;icmp&quot;, FKO_PROTO_ICMP }, +<span class="lineNum"> 56 </span> : : { &quot;http&quot;, FKO_PROTO_HTTP } +<span class="lineNum"> 57 </span> : : }; +<a name="58"><span class="lineNum"> 58 </span> : : </a> +<span class="lineNum"> 59 </span> : : int +<span class="lineNum"> 60 </span> :<span class="lineCov"> 2890 : verify_file_perms_ownership(const char *file)</span> +<span class="lineNum"> 61 </span> : : { +<span class="lineNum"> 62 </span> :<span class="lineCov"> 2890 : int res = 1;</span> +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> : : #if HAVE_STAT +<span class="lineNum"> 65 </span> : : struct stat st; +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> : : /* Every file that the fwknop client deals with should be owned +<span class="lineNum"> 68 </span> : : * by the user and permissions set to 600 (user read/write) +<span class="lineNum"> 69 </span> : : */ +<span class="lineNum"> 70 </span> [<span class="branchCov" title="Branch 1 was taken 2890 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 2890 : if((stat(file, &amp;st)) == 0)</span> +<span class="lineNum"> 71 </span> : : { +<span class="lineNum"> 72 </span> : : /* Make sure it is a regular file +<span class="lineNum"> 73 </span> : : */ +<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(S_ISREG(st.st_mode) != 1 &amp;&amp; S_ISLNK(st.st_mode) != 1)</span> +<span class="lineNum"> 75 </span> : : { +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 77 </span> : : &quot;[-] file: %s is not a regular file or symbolic link.&quot;, +<span class="lineNum"> 78 </span> : : file +<span class="lineNum"> 79 </span> : : ); +<span class="lineNum"> 80 </span> : : /* when we start in enforcing this instead of just warning +<span class="lineNum"> 81 </span> : : * the user +<span class="lineNum"> 82 </span> : : res = 0; +<span class="lineNum"> 83 </span> : : */ +<span class="lineNum"> 84 </span> : : } +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> [<span class="branchCov" title="Branch 0 was taken 2890 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2890 : if((st.st_mode &amp; (S_IRWXU|S_IRWXG|S_IRWXO)) != (S_IRUSR|S_IWUSR))</span> +<span class="lineNum"> 87 </span> : : { +<span class="lineNum"> 88 </span> :<span class="lineCov"> 2890 : log_msg(LOG_VERBOSITY_ERROR,</span> +<span class="lineNum"> 89 </span> : : &quot;[-] file: %s permissions should only be user read/write (0600, -rw-------)&quot;, +<span class="lineNum"> 90 </span> : : file +<span class="lineNum"> 91 </span> : : ); +<span class="lineNum"> 92 </span> : : /* when we start in enforcing this instead of just warning +<span class="lineNum"> 93 </span> : : * the user +<span class="lineNum"> 94 </span> : : res = 0; +<span class="lineNum"> 95 </span> : : */ +<span class="lineNum"> 96 </span> : : } +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(st.st_uid != getuid())</span> +<span class="lineNum"> 99 </span> : : { +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[-] file: %s not owned by current effective user id&quot;,</span> +<span class="lineNum"> 101 </span> : : file); +<span class="lineNum"> 102 </span> : : /* when we start in enforcing this instead of just warning +<span class="lineNum"> 103 </span> : : * the user +<span class="lineNum"> 104 </span> : : res = 0; +<span class="lineNum"> 105 </span> : : */ +<span class="lineNum"> 106 </span> : : } +<span class="lineNum"> 107 </span> : : } +<span class="lineNum"> 108 </span> : : else +<span class="lineNum"> 109 </span> : : { +<span class="lineNum"> 110 </span> : : /* if the path doesn't exist, just return, but otherwise something +<span class="lineNum"> 111 </span> : : * went wrong +<span class="lineNum"> 112 </span> : : */ +<span class="lineNum"> 113 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno != ENOENT)</span> +<span class="lineNum"> 114 </span> : : { +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[-] stat() against file: %s returned: %s&quot;,</span> +<span class="lineNum"> 116 </span> : : file, strerror(errno)); +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : res = 0;</span> +<span class="lineNum"> 118 </span> : : } +<span class="lineNum"> 119 </span> : : } +<span class="lineNum"> 120 </span> : : #endif +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> :<span class="lineCov"> 2890 : return res;</span> +<span class="lineNum"> 123 </span> : : } +<span class="lineNum"> 124 </span> : : +<span class="lineNum"> 125 </span> : : /** +<span class="lineNum"> 126 </span> : : * @brief Grab the sin address from the sockaddr structure. +<span class="lineNum"> 127 </span> : : * +<span class="lineNum"> 128 </span> : : * This function returns the sin address as a sockaddr_in or sockaddr_in6 +<span class="lineNum"> 129 </span> : : * structure according to the family set (ipv4 or ipv6) in the sockaddr +<span class="lineNum"> 130 </span> : : * structure. +<span class="lineNum"> 131 </span> : : * +<span class="lineNum"> 132 </span> : : * @param sa sockaddr strcuture +<span class="lineNum"> 133 </span> : : * +<span class="lineNum"> 134 </span> : : * @return the sin addr if the sa family is AF_INET or the sin6_addr otherwise. +<a name="135"><span class="lineNum"> 135 </span> : : */</a> +<span class="lineNum"> 136 </span> : : static void * +<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : get_in_addr(struct sockaddr *sa)</span> +<span class="lineNum"> 138 </span> : : { +<span class="lineNum"> 139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sa-&gt;sa_family == AF_INET)</span> +<span class="lineNum"> 140 </span> : : { +<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : return &amp;(((struct sockaddr_in*)sa)-&gt;sin_addr);</span> +<span class="lineNum"> 142 </span> : : } +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> : : else +<span class="lineNum"> 145 </span> : : { +<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : return &amp;(((struct sockaddr_in6*)sa)-&gt;sin6_addr);</span> +<span class="lineNum"> 147 </span> : : } +<span class="lineNum"> 148 </span> : : } +<span class="lineNum"> 149 </span> : : +<span class="lineNum"> 150 </span> : : /** +<span class="lineNum"> 151 </span> : : * @brief Resolve a domain name as an ip adress. +<span class="lineNum"> 152 </span> : : * +<span class="lineNum"> 153 </span> : : * @param dns_str Name of the host to resolve. +<span class="lineNum"> 154 </span> : : * @param hints Hints to reduce the number of result from getaddrinfo() +<span class="lineNum"> 155 </span> : : * @param ip_str String where to store the resolve ip address +<span class="lineNum"> 156 </span> : : * @param ip_bufsize Number of bytes available in the ip_str buffer +<span class="lineNum"> 157 </span> : : * +<span class="lineNum"> 158 </span> : : * @return 0 if successful, 1 if an error occured. +<a name="159"><span class="lineNum"> 159 </span> : : */</a> +<span class="lineNum"> 160 </span> : : int +<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : resolve_dest_adr(const char *dns_str, struct addrinfo *hints, char *ip_str, size_t ip_bufsize)</span> +<span class="lineNum"> 162 </span> : : { +<span class="lineNum"> 163 </span> : : int error; /* Function error return code */ +<span class="lineNum"> 164 </span> : : struct addrinfo *result; /* Result of getaddrinfo() */ +<span class="lineNum"> 165 </span> : : struct addrinfo *rp; /* Element of the linked list returned by getaddrinfo() */ +<span class="lineNum"> 166 </span> : : #if WIN32 &amp;&amp; WINVER &lt;= 0x0600 +<span class="lineNum"> 167 </span> : : struct sockaddr_in *in; +<span class="lineNum"> 168 </span> : : char *win_ip; +<span class="lineNum"> 169 </span> : : #else +<span class="lineNum"> 170 </span> : : struct sockaddr_in *sai_remote; /* Remote host information as a sockaddr_in structure */ +<span class="lineNum"> 171 </span> : : #endif +<span class="lineNum"> 172 </span> : : +<span class="lineNum"> 173 </span> : : /* Try to resolve the host name */ +<span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : error = getaddrinfo(dns_str, NULL, hints, &amp;result);</span> +<span class="lineNum"> 175 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (error != 0)</span> +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;resolve_dest_adr() : %s\n&quot;, gai_strerror(error));</span> +<span class="lineNum"> 177 </span> : : +<span class="lineNum"> 178 </span> : : else +<span class="lineNum"> 179 </span> : : { +<span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : error = 1;</span> +<span class="lineNum"> 181 </span> : : +<span class="lineNum"> 182 </span> : : /* Go through the linked list of addrinfo structures */ +<span class="lineNum"> 183 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (rp = result; rp != NULL; rp = rp-&gt;ai_next)</span> +<span class="lineNum"> 184 </span> : : { +<span class="lineNum"> 185 </span> : : memset(ip_str, 0, ip_bufsize); +<span class="lineNum"> 186 </span> : : #if WIN32 &amp;&amp; WINVER &lt;= 0x0600 +<span class="lineNum"> 187 </span> : : /* On older Windows systems (anything before Vista?), +<span class="lineNum"> 188 </span> : : * we use inet_ntoa for now. +<span class="lineNum"> 189 </span> : : */ +<span class="lineNum"> 190 </span> : : in = (struct sockaddr_in*)(rp-&gt;ai_addr); +<span class="lineNum"> 191 </span> : : win_ip = inet_ntoa(in-&gt;sin_addr); +<span class="lineNum"> 192 </span> : : +<span class="lineNum"> 193 </span> : : if (win_ip != NULL &amp;&amp; (strlcpy(ip_str, win_ip, ip_bufsize) &gt; 0)) +<span class="lineNum"> 194 </span> : : #else +<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : sai_remote = (struct sockaddr_in *)get_in_addr((struct sockaddr *)(rp-&gt;ai_addr));</span> +<span class="lineNum"> 196 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (inet_ntop(rp-&gt;ai_family, sai_remote, ip_str, ip_bufsize) != NULL)</span> +<span class="lineNum"> 197 </span> : : #endif +<span class="lineNum"> 198 </span> : : { +<span class="lineNum"> 199 </span> : : error = 0; +<span class="lineNum"> 200 </span> : : break; +<span class="lineNum"> 201 </span> : : } +<span class="lineNum"> 202 </span> : : else +<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve_dest_adr() : inet_ntop (%d) - %s&quot;,</span> +<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : errno, strerror(errno));</span> +<span class="lineNum"> 205 </span> : : } +<span class="lineNum"> 206 </span> : : +<span class="lineNum"> 207 </span> : : /* Free our result from getaddrinfo() */ +<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : freeaddrinfo(result);</span> +<span class="lineNum"> 209 </span> : : } +<span class="lineNum"> 210 </span> : : +<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : return error;</span> +<span class="lineNum"> 212 </span> : : } +<span class="lineNum"> 213 </span> : : +<span class="lineNum"> 214 </span> : : /** +<span class="lineNum"> 215 </span> : : * @brief Return a protocol string according to a protocol integer value +<span class="lineNum"> 216 </span> : : * +<span class="lineNum"> 217 </span> : : * This function checks if the protocol integer is valid, and write the protocol +<span class="lineNum"> 218 </span> : : * string associated. +<span class="lineNum"> 219 </span> : : * +<span class="lineNum"> 220 </span> : : * @param proto protocol inetger value (UDP_RAW, UDP, TCPRAW...) +<span class="lineNum"> 221 </span> : : * @param proto_str Buffer to write the protocol string +<span class="lineNum"> 222 </span> : : * @param proto_size size of the protocol string buffer +<span class="lineNum"> 223 </span> : : * +<span class="lineNum"> 224 </span> : : * @return -1 if the protocol integer value is not supported, 0 otherwise +<a name="225"><span class="lineNum"> 225 </span> : : */</a> +<span class="lineNum"> 226 </span> : : short +<span class="lineNum"> 227 </span> :<span class="lineCov"> 416 : proto_inttostr(int proto, char *proto_str, size_t proto_size)</span> +<span class="lineNum"> 228 </span> : : { +<span class="lineNum"> 229 </span> :<span class="lineCov"> 416 : short proto_error = -1;</span> +<span class="lineNum"> 230 </span> : : unsigned char ndx_proto; /* Index for the fko_protocol_t structure */ +<span class="lineNum"> 231 </span> : : +<span class="lineNum"> 232 </span> : : /* Initialize the protocol string */ +<span class="lineNum"> 233 </span> : : memset(proto_str, 0, proto_size); +<span class="lineNum"> 234 </span> : : +<span class="lineNum"> 235 </span> : : /* Look into the fko_protocol_array to find out the right protocol */ +<span class="lineNum"> 236 </span> [<span class="branchCov" title="Branch 0 was taken 1102 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1102 : for (ndx_proto = 0 ; ndx_proto &lt; ARRAY_SIZE(fko_protocol_array) ; ndx_proto++)</span> +<span class="lineNum"> 237 </span> : : { +<span class="lineNum"> 238 </span> : : /* If the protocol matches, grab it */ +<span class="lineNum"> 239 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchCov" title="Branch 1 was taken 686 times"> + </span>]:<span class="lineCov"> 1102 : if (fko_protocol_array[ndx_proto].val == proto)</span> +<span class="lineNum"> 240 </span> : : { +<span class="lineNum"> 241 </span> :<span class="lineCov"> 416 : strlcpy(proto_str, fko_protocol_array[ndx_proto].str, proto_size);</span> +<span class="lineNum"> 242 </span> :<span class="lineCov"> 416 : proto_error = 0;</span> +<span class="lineNum"> 243 </span> :<span class="lineCov"> 416 : break;</span> +<span class="lineNum"> 244 </span> : : } +<span class="lineNum"> 245 </span> : : } +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> :<span class="lineCov"> 416 : return proto_error;</span> +<span class="lineNum"> 248 </span> : : +<span class="lineNum"> 249 </span> : : } +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> : : /** +<span class="lineNum"> 252 </span> : : * @brief Convert a protocol string to its integer value. +<span class="lineNum"> 253 </span> : : * +<span class="lineNum"> 254 </span> : : * @param pr_str Protocol string (UDP_RAW, UDP, TCPRAW...) +<span class="lineNum"> 255 </span> : : * +<span class="lineNum"> 256 </span> : : * @return -1 if the protocol string is not supported, otherwise the protocol value +<a name="257"><span class="lineNum"> 257 </span> : : */</a> +<span class="lineNum"> 258 </span> : : short +<span class="lineNum"> 259 </span> :<span class="lineCov"> 3306 : proto_strtoint(const char *pr_str)</span> +<span class="lineNum"> 260 </span> : : { +<span class="lineNum"> 261 </span> : : unsigned char ndx_proto; /* Index for the fko_protocol_t structure */ +<span class="lineNum"> 262 </span> :<span class="lineCov"> 3306 : int proto_int = -1; /* Protocol integer value */</span> +<span class="lineNum"> 263 </span> : : +<span class="lineNum"> 264 </span> : : /* Look into the fko_protocol_array to find out the right protocol */ +<span class="lineNum"> 265 </span> [<span class="branchCov" title="Branch 0 was taken 11018 times"> + </span><span class="branchCov" title="Branch 1 was taken 879 times"> + </span>]:<span class="lineCov"> 11897 : for (ndx_proto = 0 ; ndx_proto &lt; ARRAY_SIZE(fko_protocol_array) ; ndx_proto++)</span> +<span class="lineNum"> 266 </span> : : { +<span class="lineNum"> 267 </span> : : /* If the protocol matches, grab it */ +<span class="lineNum"> 268 </span> [<span class="branchCov" title="Branch 0 was taken 2427 times"> + </span><span class="branchCov" title="Branch 1 was taken 8591 times"> + </span>]:<span class="lineCov"> 11018 : if (strcasecmp(pr_str, fko_protocol_array[ndx_proto].str) == 0)</span> +<span class="lineNum"> 269 </span> : : { +<span class="lineNum"> 270 </span> :<span class="lineCov"> 2427 : proto_int = fko_protocol_array[ndx_proto].val;</span> +<span class="lineNum"> 271 </span> :<span class="lineCov"> 2427 : break;</span> +<span class="lineNum"> 272 </span> : : } +<span class="lineNum"> 273 </span> : : } +<span class="lineNum"> 274 </span> : : +<span class="lineNum"> 275 </span> :<span class="lineCov"> 3306 : return proto_int;</span> +<span class="lineNum"> 276 </span> : : } +<a name="277"><span class="lineNum"> 277 </span> : : </a> +<span class="lineNum"> 278 </span> : : static int +<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : add_argv(char **argv_new, int *argc_new,</span> +<span class="lineNum"> 280 </span> : : const char *new_arg, fko_cli_options_t *opts) +<span class="lineNum"> 281 </span> : : { +<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : int buf_size = 0;</span> +<span class="lineNum"> 283 </span> : : +<span class="lineNum"> 284 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 2)</span> +<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;[+] add_argv() + arg: %s&quot;, new_arg);</span> +<span class="lineNum"> 286 </span> : : +<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : buf_size = strlen(new_arg) + 1;</span> +<span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = calloc(1, buf_size);</span> +<span class="lineNum"> 289 </span> : : +<span class="lineNum"> 290 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[*argc_new] == NULL)</span> +<span class="lineNum"> 291 </span> : : { +<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Memory allocation error.&quot;);</span> +<span class="lineNum"> 293 </span> : : return 0; +<span class="lineNum"> 294 </span> : : } +<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : strlcpy(argv_new[*argc_new], new_arg, buf_size);</span> +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : *argc_new += 1;</span> +<span class="lineNum"> 298 </span> : : +<span class="lineNum"> 299 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*argc_new &gt;= MAX_CMDLINE_ARGS-1)</span> +<span class="lineNum"> 300 </span> : : { +<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] max command line args exceeded.&quot;);</span> +<span class="lineNum"> 302 </span> : : return 0; +<span class="lineNum"> 303 </span> : : } +<span class="lineNum"> 304 </span> : : +<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = NULL;</span> +<span class="lineNum"> 306 </span> : : +<span class="lineNum"> 307 </span> : : return 1; +<span class="lineNum"> 308 </span> : : } +<a name="309"><span class="lineNum"> 309 </span> : : </a> +<span class="lineNum"> 310 </span> : : int +<span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : strtoargv(char *args_str, char **argv_new, int *argc_new,</span> +<span class="lineNum"> 312 </span> : : fko_cli_options_t *opts) +<span class="lineNum"> 313 </span> : : { +<span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : int current_arg_ctr = 0, i;</span> +<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : char arg_tmp[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 316 </span> : : +<span class="lineNum"> 317 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; (int)strlen(args_str); i++)</span> +<span class="lineNum"> 318 </span> : : { +<span class="lineNum"> 319 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!isspace(args_str[i]))</span> +<span class="lineNum"> 320 </span> : : { +<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = args_str[i];</span> +<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : current_arg_ctr++;</span> +<span class="lineNum"> 323 </span> : : } +<span class="lineNum"> 324 </span> : : else +<span class="lineNum"> 325 </span> : : { +<span class="lineNum"> 326 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> +<span class="lineNum"> 327 </span> : : { +<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> +<span class="lineNum"> 329 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> +<span class="lineNum"> 330 </span> : : { +<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> +<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 333 </span> : : } +<span class="lineNum"> 334 </span> : : current_arg_ctr = 0; +<span class="lineNum"> 335 </span> : : } +<span class="lineNum"> 336 </span> : : } +<span class="lineNum"> 337 </span> : : } +<span class="lineNum"> 338 </span> : : +<span class="lineNum"> 339 </span> : : /* pick up the last argument in the string +<span class="lineNum"> 340 </span> : : */ +<span class="lineNum"> 341 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> +<span class="lineNum"> 342 </span> : : { +<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> +<span class="lineNum"> 344 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> +<span class="lineNum"> 345 </span> : : { +<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> +<span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 348 </span> : : } +<span class="lineNum"> 349 </span> : : } +<span class="lineNum"> 350 </span> : : return 1; +<span class="lineNum"> 351 </span> : : } +<a name="352"><span class="lineNum"> 352 </span> : : </a> +<span class="lineNum"> 353 </span> : : void +<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : free_argv(char **argv_new, int *argc_new)</span> +<span class="lineNum"> 355 </span> : : { +<span class="lineNum"> 356 </span> : : int i; +<span class="lineNum"> 357 </span> : : +<span class="lineNum"> 358 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new == NULL || *argv_new == NULL)</span> +<span class="lineNum"> 359 </span> : : return; +<span class="lineNum"> 360 </span> : : +<span class="lineNum"> 361 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; *argc_new; i++)</span> +<span class="lineNum"> 362 </span> : : { +<span class="lineNum"> 363 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[i] == NULL)</span> +<span class="lineNum"> 364 </span> : : break; +<span class="lineNum"> 365 </span> : : else +<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : free(argv_new[i]);</span> +<span class="lineNum"> 367 </span> : : } +<span class="lineNum"> 368 </span> : : return; +<span class="lineNum"> 369 </span> : : } +<span class="lineNum"> 370 </span> : : +<span class="lineNum"> 371 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/emerald.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/emerald.png new file mode 100644 index 0000000000000000000000000000000000000000..38ad4f4068b935643d2486f323005fb294a9bd7e GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^Jb<Pkv=K1`2T& zctjR6FmMZjFyp1Wb$@_@Ea{HEjtmSN`?>!lvI6;R0X`wF(yt=9xVZRt1vCRixIA4P dLn>}1Cji+@42)0J?}79&c)I$ztaD0e0sy@GAL0N2 literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css new file mode 100644 index 00000000..bfd0a83e --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css @@ -0,0 +1,519 @@ +/* All views: initial background and text color */ +body +{ + color: #000000; + background-color: #FFFFFF; +} + +/* All views: standard link format*/ +a:link +{ + color: #284FA8; + text-decoration: underline; +} + +/* All views: standard link - visited format */ +a:visited +{ + color: #00CB40; + text-decoration: underline; +} + +/* All views: standard link - activated format */ +a:active +{ + color: #FF0040; + text-decoration: underline; +} + +/* All views: main title format */ +td.title +{ + text-align: center; + padding-bottom: 10px; + font-family: sans-serif; + font-size: 20pt; + font-style: italic; + font-weight: bold; +} + +/* All views: header item format */ +td.headerItem +{ + text-align: right; + padding-right: 6px; + font-family: sans-serif; + font-weight: bold; + vertical-align: top; + white-space: nowrap; +} + +/* All views: header item value format */ +td.headerValue +{ + text-align: left; + color: #284FA8; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; +} + +/* All views: header item coverage table heading */ +td.headerCovTableHead +{ + text-align: center; + padding-right: 6px; + padding-left: 6px; + padding-bottom: 0px; + font-family: sans-serif; + font-size: 80%; + white-space: nowrap; +} + +/* All views: header item coverage table entry */ +td.headerCovTableEntry +{ + text-align: right; + color: #284FA8; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #DAE7FE; +} + +/* All views: header item coverage table entry for high coverage rate */ +td.headerCovTableEntryHi +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #A7FC9D; +} + +/* All views: header item coverage table entry for medium coverage rate */ +td.headerCovTableEntryMed +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #FFEA20; +} + +/* All views: header item coverage table entry for ow coverage rate */ +td.headerCovTableEntryLo +{ + text-align: right; + color: #000000; + font-family: sans-serif; + font-weight: bold; + white-space: nowrap; + padding-left: 12px; + padding-right: 4px; + background-color: #FF0000; +} + +/* All views: header legend value for legend entry */ +td.headerValueLeg +{ + text-align: left; + color: #000000; + font-family: sans-serif; + font-size: 80%; + white-space: nowrap; + padding-top: 4px; +} + +/* All views: color of horizontal ruler */ +td.ruler +{ + background-color: #6688D4; +} + +/* All views: version string format */ +td.versionInfo +{ + text-align: center; + padding-top: 2px; + font-family: sans-serif; + font-style: italic; +} + +/* Directory view/File view (all)/Test case descriptions: + table headline format */ +td.tableHead +{ + text-align: center; + color: #FFFFFF; + background-color: #6688D4; + font-family: sans-serif; + font-size: 120%; + font-weight: bold; + white-space: nowrap; + padding-left: 4px; + padding-right: 4px; +} + +span.tableHeadSort +{ + padding-right: 4px; +} + +/* Directory view/File view (all): filename entry format */ +td.coverFile +{ + text-align: left; + padding-left: 10px; + padding-right: 20px; + color: #284FA8; + background-color: #DAE7FE; + font-family: monospace; +} + +/* Directory view/File view (all): bar-graph entry format*/ +td.coverBar +{ + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; +} + +/* Directory view/File view (all): bar-graph outline color */ +td.coverBarOutline +{ + background-color: #000000; +} + +/* Directory view/File view (all): percentage entry for files with + high coverage rate */ +td.coverPerHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #A7FC9D; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + high coverage rate */ +td.coverNumHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #A7FC9D; + white-space: nowrap; + font-family: sans-serif; +} + +/* Directory view/File view (all): percentage entry for files with + medium coverage rate */ +td.coverPerMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FFEA20; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + medium coverage rate */ +td.coverNumMed +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FFEA20; + white-space: nowrap; + font-family: sans-serif; +} + +/* Directory view/File view (all): percentage entry for files with + low coverage rate */ +td.coverPerLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FF0000; + font-weight: bold; + font-family: sans-serif; +} + +/* Directory view/File view (all): line count entry for files with + low coverage rate */ +td.coverNumLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FF0000; + white-space: nowrap; + font-family: sans-serif; +} + +/* File view (all): "show/hide details" link format */ +a.detail:link +{ + color: #B8D0FF; + font-size:80%; +} + +/* File view (all): "show/hide details" link - visited format */ +a.detail:visited +{ + color: #B8D0FF; + font-size:80%; +} + +/* File view (all): "show/hide details" link - activated format */ +a.detail:active +{ + color: #FFFFFF; + font-size:80%; +} + +/* File view (detail): test name entry */ +td.testName +{ + text-align: right; + padding-right: 10px; + background-color: #DAE7FE; + font-family: sans-serif; +} + +/* File view (detail): test percentage entry */ +td.testPer +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; + font-family: sans-serif; +} + +/* File view (detail): test lines count entry */ +td.testNum +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; + font-family: sans-serif; +} + +/* Test case descriptions: test name format*/ +dt +{ + font-family: sans-serif; + font-weight: bold; +} + +/* Test case descriptions: description table body */ +td.testDescription +{ + padding-top: 10px; + padding-left: 30px; + padding-bottom: 10px; + padding-right: 30px; + background-color: #DAE7FE; +} + +/* Source code view: function entry */ +td.coverFn +{ + text-align: left; + padding-left: 10px; + padding-right: 20px; + color: #284FA8; + background-color: #DAE7FE; + font-family: monospace; +} + +/* Source code view: function entry zero count*/ +td.coverFnLo +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #FF0000; + font-weight: bold; + font-family: sans-serif; +} + +/* Source code view: function entry nonzero count*/ +td.coverFnHi +{ + text-align: right; + padding-left: 10px; + padding-right: 10px; + background-color: #DAE7FE; + font-weight: bold; + font-family: sans-serif; +} + +/* Source code view: source code format */ +pre.source +{ + font-family: monospace; + white-space: pre; + margin-top: 2px; +} + +/* Source code view: line number format */ +span.lineNum +{ + background-color: #EFE383; +} + +/* Source code view: format for lines which were executed */ +td.lineCov, +span.lineCov +{ + background-color: #CAD7FE; +} + +/* Source code view: format for Cov legend */ +span.coverLegendCov +{ + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + background-color: #CAD7FE; +} + +/* Source code view: format for lines which were not executed */ +td.lineNoCov, +span.lineNoCov +{ + background-color: #FF6230; +} + +/* Source code view: format for NoCov legend */ +span.coverLegendNoCov +{ + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + background-color: #FF6230; +} + +/* Source code view (function table): standard link - visited format */ +td.lineNoCov > a:visited, +td.lineCov > a:visited +{ + color: black; + text-decoration: underline; +} + +/* Source code view: format for lines which were executed only in a + previous version */ +span.lineDiffCov +{ + background-color: #B5F7AF; +} + +/* Source code view: format for branches which were executed + * and taken */ +span.branchCov +{ + background-color: #CAD7FE; +} + +/* Source code view: format for branches which were executed + * but not taken */ +span.branchNoCov +{ + background-color: #FF6230; +} + +/* Source code view: format for branches which were not executed */ +span.branchNoExec +{ + background-color: #FF6230; +} + +/* Source code view: format for the source code heading line */ +pre.sourceHeading +{ + white-space: pre; + font-family: monospace; + font-weight: bold; + margin: 0px; +} + +/* All views: header legend value for low rate */ +td.headerValueLegL +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 4px; + padding-right: 2px; + background-color: #FF0000; + font-size: 80%; +} + +/* All views: header legend value for med rate */ +td.headerValueLegM +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 2px; + padding-right: 2px; + background-color: #FFEA20; + font-size: 80%; +} + +/* All views: header legend value for hi rate */ +td.headerValueLegH +{ + font-family: sans-serif; + text-align: center; + white-space: nowrap; + padding-left: 2px; + padding-right: 4px; + background-color: #A7FC9D; + font-size: 80%; +} + +/* All views except source code view: legend format for low coverage */ +span.coverLegendCovLo +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #FF0000; +} + +/* All views except source code view: legend format for med coverage */ +span.coverLegendCovMed +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #FFEA20; +} + +/* All views except source code view: legend format for hi coverage */ +span.coverLegendCovHi +{ + padding-left: 10px; + padding-right: 10px; + padding-top: 2px; + background-color: #A7FC9D; +} diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/glass.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..e1abc00680a3093c49fdb775ae6bdb6764c95af2 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmSN`?>!lvI6;R0X`wF z|Ns97GD8ntt^-nxB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gf+eGhVt|_XjA* zUgGKN%6^Gmn4d%Ph(nkFP>9RZ#WAE}PI3Z}&BVayv3^M*kj3EX>gTe~DWM4f=_Dpv literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html new file mode 100644 index 00000000..0c10f579 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html @@ -0,0 +1,131 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> + <link rel="stylesheet" type="text/css" href="gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue">top level</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">3270</td> + <td class="headerCovTableEntry">7970</td> + <td class="headerCovTableEntryLo">41.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">224</td> + <td class="headerCovTableEntry">390</td> + <td class="headerCovTableEntryLo">57.4 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">1778</td> + <td class="headerCovTableEntry">5269</td> + <td class="headerCovTableEntryLo">33.7 %</td> + </tr> + <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> + </tr> + <tr> + <td class="coverFile"><a href="server/index.html">server</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> + </td> + <td class="coverPerLo">28.4&nbsp;%</td> + <td class="coverNumLo">876 / 3080</td> + <td class="coverPerLo">39.5&nbsp;%</td> + <td class="coverNumLo">49 / 124</td> + <td class="coverPerLo">27.0&nbsp;%</td> + <td class="coverNumLo">541 / 2007</td> + </tr> + <tr> + <td class="coverFile"><a href="client/index.html">client</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">690 / 2039</td> + <td class="coverPerLo">54.9&nbsp;%</td> + <td class="coverNumLo">39 / 71</td> + <td class="coverPerLo">31.5&nbsp;%</td> + <td class="coverNumLo">397 / 1260</td> + </tr> + <tr> + <td class="coverFile"><a href="lib/index.html">lib</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> + </td> + <td class="coverPerLo">59.8&nbsp;%</td> + <td class="coverNumLo">1704 / 2851</td> + <td class="coverPerLo">69.7&nbsp;%</td> + <td class="coverNumLo">136 / 195</td> + <td class="coverPerLo">42.0&nbsp;%</td> + <td class="coverNumLo">840 / 2002</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html new file mode 100644 index 00000000..d0a0d50d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html @@ -0,0 +1,131 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> + <link rel="stylesheet" type="text/css" href="gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue">top level</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">3270</td> + <td class="headerCovTableEntry">7970</td> + <td class="headerCovTableEntryLo">41.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">224</td> + <td class="headerCovTableEntry">390</td> + <td class="headerCovTableEntryLo">57.4 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">1778</td> + <td class="headerCovTableEntry">5269</td> + <td class="headerCovTableEntryLo">33.7 %</td> + </tr> + <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="server/index.html">server</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> + </td> + <td class="coverPerLo">28.4&nbsp;%</td> + <td class="coverNumLo">876 / 3080</td> + <td class="coverPerLo">39.5&nbsp;%</td> + <td class="coverNumLo">49 / 124</td> + <td class="coverPerLo">27.0&nbsp;%</td> + <td class="coverNumLo">541 / 2007</td> + </tr> + <tr> + <td class="coverFile"><a href="client/index.html">client</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">690 / 2039</td> + <td class="coverPerLo">54.9&nbsp;%</td> + <td class="coverNumLo">39 / 71</td> + <td class="coverPerLo">31.5&nbsp;%</td> + <td class="coverNumLo">397 / 1260</td> + </tr> + <tr> + <td class="coverFile"><a href="lib/index.html">lib</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> + </td> + <td class="coverPerLo">59.8&nbsp;%</td> + <td class="coverNumLo">1704 / 2851</td> + <td class="coverPerLo">69.7&nbsp;%</td> + <td class="coverNumLo">136 / 195</td> + <td class="coverPerLo">42.0&nbsp;%</td> + <td class="coverNumLo">840 / 2002</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html new file mode 100644 index 00000000..e4f18662 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html @@ -0,0 +1,131 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> + <link rel="stylesheet" type="text/css" href="gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue">top level</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">3270</td> + <td class="headerCovTableEntry">7970</td> + <td class="headerCovTableEntryLo">41.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">224</td> + <td class="headerCovTableEntry">390</td> + <td class="headerCovTableEntryLo">57.4 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">1778</td> + <td class="headerCovTableEntry">5269</td> + <td class="headerCovTableEntryLo">33.7 %</td> + </tr> + <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="server/index.html">server</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> + </td> + <td class="coverPerLo">28.4&nbsp;%</td> + <td class="coverNumLo">876 / 3080</td> + <td class="coverPerLo">39.5&nbsp;%</td> + <td class="coverNumLo">49 / 124</td> + <td class="coverPerLo">27.0&nbsp;%</td> + <td class="coverNumLo">541 / 2007</td> + </tr> + <tr> + <td class="coverFile"><a href="client/index.html">client</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">690 / 2039</td> + <td class="coverPerLo">54.9&nbsp;%</td> + <td class="coverNumLo">39 / 71</td> + <td class="coverPerLo">31.5&nbsp;%</td> + <td class="coverNumLo">397 / 1260</td> + </tr> + <tr> + <td class="coverFile"><a href="lib/index.html">lib</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> + </td> + <td class="coverPerLo">59.8&nbsp;%</td> + <td class="coverNumLo">1704 / 2851</td> + <td class="coverPerLo">69.7&nbsp;%</td> + <td class="coverNumLo">136 / 195</td> + <td class="coverPerLo">42.0&nbsp;%</td> + <td class="coverNumLo">840 / 2002</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html new file mode 100644 index 00000000..7e7af434 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html @@ -0,0 +1,131 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> + <link rel="stylesheet" type="text/css" href="gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue">top level</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">3270</td> + <td class="headerCovTableEntry">7970</td> + <td class="headerCovTableEntryLo">41.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">224</td> + <td class="headerCovTableEntry">390</td> + <td class="headerCovTableEntryLo">57.4 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">1778</td> + <td class="headerCovTableEntry">5269</td> + <td class="headerCovTableEntryLo">33.7 %</td> + </tr> + <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Directory <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="client/index.html">client</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> + </td> + <td class="coverPerLo">33.8&nbsp;%</td> + <td class="coverNumLo">690 / 2039</td> + <td class="coverPerLo">54.9&nbsp;%</td> + <td class="coverNumLo">39 / 71</td> + <td class="coverPerLo">31.5&nbsp;%</td> + <td class="coverNumLo">397 / 1260</td> + </tr> + <tr> + <td class="coverFile"><a href="lib/index.html">lib</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> + </td> + <td class="coverPerLo">59.8&nbsp;%</td> + <td class="coverNumLo">1704 / 2851</td> + <td class="coverPerLo">69.7&nbsp;%</td> + <td class="coverNumLo">136 / 195</td> + <td class="coverPerLo">42.0&nbsp;%</td> + <td class="coverNumLo">840 / 2002</td> + </tr> + <tr> + <td class="coverFile"><a href="server/index.html">server</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> + </td> + <td class="coverPerLo">28.4&nbsp;%</td> + <td class="coverNumLo">876 / 3080</td> + <td class="coverPerLo">39.5&nbsp;%</td> + <td class="coverNumLo">49 / 124</td> + <td class="coverPerLo">27.0&nbsp;%</td> + <td class="coverNumLo">541 / 2007</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html new file mode 100644 index 00000000..b49edd20 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/base64.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - base64.c<span style="font-size: 80%;"> (<a href="base64.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">32</td> + <td class="headerCovTableEntry">32</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">17</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntryMed">85.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="base64.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="base64.c.gcov.html#95">b64_encode</a></td> + <td class="coverFnHi">2795</td> + </tr> + <tr> + <td class="coverFn"><a href="base64.c.gcov.html#129">strip_b64_eq</a></td> + <td class="coverFnHi">2795</td> + </tr> + <tr> + <td class="coverFn"><a href="base64.c.gcov.html#54">b64_decode</a></td> + <td class="coverFnHi">1280</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html new file mode 100644 index 00000000..de2842db --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/base64.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - base64.c<span style="font-size: 80%;"> (<a href="base64.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">32</td> + <td class="headerCovTableEntry">32</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">17</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntryMed">85.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="base64.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="base64.c.gcov.html#54">b64_decode</a></td> + <td class="coverFnHi">1280</td> + </tr> + <tr> + <td class="coverFn"><a href="base64.c.gcov.html#95">b64_encode</a></td> + <td class="coverFnHi">2795</td> + </tr> + <tr> + <td class="coverFn"><a href="base64.c.gcov.html#129">strip_b64_eq</a></td> + <td class="coverFnHi">2795</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html new file mode 100644 index 00000000..1509b790 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html @@ -0,0 +1,224 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/base64.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - base64.c<span style="font-size: 80%;"> (source / <a href="base64.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">32</td> + <td class="headerCovTableEntry">32</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">17</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntryMed">85.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: base64.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Implementation of the Base64 encode/decode algorithim. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * This code was derived from the base64.c part of FFmpeg written +<span class="lineNum"> 9 </span> : : * by Ryan Martell. (rdm4@martellventures.com). +<span class="lineNum"> 10 </span> : : * +<span class="lineNum"> 11 </span> : : * Copyright (C) Ryan Martell. (rdm4@martellventures.com) +<span class="lineNum"> 12 </span> : : * +<span class="lineNum"> 13 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 14 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 15 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 16 </span> : : * +<span class="lineNum"> 17 </span> : : * License (GNU General Public License): +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 20 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 21 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 22 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 25 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 26 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 27 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 30 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 31 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 32 </span> : : * USA +<span class="lineNum"> 33 </span> : : * +<span class="lineNum"> 34 </span> : : ***************************************************************************** +<span class="lineNum"> 35 </span> : : */ +<span class="lineNum"> 36 </span> : : #include &quot;base64.h&quot; +<span class="lineNum"> 37 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : #if !AFL_FUZZING +<span class="lineNum"> 40 </span> : : static unsigned char map2[] = +<span class="lineNum"> 41 </span> : : { +<span class="lineNum"> 42 </span> : : 0x3e, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x35, 0x36, +<span class="lineNum"> 43 </span> : : 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff, +<span class="lineNum"> 44 </span> : : 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, +<span class="lineNum"> 45 </span> : : 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, +<span class="lineNum"> 46 </span> : : 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, +<span class="lineNum"> 47 </span> : : 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, +<span class="lineNum"> 48 </span> : : 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x1b, +<span class="lineNum"> 49 </span> : : 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, +<span class="lineNum"> 50 </span> : : 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, +<span class="lineNum"> 51 </span> : : 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33 +<span class="lineNum"> 52 </span> : : }; +<span class="lineNum"> 53 </span> : : #endif +<a name="54"><span class="lineNum"> 54 </span> : : </a> +<span class="lineNum"> 55 </span> : : int +<span class="lineNum"> 56 </span> :<span class="lineCov"> 1280 : b64_decode(const char *in, unsigned char *out)</span> +<span class="lineNum"> 57 </span> : : { +<span class="lineNum"> 58 </span> : : int i; +<span class="lineNum"> 59 </span> :<span class="lineCov"> 1280 : unsigned char *dst = out;</span> +<span class="lineNum"> 60 </span> : : #if ! AFL_FUZZING +<span class="lineNum"> 61 </span> : : int v; +<span class="lineNum"> 62 </span> : : #endif +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> : : #if AFL_FUZZING +<span class="lineNum"> 65 </span> : : /* short circuit base64 decoding in AFL fuzzing mode - just copy +<span class="lineNum"> 66 </span> : : * data as-is. +<span class="lineNum"> 67 </span> : : */ +<span class="lineNum"> 68 </span> : : for (i = 0; in[i]; i++) +<span class="lineNum"> 69 </span> : : *dst++ = in[i]; +<span class="lineNum"> 70 </span> : : #else +<span class="lineNum"> 71 </span> :<span class="lineCov"> 1280 : v = 0;</span> +<span class="lineNum"> 72 </span> [<span class="branchCov" title="Branch 0 was taken 103580 times"> + </span><span class="branchCov" title="Branch 1 was taken 1280 times"> + </span>]:<span class="lineCov"> 104860 : for (i = 0; in[i] &amp;&amp; in[i] != '='; i++) {</span> +<span class="lineNum"> 73 </span> :<span class="lineCov"> 103580 : unsigned int index= in[i]-43;</span> +<span class="lineNum"> 74 </span> : : +<span class="lineNum"> 75 </span>[<span class="branchCov" title="Branch 0 was taken 103580 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 103580 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 103580 : if (index&gt;=(sizeof(map2)/sizeof(map2[0])) || map2[index] == 0xff)</span> +<span class="lineNum"> 76 </span> : : return(-1); +<span class="lineNum"> 77 </span> : : +<span class="lineNum"> 78 </span> :<span class="lineCov"> 103580 : v = (v &lt;&lt; 6) + map2[index];</span> +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> [<span class="branchCov" title="Branch 0 was taken 77301 times"> + </span><span class="branchCov" title="Branch 1 was taken 26279 times"> + </span>]:<span class="lineCov"> 103580 : if (i &amp; 3)</span> +<span class="lineNum"> 81 </span> :<span class="lineCov"> 77301 : *dst++ = v &gt;&gt; (6 - 2 * (i &amp; 3));</span> +<span class="lineNum"> 82 </span> : : } +<span class="lineNum"> 83 </span> : : #endif +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> :<span class="lineCov"> 1280 : *dst = '\0';</span> +<span class="lineNum"> 86 </span> : : +<span class="lineNum"> 87 </span> :<span class="lineCov"> 1280 : return(dst - out);</span> +<span class="lineNum"> 88 </span> : : } +<span class="lineNum"> 89 </span> : : +<span class="lineNum"> 90 </span> : : /***************************************************************************** +<span class="lineNum"> 91 </span> : : * b64_encode: Stolen from VLC's http.c +<span class="lineNum"> 92 </span> : : * Simplified by michael +<span class="lineNum"> 93 </span> : : * fixed edge cases and made it work from data (vs. strings) by ryan. +<span class="lineNum"> 94 </span> : : ***************************************************************************** +<a name="95"><span class="lineNum"> 95 </span> : : */</a> +<span class="lineNum"> 96 </span> : : int +<span class="lineNum"> 97 </span> :<span class="lineCov"> 2795 : b64_encode(unsigned char *in, char *out, int in_len)</span> +<span class="lineNum"> 98 </span> : : { +<span class="lineNum"> 99 </span> : : static const char b64[] = +<span class="lineNum"> 100 </span> : : &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;; +<span class="lineNum"> 101 </span> :<span class="lineCov"> 2795 : unsigned i_bits = 0;</span> +<span class="lineNum"> 102 </span> :<span class="lineCov"> 2795 : int i_shift = 0;</span> +<span class="lineNum"> 103 </span> :<span class="lineCov"> 2795 : int bytes_remaining = in_len;</span> +<span class="lineNum"> 104 </span> : : +<span class="lineNum"> 105 </span> :<span class="lineCov"> 2795 : char *dst = out;</span> +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> [<span class="branchCov" title="Branch 0 was taken 2795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2795 : if (in_len &gt; 0) { /* Special edge case, what should we really do here? */</span> +<span class="lineNum"> 108 </span> [<span class="branchCov" title="Branch 0 was taken 131243 times"> + </span><span class="branchCov" title="Branch 1 was taken 2795 times"> + </span>]:<span class="lineCov"> 134038 : while (bytes_remaining) {</span> +<span class="lineNum"> 109 </span> :<span class="lineCov"> 131243 : i_bits = (i_bits &lt;&lt; 8) + *in++;</span> +<span class="lineNum"> 110 </span> :<span class="lineCov"> 131243 : bytes_remaining--;</span> +<span class="lineNum"> 111 </span> :<span class="lineCov"> 175974 : i_shift += 8;</span> +<span class="lineNum"> 112 </span> : : +<span class="lineNum"> 113 </span> : : do { +<span class="lineNum"> 114 </span> :<span class="lineCov"> 175974 : *dst++ = b64[(i_bits &lt;&lt; 6 &gt;&gt; i_shift) &amp; 0x3f];</span> +<span class="lineNum"> 115 </span> :<span class="lineCov"> 175974 : i_shift -= 6;</span> +<span class="lineNum"> 116 </span>[<span class="branchCov" title="Branch 0 was taken 41936 times"> + </span><span class="branchCov" title="Branch 1 was taken 134038 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 2795 times"> + </span><span class="branchCov" title="Branch 3 was taken 131243 times"> + </span>]:<span class="lineCov"> 178769 : } while (i_shift &gt; 6 || (bytes_remaining == 0 &amp;&amp; i_shift &gt; 0));</span> +<span class="lineNum"> 117 </span> : : } +<span class="lineNum"> 118 </span> [<span class="branchCov" title="Branch 0 was taken 2950 times"> + </span><span class="branchCov" title="Branch 1 was taken 2795 times"> + </span>]:<span class="lineCov"> 5745 : while ((dst - out) &amp; 3)</span> +<span class="lineNum"> 119 </span> :<span class="lineCov"> 2950 : *dst++ = '=';</span> +<span class="lineNum"> 120 </span> : : } +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> :<span class="lineCov"> 2795 : *dst = '\0';</span> +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> :<span class="lineCov"> 2795 : return(dst - out);</span> +<span class="lineNum"> 125 </span> : : } +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> : : /* Strip trailing equals (&quot;=&quot;) charcters from a base64-encoded +<span class="lineNum"> 128 </span> : : * message digest. +<a name="129"><span class="lineNum"> 129 </span> : : */</a> +<span class="lineNum"> 130 </span> : : void +<span class="lineNum"> 131 </span> :<span class="lineCov"> 2795 : strip_b64_eq(char *data)</span> +<span class="lineNum"> 132 </span> : : { +<span class="lineNum"> 133 </span> : : char *ndx; +<span class="lineNum"> 134 </span> : : +<span class="lineNum"> 135 </span> [<span class="branchCov" title="Branch 0 was taken 2548 times"> + </span><span class="branchCov" title="Branch 1 was taken 247 times"> + </span>]:<span class="lineCov"> 2795 : if((ndx = strchr(data, '=')) != NULL)</span> +<span class="lineNum"> 136 </span> :<span class="lineCov"> 2548 : *ndx = '\0';</span> +<span class="lineNum"> 137 </span> :<span class="lineCov"> 2795 : }</span> +<span class="lineNum"> 138 </span> : : +<span class="lineNum"> 139 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html new file mode 100644 index 00000000..dba90075 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html @@ -0,0 +1,109 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/cipher_funcs.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - cipher_funcs.c<span style="font-size: 80%;"> (<a href="cipher_funcs.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">95</td> + <td class="headerCovTableEntry">120</td> + <td class="headerCovTableEntryMed">79.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntryMed">85.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">33</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">58.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="cipher_funcs.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#199">rijndael_init</a></td> + <td class="coverFnHi">803</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#116">rij_salt_and_iv</a></td> + <td class="coverFnHi">803</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#53">get_random_data</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#235">rij_encrypt</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#328">add_salted_str</a></td> + <td class="coverFnHi">415</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#273">rij_decrypt</a></td> + <td class="coverFnHi">387</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#376">add_gpg_prefix</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html new file mode 100644 index 00000000..c4735749 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html @@ -0,0 +1,109 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/cipher_funcs.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - cipher_funcs.c<span style="font-size: 80%;"> (<a href="cipher_funcs.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">95</td> + <td class="headerCovTableEntry">120</td> + <td class="headerCovTableEntryMed">79.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntryMed">85.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">33</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">58.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="cipher_funcs.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#376">add_gpg_prefix</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#328">add_salted_str</a></td> + <td class="coverFnHi">415</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#53">get_random_data</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#273">rij_decrypt</a></td> + <td class="coverFnHi">387</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#235">rij_encrypt</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#116">rij_salt_and_iv</a></td> + <td class="coverFnHi">803</td> + </tr> + <tr> + <td class="coverFn"><a href="cipher_funcs.c.gcov.html#199">rijndael_init</a></td> + <td class="coverFnHi">803</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html new file mode 100644 index 00000000..9104109b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html @@ -0,0 +1,502 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/cipher_funcs.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - cipher_funcs.c<span style="font-size: 80%;"> (source / <a href="cipher_funcs.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">95</td> + <td class="headerCovTableEntry">120</td> + <td class="headerCovTableEntryMed">79.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntryMed">85.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">33</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">58.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: cipher_funcs.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Cipher functions used by fwknop +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This library is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &lt;stdio.h&gt; +<span class="lineNum"> 32 </span> : : #include &lt;string.h&gt; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #ifdef WIN32 +<span class="lineNum"> 35 </span> : : #include &lt;sys/timeb.h&gt; +<span class="lineNum"> 36 </span> : : #include &lt;time.h&gt; +<span class="lineNum"> 37 </span> : : #include &lt;stdlib.h&gt; +<span class="lineNum"> 38 </span> : : #else +<span class="lineNum"> 39 </span> : : #include &lt;sys/time.h&gt; +<span class="lineNum"> 40 </span> : : #endif +<span class="lineNum"> 41 </span> : : +<span class="lineNum"> 42 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 43 </span> : : #include &quot;cipher_funcs.h&quot; +<span class="lineNum"> 44 </span> : : #include &quot;digest.h&quot; +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : #ifndef WIN32 +<span class="lineNum"> 47 </span> : : #ifndef RAND_FILE +<span class="lineNum"> 48 </span> : : #define RAND_FILE &quot;/dev/urandom&quot; +<span class="lineNum"> 49 </span> : : #endif +<span class="lineNum"> 50 </span> : : #endif +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> : : /* Get random data. +<a name="53"><span class="lineNum"> 53 </span> : : */</a> +<span class="lineNum"> 54 </span> : : void +<span class="lineNum"> 55 </span> :<span class="lineCov"> 416 : get_random_data(unsigned char *data, const size_t len)</span> +<span class="lineNum"> 56 </span> : : { +<span class="lineNum"> 57 </span> : : uint32_t i; +<span class="lineNum"> 58 </span> : : #ifdef WIN32 +<span class="lineNum"> 59 </span> : : int rnum; +<span class="lineNum"> 60 </span> : : struct _timeb tb; +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> : : _ftime_s(&amp;tb); +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> : : srand((uint32_t)(tb.time*1000)+tb.millitm); +<span class="lineNum"> 65 </span> : : +<span class="lineNum"> 66 </span> : : for(i=0; i&lt;len; i++) +<span class="lineNum"> 67 </span> : : { +<span class="lineNum"> 68 </span> : : rnum = rand(); +<span class="lineNum"> 69 </span> : : *(data+i) = rnum % 0xff; +<span class="lineNum"> 70 </span> : : } +<span class="lineNum"> 71 </span> : : #else +<span class="lineNum"> 72 </span> : : FILE *rfd; +<span class="lineNum"> 73 </span> : : struct timeval tv; +<span class="lineNum"> 74 </span> :<span class="lineCov"> 416 : int do_time = 0;</span> +<span class="lineNum"> 75 </span> : : size_t amt_read; +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : /* Attempt to read seed data from /dev/urandom. If that does not +<span class="lineNum"> 78 </span> : : * work, then fall back to a time-based method (less secure, but +<span class="lineNum"> 79 </span> : : * probably more portable). +<span class="lineNum"> 80 </span> : : */ +<span class="lineNum"> 81 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if((rfd = fopen(RAND_FILE, &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 82 </span> : : { +<span class="lineNum"> 83 </span> : : do_time = 1; +<span class="lineNum"> 84 </span> : : } +<span class="lineNum"> 85 </span> : : else +<span class="lineNum"> 86 </span> : : { +<span class="lineNum"> 87 </span> : : /* Read seed from /dev/urandom +<span class="lineNum"> 88 </span> : : */ +<span class="lineNum"> 89 </span> :<span class="lineCov"> 416 : amt_read = fread(data, len, 1, rfd);</span> +<span class="lineNum"> 90 </span> :<span class="lineCov"> 416 : fclose(rfd);</span> +<span class="lineNum"> 91 </span> : : +<span class="lineNum"> 92 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if (amt_read != 1)</span> +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : do_time = 1;</span> +<span class="lineNum"> 94 </span> : : } +<span class="lineNum"> 95 </span> : : +<span class="lineNum"> 96 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if (do_time)</span> +<span class="lineNum"> 97 </span> : : { +<span class="lineNum"> 98 </span> : : /* Seed based on time (current usecs). +<span class="lineNum"> 99 </span> : : */ +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : gettimeofday(&amp;tv, NULL);</span> +<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : srand(tv.tv_usec);</span> +<span class="lineNum"> 102 </span> : : +<span class="lineNum"> 103 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;len; i++)</span> +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : *(data+i) = rand() % 0xff;</span> +<span class="lineNum"> 105 </span> : : } +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> : : #endif +<span class="lineNum"> 108 </span> : : +<span class="lineNum"> 109 </span> :<span class="lineCov"> 416 : }</span> +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : /*** These are Rijndael-specific functions ***/ +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : /* Rijndael function to generate initial salt and initialization vector +<span class="lineNum"> 115 </span> : : * (iv). This is is done to be compatible with the data produced via OpenSSL +<a name="116"><span class="lineNum"> 116 </span> : : */</a> +<span class="lineNum"> 117 </span> : : static void +<span class="lineNum"> 118 </span> :<span class="lineCov"> 803 : rij_salt_and_iv(RIJNDAEL_context *ctx, const char *key,</span> +<span class="lineNum"> 119 </span> : : const int key_len, const unsigned char *data, const int mode_flag) +<span class="lineNum"> 120 </span> : : { +<span class="lineNum"> 121 </span> :<span class="lineCov"> 803 : char pw_buf[RIJNDAEL_MAX_KEYSIZE] = {0};</span> +<span class="lineNum"> 122 </span> :<span class="lineCov"> 803 : unsigned char tmp_buf[MD5_DIGEST_LEN+RIJNDAEL_MAX_KEYSIZE+RIJNDAEL_BLOCKSIZE] = {0};</span> +<span class="lineNum"> 123 </span> :<span class="lineCov"> 803 : unsigned char kiv_buf[RIJNDAEL_MAX_KEYSIZE+RIJNDAEL_BLOCKSIZE] = {0}; /* Key and IV buffer */</span> +<span class="lineNum"> 124 </span> :<span class="lineCov"> 803 : unsigned char md5_buf[MD5_DIGEST_LEN] = {0}; /* Buffer for computed md5 hash */</span> +<span class="lineNum"> 125 </span> : : +<span class="lineNum"> 126 </span> :<span class="lineCov"> 803 : int final_key_len = 0;</span> +<span class="lineNum"> 127 </span> :<span class="lineCov"> 803 : size_t kiv_len = 0;</span> +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 803 : if(mode_flag == FKO_ENC_MODE_CBC_LEGACY_IV)</span> +<span class="lineNum"> 130 </span> : : { +<span class="lineNum"> 131 </span> : : /* Pad the pw with '0' chars up to the minimum Rijndael key size. +<span class="lineNum"> 132 </span> : : * +<span class="lineNum"> 133 </span> : : * This maintains compatibility with the old perl code if absolutely +<span class="lineNum"> 134 </span> : : * necessary in some scenarios, but is not recommended to use since it +<span class="lineNum"> 135 </span> : : * breaks compatibility with how OpenSSL implements AES and introduces +<span class="lineNum"> 136 </span> : : * other problems. This code will be removed altogether in a future +<span class="lineNum"> 137 </span> : : * version of fwknop. +<span class="lineNum"> 138 </span> : : */ +<span class="lineNum"> 139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &lt; RIJNDAEL_MIN_KEYSIZE)</span> +<span class="lineNum"> 140 </span> : : { +<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : memcpy(pw_buf, key, key_len);</span> +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : memset(pw_buf+key_len, '0', RIJNDAEL_MIN_KEYSIZE - key_len);</span> +<span class="lineNum"> 143 </span> : : final_key_len = RIJNDAEL_MIN_KEYSIZE; +<span class="lineNum"> 144 </span> : : } +<span class="lineNum"> 145 </span> : : else +<span class="lineNum"> 146 </span> : : { +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : memcpy(pw_buf, key, key_len);</span> +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : final_key_len = key_len;</span> +<span class="lineNum"> 149 </span> : : } +<span class="lineNum"> 150 </span> : : } +<span class="lineNum"> 151 </span> : : else +<span class="lineNum"> 152 </span> : : { +<span class="lineNum"> 153 </span> :<span class="lineCov"> 803 : memcpy(pw_buf, key, key_len);</span> +<span class="lineNum"> 154 </span> :<span class="lineCov"> 803 : final_key_len = key_len;</span> +<span class="lineNum"> 155 </span> : : } +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> : : /* If we are decrypting, data will contain the salt. Otherwise, +<span class="lineNum"> 158 </span> : : * for encryption, we generate a random salt. +<span class="lineNum"> 159 </span> : : */ +<span class="lineNum"> 160 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 803 : if(data != NULL)</span> +<span class="lineNum"> 161 </span> : : { +<span class="lineNum"> 162 </span> : : /* Pull the salt from the data +<span class="lineNum"> 163 </span> : : */ +<span class="lineNum"> 164 </span> :<span class="lineCov"> 387 : memcpy(ctx-&gt;salt, (data+SALT_LEN), SALT_LEN);</span> +<span class="lineNum"> 165 </span> : : } +<span class="lineNum"> 166 </span> : : else +<span class="lineNum"> 167 </span> : : { +<span class="lineNum"> 168 </span> : : /* Generate a random 8-byte salt. +<span class="lineNum"> 169 </span> : : */ +<span class="lineNum"> 170 </span> :<span class="lineCov"> 416 : get_random_data(ctx-&gt;salt, SALT_LEN);</span> +<span class="lineNum"> 171 </span> : : } +<span class="lineNum"> 172 </span> : : +<span class="lineNum"> 173 </span> : : /* Now generate the key and initialization vector. +<span class="lineNum"> 174 </span> : : * (again it is the perl Crypt::CBC way, with a touch of +<span class="lineNum"> 175 </span> : : * fwknop). +<span class="lineNum"> 176 </span> : : */ +<span class="lineNum"> 177 </span> :<span class="lineCov"> 803 : memcpy(tmp_buf+MD5_DIGEST_LEN, pw_buf, final_key_len);</span> +<span class="lineNum"> 178 </span> :<span class="lineCov"> 803 : memcpy(tmp_buf+MD5_DIGEST_LEN+final_key_len, ctx-&gt;salt, SALT_LEN);</span> +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> [<span class="branchCov" title="Branch 0 was taken 2409 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 3212 : while(kiv_len &lt; sizeof(kiv_buf))</span> +<span class="lineNum"> 181 </span> : : { +<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 803 times"> + </span><span class="branchCov" title="Branch 1 was taken 1606 times"> + </span>]:<span class="lineCov"> 2409 : if(kiv_len == 0)</span> +<span class="lineNum"> 183 </span> :<span class="lineCov"> 803 : md5(md5_buf, tmp_buf+MD5_DIGEST_LEN, final_key_len+SALT_LEN);</span> +<span class="lineNum"> 184 </span> : : else +<span class="lineNum"> 185 </span> :<span class="lineCov"> 1606 : md5(md5_buf, tmp_buf, MD5_DIGEST_LEN+final_key_len+SALT_LEN);</span> +<span class="lineNum"> 186 </span> : : +<span class="lineNum"> 187 </span> : : memcpy(tmp_buf, md5_buf, MD5_DIGEST_LEN); +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> :<span class="lineCov"> 2409 : memcpy(kiv_buf + kiv_len, md5_buf, MD5_DIGEST_LEN);</span> +<span class="lineNum"> 190 </span> : : +<span class="lineNum"> 191 </span> :<span class="lineCov"> 2409 : kiv_len += MD5_DIGEST_LEN;</span> +<span class="lineNum"> 192 </span> : : } +<span class="lineNum"> 193 </span> : : +<span class="lineNum"> 194 </span> :<span class="lineCov"> 803 : memcpy(ctx-&gt;key, kiv_buf, RIJNDAEL_MAX_KEYSIZE);</span> +<span class="lineNum"> 195 </span> :<span class="lineCov"> 803 : memcpy(ctx-&gt;iv, kiv_buf+RIJNDAEL_MAX_KEYSIZE, RIJNDAEL_BLOCKSIZE);</span> +<span class="lineNum"> 196 </span> :<span class="lineCov"> 803 : }</span> +<span class="lineNum"> 197 </span> : : +<span class="lineNum"> 198 </span> : : /* Initialization entry point. +<a name="199"><span class="lineNum"> 199 </span> : : */</a> +<span class="lineNum"> 200 </span> : : static void +<span class="lineNum"> 201 </span> :<span class="lineCov"> 803 : rijndael_init(RIJNDAEL_context *ctx, const char *key,</span> +<span class="lineNum"> 202 </span> : : const int key_len, const unsigned char *data, +<span class="lineNum"> 203 </span> : : int encryption_mode) +<span class="lineNum"> 204 </span> : : { +<span class="lineNum"> 205 </span> : : +<span class="lineNum"> 206 </span> : : /* The default is Rijndael in CBC mode +<span class="lineNum"> 207 </span> : : */ +<span class="lineNum"> 208 </span> [<span class="branchCov" title="Branch 0 was taken 759 times"> + </span><span class="branchCov" title="Branch 1 was taken 44 times"> + </span>]:<span class="lineCov"> 803 : if(encryption_mode == FKO_ENC_MODE_CBC</span> +<span class="lineNum"> 209 </span> :<span class="lineCov"> 803 : || encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV)</span> +<span class="lineNum"> 210 </span> :<span class="lineCov"> 759 : ctx-&gt;mode = MODE_CBC;</span> +<span class="lineNum"> 211 </span> [<span class="branchCov" title="Branch 0 was taken 7 times"> + </span><span class="branchCov" title="Branch 1 was taken 37 times"> + </span>]:<span class="lineCov"> 44 : else if(encryption_mode == FKO_ENC_MODE_CTR)</span> +<span class="lineNum"> 212 </span> :<span class="lineCov"> 7 : ctx-&gt;mode = MODE_CTR;</span> +<span class="lineNum"> 213 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37 times"> + </span>]:<span class="lineCov"> 37 : else if(encryption_mode == FKO_ENC_MODE_PCBC)</span> +<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : ctx-&gt;mode = MODE_PCBC;</span> +<span class="lineNum"> 215 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 33 times"> + </span>]:<span class="lineCov"> 37 : else if(encryption_mode == FKO_ENC_MODE_OFB)</span> +<span class="lineNum"> 216 </span> :<span class="lineCov"> 4 : ctx-&gt;mode = MODE_OFB;</span> +<span class="lineNum"> 217 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 33 : else if(encryption_mode == FKO_ENC_MODE_CFB)</span> +<span class="lineNum"> 218 </span> :<span class="lineCov"> 2 : ctx-&gt;mode = MODE_CFB;</span> +<span class="lineNum"> 219 </span> [<span class="branchCov" title="Branch 0 was taken 31 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 31 : else if(encryption_mode == FKO_ENC_MODE_ECB)</span> +<span class="lineNum"> 220 </span> :<span class="lineCov"> 31 : ctx-&gt;mode = MODE_ECB;</span> +<span class="lineNum"> 221 </span> : : else /* shouldn't get this far */ +<span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : ctx-&gt;mode = encryption_mode;</span> +<span class="lineNum"> 223 </span> : : +<span class="lineNum"> 224 </span> : : /* Generate the salt and initialization vector. +<span class="lineNum"> 225 </span> : : */ +<span class="lineNum"> 226 </span> :<span class="lineCov"> 803 : rij_salt_and_iv(ctx, key, key_len, data, encryption_mode);</span> +<span class="lineNum"> 227 </span> : : +<span class="lineNum"> 228 </span> : : /* Intialize our Rijndael context. +<span class="lineNum"> 229 </span> : : */ +<span class="lineNum"> 230 </span> :<span class="lineCov"> 803 : rijndael_setup(ctx, RIJNDAEL_MAX_KEYSIZE, ctx-&gt;key);</span> +<span class="lineNum"> 231 </span> :<span class="lineCov"> 803 : }</span> +<span class="lineNum"> 232 </span> : : +<span class="lineNum"> 233 </span> : : /* Take a chunk of data, encrypt it in the same way OpenSSL would +<span class="lineNum"> 234 </span> : : * (with a default of AES in CBC mode). +<a name="235"><span class="lineNum"> 235 </span> : : */</a> +<span class="lineNum"> 236 </span> : : size_t +<span class="lineNum"> 237 </span> :<span class="lineCov"> 416 : rij_encrypt(unsigned char *in, size_t in_len,</span> +<span class="lineNum"> 238 </span> : : const char *key, const int key_len, +<span class="lineNum"> 239 </span> : : unsigned char *out, int encryption_mode) +<span class="lineNum"> 240 </span> : : { +<span class="lineNum"> 241 </span> : : RIJNDAEL_context ctx; +<span class="lineNum"> 242 </span> : : int i, pad_val; +<span class="lineNum"> 243 </span> :<span class="lineCov"> 416 : unsigned char *ondx = out;</span> +<span class="lineNum"> 244 </span> : : +<span class="lineNum"> 245 </span> :<span class="lineCov"> 416 : rijndael_init(&amp;ctx, key, key_len, NULL, encryption_mode);</span> +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> : : /* Prepend the salt to the ciphertext... +<span class="lineNum"> 248 </span> : : */ +<span class="lineNum"> 249 </span> : : memcpy(ondx, &quot;Salted__&quot;, SALT_LEN); +<span class="lineNum"> 250 </span> :<span class="lineCov"> 416 : ondx+=SALT_LEN;</span> +<span class="lineNum"> 251 </span> : : memcpy(ondx, ctx.salt, SALT_LEN); +<span class="lineNum"> 252 </span> :<span class="lineCov"> 416 : ondx+=SALT_LEN;</span> +<span class="lineNum"> 253 </span> : : +<span class="lineNum"> 254 </span> : : /* Add padding to the original plaintext to ensure that it is a +<span class="lineNum"> 255 </span> : : * multiple of the Rijndael block size +<span class="lineNum"> 256 </span> : : */ +<span class="lineNum"> 257 </span> :<span class="lineCov"> 416 : pad_val = RIJNDAEL_BLOCKSIZE - (in_len % RIJNDAEL_BLOCKSIZE);</span> +<span class="lineNum"> 258 </span> [<span class="branchCov" title="Branch 0 was taken 2947 times"> + </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 3363 : for (i = (int)in_len; i &lt; ((int)in_len+pad_val); i++)</span> +<span class="lineNum"> 259 </span> :<span class="lineCov"> 2947 : in[i] = pad_val;</span> +<span class="lineNum"> 260 </span> : : +<span class="lineNum"> 261 </span> :<span class="lineCov"> 416 : block_encrypt(&amp;ctx, in, in_len+pad_val, ondx, ctx.iv);</span> +<span class="lineNum"> 262 </span> : : +<span class="lineNum"> 263 </span> :<span class="lineCov"> 416 : ondx += in_len+pad_val;</span> +<span class="lineNum"> 264 </span> : : +<span class="lineNum"> 265 </span> :<span class="lineCov"> 416 : zero_buf((char *)ctx.key, RIJNDAEL_MAX_KEYSIZE);</span> +<span class="lineNum"> 266 </span> :<span class="lineCov"> 416 : zero_buf((char *)ctx.iv, RIJNDAEL_BLOCKSIZE);</span> +<span class="lineNum"> 267 </span> :<span class="lineCov"> 416 : zero_buf((char *)ctx.salt, SALT_LEN);</span> +<span class="lineNum"> 268 </span> : : +<span class="lineNum"> 269 </span> :<span class="lineCov"> 416 : return(ondx - out);</span> +<span class="lineNum"> 270 </span> : : } +<span class="lineNum"> 271 </span> : : +<span class="lineNum"> 272 </span> : : /* Decrypt the given data. +<a name="273"><span class="lineNum"> 273 </span> : : */</a> +<span class="lineNum"> 274 </span> : : size_t +<span class="lineNum"> 275 </span> :<span class="lineCov"> 387 : rij_decrypt(unsigned char *in, size_t in_len,</span> +<span class="lineNum"> 276 </span> : : const char *key, const int key_len, +<span class="lineNum"> 277 </span> : : unsigned char *out, int encryption_mode) +<span class="lineNum"> 278 </span> : : { +<span class="lineNum"> 279 </span> : : RIJNDAEL_context ctx; +<span class="lineNum"> 280 </span> :<span class="lineCov"> 387 : int i, pad_val, pad_err = 0;</span> +<span class="lineNum"> 281 </span> : : unsigned char *pad_s; +<span class="lineNum"> 282 </span> :<span class="lineCov"> 387 : unsigned char *ondx = out;</span> +<span class="lineNum"> 283 </span> : : +<span class="lineNum"> 284 </span>[<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 387 : if(in == NULL || key == NULL || out == NULL)</span> +<span class="lineNum"> 285 </span> : : return 0; +<span class="lineNum"> 286 </span> : : +<span class="lineNum"> 287 </span> :<span class="lineCov"> 387 : rijndael_init(&amp;ctx, key, key_len, in, encryption_mode);</span> +<span class="lineNum"> 288 </span> : : +<span class="lineNum"> 289 </span> : : /* Remove the first block since it contains the salt (it was consumed +<span class="lineNum"> 290 </span> : : * by the rijndael_init() function above). +<span class="lineNum"> 291 </span> : : */ +<span class="lineNum"> 292 </span> :<span class="lineCov"> 387 : in_len -= RIJNDAEL_BLOCKSIZE;</span> +<span class="lineNum"> 293 </span> :<span class="lineCov"> 387 : memmove(in, in+RIJNDAEL_BLOCKSIZE, in_len);</span> +<span class="lineNum"> 294 </span> : : +<span class="lineNum"> 295 </span> :<span class="lineCov"> 387 : block_decrypt(&amp;ctx, in, in_len, out, ctx.iv);</span> +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> :<span class="lineCov"> 387 : ondx += in_len;</span> +<span class="lineNum"> 298 </span> : : +<span class="lineNum"> 299 </span> : : /* Find and remove padding. +<span class="lineNum"> 300 </span> : : */ +<span class="lineNum"> 301 </span> :<span class="lineCov"> 387 : pad_val = *(ondx-1);</span> +<span class="lineNum"> 302 </span> : : +<span class="lineNum"> 303 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 387 : if(pad_val &gt;= 0 &amp;&amp; pad_val &lt;= RIJNDAEL_BLOCKSIZE)</span> +<span class="lineNum"> 304 </span> : : { +<span class="lineNum"> 305 </span> :<span class="lineCov"> 385 : pad_s = ondx - pad_val;</span> +<span class="lineNum"> 306 </span> : : +<span class="lineNum"> 307 </span> [<span class="branchCov" title="Branch 0 was taken 2761 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 3146 : for(i=0; i &lt; (ondx-pad_s); i++)</span> +<span class="lineNum"> 308 </span> : : { +<span class="lineNum"> 309 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2761 times"> + </span>]:<span class="lineCov"> 2761 : if(*(pad_s+i) != pad_val)</span> +<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : pad_err++;</span> +<span class="lineNum"> 311 </span> : : } +<span class="lineNum"> 312 </span> : : +<span class="lineNum"> 313 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(pad_err == 0)</span> +<span class="lineNum"> 314 </span> :<span class="lineCov"> 385 : ondx -= pad_val;</span> +<span class="lineNum"> 315 </span> : : } +<span class="lineNum"> 316 </span> : : +<span class="lineNum"> 317 </span> :<span class="lineCov"> 387 : *ondx = '\0';</span> +<span class="lineNum"> 318 </span> : : +<span class="lineNum"> 319 </span> :<span class="lineCov"> 387 : zero_buf((char *)ctx.key, RIJNDAEL_MAX_KEYSIZE);</span> +<span class="lineNum"> 320 </span> :<span class="lineCov"> 387 : zero_buf((char *)ctx.iv, RIJNDAEL_BLOCKSIZE);</span> +<span class="lineNum"> 321 </span> :<span class="lineCov"> 387 : zero_buf((char *)ctx.salt, SALT_LEN);</span> +<span class="lineNum"> 322 </span> : : +<span class="lineNum"> 323 </span> :<span class="lineCov"> 387 : return(ondx - out);</span> +<span class="lineNum"> 324 </span> : : } +<span class="lineNum"> 325 </span> : : +<span class="lineNum"> 326 </span> : : /* See if we need to add the &quot;Salted__&quot; string to the front of the +<span class="lineNum"> 327 </span> : : * encrypted data. +<a name="328"><span class="lineNum"> 328 </span> : : */</a> +<span class="lineNum"> 329 </span> : : int +<span class="lineNum"> 330 </span> :<span class="lineCov"> 415 : add_salted_str(fko_ctx_t ctx)</span> +<span class="lineNum"> 331 </span> : : { +<span class="lineNum"> 332 </span> : : char *tbuf; +<span class="lineNum"> 333 </span> : : +<span class="lineNum"> 334 </span> : : #if AFL_FUZZING +<span class="lineNum"> 335 </span> : : ctx-&gt;added_salted_str = 1; +<span class="lineNum"> 336 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 337 </span> : : #endif +<span class="lineNum"> 338 </span> : : +<span class="lineNum"> 339 </span> : : /* We only add the base64 encoded salt to data that is already base64 +<span class="lineNum"> 340 </span> : : * encoded +<span class="lineNum"> 341 </span> : : */ +<span class="lineNum"> 342 </span> [<span class="branchCov" title="Branch 1 was taken 415 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 415 : if(is_base64((unsigned char *)ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 343 </span> :<span class="lineCov"> 415 : ctx-&gt;encrypted_msg_len) == 0)</span> +<span class="lineNum"> 344 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64); +<span class="lineNum"> 345 </span> : : +<span class="lineNum"> 346 </span> [<span class="branchCov" title="Branch 1 was taken 415 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 415 : if(constant_runtime_cmp(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 347 </span> : : B64_RIJNDAEL_SALT, B64_RIJNDAEL_SALT_STR_LEN) != 0) +<span class="lineNum"> 348 </span> : : { +<span class="lineNum"> 349 </span> : : /* We need to realloc space for the salt. +<span class="lineNum"> 350 </span> : : */ +<span class="lineNum"> 351 </span> :<span class="lineCov"> 830 : tbuf = realloc(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len</span> +<span class="lineNum"> 352 </span> :<span class="lineCov"> 415 : + B64_RIJNDAEL_SALT_STR_LEN+1);</span> +<span class="lineNum"> 353 </span> [<span class="branchCov" title="Branch 0 was taken 415 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 415 : if(tbuf == NULL)</span> +<span class="lineNum"> 354 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 355 </span> : : +<span class="lineNum"> 356 </span> :<span class="lineCov"> 415 : memmove(tbuf+B64_RIJNDAEL_SALT_STR_LEN, tbuf, ctx-&gt;encrypted_msg_len);</span> +<span class="lineNum"> 357 </span> : : +<span class="lineNum"> 358 </span> :<span class="lineCov"> 415 : ctx-&gt;encrypted_msg = memcpy(tbuf,</span> +<span class="lineNum"> 359 </span> : : B64_RIJNDAEL_SALT, B64_RIJNDAEL_SALT_STR_LEN); +<span class="lineNum"> 360 </span> : : +<span class="lineNum"> 361 </span> : : /* Adjust the encoded msg len for added SALT value and Make sure we +<span class="lineNum"> 362 </span> : : * are still a properly NULL-terminated string (Ubuntu was one system +<span class="lineNum"> 363 </span> : : * for which this was an issue). +<span class="lineNum"> 364 </span> : : */ +<span class="lineNum"> 365 </span> :<span class="lineCov"> 415 : ctx-&gt;encrypted_msg_len += B64_RIJNDAEL_SALT_STR_LEN;</span> +<span class="lineNum"> 366 </span> :<span class="lineCov"> 415 : tbuf[ctx-&gt;encrypted_msg_len] = '\0';</span> +<span class="lineNum"> 367 </span> : : +<span class="lineNum"> 368 </span> :<span class="lineCov"> 415 : ctx-&gt;added_salted_str = 1;</span> +<span class="lineNum"> 369 </span> : : } +<span class="lineNum"> 370 </span> : : +<span class="lineNum"> 371 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 372 </span> : : } +<span class="lineNum"> 373 </span> : : +<span class="lineNum"> 374 </span> : : /* See if we need to add the &quot;hQ&quot; string to the front of the +<span class="lineNum"> 375 </span> : : * encrypted data. +<a name="376"><span class="lineNum"> 376 </span> : : */</a> +<span class="lineNum"> 377 </span> : : int +<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : add_gpg_prefix(fko_ctx_t ctx)</span> +<span class="lineNum"> 379 </span> : : { +<span class="lineNum"> 380 </span> : : char *tbuf; +<span class="lineNum"> 381 </span> : : +<span class="lineNum"> 382 </span> : : /* We only add the base64 encoded salt to data that is already base64 +<span class="lineNum"> 383 </span> : : * encoded +<span class="lineNum"> 384 </span> : : */ +<span class="lineNum"> 385 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_base64((unsigned char *)ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len) == 0)</span> +<span class="lineNum"> 387 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64); +<span class="lineNum"> 388 </span> : : +<span class="lineNum"> 389 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(constant_runtime_cmp(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 390 </span> : : B64_GPG_PREFIX, B64_GPG_PREFIX_STR_LEN) != 0) +<span class="lineNum"> 391 </span> : : { +<span class="lineNum"> 392 </span> : : /* We need to realloc space for the prefix. +<span class="lineNum"> 393 </span> : : */ +<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : tbuf = realloc(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len</span> +<span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : + B64_GPG_PREFIX_STR_LEN+1);</span> +<span class="lineNum"> 396 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tbuf == NULL)</span> +<span class="lineNum"> 397 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 398 </span> : : +<span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : memmove(tbuf+B64_GPG_PREFIX_STR_LEN, tbuf, ctx-&gt;encrypted_msg_len);</span> +<span class="lineNum"> 400 </span> : : +<span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg = memcpy(tbuf,</span> +<span class="lineNum"> 402 </span> : : B64_GPG_PREFIX, B64_GPG_PREFIX_STR_LEN); +<span class="lineNum"> 403 </span> : : +<span class="lineNum"> 404 </span> : : /* Adjust the encoded msg len for added SALT value and Make sure we +<span class="lineNum"> 405 </span> : : * are still a properly NULL-terminated string (Ubuntu was one system +<span class="lineNum"> 406 </span> : : * for which this was an issue). +<span class="lineNum"> 407 </span> : : */ +<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len += B64_GPG_PREFIX_STR_LEN;</span> +<span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : tbuf[ctx-&gt;encrypted_msg_len] = '\0';</span> +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : ctx-&gt;added_gpg_prefix = 1;</span> +<span class="lineNum"> 412 </span> : : } +<span class="lineNum"> 413 </span> : : +<span class="lineNum"> 414 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 415 </span> : : } +<span class="lineNum"> 416 </span> : : +<span class="lineNum"> 417 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html new file mode 100644 index 00000000..0418cb85 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/digest.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - digest.c<span style="font-size: 80%;"> (<a href="digest.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">25</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntryHi">-</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="digest.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#33">md5</a></td> + <td class="coverFnHi">2409</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#83">sha256</a></td> + <td class="coverFnHi">847</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#95">sha256_base64</a></td> + <td class="coverFnHi">713</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#58">sha1</a></td> + <td class="coverFnHi">206</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#70">sha1_base64</a></td> + <td class="coverFnHi">106</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#45">md5_base64</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#120">sha384_base64</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#145">sha512_base64</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#108">sha384</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#133">sha512</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html new file mode 100644 index 00000000..f551a4b3 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/digest.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - digest.c<span style="font-size: 80%;"> (<a href="digest.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">25</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntryHi">-</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="digest.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#33">md5</a></td> + <td class="coverFnHi">2409</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#45">md5_base64</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#58">sha1</a></td> + <td class="coverFnHi">206</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#70">sha1_base64</a></td> + <td class="coverFnHi">106</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#83">sha256</a></td> + <td class="coverFnHi">847</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#95">sha256_base64</a></td> + <td class="coverFnHi">713</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#108">sha384</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#120">sha384_base64</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#133">sha512</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="digest.c.gcov.html#145">sha512_base64</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html new file mode 100644 index 00000000..2096f05d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html @@ -0,0 +1,242 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/digest.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - digest.c<span style="font-size: 80%;"> (source / <a href="digest.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">25</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntryHi">-</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /**</a> +<span class="lineNum"> 2 </span> : : * @file digest.c +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * @brief Roll-up of the digests used by fwknop. +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 7 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 8 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * License (GNU General Public License): +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 13 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 14 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 15 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 16 </span> : : * +<span class="lineNum"> 17 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : : * +<span class="lineNum"> 22 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 25 </span> : : * USA +<span class="lineNum"> 26 </span> : : */ +<span class="lineNum"> 27 </span> : : +<span class="lineNum"> 28 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 29 </span> : : #include &quot;digest.h&quot; +<span class="lineNum"> 30 </span> : : #include &quot;base64.h&quot; +<span class="lineNum"> 31 </span> : : +<span class="lineNum"> 32 </span> : : /* Compute MD5 hash on in and store result in out. +<a name="33"><span class="lineNum"> 33 </span> : : */</a> +<span class="lineNum"> 34 </span> : : void +<span class="lineNum"> 35 </span> :<span class="lineCov"> 2409 : md5(unsigned char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 36 </span> : : { +<span class="lineNum"> 37 </span> : : MD5Context ctx; +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> :<span class="lineCov"> 2409 : MD5Init(&amp;ctx);</span> +<span class="lineNum"> 40 </span> :<span class="lineCov"> 2409 : MD5Update(&amp;ctx, (unsigned char*)in, size);</span> +<span class="lineNum"> 41 </span> :<span class="lineCov"> 2409 : MD5Final(out, &amp;ctx);</span> +<span class="lineNum"> 42 </span> :<span class="lineCov"> 2409 : }</span> +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : /* Compute MD5 hash on in and store the base64 string result in out. +<a name="45"><span class="lineNum"> 45 </span> : : */</a> +<span class="lineNum"> 46 </span> : : void +<span class="lineNum"> 47 </span> :<span class="lineNoCov"> 0 : md5_base64(char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 48 </span> : : { +<span class="lineNum"> 49 </span> : : uint8_t md[MD5_DIGEST_LEN]; +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : md5(md, in, size);</span> +<span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : b64_encode(md, out, MD5_DIGEST_LEN);</span> +<span class="lineNum"> 53 </span> : : +<span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(out);</span> +<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 56 </span> : : +<span class="lineNum"> 57 </span> : : /* Compute SHA1 hash on in and store result in out. +<a name="58"><span class="lineNum"> 58 </span> : : */</a> +<span class="lineNum"> 59 </span> : : void +<span class="lineNum"> 60 </span> :<span class="lineCov"> 206 : sha1(unsigned char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 61 </span> : : { +<span class="lineNum"> 62 </span> : : SHA1_INFO sha1_info; +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> :<span class="lineCov"> 206 : sha1_init(&amp;sha1_info);</span> +<span class="lineNum"> 65 </span> :<span class="lineCov"> 206 : sha1_update(&amp;sha1_info, (uint8_t*)in, size);</span> +<span class="lineNum"> 66 </span> :<span class="lineCov"> 206 : sha1_final(out, &amp;sha1_info);</span> +<span class="lineNum"> 67 </span> :<span class="lineCov"> 206 : }</span> +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> : : /* Compute SHA1 hash on in and store the base64 string result in out. +<a name="70"><span class="lineNum"> 70 </span> : : */</a> +<span class="lineNum"> 71 </span> : : void +<span class="lineNum"> 72 </span> :<span class="lineCov"> 106 : sha1_base64(char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 73 </span> : : { +<span class="lineNum"> 74 </span> : : uint8_t md[SHA1_DIGEST_LEN]; +<span class="lineNum"> 75 </span> : : +<span class="lineNum"> 76 </span> :<span class="lineCov"> 106 : sha1(md, in, size);</span> +<span class="lineNum"> 77 </span> :<span class="lineCov"> 106 : b64_encode(md, out, SHA1_DIGEST_LEN);</span> +<span class="lineNum"> 78 </span> : : +<span class="lineNum"> 79 </span> :<span class="lineCov"> 106 : strip_b64_eq(out);</span> +<span class="lineNum"> 80 </span> :<span class="lineCov"> 106 : }</span> +<span class="lineNum"> 81 </span> : : +<span class="lineNum"> 82 </span> : : /* Compute SHA256 hash on in and store the hex string result in out. +<a name="83"><span class="lineNum"> 83 </span> : : */</a> +<span class="lineNum"> 84 </span> : : void +<span class="lineNum"> 85 </span> :<span class="lineCov"> 847 : sha256(unsigned char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 86 </span> : : { +<span class="lineNum"> 87 </span> : : SHA256_CTX sha256_ctx; +<span class="lineNum"> 88 </span> : : +<span class="lineNum"> 89 </span> :<span class="lineCov"> 847 : SHA256_Init(&amp;sha256_ctx);</span> +<span class="lineNum"> 90 </span> :<span class="lineCov"> 847 : SHA256_Update(&amp;sha256_ctx, (const uint8_t*)in, size);</span> +<span class="lineNum"> 91 </span> :<span class="lineCov"> 847 : SHA256_Final(out, &amp;sha256_ctx);</span> +<span class="lineNum"> 92 </span> :<span class="lineCov"> 847 : }</span> +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> : : /* Compute SHA256 hash on in and store the base64 string result in out. +<a name="95"><span class="lineNum"> 95 </span> : : */</a> +<span class="lineNum"> 96 </span> : : void +<span class="lineNum"> 97 </span> :<span class="lineCov"> 713 : sha256_base64(char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 98 </span> : : { +<span class="lineNum"> 99 </span> : : uint8_t md[SHA256_DIGEST_LEN]; +<span class="lineNum"> 100 </span> : : +<span class="lineNum"> 101 </span> :<span class="lineCov"> 713 : sha256(md, in, size);</span> +<span class="lineNum"> 102 </span> :<span class="lineCov"> 713 : b64_encode(md, out, SHA256_DIGEST_LEN);</span> +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> :<span class="lineCov"> 713 : strip_b64_eq(out);</span> +<span class="lineNum"> 105 </span> :<span class="lineCov"> 713 : }</span> +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> : : /* Compute SHA384 hash on in and store the hex string result in out. +<a name="108"><span class="lineNum"> 108 </span> : : */</a> +<span class="lineNum"> 109 </span> : : void +<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : sha384(unsigned char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 111 </span> : : { +<span class="lineNum"> 112 </span> : : SHA384_CTX sha384_ctx; +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : SHA384_Init(&amp;sha384_ctx);</span> +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;sha384_ctx, (const uint8_t*)in, size);</span> +<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : SHA384_Final(out, &amp;sha384_ctx);</span> +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 118 </span> : : +<span class="lineNum"> 119 </span> : : /* Compute SHA384 hash on in and store the base64 string result in out. +<a name="120"><span class="lineNum"> 120 </span> : : */</a> +<span class="lineNum"> 121 </span> : : void +<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : sha384_base64(char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 123 </span> : : { +<span class="lineNum"> 124 </span> : : uint8_t md[SHA384_DIGEST_LEN]; +<span class="lineNum"> 125 </span> : : +<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : sha384(md, in, size);</span> +<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : b64_encode(md, out, SHA384_DIGEST_LEN);</span> +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(out);</span> +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> : : /* Compute SHA512 hash on in and store the hex string result in out. +<a name="133"><span class="lineNum"> 133 </span> : : */</a> +<span class="lineNum"> 134 </span> : : void +<span class="lineNum"> 135 </span> :<span class="lineNoCov"> 0 : sha512(unsigned char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 136 </span> : : { +<span class="lineNum"> 137 </span> : : SHA512_CTX sha512_ctx; +<span class="lineNum"> 138 </span> : : +<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : SHA512_Init(&amp;sha512_ctx);</span> +<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;sha512_ctx, (const uint8_t*)in, size);</span> +<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : SHA512_Final(out, &amp;sha512_ctx);</span> +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> : : /* Compute SHA512 hash on in and store the base64 string result in out. +<a name="145"><span class="lineNum"> 145 </span> : : */</a> +<span class="lineNum"> 146 </span> : : void +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : sha512_base64(char *out, unsigned char *in, size_t size)</span> +<span class="lineNum"> 148 </span> : : { +<span class="lineNum"> 149 </span> : : uint8_t md[SHA512_DIGEST_LEN]; +<span class="lineNum"> 150 </span> : : +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : sha512(md, in, size);</span> +<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : b64_encode(md, out, SHA512_DIGEST_LEN);</span> +<span class="lineNum"> 153 </span> : : +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(out);</span> +<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html new file mode 100644 index 00000000..36292b6a --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_client_timeout.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_client_timeout.c<span style="font-size: 80%;"> (<a href="fko_client_timeout.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntryLo">71.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryLo">58.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_client_timeout.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#102">fko_get_spa_client_timeout</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#35">fko_set_spa_client_timeout</a></td> + <td class="coverFnHi">437</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html new file mode 100644 index 00000000..cab045bb --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_client_timeout.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_client_timeout.c<span style="font-size: 80%;"> (<a href="fko_client_timeout.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntryLo">71.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryLo">58.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_client_timeout.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#102">fko_get_spa_client_timeout</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#35">fko_set_spa_client_timeout</a></td> + <td class="coverFnHi">437</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html new file mode 100644 index 00000000..1a37bb8a --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html @@ -0,0 +1,215 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_client_timeout.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_client_timeout.c<span style="font-size: 80%;"> (source / <a href="fko_client_timeout.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntryLo">71.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryLo">58.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_spa_client_timeout.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa client timeout data +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : /* Set the SPA Client Timeout data +<a name="35"><span class="lineNum"> 35 </span> : : */</a> +<span class="lineNum"> 36 </span> : : int +<span class="lineNum"> 37 </span> :<span class="lineCov"> 437 : fko_set_spa_client_timeout(fko_ctx_t ctx, const int timeout)</span> +<span class="lineNum"> 38 </span> : : { +<span class="lineNum"> 39 </span> : : int old_msg_type; +<span class="lineNum"> 40 </span> : : +<span class="lineNum"> 41 </span> : : /* Context must be initialized. +<span class="lineNum"> 42 </span> : : */ +<span class="lineNum"> 43 </span>[<span class="branchCov" title="Branch 0 was taken 437 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 437 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 437 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 44 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : /* The timeout should not be negative +<span class="lineNum"> 47 </span> : : */ +<span class="lineNum"> 48 </span> [<span class="branchCov" title="Branch 0 was taken 437 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 437 : if(timeout &lt; 0)</span> +<span class="lineNum"> 49 </span> : : return(FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE); +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> :<span class="lineCov"> 437 : old_msg_type = ctx-&gt;message_type;</span> +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> :<span class="lineCov"> 437 : ctx-&gt;client_timeout = timeout;</span> +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> :<span class="lineCov"> 437 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 56 </span> : : +<span class="lineNum"> 57 </span> : : /* If a timeout is set, then we may need to verify/change message +<span class="lineNum"> 58 </span> : : * type accordingly. +<span class="lineNum"> 59 </span> : : */ +<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 437 : if(ctx-&gt;client_timeout &gt; 0)</span> +<span class="lineNum"> 61 </span> : : { +<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 1 time"> + </span>]:<span class="lineCov"> 3 : switch(ctx-&gt;message_type)</span> +<span class="lineNum"> 63 </span> : : { +<span class="lineNum"> 64 </span> : : case FKO_ACCESS_MSG: +<span class="lineNum"> 65 </span> :<span class="lineCov"> 2 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_ACCESS_MSG;</span> +<span class="lineNum"> 66 </span> :<span class="lineCov"> 2 : break;</span> +<span class="lineNum"> 67 </span> : : +<span class="lineNum"> 68 </span> : : case FKO_NAT_ACCESS_MSG: +<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : case FKO_LOCAL_NAT_ACCESS_MSG: +<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 75 </span> : : } +<span class="lineNum"> 76 </span> : : } +<span class="lineNum"> 77 </span> : : else /* Timeout is 0, which means ignore it. */ +<span class="lineNum"> 78 </span> : : { +<span class="lineNum"> 79 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 433 times"> + </span>]:<span class="lineCov"> 434 : switch(ctx-&gt;message_type)</span> +<span class="lineNum"> 80 </span> : : { +<span class="lineNum"> 81 </span> : : case FKO_CLIENT_TIMEOUT_ACCESS_MSG: +<span class="lineNum"> 82 </span> :<span class="lineCov"> 1 : ctx-&gt;message_type = FKO_ACCESS_MSG;</span> +<span class="lineNum"> 83 </span> :<span class="lineCov"> 1 : break;</span> +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> : : case FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG: +<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 88 </span> : : +<span class="lineNum"> 89 </span> : : case FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG: +<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_LOCAL_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 92 </span> : : } +<span class="lineNum"> 93 </span> : : } +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 437 : if(ctx-&gt;message_type != old_msg_type)</span> +<span class="lineNum"> 96 </span> :<span class="lineCov"> 3 : ctx-&gt;state |= FKO_SPA_MSG_TYPE_MODIFIED;</span> +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 99 </span> : : } +<span class="lineNum"> 100 </span> : : +<span class="lineNum"> 101 </span> : : /* Return the SPA message data. +<a name="102"><span class="lineNum"> 102 </span> : : */</a> +<span class="lineNum"> 103 </span> : : int +<span class="lineNum"> 104 </span> :<span class="lineCov"> 801 : fko_get_spa_client_timeout(fko_ctx_t ctx, int *timeout)</span> +<span class="lineNum"> 105 </span> : : { +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 108 </span> : : fiu_return_on(&quot;fko_get_spa_client_timeout_init&quot;, +<span class="lineNum"> 109 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 110 </span> : : #endif +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : /* Must be initialized +<span class="lineNum"> 113 </span> : : */ +<span class="lineNum"> 114 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 115 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 116 </span> : : +<span class="lineNum"> 117 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(timeout == NULL)</span> +<span class="lineNum"> 118 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 121 </span> : : fiu_return_on(&quot;fko_get_spa_client_timeout_val&quot;, +<span class="lineNum"> 122 </span> : : FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 123 </span> : : #endif +<span class="lineNum"> 124 </span> : : +<span class="lineNum"> 125 </span> :<span class="lineCov"> 801 : *timeout = ctx-&gt;client_timeout;</span> +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 128 </span> : : } +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html new file mode 100644 index 00000000..645407fe --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html @@ -0,0 +1,137 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_decode.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_decode.c<span style="font-size: 80%;"> (<a href="fko_decode.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">139</td> + <td class="headerCovTableEntry">190</td> + <td class="headerCovTableEntryLo">73.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">73</td> + <td class="headerCovTableEntry">164</td> + <td class="headerCovTableEntryLo">44.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_decode.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#45">num_fields</a></td> + <td class="coverFnHi">770</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#486">fko_decode_spa_data</a></td> + <td class="coverFnHi">387</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#123">is_valid_digest_len</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#81">verify_digest</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#412">parse_timestamp</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#62">last_field</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#390">parse_version</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#208">parse_nat_msg</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#305">parse_client_timeout</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#334">parse_msg_type</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#435">parse_username</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#464">parse_rand_val</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#243">parse_server_auth</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#163">parse_msg</a></td> + <td class="coverFnHi">385</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html new file mode 100644 index 00000000..4285722c --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html @@ -0,0 +1,137 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_decode.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_decode.c<span style="font-size: 80%;"> (<a href="fko_decode.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">139</td> + <td class="headerCovTableEntry">190</td> + <td class="headerCovTableEntryLo">73.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">73</td> + <td class="headerCovTableEntry">164</td> + <td class="headerCovTableEntryLo">44.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_decode.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#486">fko_decode_spa_data</a></td> + <td class="coverFnHi">387</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#123">is_valid_digest_len</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#62">last_field</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#45">num_fields</a></td> + <td class="coverFnHi">770</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#305">parse_client_timeout</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#163">parse_msg</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#334">parse_msg_type</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#208">parse_nat_msg</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#464">parse_rand_val</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#243">parse_server_auth</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#412">parse_timestamp</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#435">parse_username</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#390">parse_version</a></td> + <td class="coverFnHi">385</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_decode.c.gcov.html#81">verify_digest</a></td> + <td class="coverFnHi">385</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html new file mode 100644 index 00000000..d3356286 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html @@ -0,0 +1,743 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_decode.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_decode.c<span style="font-size: 80%;"> (source / <a href="fko_decode.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">139</td> + <td class="headerCovTableEntry">190</td> + <td class="headerCovTableEntryLo">73.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">73</td> + <td class="headerCovTableEntry">164</td> + <td class="headerCovTableEntryLo">44.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_decode.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Decode an FKO SPA message after decryption. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;base64.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : #define FIELD_PARSERS 9 +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : /* Char used to separate SPA fields in an SPA packet */ +<span class="lineNum"> 40 </span> : : #define SPA_FIELD_SEPARATOR &quot;:&quot; +<span class="lineNum"> 41 </span> : : +<span class="lineNum"> 42 </span> : : #ifdef HAVE_C_UNIT_TESTS +<span class="lineNum"> 43 </span> : : DECLARE_TEST_SUITE(fko_decode, &quot;FKO decode test suite&quot;); +<span class="lineNum"> 44 </span> : : #endif +<a name="45"><span class="lineNum"> 45 </span> : : </a> +<span class="lineNum"> 46 </span> : : static int +<span class="lineNum"> 47 </span> :<span class="lineCov"> 770 : num_fields(char *str)</span> +<span class="lineNum"> 48 </span> : : { +<span class="lineNum"> 49 </span> :<span class="lineCov"> 770 : int i=0;</span> +<span class="lineNum"> 50 </span> :<span class="lineCov"> 770 : char *tmp = NULL;</span> +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> : : /* Count the number of remaining SPA packet fields +<span class="lineNum"> 53 </span> : : */ +<span class="lineNum"> 54 </span> [<span class="branchCov" title="Branch 0 was taken 3467 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 3467 : for (i=0; i &lt;= MAX_SPA_FIELDS+1; i++)</span> +<span class="lineNum"> 55 </span> : : { +<span class="lineNum"> 56 </span> [<span class="branchCov" title="Branch 0 was taken 2697 times"> + </span><span class="branchCov" title="Branch 1 was taken 770 times"> + </span>]:<span class="lineCov"> 3467 : if ((tmp = strchr(str, ':')) == NULL)</span> +<span class="lineNum"> 57 </span> : : break; +<span class="lineNum"> 58 </span> :<span class="lineCov"> 2697 : str = tmp + 1;</span> +<span class="lineNum"> 59 </span> : : } +<span class="lineNum"> 60 </span> :<span class="lineCov"> 770 : return i;</span> +<span class="lineNum"> 61 </span> : : } +<a name="62"><span class="lineNum"> 62 </span> : : </a> +<span class="lineNum"> 63 </span> : : static int +<span class="lineNum"> 64 </span> :<span class="lineCov"> 385 : last_field(char *str)</span> +<span class="lineNum"> 65 </span> : : { +<span class="lineNum"> 66 </span> :<span class="lineCov"> 385 : int i=0, pos_last=0;</span> +<span class="lineNum"> 67 </span> :<span class="lineCov"> 385 : char *tmp = NULL;</span> +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> : : /* Count the number of bytes to the last ':' char +<span class="lineNum"> 70 </span> : : */ +<span class="lineNum"> 71 </span> [<span class="branchCov" title="Branch 0 was taken 2696 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2696 : for (i=0; i &lt;= MAX_SPA_FIELDS+1; i++)</span> +<span class="lineNum"> 72 </span> : : { +<span class="lineNum"> 73 </span> [<span class="branchCov" title="Branch 0 was taken 2311 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 2696 : if ((tmp = strchr(str, ':')) == NULL)</span> +<span class="lineNum"> 74 </span> : : break; +<span class="lineNum"> 75 </span> : : +<span class="lineNum"> 76 </span> :<span class="lineCov"> 2311 : pos_last += (tmp - str) + 1;</span> +<span class="lineNum"> 77 </span> :<span class="lineCov"> 2311 : str = tmp + 1;</span> +<span class="lineNum"> 78 </span> : : } +<span class="lineNum"> 79 </span> :<span class="lineCov"> 385 : return pos_last;</span> +<span class="lineNum"> 80 </span> : : } +<a name="81"><span class="lineNum"> 81 </span> : : </a> +<span class="lineNum"> 82 </span> : : static int +<span class="lineNum"> 83 </span> :<span class="lineCov"> 385 : verify_digest(char *tbuf, int t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 84 </span> : : { +<span class="lineNum"> 85 </span> : : #if AFL_FUZZING +<span class="lineNum"> 86 </span> : : return FKO_SUCCESS; +<span class="lineNum"> 87 </span> : : #endif +<span class="lineNum"> 88 </span> : : +<span class="lineNum"> 89 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span><span class="branchCov" title="Branch 2 was taken 338 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 385 : switch(ctx-&gt;digest_type)</span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] +<span class="lineNum"> 90 </span> : : { +<span class="lineNum"> 91 </span> : : case FKO_DIGEST_MD5: +<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : md5_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> : : case FKO_DIGEST_SHA1: +<span class="lineNum"> 96 </span> :<span class="lineCov"> 47 : sha1_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> +<span class="lineNum"> 97 </span> :<span class="lineCov"> 47 : break;</span> +<span class="lineNum"> 98 </span> : : +<span class="lineNum"> 99 </span> : : case FKO_DIGEST_SHA256: +<span class="lineNum"> 100 </span> :<span class="lineCov"> 338 : sha256_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> +<span class="lineNum"> 101 </span> :<span class="lineCov"> 338 : break;</span> +<span class="lineNum"> 102 </span> : : +<span class="lineNum"> 103 </span> : : case FKO_DIGEST_SHA384: +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : sha384_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> +<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> : : case FKO_DIGEST_SHA512: +<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : sha512_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> : : default: /* Invalid or unsupported digest */ +<span class="lineNum"> 112 </span> : : return(FKO_ERROR_INVALID_DIGEST_TYPE); +<span class="lineNum"> 113 </span> : : } +<span class="lineNum"> 114 </span> : : +<span class="lineNum"> 115 </span> : : /* We give up here if the computed digest does not match the +<span class="lineNum"> 116 </span> : : * digest in the message data. +<span class="lineNum"> 117 </span> : : */ +<span class="lineNum"> 118 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(constant_runtime_cmp(ctx-&gt;digest, tbuf, t_size) != 0)</span> +<span class="lineNum"> 119 </span> : : return(FKO_ERROR_DIGEST_VERIFICATION_FAILED); +<span class="lineNum"> 120 </span> : : +<span class="lineNum"> 121 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 122 </span> : : } +<a name="123"><span class="lineNum"> 123 </span> : : </a> +<span class="lineNum"> 124 </span> : : static int +<span class="lineNum"> 125 </span> :<span class="lineCov"> 385 : is_valid_digest_len(int t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 126 </span> : : { +<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span><span class="branchCov" title="Branch 2 was taken 338 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 385 : switch(t_size)</span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] +<span class="lineNum"> 128 </span> : : { +<span class="lineNum"> 129 </span> : : case MD5_B64_LEN: +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_type = FKO_DIGEST_MD5;</span> +<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_len = MD5_B64_LEN;</span> +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> : : case SHA1_B64_LEN: +<span class="lineNum"> 135 </span> :<span class="lineCov"> 47 : ctx-&gt;digest_type = FKO_DIGEST_SHA1;</span> +<span class="lineNum"> 136 </span> :<span class="lineCov"> 47 : ctx-&gt;digest_len = SHA1_B64_LEN;</span> +<span class="lineNum"> 137 </span> :<span class="lineCov"> 47 : break;</span> +<span class="lineNum"> 138 </span> : : +<span class="lineNum"> 139 </span> : : case SHA256_B64_LEN: +<span class="lineNum"> 140 </span> :<span class="lineCov"> 338 : ctx-&gt;digest_type = FKO_DIGEST_SHA256;</span> +<span class="lineNum"> 141 </span> :<span class="lineCov"> 338 : ctx-&gt;digest_len = SHA256_B64_LEN;</span> +<span class="lineNum"> 142 </span> :<span class="lineCov"> 338 : break;</span> +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> : : case SHA384_B64_LEN: +<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_type = FKO_DIGEST_SHA384;</span> +<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_len = SHA384_B64_LEN;</span> +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 148 </span> : : +<span class="lineNum"> 149 </span> : : case SHA512_B64_LEN: +<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_type = FKO_DIGEST_SHA512;</span> +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_len = SHA512_B64_LEN;</span> +<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 153 </span> : : +<span class="lineNum"> 154 </span> : : default: /* Invalid or unsupported digest */ +<span class="lineNum"> 155 </span> : : return(FKO_ERROR_INVALID_DIGEST_TYPE); +<span class="lineNum"> 156 </span> : : } +<span class="lineNum"> 157 </span> : : +<span class="lineNum"> 158 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (ctx-&gt;encoded_msg_len - t_size &lt; 0)</span> +<span class="lineNum"> 159 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE); +<span class="lineNum"> 160 </span> : : +<span class="lineNum"> 161 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 162 </span> : : } +<a name="163"><span class="lineNum"> 163 </span> : : </a> +<span class="lineNum"> 164 </span> : : static int +<span class="lineNum"> 165 </span> :<span class="lineCov"> 385 : parse_msg(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 166 </span> : : { +<span class="lineNum"> 167 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> +<span class="lineNum"> 168 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING); +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 171 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG); +<span class="lineNum"> 172 </span> : : +<span class="lineNum"> 173 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;message != NULL)</span> +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;message);</span> +<span class="lineNum"> 177 </span> : : +<span class="lineNum"> 178 </span> :<span class="lineCov"> 385 : ctx-&gt;message = calloc(1, *t_size+1); /* Yes, more than we need */</span> +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;message == NULL)</span> +<span class="lineNum"> 181 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 182 </span> : : +<span class="lineNum"> 183 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;message) &lt; 0)</span> +<span class="lineNum"> 184 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL); +<span class="lineNum"> 185 </span> : : +<span class="lineNum"> 186 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;message_type == FKO_COMMAND_MSG)</span> +<span class="lineNum"> 187 </span> : : { +<span class="lineNum"> 188 </span> : : /* Require a message similar to: 1.2.3.4,&lt;command&gt; +<span class="lineNum"> 189 </span> : : */ +<span class="lineNum"> 190 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(validate_cmd_msg(ctx-&gt;message) != FKO_SUCCESS)</span> +<span class="lineNum"> 191 </span> : : { +<span class="lineNum"> 192 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL); +<span class="lineNum"> 193 </span> : : } +<span class="lineNum"> 194 </span> : : } +<span class="lineNum"> 195 </span> : : else +<span class="lineNum"> 196 </span> : : { +<span class="lineNum"> 197 </span> : : /* Require a message similar to: 1.2.3.4,tcp/22 +<span class="lineNum"> 198 </span> : : */ +<span class="lineNum"> 199 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(validate_access_msg(ctx-&gt;message) != FKO_SUCCESS)</span> +<span class="lineNum"> 200 </span> : : { +<span class="lineNum"> 201 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL); +<span class="lineNum"> 202 </span> : : } +<span class="lineNum"> 203 </span> : : } +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 206 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 207 </span> : : } +<a name="208"><span class="lineNum"> 208 </span> : : </a> +<span class="lineNum"> 209 </span> : : static int +<span class="lineNum"> 210 </span> :<span class="lineCov"> 385 : parse_nat_msg(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 211 </span> : : { +<span class="lineNum"> 212 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if( ctx-&gt;message_type == FKO_NAT_ACCESS_MSG</span> +<span class="lineNum"> 213 </span> :<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_LOCAL_NAT_ACCESS_MSG</span> +<span class="lineNum"> 214 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG</span> +<span class="lineNum"> 215 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 216 </span> : : { +<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> +<span class="lineNum"> 218 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING); +<span class="lineNum"> 219 </span> : : +<span class="lineNum"> 220 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 221 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG); +<span class="lineNum"> 222 </span> : : +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy(tbuf, *ndx, *t_size+1);</span> +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access != NULL)</span> +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;nat_access);</span> +<span class="lineNum"> 227 </span> : : +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : ctx-&gt;nat_access = calloc(1, *t_size+1); /* Yes, more than we need */</span> +<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access == NULL)</span> +<span class="lineNum"> 230 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 231 </span> : : +<span class="lineNum"> 232 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;nat_access) &lt; 0)</span> +<span class="lineNum"> 233 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL); +<span class="lineNum"> 234 </span> : : +<span class="lineNum"> 235 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(validate_nat_access_msg(ctx-&gt;nat_access) != FKO_SUCCESS)</span> +<span class="lineNum"> 236 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL); +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 239 </span> : : } +<span class="lineNum"> 240 </span> : : +<span class="lineNum"> 241 </span> : : return FKO_SUCCESS; +<span class="lineNum"> 242 </span> : : } +<a name="243"><span class="lineNum"> 243 </span> : : </a> +<span class="lineNum"> 244 </span> : : static int +<span class="lineNum"> 245 </span> :<span class="lineCov"> 385 : parse_server_auth(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 246 </span> : : { +<span class="lineNum"> 247 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 384 times"> + </span>]:<span class="lineCov"> 385 : if((*t_size = strlen(*ndx)) &gt; 0)</span> +<span class="lineNum"> 248 </span> : : { +<span class="lineNum"> 249 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 250 </span> : : { +<span class="lineNum"> 251 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING); +<span class="lineNum"> 252 </span> : : } +<span class="lineNum"> 253 </span> : : } +<span class="lineNum"> 254 </span> : : else +<span class="lineNum"> 255 </span> : : return FKO_SUCCESS; +<span class="lineNum"> 256 </span> : : +<span class="lineNum"> 257 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if( ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_ACCESS_MSG</span> +<span class="lineNum"> 258 </span> : : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG +<span class="lineNum"> 259 </span> :<span class="lineCov"> 1 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 260 </span> : : { +<span class="lineNum"> 261 </span> : : /* If we are here then we may still have a server_auth string, +<span class="lineNum"> 262 </span> : : * or a timeout, or both. So we look for a ':' delimiter. If +<span class="lineNum"> 263 </span> : : * it is there we have both, if not we check the message_type +<span class="lineNum"> 264 </span> : : * again. +<span class="lineNum"> 265 </span> : : */ +<span class="lineNum"> 266 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : if(strchr(*ndx, ':'))</span> +<span class="lineNum"> 267 </span> : : { +<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : *t_size = strcspn(*ndx, &quot;:&quot;);</span> +<span class="lineNum"> 269 </span> : : +<span class="lineNum"> 270 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 271 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG); +<span class="lineNum"> 272 </span> : : +<span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : strlcpy(tbuf, *ndx, *t_size+1);</span> +<span class="lineNum"> 274 </span> : : +<span class="lineNum"> 275 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth != NULL)</span> +<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> +<span class="lineNum"> 277 </span> : : +<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : ctx-&gt;server_auth = calloc(1, *t_size+1); /* Yes, more than we need */</span> +<span class="lineNum"> 279 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth == NULL)</span> +<span class="lineNum"> 280 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 281 </span> : : +<span class="lineNum"> 282 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;server_auth) &lt; 0)</span> +<span class="lineNum"> 283 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL); +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 286 </span> : : } +<span class="lineNum"> 287 </span> : : } +<span class="lineNum"> 288 </span> : : else +<span class="lineNum"> 289 </span> : : { +<span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : strlcpy(tbuf, *ndx, *t_size+1);</span> +<span class="lineNum"> 291 </span> : : +<span class="lineNum"> 292 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth != NULL)</span> +<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> +<span class="lineNum"> 294 </span> : : +<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : ctx-&gt;server_auth = calloc(1, *t_size+1); /* Yes, more than we need */</span> +<span class="lineNum"> 296 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth == NULL)</span> +<span class="lineNum"> 297 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 298 </span> : : +<span class="lineNum"> 299 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;server_auth) &lt; 0)</span> +<span class="lineNum"> 300 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL); +<span class="lineNum"> 301 </span> : : } +<span class="lineNum"> 302 </span> : : +<span class="lineNum"> 303 </span> : : return FKO_SUCCESS; +<span class="lineNum"> 304 </span> : : } +<a name="305"><span class="lineNum"> 305 </span> : : </a> +<span class="lineNum"> 306 </span> : : static int +<span class="lineNum"> 307 </span> :<span class="lineCov"> 385 : parse_client_timeout(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 308 </span> : : { +<span class="lineNum"> 309 </span> : : int is_err; +<span class="lineNum"> 310 </span> : : +<span class="lineNum"> 311 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 384 times"> + </span>]:<span class="lineCov"> 385 : if( ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_ACCESS_MSG</span> +<span class="lineNum"> 312 </span> : : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG +<span class="lineNum"> 313 </span> :<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 314 </span> : : { +<span class="lineNum"> 315 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if((*t_size = strlen(*ndx)) &lt; 1)</span> +<span class="lineNum"> 316 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING); +<span class="lineNum"> 317 </span> : : +<span class="lineNum"> 318 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 319 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG); +<span class="lineNum"> 320 </span> : : +<span class="lineNum"> 321 </span> : : /* Should be a number only. +<span class="lineNum"> 322 </span> : : */ +<span class="lineNum"> 323 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(strspn(*ndx, &quot;0123456789&quot;) != *t_size)</span> +<span class="lineNum"> 324 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL); +<span class="lineNum"> 325 </span> : : +<span class="lineNum"> 326 </span> :<span class="lineCov"> 1 : ctx-&gt;client_timeout = (unsigned int) strtol_wrapper(*ndx, 0,</span> +<span class="lineNum"> 327 </span> : : (2 &lt;&lt; 15), NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 328 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 329 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL); +<span class="lineNum"> 330 </span> : : } +<span class="lineNum"> 331 </span> : : +<span class="lineNum"> 332 </span> : : return FKO_SUCCESS; +<span class="lineNum"> 333 </span> : : } +<a name="334"><span class="lineNum"> 334 </span> : : </a> +<span class="lineNum"> 335 </span> : : static int +<span class="lineNum"> 336 </span> :<span class="lineCov"> 385 : parse_msg_type(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 337 </span> : : { +<span class="lineNum"> 338 </span> : : int is_err, remaining_fields; +<span class="lineNum"> 339 </span> : : +<span class="lineNum"> 340 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> +<span class="lineNum"> 341 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING); +<span class="lineNum"> 342 </span> : : +<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(*t_size &gt; MAX_SPA_MESSAGE_TYPE_SIZE)</span> +<span class="lineNum"> 344 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG); +<span class="lineNum"> 345 </span> : : +<span class="lineNum"> 346 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> +<span class="lineNum"> 347 </span> : : +<span class="lineNum"> 348 </span> :<span class="lineCov"> 385 : ctx-&gt;message_type = strtol_wrapper(tbuf, 0,</span> +<span class="lineNum"> 349 </span> : : FKO_LAST_MSG_TYPE-1, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 350 </span> : : +<span class="lineNum"> 351 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 352 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL); +<span class="lineNum"> 353 </span> : : +<span class="lineNum"> 354 </span> : : /* Now that we have a valid type, ensure that the total +<span class="lineNum"> 355 </span> : : * number of SPA fields is also valid for the type +<span class="lineNum"> 356 </span> : : */ +<span class="lineNum"> 357 </span>[<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 385 : remaining_fields = num_fields(*ndx);</span> +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 5 was taken 384 times"> + </span><span class="branchCov" title="Branch 6 was taken 1 time"> + </span>][<span class="branchCov" title="Branch 7 was taken 384 times"> + </span><span class="branchNoCov" title="Branch 8 was not taken"> - </span>] +<span class="lineNum"> 358 </span> : : +<span class="lineNum"> 359 </span> : : switch(ctx-&gt;message_type) +<span class="lineNum"> 360 </span> : : { +<span class="lineNum"> 361 </span> : : /* optional server_auth + digest */ +<span class="lineNum"> 362 </span> : : case FKO_COMMAND_MSG: +<span class="lineNum"> 363 </span> : : case FKO_ACCESS_MSG: +<span class="lineNum"> 364 </span> [<span class="branchCov" title="Branch 0 was taken 384 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 384 : if(remaining_fields &gt; 2)</span> +<span class="lineNum"> 365 </span> : : return FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS; +<span class="lineNum"> 366 </span> : : break; +<span class="lineNum"> 367 </span> : : +<span class="lineNum"> 368 </span> : : /* nat or client timeout + optional server_auth + digest */ +<span class="lineNum"> 369 </span> : : case FKO_NAT_ACCESS_MSG: +<span class="lineNum"> 370 </span> : : case FKO_LOCAL_NAT_ACCESS_MSG: +<span class="lineNum"> 371 </span> : : case FKO_CLIENT_TIMEOUT_ACCESS_MSG: +<span class="lineNum"> 372 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(remaining_fields &gt; 3)</span> +<span class="lineNum"> 373 </span> : : return FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS; +<span class="lineNum"> 374 </span> : : break; +<span class="lineNum"> 375 </span> : : +<span class="lineNum"> 376 </span> : : /* client timeout + nat + optional server_auth + digest */ +<span class="lineNum"> 377 </span> : : case FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG: +<span class="lineNum"> 378 </span> : : case FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG: +<span class="lineNum"> 379 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(remaining_fields &gt; 4)</span> +<span class="lineNum"> 380 </span> : : return FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS; +<span class="lineNum"> 381 </span> : : break; +<span class="lineNum"> 382 </span> : : +<span class="lineNum"> 383 </span> : : default: /* Should not reach here */ +<span class="lineNum"> 384 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL); +<span class="lineNum"> 385 </span> : : } +<span class="lineNum"> 386 </span> : : +<span class="lineNum"> 387 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 388 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 389 </span> : : } +<a name="390"><span class="lineNum"> 390 </span> : : </a> +<span class="lineNum"> 391 </span> : : static int +<span class="lineNum"> 392 </span> :<span class="lineCov"> 385 : parse_version(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 393 </span> : : { +<span class="lineNum"> 394 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> +<span class="lineNum"> 395 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING); +<span class="lineNum"> 396 </span> : : +<span class="lineNum"> 397 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_VERSION_SIZE)</span> +<span class="lineNum"> 398 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG); +<span class="lineNum"> 399 </span> : : +<span class="lineNum"> 400 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;version != NULL)</span> +<span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;version);</span> +<span class="lineNum"> 402 </span> : : +<span class="lineNum"> 403 </span> :<span class="lineCov"> 385 : ctx-&gt;version = calloc(1, *t_size+1);</span> +<span class="lineNum"> 404 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;version == NULL)</span> +<span class="lineNum"> 405 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 406 </span> : : +<span class="lineNum"> 407 </span> :<span class="lineCov"> 385 : strlcpy(ctx-&gt;version, *ndx, *t_size+1);</span> +<span class="lineNum"> 408 </span> : : +<span class="lineNum"> 409 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 410 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 411 </span> : : } +<a name="412"><span class="lineNum"> 412 </span> : : </a> +<span class="lineNum"> 413 </span> : : static int +<span class="lineNum"> 414 </span> :<span class="lineCov"> 385 : parse_timestamp(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 415 </span> : : { +<span class="lineNum"> 416 </span> : : int is_err; +<span class="lineNum"> 417 </span> : : +<span class="lineNum"> 418 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> +<span class="lineNum"> 419 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING); +<span class="lineNum"> 420 </span> : : +<span class="lineNum"> 421 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_TIMESTAMP_SIZE)</span> +<span class="lineNum"> 422 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG); +<span class="lineNum"> 423 </span> : : +<span class="lineNum"> 424 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> +<span class="lineNum"> 425 </span> : : +<span class="lineNum"> 426 </span> :<span class="lineCov"> 385 : ctx-&gt;timestamp = (unsigned int) strtol_wrapper(tbuf,</span> +<span class="lineNum"> 427 </span> : : 0, -1, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 428 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 429 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL); +<span class="lineNum"> 430 </span> : : +<span class="lineNum"> 431 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 432 </span> : : +<span class="lineNum"> 433 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 434 </span> : : } +<a name="435"><span class="lineNum"> 435 </span> : : </a> +<span class="lineNum"> 436 </span> : : static int +<span class="lineNum"> 437 </span> :<span class="lineCov"> 385 : parse_username(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 438 </span> : : { +<span class="lineNum"> 439 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> +<span class="lineNum"> 440 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING); +<span class="lineNum"> 441 </span> : : +<span class="lineNum"> 442 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_USERNAME_SIZE)</span> +<span class="lineNum"> 443 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG); +<span class="lineNum"> 444 </span> : : +<span class="lineNum"> 445 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> +<span class="lineNum"> 446 </span> : : +<span class="lineNum"> 447 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;username != NULL)</span> +<span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;username);</span> +<span class="lineNum"> 449 </span> : : +<span class="lineNum"> 450 </span> :<span class="lineCov"> 385 : ctx-&gt;username = calloc(1, *t_size+1); /* Yes, more than we need */</span> +<span class="lineNum"> 451 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;username == NULL)</span> +<span class="lineNum"> 452 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 453 </span> : : +<span class="lineNum"> 454 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;username) &lt; 0)</span> +<span class="lineNum"> 455 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL); +<span class="lineNum"> 456 </span> : : +<span class="lineNum"> 457 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(validate_username(ctx-&gt;username) != FKO_SUCCESS)</span> +<span class="lineNum"> 458 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL); +<span class="lineNum"> 459 </span> : : +<span class="lineNum"> 460 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 461 </span> : : +<span class="lineNum"> 462 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 463 </span> : : } +<a name="464"><span class="lineNum"> 464 </span> : : </a> +<span class="lineNum"> 465 </span> : : static int +<span class="lineNum"> 466 </span> :<span class="lineCov"> 385 : parse_rand_val(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 467 </span> : : { +<span class="lineNum"> 468 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; FKO_RAND_VAL_SIZE)</span> +<span class="lineNum"> 469 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING); +<span class="lineNum"> 470 </span> : : +<span class="lineNum"> 471 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;rand_val != NULL)</span> +<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;rand_val);</span> +<span class="lineNum"> 473 </span> : : +<span class="lineNum"> 474 </span> :<span class="lineCov"> 385 : ctx-&gt;rand_val = calloc(1, FKO_RAND_VAL_SIZE+1);</span> +<span class="lineNum"> 475 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;rand_val == NULL)</span> +<span class="lineNum"> 476 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 477 </span> : : +<span class="lineNum"> 478 </span> :<span class="lineCov"> 770 : ctx-&gt;rand_val = strncpy(ctx-&gt;rand_val, *ndx, FKO_RAND_VAL_SIZE);</span> +<span class="lineNum"> 479 </span> : : +<span class="lineNum"> 480 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> +<span class="lineNum"> 481 </span> : : +<span class="lineNum"> 482 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> +<span class="lineNum"> 483 </span> : : } +<span class="lineNum"> 484 </span> : : +<span class="lineNum"> 485 </span> : : /* Decode the encoded SPA data. +<a name="486"><span class="lineNum"> 486 </span> : : */</a> +<span class="lineNum"> 487 </span> : : int +<span class="lineNum"> 488 </span> :<span class="lineCov"> 387 : fko_decode_spa_data(fko_ctx_t ctx)</span> +<span class="lineNum"> 489 </span> : : { +<span class="lineNum"> 490 </span> : : char *tbuf, *ndx; +<span class="lineNum"> 491 </span> : : int t_size, i, res; +<span class="lineNum"> 492 </span> : : +<span class="lineNum"> 493 </span> : : /* Array of function pointers to SPA field parsing functions +<span class="lineNum"> 494 </span> : : */ +<span class="lineNum"> 495 </span> :<span class="lineCov"> 387 : int (*field_parser[FIELD_PARSERS])(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> +<span class="lineNum"> 496 </span> : : = { parse_rand_val, /* Extract random value */ +<span class="lineNum"> 497 </span> : : parse_username, /* Extract username */ +<span class="lineNum"> 498 </span> : : parse_timestamp, /* Client timestamp */ +<span class="lineNum"> 499 </span> : : parse_version, /* SPA version */ +<span class="lineNum"> 500 </span> : : parse_msg_type, /* SPA msg type */ +<span class="lineNum"> 501 </span> : : parse_msg, /* SPA msg string */ +<span class="lineNum"> 502 </span> : : parse_nat_msg, /* SPA NAT msg string */ +<span class="lineNum"> 503 </span> : : parse_server_auth, /* optional server authentication method */ +<span class="lineNum"> 504 </span> : : parse_client_timeout /* client defined timeout */ +<span class="lineNum"> 505 </span> : : }; +<span class="lineNum"> 506 </span> : : +<span class="lineNum"> 507 </span> [<span class="branchCov" title="Branch 1 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 387 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> +<span class="lineNum"> 508 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL); +<span class="lineNum"> 509 </span> : : +<span class="lineNum"> 510 </span> : : /* Make sure there are no non-ascii printable chars +<span class="lineNum"> 511 </span> : : */ +<span class="lineNum"> 512 </span> [<span class="branchCov" title="Branch 1 was taken 47253 times"> + </span><span class="branchCov" title="Branch 2 was taken 385 times"> + </span>]:<span class="lineCov"> 47638 : for (i=0; i &lt; (int)strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE); i++)</span> +<span class="lineNum"> 513 </span> [<span class="branchCov" title="Branch 1 was taken 47251 times"> + </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 47253 : if(isprint(ctx-&gt;encoded_msg[i]) == 0)</span> +<span class="lineNum"> 514 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII); +<span class="lineNum"> 515 </span> : : +<span class="lineNum"> 516 </span> : : /* Make sure there are enough fields in the SPA packet +<span class="lineNum"> 517 </span> : : * delimited with ':' chars +<span class="lineNum"> 518 </span> : : */ +<span class="lineNum"> 519 </span> :<span class="lineCov"> 385 : ndx = ctx-&gt;encoded_msg;</span> +<span class="lineNum"> 520 </span> : : +<span class="lineNum"> 521 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if (num_fields(ndx) &lt; MIN_SPA_FIELDS)</span> +<span class="lineNum"> 522 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS); +<span class="lineNum"> 523 </span> : : +<span class="lineNum"> 524 </span> :<span class="lineCov"> 385 : ndx += last_field(ndx);</span> +<span class="lineNum"> 525 </span> : : +<span class="lineNum"> 526 </span> :<span class="lineCov"> 385 : t_size = strnlen(ndx, SHA512_B64_LEN+1);</span> +<span class="lineNum"> 527 </span> : : +<span class="lineNum"> 528 </span> : : /* Validate digest length +<span class="lineNum"> 529 </span> : : */ +<span class="lineNum"> 530 </span> :<span class="lineCov"> 385 : res = is_valid_digest_len(t_size, ctx);</span> +<span class="lineNum"> 531 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 532 </span> : : return res; +<span class="lineNum"> 533 </span> : : +<span class="lineNum"> 534 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;digest != NULL)</span> +<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;digest);</span> +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> : : /* Copy the digest into the context and terminate the encoded data +<span class="lineNum"> 538 </span> : : * at that point so the original digest is not part of the +<span class="lineNum"> 539 </span> : : * encoded string. +<span class="lineNum"> 540 </span> : : */ +<span class="lineNum"> 541 </span> :<span class="lineCov"> 385 : ctx-&gt;digest = strdup(ndx);</span> +<span class="lineNum"> 542 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;digest == NULL)</span> +<span class="lineNum"> 543 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 544 </span> : : +<span class="lineNum"> 545 </span> : : /* Chop the digest off of the encoded_msg bucket... +<span class="lineNum"> 546 </span> : : */ +<span class="lineNum"> 547 </span> :<span class="lineCov"> 385 : bzero((ndx-1), t_size);</span> +<span class="lineNum"> 548 </span> : : +<span class="lineNum"> 549 </span> :<span class="lineCov"> 385 : ctx-&gt;encoded_msg_len -= t_size+1;</span> +<span class="lineNum"> 550 </span> : : +<span class="lineNum"> 551 </span> : : /* Make a tmp bucket for processing base64 encoded data and +<span class="lineNum"> 552 </span> : : * other general use. +<span class="lineNum"> 553 </span> : : */ +<span class="lineNum"> 554 </span> :<span class="lineCov"> 385 : tbuf = calloc(1, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 555 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(tbuf == NULL)</span> +<span class="lineNum"> 556 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 557 </span> : : +<span class="lineNum"> 558 </span> : : /* Can now verify the digest. +<span class="lineNum"> 559 </span> : : */ +<span class="lineNum"> 560 </span> :<span class="lineCov"> 385 : res = verify_digest(tbuf, t_size, ctx);</span> +<span class="lineNum"> 561 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 562 </span> : : { +<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> +<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_DIGEST_VERIFICATION_FAILED);</span> +<span class="lineNum"> 565 </span> : : } +<span class="lineNum"> 566 </span> : : +<span class="lineNum"> 567 </span> : : /* Now we will work through the encoded data and extract (and base64- +<span class="lineNum"> 568 </span> : : * decode where necessary), the SPA data fields and populate the context. +<span class="lineNum"> 569 </span> : : */ +<span class="lineNum"> 570 </span> :<span class="lineCov"> 385 : ndx = ctx-&gt;encoded_msg;</span> +<span class="lineNum"> 571 </span> : : +<span class="lineNum"> 572 </span> [<span class="branchCov" title="Branch 0 was taken 3465 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 3850 : for (i=0; i &lt; FIELD_PARSERS; i++)</span> +<span class="lineNum"> 573 </span> : : { +<span class="lineNum"> 574 </span> :<span class="lineCov"> 3465 : res = (*field_parser[i])(tbuf, &amp;ndx, &amp;t_size, ctx);</span> +<span class="lineNum"> 575 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3465 times"> + </span>]:<span class="lineCov"> 3465 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 576 </span> : : { +<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> +<span class="lineNum"> 578 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 579 </span> : : } +<span class="lineNum"> 580 </span> : : } +<span class="lineNum"> 581 </span> : : +<span class="lineNum"> 582 </span> : : /* Done with the tmp buffer. +<span class="lineNum"> 583 </span> : : */ +<span class="lineNum"> 584 </span> :<span class="lineCov"> 385 : free(tbuf);</span> +<span class="lineNum"> 585 </span> : : +<span class="lineNum"> 586 </span> : : /* Call the context initialized. +<span class="lineNum"> 587 </span> : : */ +<span class="lineNum"> 588 </span> :<span class="lineCov"> 385 : ctx-&gt;initval = FKO_CTX_INITIALIZED;</span> +<span class="lineNum"> 589 </span> :<span class="lineCov"> 385 : FKO_SET_CTX_INITIALIZED(ctx);</span> +<span class="lineNum"> 590 </span> : : +<span class="lineNum"> 591 </span> :<span class="lineCov"> 385 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 592 </span> : : } +<span class="lineNum"> 593 </span> : : +<span class="lineNum"> 594 </span> : : #ifdef HAVE_C_UNIT_TESTS +<span class="lineNum"> 595 </span> : : +<span class="lineNum"> 596 </span> : : DECLARE_UTEST(num_fields, &quot;Count the number of SPA fields in a SPA packet&quot;) +<span class="lineNum"> 597 </span> : : { +<span class="lineNum"> 598 </span> : : int ix_field=0; +<span class="lineNum"> 599 </span> : : char spa_packet[(MAX_SPA_FIELDS+1)*3]; +<span class="lineNum"> 600 </span> : : +<span class="lineNum"> 601 </span> : : /* Zeroing the spa packet */ +<span class="lineNum"> 602 </span> : : memset(spa_packet, 0, sizeof(spa_packet)); +<span class="lineNum"> 603 </span> : : +<span class="lineNum"> 604 </span> : : /* Check we are able to count the number of SPA fields */ +<span class="lineNum"> 605 </span> : : for(ix_field=0 ; ix_field&lt;=MAX_SPA_FIELDS+2 ; ix_field++) +<span class="lineNum"> 606 </span> : : { +<span class="lineNum"> 607 </span> : : strcat(spa_packet, &quot;x&quot;); +<span class="lineNum"> 608 </span> : : CU_ASSERT(num_fields(spa_packet) == ix_field); +<span class="lineNum"> 609 </span> : : strcat(spa_packet, SPA_FIELD_SEPARATOR); +<span class="lineNum"> 610 </span> : : } +<span class="lineNum"> 611 </span> : : +<span class="lineNum"> 612 </span> : : /* Check for possible overflow */ +<span class="lineNum"> 613 </span> : : strcat(spa_packet, &quot;x&quot;); +<span class="lineNum"> 614 </span> : : CU_ASSERT(num_fields(spa_packet) == MAX_SPA_FIELDS + 2); +<span class="lineNum"> 615 </span> : : strcat(spa_packet, &quot;x&quot;); +<span class="lineNum"> 616 </span> : : strcat(spa_packet, SPA_FIELD_SEPARATOR); +<span class="lineNum"> 617 </span> : : CU_ASSERT(num_fields(spa_packet) == MAX_SPA_FIELDS + 2); +<span class="lineNum"> 618 </span> : : } +<span class="lineNum"> 619 </span> : : +<span class="lineNum"> 620 </span> : : DECLARE_UTEST(last_field, &quot;Count the number of bytes to the last :&quot;) +<span class="lineNum"> 621 </span> : : { +<span class="lineNum"> 622 </span> : : int ix_field; +<span class="lineNum"> 623 </span> : : char spa_packet[(MAX_SPA_FIELDS+1)*3]; +<span class="lineNum"> 624 </span> : : +<span class="lineNum"> 625 </span> : : /* Zeroing the spa packet */ +<span class="lineNum"> 626 </span> : : memset(spa_packet, 0, sizeof(spa_packet)); +<span class="lineNum"> 627 </span> : : +<span class="lineNum"> 628 </span> : : /* Check for a valid count when the number of field is less than MAX_SPA_FIELDS */ +<span class="lineNum"> 629 </span> : : CU_ASSERT(last_field(&quot;a:&quot;) == 2); +<span class="lineNum"> 630 </span> : : CU_ASSERT(last_field(&quot;ab:abc:&quot;) == 7); +<span class="lineNum"> 631 </span> : : CU_ASSERT(last_field(&quot;abc:abcd:&quot;) == 9); +<span class="lineNum"> 632 </span> : : CU_ASSERT(last_field(&quot;abc:abcd:abc&quot;) == 9); +<span class="lineNum"> 633 </span> : : +<span class="lineNum"> 634 </span> : : +<span class="lineNum"> 635 </span> : : /* */ +<span class="lineNum"> 636 </span> : : for(ix_field=0 ; ix_field&lt;=MAX_SPA_FIELDS+2 ; ix_field++) +<span class="lineNum"> 637 </span> : : { +<span class="lineNum"> 638 </span> : : strcat(spa_packet, &quot;x&quot;); +<span class="lineNum"> 639 </span> : : strcat(spa_packet, SPA_FIELD_SEPARATOR); +<span class="lineNum"> 640 </span> : : } +<span class="lineNum"> 641 </span> : : CU_ASSERT(last_field(spa_packet) == ((MAX_SPA_FIELDS+2)*2)); +<span class="lineNum"> 642 </span> : : } +<span class="lineNum"> 643 </span> : : +<span class="lineNum"> 644 </span> : : int register_ts_fko_decode(void) +<span class="lineNum"> 645 </span> : : { +<span class="lineNum"> 646 </span> : : ts_init(&amp;TEST_SUITE(fko_decode), TEST_SUITE_DESCR(fko_decode), NULL, NULL); +<span class="lineNum"> 647 </span> : : ts_add_utest(&amp;TEST_SUITE(fko_decode), UTEST_FCT(num_fields), UTEST_DESCR(num_fields)); +<span class="lineNum"> 648 </span> : : ts_add_utest(&amp;TEST_SUITE(fko_decode), UTEST_FCT(last_field), UTEST_DESCR(last_field)); +<span class="lineNum"> 649 </span> : : +<span class="lineNum"> 650 </span> : : return register_ts(&amp;TEST_SUITE(fko_decode)); +<span class="lineNum"> 651 </span> : : } +<span class="lineNum"> 652 </span> : : +<span class="lineNum"> 653 </span> : : #endif /* HAVE_C_UNIT_TESTS */ +<span class="lineNum"> 654 </span> : : +<span class="lineNum"> 655 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html new file mode 100644 index 00000000..b39ef127 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_digest.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_digest.c<span style="font-size: 80%;"> (<a href="fko_digest.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">41</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">56.9 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">60.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">58</td> + <td class="headerCovTableEntryLo">31.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_digest.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#38">set_spa_digest_type</a></td> + <td class="coverFnHi">938</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#64">fko_set_spa_digest_type</a></td> + <td class="coverFnHi">938</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#78">fko_get_spa_digest_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#258">fko_get_spa_digest</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#210">fko_set_spa_digest</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#122">set_digest</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#234">fko_set_raw_spa_digest</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#280">fko_get_raw_spa_digest</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#105">fko_get_raw_spa_digest_type</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#70">fko_set_raw_spa_digest_type</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html new file mode 100644 index 00000000..473c50f4 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_digest.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_digest.c<span style="font-size: 80%;"> (<a href="fko_digest.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">41</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">56.9 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">60.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">58</td> + <td class="headerCovTableEntryLo">31.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_digest.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#280">fko_get_raw_spa_digest</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#105">fko_get_raw_spa_digest_type</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#258">fko_get_spa_digest</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#78">fko_get_spa_digest_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#234">fko_set_raw_spa_digest</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#70">fko_set_raw_spa_digest_type</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#210">fko_set_spa_digest</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#64">fko_set_spa_digest_type</a></td> + <td class="coverFnHi">938</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#122">set_digest</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_digest.c.gcov.html#38">set_spa_digest_type</a></td> + <td class="coverFnHi">938</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html new file mode 100644 index 00000000..47b5642b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html @@ -0,0 +1,383 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_digest.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_digest.c<span style="font-size: 80%;"> (source / <a href="fko_digest.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">41</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">56.9 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">60.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">58</td> + <td class="headerCovTableEntryLo">31.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_digest.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Create the base64-encoded digest for the current spa data. The +<span class="lineNum"> 7 </span> : : * digest used is determined by the digest_type setting in the +<span class="lineNum"> 8 </span> : : * fko context. +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 11 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 12 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * License (GNU General Public License): +<span class="lineNum"> 15 </span> : : * +<span class="lineNum"> 16 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 17 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 18 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 19 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 20 </span> : : * +<span class="lineNum"> 21 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 22 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 23 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 24 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 25 </span> : : * +<span class="lineNum"> 26 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 27 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 28 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 29 </span> : : * USA +<span class="lineNum"> 30 </span> : : * +<span class="lineNum"> 31 </span> : : ***************************************************************************** +<span class="lineNum"> 32 </span> : : */ +<span class="lineNum"> 33 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : /* Set the SPA digest type. +<a name="38"><span class="lineNum"> 38 </span> : : */</a> +<span class="lineNum"> 39 </span> : : static int +<span class="lineNum"> 40 </span> :<span class="lineCov"> 938 : set_spa_digest_type(fko_ctx_t ctx,</span> +<span class="lineNum"> 41 </span> : : short *digest_type_field, const short digest_type) +<span class="lineNum"> 42 </span> : : { +<span class="lineNum"> 43 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 44 </span> : : fiu_return_on(&quot;set_spa_digest_type_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 45 </span> : : #endif +<span class="lineNum"> 46 </span> : : /* Must be initialized +<span class="lineNum"> 47 </span> : : */ +<span class="lineNum"> 48 </span>[<span class="branchCov" title="Branch 0 was taken 938 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 938 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 938 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 49 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 52 </span> : : fiu_return_on(&quot;set_spa_digest_type_val&quot;, +<span class="lineNum"> 53 </span> : : FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL); +<span class="lineNum"> 54 </span> : : #endif +<span class="lineNum"> 55 </span> [<span class="branchCov" title="Branch 0 was taken 938 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 938 : if(digest_type &lt; 1 || digest_type &gt;= FKO_LAST_DIGEST_TYPE)</span> +<span class="lineNum"> 56 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL); +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> :<span class="lineCov"> 938 : *digest_type_field = digest_type;</span> +<span class="lineNum"> 59 </span> : : +<span class="lineNum"> 60 </span> :<span class="lineCov"> 938 : ctx-&gt;state |= FKO_DIGEST_TYPE_MODIFIED;</span> +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> :<span class="lineCov"> 938 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 63 </span> : : } +<a name="64"><span class="lineNum"> 64 </span> : : </a> +<span class="lineNum"> 65 </span> : : int +<span class="lineNum"> 66 </span> :<span class="lineCov"> 938 : fko_set_spa_digest_type(fko_ctx_t ctx, const short digest_type)</span> +<span class="lineNum"> 67 </span> : : { +<span class="lineNum"> 68 </span> :<span class="lineCov"> 938 : return set_spa_digest_type(ctx, &amp;ctx-&gt;digest_type, digest_type);</span> +<span class="lineNum"> 69 </span> : : } +<a name="70"><span class="lineNum"> 70 </span> : : </a> +<span class="lineNum"> 71 </span> : : int +<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : fko_set_raw_spa_digest_type(fko_ctx_t ctx, const short raw_digest_type)</span> +<span class="lineNum"> 73 </span> : : { +<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return set_spa_digest_type(ctx, &amp;ctx-&gt;raw_digest_type, raw_digest_type);</span> +<span class="lineNum"> 75 </span> : : } +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : /* Return the SPA digest type. +<a name="78"><span class="lineNum"> 78 </span> : : */</a> +<span class="lineNum"> 79 </span> : : int +<span class="lineNum"> 80 </span> :<span class="lineCov"> 801 : fko_get_spa_digest_type(fko_ctx_t ctx, short *digest_type)</span> +<span class="lineNum"> 81 </span> : : { +<span class="lineNum"> 82 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 83 </span> : : fiu_return_on(&quot;fko_get_spa_digest_type_init&quot;, +<span class="lineNum"> 84 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 85 </span> : : #endif +<span class="lineNum"> 86 </span> : : /* Must be initialized +<span class="lineNum"> 87 </span> : : */ +<span class="lineNum"> 88 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 89 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 92 </span> : : fiu_return_on(&quot;fko_get_spa_digest_type_val&quot;, +<span class="lineNum"> 93 </span> : : FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 94 </span> : : #endif +<span class="lineNum"> 95 </span> : : +<span class="lineNum"> 96 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(digest_type == NULL)</span> +<span class="lineNum"> 97 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 98 </span> : : +<span class="lineNum"> 99 </span> :<span class="lineCov"> 801 : *digest_type = ctx-&gt;digest_type;</span> +<span class="lineNum"> 100 </span> : : +<span class="lineNum"> 101 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 102 </span> : : } +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> : : /* Return the SPA digest type. +<a name="105"><span class="lineNum"> 105 </span> : : */</a> +<span class="lineNum"> 106 </span> : : int +<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : fko_get_raw_spa_digest_type(fko_ctx_t ctx, short *raw_digest_type)</span> +<span class="lineNum"> 108 </span> : : { +<span class="lineNum"> 109 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 110 </span> : : fiu_return_on(&quot;fko_get_raw_spa_digest_type_init&quot;, +<span class="lineNum"> 111 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 112 </span> : : #endif +<span class="lineNum"> 113 </span> : : /* Must be initialized +<span class="lineNum"> 114 </span> : : */ +<span class="lineNum"> 115 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 116 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 117 </span> : : +<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : *raw_digest_type = ctx-&gt;raw_digest_type;</span> +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 121 </span> : : } +<a name="122"><span class="lineNum"> 122 </span> : : </a> +<span class="lineNum"> 123 </span> : : static int +<span class="lineNum"> 124 </span> :<span class="lineCov"> 434 : set_digest(char *data, char **digest, short digest_type, int *digest_len)</span> +<span class="lineNum"> 125 </span> : : { +<span class="lineNum"> 126 </span> :<span class="lineCov"> 434 : char *md = NULL;</span> +<span class="lineNum"> 127 </span> : : int data_len; +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> :<span class="lineCov"> 434 : data_len = strnlen(data, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 130 </span> : : +<span class="lineNum"> 131 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 132 </span> : : fiu_return_on(&quot;set_digest_toobig&quot;, +<span class="lineNum"> 133 </span> : : FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG); +<span class="lineNum"> 134 </span> : : #endif +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(data_len == MAX_SPA_ENCODED_MSG_SIZE)</span> +<span class="lineNum"> 137 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG); +<span class="lineNum"> 138 </span> : : +<span class="lineNum"> 139 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 140 </span> : : fiu_return_on(&quot;set_digest_invalidtype&quot;, FKO_ERROR_INVALID_DIGEST_TYPE); +<span class="lineNum"> 141 </span> : : fiu_return_on(&quot;set_digest_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 142 </span> : : #endif +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 59 times"> + </span><span class="branchCov" title="Branch 2 was taken 375 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 434 : switch(digest_type)</span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] +<span class="lineNum"> 145 </span> : : { +<span class="lineNum"> 146 </span> : : case FKO_DIGEST_MD5: +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : md = calloc(1, MD_HEX_SIZE(MD5_DIGEST_LEN)+1);</span> +<span class="lineNum"> 148 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(md == NULL)</span> +<span class="lineNum"> 149 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 150 </span> : : +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : md5_base64(md,</span> +<span class="lineNum"> 152 </span> : : (unsigned char*)data, data_len); +<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : *digest_len = MD5_B64_LEN;</span> +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> : : case FKO_DIGEST_SHA1: +<span class="lineNum"> 157 </span> :<span class="lineCov"> 59 : md = calloc(1, MD_HEX_SIZE(SHA1_DIGEST_LEN)+1);</span> +<span class="lineNum"> 158 </span> [<span class="branchCov" title="Branch 0 was taken 59 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 59 : if(md == NULL)</span> +<span class="lineNum"> 159 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 160 </span> : : +<span class="lineNum"> 161 </span> :<span class="lineCov"> 59 : sha1_base64(md,</span> +<span class="lineNum"> 162 </span> : : (unsigned char*)data, data_len); +<span class="lineNum"> 163 </span> :<span class="lineCov"> 59 : *digest_len = SHA1_B64_LEN;</span> +<span class="lineNum"> 164 </span> :<span class="lineCov"> 59 : break;</span> +<span class="lineNum"> 165 </span> : : +<span class="lineNum"> 166 </span> : : case FKO_DIGEST_SHA256: +<span class="lineNum"> 167 </span> :<span class="lineCov"> 375 : md = calloc(1, MD_HEX_SIZE(SHA256_DIGEST_LEN)+1);</span> +<span class="lineNum"> 168 </span> [<span class="branchCov" title="Branch 0 was taken 375 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 375 : if(md == NULL)</span> +<span class="lineNum"> 169 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 170 </span> : : +<span class="lineNum"> 171 </span> :<span class="lineCov"> 375 : sha256_base64(md,</span> +<span class="lineNum"> 172 </span> : : (unsigned char*)data, data_len); +<span class="lineNum"> 173 </span> :<span class="lineCov"> 375 : *digest_len = SHA256_B64_LEN;</span> +<span class="lineNum"> 174 </span> :<span class="lineCov"> 375 : break;</span> +<span class="lineNum"> 175 </span> : : +<span class="lineNum"> 176 </span> : : case FKO_DIGEST_SHA384: +<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : md = calloc(1, MD_HEX_SIZE(SHA384_DIGEST_LEN)+1);</span> +<span class="lineNum"> 178 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(md == NULL)</span> +<span class="lineNum"> 179 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 180 </span> : : +<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : sha384_base64(md,</span> +<span class="lineNum"> 182 </span> : : (unsigned char*)data, data_len); +<span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : *digest_len = SHA384_B64_LEN;</span> +<span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 185 </span> : : +<span class="lineNum"> 186 </span> : : case FKO_DIGEST_SHA512: +<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : md = calloc(1, MD_HEX_SIZE(SHA512_DIGEST_LEN)+1);</span> +<span class="lineNum"> 188 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(md == NULL)</span> +<span class="lineNum"> 189 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 190 </span> : : +<span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : sha512_base64(md,</span> +<span class="lineNum"> 192 </span> : : (unsigned char*)data, data_len); +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : *digest_len = SHA512_B64_LEN;</span> +<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 195 </span> : : +<span class="lineNum"> 196 </span> : : default: +<span class="lineNum"> 197 </span> : : return(FKO_ERROR_INVALID_DIGEST_TYPE); +<span class="lineNum"> 198 </span> : : } +<span class="lineNum"> 199 </span> : : +<span class="lineNum"> 200 </span> : : /* Just in case this is a subsquent call to this function. We +<span class="lineNum"> 201 </span> : : * do not want to be leaking memory. +<span class="lineNum"> 202 </span> : : */ +<span class="lineNum"> 203 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(*digest != NULL)</span> +<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : free(*digest);</span> +<span class="lineNum"> 205 </span> : : +<span class="lineNum"> 206 </span> :<span class="lineCov"> 434 : *digest = md;</span> +<span class="lineNum"> 207 </span> : : +<span class="lineNum"> 208 </span> :<span class="lineCov"> 434 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 209 </span> : : } +<a name="210"><span class="lineNum"> 210 </span> : : </a> +<span class="lineNum"> 211 </span> : : int +<span class="lineNum"> 212 </span> :<span class="lineCov"> 434 : fko_set_spa_digest(fko_ctx_t ctx)</span> +<span class="lineNum"> 213 </span> : : { +<span class="lineNum"> 214 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 215 </span> : : fiu_return_on(&quot;fko_set_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 216 </span> : : #endif +<span class="lineNum"> 217 </span> : : /* Must be initialized +<span class="lineNum"> 218 </span> : : */ +<span class="lineNum"> 219 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 220 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 221 </span> : : +<span class="lineNum"> 222 </span> : : /* Must have encoded message data to start with. +<span class="lineNum"> 223 </span> : : */ +<span class="lineNum"> 224 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg == NULL)</span> +<span class="lineNum"> 225 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 226 </span> : : +<span class="lineNum"> 227 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 228 </span> : : fiu_return_on(&quot;fko_set_spa_digest_encoded&quot;, FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 229 </span> : : #endif +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> :<span class="lineCov"> 434 : return set_digest(ctx-&gt;encoded_msg, &amp;ctx-&gt;digest,</span> +<span class="lineNum"> 232 </span> :<span class="lineCov"> 434 : ctx-&gt;digest_type, &amp;ctx-&gt;digest_len);</span> +<span class="lineNum"> 233 </span> : : } +<a name="234"><span class="lineNum"> 234 </span> : : </a> +<span class="lineNum"> 235 </span> : : int +<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : fko_set_raw_spa_digest(fko_ctx_t ctx)</span> +<span class="lineNum"> 237 </span> : : { +<span class="lineNum"> 238 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 239 </span> : : fiu_return_on(&quot;fko_set_raw_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 240 </span> : : #endif +<span class="lineNum"> 241 </span> : : /* Must be initialized +<span class="lineNum"> 242 </span> : : */ +<span class="lineNum"> 243 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 244 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 245 </span> : : +<span class="lineNum"> 246 </span> : : /* Must have encoded message data to start with. +<span class="lineNum"> 247 </span> : : */ +<span class="lineNum"> 248 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg == NULL)</span> +<span class="lineNum"> 249 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 252 </span> : : fiu_return_on(&quot;fko_set_raw_spa_digest_val&quot;, FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 253 </span> : : #endif +<span class="lineNum"> 254 </span> : : +<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : return set_digest(ctx-&gt;encrypted_msg, &amp;ctx-&gt;raw_digest,</span> +<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : ctx-&gt;raw_digest_type, &amp;ctx-&gt;raw_digest_len);</span> +<span class="lineNum"> 257 </span> : : } +<a name="258"><span class="lineNum"> 258 </span> : : </a> +<span class="lineNum"> 259 </span> : : int +<span class="lineNum"> 260 </span> :<span class="lineCov"> 801 : fko_get_spa_digest(fko_ctx_t ctx, char **md)</span> +<span class="lineNum"> 261 </span> : : { +<span class="lineNum"> 262 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 263 </span> : : fiu_return_on(&quot;fko_get_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 264 </span> : : #endif +<span class="lineNum"> 265 </span> : : /* Must be initialized +<span class="lineNum"> 266 </span> : : */ +<span class="lineNum"> 267 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 268 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 269 </span> : : +<span class="lineNum"> 270 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 271 </span> : : fiu_return_on(&quot;fko_get_spa_digest_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 272 </span> : : #endif +<span class="lineNum"> 273 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(md == NULL)</span> +<span class="lineNum"> 274 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> :<span class="lineCov"> 801 : *md = ctx-&gt;digest;</span> +<span class="lineNum"> 277 </span> : : +<span class="lineNum"> 278 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 279 </span> : : } +<a name="280"><span class="lineNum"> 280 </span> : : </a> +<span class="lineNum"> 281 </span> : : int +<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : fko_get_raw_spa_digest(fko_ctx_t ctx, char **md)</span> +<span class="lineNum"> 283 </span> : : { +<span class="lineNum"> 284 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 285 </span> : : fiu_return_on(&quot;fko_get_raw_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 286 </span> : : #endif +<span class="lineNum"> 287 </span> : : /* Must be initialized +<span class="lineNum"> 288 </span> : : */ +<span class="lineNum"> 289 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 290 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 291 </span> : : +<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : *md = ctx-&gt;raw_digest;</span> +<span class="lineNum"> 293 </span> : : +<span class="lineNum"> 294 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 295 </span> : : } +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html new file mode 100644 index 00000000..2ab146e7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encode.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encode.c<span style="font-size: 80%;"> (<a href="fko_encode.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntry">64</td> + <td class="headerCovTableEntryMed">78.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">25</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">44.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_encode.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encode.c.gcov.html#40">append_b64</a></td> + <td class="coverFnHi">868</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encode.c.gcov.html#239">fko_get_encoded_data</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encode.c.gcov.html#78">fko_encode_spa_data</a></td> + <td class="coverFnHi">434</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html new file mode 100644 index 00000000..39513c66 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encode.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encode.c<span style="font-size: 80%;"> (<a href="fko_encode.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntry">64</td> + <td class="headerCovTableEntryMed">78.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">25</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">44.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_encode.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encode.c.gcov.html#40">append_b64</a></td> + <td class="coverFnHi">868</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encode.c.gcov.html#78">fko_encode_spa_data</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encode.c.gcov.html#239">fko_get_encoded_data</a></td> + <td class="coverFnHi">801</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html new file mode 100644 index 00000000..4d44eb94 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html @@ -0,0 +1,411 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encode.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encode.c<span style="font-size: 80%;"> (source / <a href="fko_encode.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">50</td> + <td class="headerCovTableEntry">64</td> + <td class="headerCovTableEntryMed">78.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">25</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntryLo">44.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_encode.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Encodes some pieces of the spa data then puts together all of +<span class="lineNum"> 7 </span> : : * the necessary pieces to gether to create the single encoded +<span class="lineNum"> 8 </span> : : * message string. +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 11 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 12 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * License (GNU General Public License): +<span class="lineNum"> 15 </span> : : * +<span class="lineNum"> 16 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 17 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 18 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 19 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 20 </span> : : * +<span class="lineNum"> 21 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 22 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 23 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 24 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 25 </span> : : * +<span class="lineNum"> 26 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 27 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 28 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 29 </span> : : * USA +<span class="lineNum"> 30 </span> : : * +<span class="lineNum"> 31 </span> : : ***************************************************************************** +<span class="lineNum"> 32 </span> : : */ +<span class="lineNum"> 33 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;base64.h&quot; +<span class="lineNum"> 36 </span> : : #include &quot;digest.h&quot; +<span class="lineNum"> 37 </span> : : +<span class="lineNum"> 38 </span> : : /* Take a given string, base64-encode it and append it to the given +<span class="lineNum"> 39 </span> : : * buffer. +<a name="40"><span class="lineNum"> 40 </span> : : */</a> +<span class="lineNum"> 41 </span> : : static int +<span class="lineNum"> 42 </span> :<span class="lineCov"> 868 : append_b64(char* tbuf, char *str)</span> +<span class="lineNum"> 43 </span> : : { +<span class="lineNum"> 44 </span> :<span class="lineCov"> 868 : int len = strnlen(str, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 45 </span> : : char *bs; +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 48 </span> : : fiu_return_on(&quot;append_b64_toobig&quot;, +<span class="lineNum"> 49 </span> : : FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG); +<span class="lineNum"> 50 </span> : : #endif +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> [<span class="branchCov" title="Branch 0 was taken 868 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 868 : if(len &gt;= MAX_SPA_ENCODED_MSG_SIZE)</span> +<span class="lineNum"> 53 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG); +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 56 </span> : : fiu_return_on(&quot;append_b64_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 57 </span> : : #endif +<span class="lineNum"> 58 </span> : : +<span class="lineNum"> 59 </span> :<span class="lineCov"> 868 : bs = calloc(1, ((len/3)*4)+8);</span> +<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 868 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 868 : if(bs == NULL)</span> +<span class="lineNum"> 61 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> :<span class="lineCov"> 868 : b64_encode((unsigned char*)str, bs, len);</span> +<span class="lineNum"> 64 </span> : : +<span class="lineNum"> 65 </span> : : /* --DSS XXX: make sure to check here if later decoding +<span class="lineNum"> 66 </span> : : * becomes a problem. +<span class="lineNum"> 67 </span> : : */ +<span class="lineNum"> 68 </span> :<span class="lineCov"> 868 : strip_b64_eq(bs);</span> +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> :<span class="lineCov"> 868 : strlcat(tbuf, bs, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> :<span class="lineCov"> 868 : free(bs);</span> +<span class="lineNum"> 73 </span> : : +<span class="lineNum"> 74 </span> :<span class="lineCov"> 868 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 75 </span> : : } +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : /* Set the SPA encryption type. +<a name="78"><span class="lineNum"> 78 </span> : : */</a> +<span class="lineNum"> 79 </span> : : int +<span class="lineNum"> 80 </span> :<span class="lineCov"> 434 : fko_encode_spa_data(fko_ctx_t ctx)</span> +<span class="lineNum"> 81 </span> : : { +<span class="lineNum"> 82 </span> :<span class="lineCov"> 434 : int res, offset = 0;</span> +<span class="lineNum"> 83 </span> : : char *tbuf; +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 86 </span> : : fiu_return_on(&quot;fko_encode_spa_data_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 87 </span> : : #endif +<span class="lineNum"> 88 </span> : : /* Must be initialized +<span class="lineNum"> 89 </span> : : */ +<span class="lineNum"> 90 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 91 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 92 </span> : : +<span class="lineNum"> 93 </span> : : /* Check prerequisites. +<span class="lineNum"> 94 </span> : : * --DSS XXX: Needs review. Also, we could make this more robust (or +<span class="lineNum"> 95 </span> : : * (at leaset expand the error reporting for the missing +<span class="lineNum"> 96 </span> : : * data). +<span class="lineNum"> 97 </span> : : */ +<span class="lineNum"> 98 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 99 </span> : : fiu_return_on(&quot;fko_encode_spa_data_valid&quot;, FKO_ERROR_INCOMPLETE_SPA_DATA); +<span class="lineNum"> 100 </span> : : #endif +<span class="lineNum"> 101 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if( validate_username(ctx-&gt;username) != FKO_SUCCESS</span> +<span class="lineNum"> 102 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 434 : || ctx-&gt;version == NULL || strnlen(ctx-&gt;version, MAX_SPA_VERSION_SIZE) == 0</span> +<span class="lineNum"> 103 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 434 : || ctx-&gt;message == NULL || strnlen(ctx-&gt;message, MAX_SPA_MESSAGE_SIZE) == 0)</span> +<span class="lineNum"> 104 </span> : : { +<span class="lineNum"> 105 </span> : : return(FKO_ERROR_INCOMPLETE_SPA_DATA); +<span class="lineNum"> 106 </span> : : } +<span class="lineNum"> 107 </span> : : +<span class="lineNum"> 108 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;message_type == FKO_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 109 </span> : : { +<span class="lineNum"> 110 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access == NULL || strnlen(ctx-&gt;nat_access, MAX_SPA_MESSAGE_SIZE) == 0)</span> +<span class="lineNum"> 111 </span> : : return(FKO_ERROR_INCOMPLETE_SPA_DATA); +<span class="lineNum"> 112 </span> : : } +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 115 </span> : : fiu_return_on(&quot;fko_encode_spa_data_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 116 </span> : : #endif +<span class="lineNum"> 117 </span> : : /* Allocate our initial tmp buffer. +<span class="lineNum"> 118 </span> : : */ +<span class="lineNum"> 119 </span> :<span class="lineCov"> 434 : tbuf = calloc(1, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 120 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(tbuf == NULL)</span> +<span class="lineNum"> 121 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 122 </span> : : +<span class="lineNum"> 123 </span> : : /* Put it together a piece at a time, starting with the rand val. +<span class="lineNum"> 124 </span> : : */ +<span class="lineNum"> 125 </span> :<span class="lineCov"> 434 : strlcpy(tbuf, ctx-&gt;rand_val, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> : : /* Add the base64-encoded username. +<span class="lineNum"> 128 </span> : : */ +<span class="lineNum"> 129 </span> :<span class="lineCov"> 434 : strlcat(tbuf, &quot;:&quot;, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 130 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if((res = append_b64(tbuf, ctx-&gt;username)) != FKO_SUCCESS)</span> +<span class="lineNum"> 131 </span> : : { +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> +<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 134 </span> : : } +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> : : /* Add the timestamp. +<span class="lineNum"> 137 </span> : : */ +<span class="lineNum"> 138 </span> :<span class="lineCov"> 434 : offset = strlen(tbuf);</span> +<span class="lineNum"> 139 </span> :<span class="lineCov"> 434 : snprintf(((char*)tbuf+offset), FKO_ENCODE_TMP_BUF_SIZE - offset,</span> +<span class="lineNum"> 140 </span> :<span class="lineCov"> 434 : &quot;:%u:&quot;, (unsigned int) ctx-&gt;timestamp);</span> +<span class="lineNum"> 141 </span> : : +<span class="lineNum"> 142 </span> : : /* Add the version string. +<span class="lineNum"> 143 </span> : : */ +<span class="lineNum"> 144 </span> :<span class="lineCov"> 434 : strlcat(tbuf, ctx-&gt;version, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 145 </span> : : +<span class="lineNum"> 146 </span> : : /* Before we add the message type value, we will once again +<span class="lineNum"> 147 </span> : : * check for whether or not a client_timeout was specified +<span class="lineNum"> 148 </span> : : * since the message_type was set. If this is the case, then +<span class="lineNum"> 149 </span> : : * we want to adjust the message_type first. The easy way +<span class="lineNum"> 150 </span> : : * to do this is simply call fko_set_spa_client_timeout and set +<span class="lineNum"> 151 </span> : : * it to its current value. This will force a re-check and +<span class="lineNum"> 152 </span> : : * possible reset of the message type. +<span class="lineNum"> 153 </span> : : * +<span class="lineNum"> 154 </span> : : */ +<span class="lineNum"> 155 </span> :<span class="lineCov"> 434 : fko_set_spa_client_timeout(ctx, ctx-&gt;client_timeout);</span> +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> : : /* Add the message type value. +<span class="lineNum"> 158 </span> : : */ +<span class="lineNum"> 159 </span> :<span class="lineCov"> 434 : offset = strlen(tbuf);</span> +<span class="lineNum"> 160 </span> :<span class="lineCov"> 434 : snprintf(((char*)tbuf+offset), FKO_ENCODE_TMP_BUF_SIZE - offset,</span> +<span class="lineNum"> 161 </span> :<span class="lineCov"> 434 : &quot;:%i:&quot;, ctx-&gt;message_type);</span> +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> : : /* Add the base64-encoded SPA message. +<span class="lineNum"> 164 </span> : : */ +<span class="lineNum"> 165 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if((res = append_b64(tbuf, ctx-&gt;message)) != FKO_SUCCESS)</span> +<span class="lineNum"> 166 </span> : : { +<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> +<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 169 </span> : : } +<span class="lineNum"> 170 </span> : : +<span class="lineNum"> 171 </span> : : /* If a nat_access message was given, add it to the SPA +<span class="lineNum"> 172 </span> : : * message. +<span class="lineNum"> 173 </span> : : */ +<span class="lineNum"> 174 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;nat_access != NULL)</span> +<span class="lineNum"> 175 </span> : : { +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : strlcat(tbuf, &quot;:&quot;, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 177 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = append_b64(tbuf, ctx-&gt;nat_access)) != FKO_SUCCESS)</span> +<span class="lineNum"> 178 </span> : : { +<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> +<span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 181 </span> : : } +<span class="lineNum"> 182 </span> : : } +<span class="lineNum"> 183 </span> : : +<span class="lineNum"> 184 </span> : : /* If we have a server_auth field set. Add it here. +<span class="lineNum"> 185 </span> : : * +<span class="lineNum"> 186 </span> : : */ +<span class="lineNum"> 187 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;server_auth != NULL)</span> +<span class="lineNum"> 188 </span> : : { +<span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : strlcat(tbuf, &quot;:&quot;, FKO_ENCODE_TMP_BUF_SIZE);</span> +<span class="lineNum"> 190 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = append_b64(tbuf, ctx-&gt;server_auth)) != FKO_SUCCESS)</span> +<span class="lineNum"> 191 </span> : : { +<span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 194 </span> : : } +<span class="lineNum"> 195 </span> : : } +<span class="lineNum"> 196 </span> : : +<span class="lineNum"> 197 </span> : : /* If a client timeout is specified and we are not dealing with a +<span class="lineNum"> 198 </span> : : * SPA command message, add the timeout here. +<span class="lineNum"> 199 </span> : : */ +<span class="lineNum"> 200 </span>[<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 433 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;client_timeout &gt; 0 &amp;&amp; ctx-&gt;message_type != FKO_COMMAND_MSG)</span> +<span class="lineNum"> 201 </span> : : { +<span class="lineNum"> 202 </span> :<span class="lineCov"> 1 : offset = strlen(tbuf);</span> +<span class="lineNum"> 203 </span> :<span class="lineCov"> 1 : snprintf(((char*)tbuf+offset), FKO_ENCODE_TMP_BUF_SIZE - offset,</span> +<span class="lineNum"> 204 </span> : : &quot;:%i&quot;, ctx-&gt;client_timeout); +<span class="lineNum"> 205 </span> : : } +<span class="lineNum"> 206 </span> : : +<span class="lineNum"> 207 </span> : : /* If encoded_msg is not null, then we assume it needs to +<span class="lineNum"> 208 </span> : : * be freed before re-assignment. +<span class="lineNum"> 209 </span> : : */ +<span class="lineNum"> 210 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg != NULL)</span> +<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;encoded_msg);</span> +<span class="lineNum"> 212 </span> : : +<span class="lineNum"> 213 </span> : : /* Copy our encoded data into the context. +<span class="lineNum"> 214 </span> : : */ +<span class="lineNum"> 215 </span> :<span class="lineCov"> 434 : ctx-&gt;encoded_msg = strdup(tbuf);</span> +<span class="lineNum"> 216 </span> :<span class="lineCov"> 434 : free(tbuf);</span> +<span class="lineNum"> 217 </span> : : +<span class="lineNum"> 218 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg == NULL)</span> +<span class="lineNum"> 219 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> :<span class="lineCov"> 434 : ctx-&gt;encoded_msg_len = strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 222 </span> : : +<span class="lineNum"> 223 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if(! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> +<span class="lineNum"> 224 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL); +<span class="lineNum"> 225 </span> : : +<span class="lineNum"> 226 </span> : : /* At this point we can compute the digest for this SPA data. +<span class="lineNum"> 227 </span> : : */ +<span class="lineNum"> 228 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if((res = fko_set_spa_digest(ctx)) != FKO_SUCCESS)</span> +<span class="lineNum"> 229 </span> : : return(res); +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> : : /* Here we can clear the modified flags on the SPA data fields. +<span class="lineNum"> 232 </span> : : */ +<span class="lineNum"> 233 </span> :<span class="lineCov"> 434 : FKO_CLEAR_SPA_DATA_MODIFIED(ctx);</span> +<span class="lineNum"> 234 </span> : : +<span class="lineNum"> 235 </span> :<span class="lineCov"> 434 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 236 </span> : : } +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> : : /* Return the fko SPA encrypted data. +<a name="239"><span class="lineNum"> 239 </span> : : */</a> +<span class="lineNum"> 240 </span> : : int +<span class="lineNum"> 241 </span> :<span class="lineCov"> 801 : fko_get_encoded_data(fko_ctx_t ctx, char **enc_msg)</span> +<span class="lineNum"> 242 </span> : : { +<span class="lineNum"> 243 </span> : : /* Must be initialized +<span class="lineNum"> 244 </span> : : */ +<span class="lineNum"> 245 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 246 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 247 </span> : : +<span class="lineNum"> 248 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(enc_msg == NULL)</span> +<span class="lineNum"> 249 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> :<span class="lineCov"> 801 : *enc_msg = ctx-&gt;encoded_msg;</span> +<span class="lineNum"> 252 </span> : : +<span class="lineNum"> 253 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 254 </span> : : } +<span class="lineNum"> 255 </span> : : +<span class="lineNum"> 256 </span> : : /* Set the fko SPA encoded data (this is a convenience +<span class="lineNum"> 257 </span> : : * function mostly used for tests that involve fuzzing). +<span class="lineNum"> 258 </span> : : */ +<span class="lineNum"> 259 </span> : : #if FUZZING_INTERFACES +<span class="lineNum"> 260 </span> : : int +<span class="lineNum"> 261 </span> : : fko_set_encoded_data(fko_ctx_t ctx, +<span class="lineNum"> 262 </span> : : const char * const encoded_msg, const int msg_len, +<span class="lineNum"> 263 </span> : : const int require_digest, const int digest_type) +<span class="lineNum"> 264 </span> : : { +<span class="lineNum"> 265 </span> : : char *tbuf = NULL; +<span class="lineNum"> 266 </span> : : int res = FKO_SUCCESS, mlen; +<span class="lineNum"> 267 </span> : : +<span class="lineNum"> 268 </span> : : /* Must be initialized +<span class="lineNum"> 269 </span> : : */ +<span class="lineNum"> 270 </span> : : if(!CTX_INITIALIZED(ctx)) +<span class="lineNum"> 271 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 272 </span> : : +<span class="lineNum"> 273 </span> : : if(encoded_msg == NULL) +<span class="lineNum"> 274 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> : : ctx-&gt;encoded_msg = strdup(encoded_msg); +<span class="lineNum"> 277 </span> : : +<span class="lineNum"> 278 </span> : : ctx-&gt;state |= FKO_DATA_MODIFIED; +<span class="lineNum"> 279 </span> : : +<span class="lineNum"> 280 </span> : : if(ctx-&gt;encoded_msg == NULL) +<span class="lineNum"> 281 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 282 </span> : : +<span class="lineNum"> 283 </span> : : /* allow arbitrary length (i.e. let the decode routines validate +<span class="lineNum"> 284 </span> : : * SPA message length). +<span class="lineNum"> 285 </span> : : */ +<span class="lineNum"> 286 </span> : : ctx-&gt;encoded_msg_len = msg_len; +<span class="lineNum"> 287 </span> : : +<span class="lineNum"> 288 </span> : : if(require_digest) +<span class="lineNum"> 289 </span> : : { +<span class="lineNum"> 290 </span> : : fko_set_spa_digest_type(ctx, digest_type); +<span class="lineNum"> 291 </span> : : if((res = fko_set_spa_digest(ctx)) != FKO_SUCCESS) +<span class="lineNum"> 292 </span> : : { +<span class="lineNum"> 293 </span> : : return res; +<span class="lineNum"> 294 </span> : : } +<span class="lineNum"> 295 </span> : : +<span class="lineNum"> 296 </span> : : /* append the digest to the encoded message buffer +<span class="lineNum"> 297 </span> : : */ +<span class="lineNum"> 298 </span> : : mlen = ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + 2; +<span class="lineNum"> 299 </span> : : tbuf = calloc(1, mlen); +<span class="lineNum"> 300 </span> : : if(tbuf == NULL) +<span class="lineNum"> 301 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 302 </span> : : +<span class="lineNum"> 303 </span> : : /* memcpy since the provided encoded buffer might +<span class="lineNum"> 304 </span> : : * have an embedded NULL? +<span class="lineNum"> 305 </span> : : */ +<span class="lineNum"> 306 </span> : : mlen = snprintf(tbuf, mlen, &quot;%s:%s&quot;, ctx-&gt;encoded_msg, ctx-&gt;digest); +<span class="lineNum"> 307 </span> : : +<span class="lineNum"> 308 </span> : : if(ctx-&gt;encoded_msg != NULL) +<span class="lineNum"> 309 </span> : : free(ctx-&gt;encoded_msg); +<span class="lineNum"> 310 </span> : : +<span class="lineNum"> 311 </span> : : ctx-&gt;encoded_msg = strdup(tbuf); +<span class="lineNum"> 312 </span> : : free(tbuf); +<span class="lineNum"> 313 </span> : : +<span class="lineNum"> 314 </span> : : if(ctx-&gt;encoded_msg == NULL) +<span class="lineNum"> 315 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 316 </span> : : +<span class="lineNum"> 317 </span> : : ctx-&gt;encoded_msg_len = mlen; +<span class="lineNum"> 318 </span> : : } +<span class="lineNum"> 319 </span> : : +<span class="lineNum"> 320 </span> : : FKO_CLEAR_SPA_DATA_MODIFIED(ctx); +<span class="lineNum"> 321 </span> : : +<span class="lineNum"> 322 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 323 </span> : : } +<span class="lineNum"> 324 </span> : : #endif +<span class="lineNum"> 325 </span> : : +<span class="lineNum"> 326 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html new file mode 100644 index 00000000..96eddb50 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html @@ -0,0 +1,197 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encryption.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encryption.c<span style="font-size: 80%;"> (<a href="fko_encryption.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">117</td> + <td class="headerCovTableEntry">322</td> + <td class="headerCovTableEntryLo">36.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">29</td> + <td class="headerCovTableEntryLo">37.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">75</td> + <td class="headerCovTableEntry">340</td> + <td class="headerCovTableEntryLo">22.1 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_encryption.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#527">fko_set_spa_encryption_mode</a></td> + <td class="coverFnHi">1781</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#555">fko_get_spa_encryption_mode</a></td> + <td class="coverFnHi">1217</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#512">fko_get_spa_encryption_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#484">fko_set_spa_encryption_type</a></td> + <td class="coverFnHi">569</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#573">fko_encrypt_spa_data</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#45">_rijndael_encrypt</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#665">fko_encryption_type</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#625">fko_decrypt_spa_data</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#160">_rijndael_decrypt</a></td> + <td class="coverFnHi">387</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#693">fko_set_gpg_recipient</a></td> + <td class="coverFnHi">2</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#737">fko_set_gpg_exe</a></td> + <td class="coverFnHi">1</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1121">fko_gpg_signature_id_match</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1025">fko_get_gpg_signature_id</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#873">fko_set_gpg_home_dir</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#791">fko_get_gpg_recipient</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#412">gpg_decrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#993">fko_get_gpg_signature_fpr</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#810">fko_set_gpg_signer</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#924">fko_set_gpg_signature_verify</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#975">fko_get_gpg_ignore_verify_error</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1161">fko_gpg_signature_fpr_match</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1089">fko_get_gpg_signature_status</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#772">fko_get_gpg_exe</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#958">fko_set_gpg_ignore_verify_error</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#907">fko_get_gpg_home_dir</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#277">gpg_encrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#941">fko_get_gpg_signature_verify</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#854">fko_get_gpg_signer</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1057">fko_get_gpg_signature_summary</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html new file mode 100644 index 00000000..676b2426 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html @@ -0,0 +1,197 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encryption.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encryption.c<span style="font-size: 80%;"> (<a href="fko_encryption.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">117</td> + <td class="headerCovTableEntry">322</td> + <td class="headerCovTableEntryLo">36.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">29</td> + <td class="headerCovTableEntryLo">37.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">75</td> + <td class="headerCovTableEntry">340</td> + <td class="headerCovTableEntryLo">22.1 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_encryption.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#160">_rijndael_decrypt</a></td> + <td class="coverFnHi">387</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#45">_rijndael_encrypt</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#625">fko_decrypt_spa_data</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#573">fko_encrypt_spa_data</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#665">fko_encryption_type</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#772">fko_get_gpg_exe</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#907">fko_get_gpg_home_dir</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#975">fko_get_gpg_ignore_verify_error</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#791">fko_get_gpg_recipient</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#993">fko_get_gpg_signature_fpr</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1025">fko_get_gpg_signature_id</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1089">fko_get_gpg_signature_status</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1057">fko_get_gpg_signature_summary</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#941">fko_get_gpg_signature_verify</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#854">fko_get_gpg_signer</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#555">fko_get_spa_encryption_mode</a></td> + <td class="coverFnHi">1217</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#512">fko_get_spa_encryption_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1161">fko_gpg_signature_fpr_match</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#1121">fko_gpg_signature_id_match</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#737">fko_set_gpg_exe</a></td> + <td class="coverFnHi">1</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#873">fko_set_gpg_home_dir</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#958">fko_set_gpg_ignore_verify_error</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#693">fko_set_gpg_recipient</a></td> + <td class="coverFnHi">2</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#924">fko_set_gpg_signature_verify</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#810">fko_set_gpg_signer</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#527">fko_set_spa_encryption_mode</a></td> + <td class="coverFnHi">1781</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#484">fko_set_spa_encryption_type</a></td> + <td class="coverFnHi">569</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#412">gpg_decrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_encryption.c.gcov.html#277">gpg_encrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html new file mode 100644 index 00000000..645a89d3 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html @@ -0,0 +1,1280 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encryption.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encryption.c<span style="font-size: 80%;"> (source / <a href="fko_encryption.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">117</td> + <td class="headerCovTableEntry">322</td> + <td class="headerCovTableEntryLo">36.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">29</td> + <td class="headerCovTableEntryLo">37.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">75</td> + <td class="headerCovTableEntry">340</td> + <td class="headerCovTableEntryLo">22.1 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_encryption.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa encryption type. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;base64.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 38 </span> : : #include &quot;gpgme_funcs.h&quot; +<span class="lineNum"> 39 </span> : : #if HAVE_SYS_STAT_H +<span class="lineNum"> 40 </span> : : #include &lt;sys/stat.h&gt; +<span class="lineNum"> 41 </span> : : #endif +<span class="lineNum"> 42 </span> : : #endif +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : /* Prep and encrypt using Rijndael +<a name="45"><span class="lineNum"> 45 </span> : : */</a> +<span class="lineNum"> 46 </span> : : static int +<span class="lineNum"> 47 </span> :<span class="lineCov"> 434 : _rijndael_encrypt(fko_ctx_t ctx, const char *enc_key, const int enc_key_len)</span> +<span class="lineNum"> 48 </span> : : { +<span class="lineNum"> 49 </span> : : char *plaintext; +<span class="lineNum"> 50 </span> : : char *b64ciphertext; +<span class="lineNum"> 51 </span> : : unsigned char *ciphertext; +<span class="lineNum"> 52 </span> : : int cipher_len; +<span class="lineNum"> 53 </span> : : int pt_len; +<span class="lineNum"> 54 </span> :<span class="lineCov"> 434 : int zero_free_rv = FKO_SUCCESS;</span> +<span class="lineNum"> 55 </span> : : +<span class="lineNum"> 56 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 434 : if(enc_key_len &lt; 0 || enc_key_len &gt; RIJNDAEL_MAX_KEYSIZE)</span> +<span class="lineNum"> 57 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 58 </span> : : +<span class="lineNum"> 59 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> +<span class="lineNum"> 60 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL); +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : switch(ctx-&gt;digest_len)</span> +<span class="lineNum"> 63 </span> : : { +<span class="lineNum"> 64 </span> : : case MD5_B64_LEN: +<span class="lineNum"> 65 </span> : : break; +<span class="lineNum"> 66 </span> : : case SHA1_B64_LEN: +<span class="lineNum"> 67 </span> : : break; +<span class="lineNum"> 68 </span> : : case SHA256_B64_LEN: +<span class="lineNum"> 69 </span> : : break; +<span class="lineNum"> 70 </span> : : case SHA384_B64_LEN: +<span class="lineNum"> 71 </span> : : break; +<span class="lineNum"> 72 </span> : : case SHA512_B64_LEN: +<span class="lineNum"> 73 </span> : : break; +<span class="lineNum"> 74 </span> : : default: +<span class="lineNum"> 75 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL); +<span class="lineNum"> 76 </span> : : } +<span class="lineNum"> 77 </span> : : +<span class="lineNum"> 78 </span> :<span class="lineCov"> 416 : pt_len = ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + RIJNDAEL_BLOCKSIZE + 2;</span> +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> : : /* Make a bucket big enough to hold the enc msg + digest (plaintext) +<span class="lineNum"> 81 </span> : : * and populate it appropriately. +<span class="lineNum"> 82 </span> : : */ +<span class="lineNum"> 83 </span> :<span class="lineCov"> 416 : plaintext = calloc(1, pt_len);</span> +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(plaintext == NULL)</span> +<span class="lineNum"> 86 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 87 </span> : : +<span class="lineNum"> 88 </span> :<span class="lineCov"> 832 : pt_len = snprintf(plaintext, pt_len, &quot;%s:%s&quot;, ctx-&gt;encoded_msg, ctx-&gt;digest);</span> +<span class="lineNum"> 89 </span> : : +<span class="lineNum"> 90 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(! is_valid_pt_msg_len(pt_len))</span> +<span class="lineNum"> 91 </span> : : { +<span class="lineNum"> 92 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plaintext, pt_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 93 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL); +<span class="lineNum"> 94 </span> : : else +<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 96 </span> : : } +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : /* Make a bucket for the encrypted version and populate it. +<span class="lineNum"> 99 </span> : : */ +<span class="lineNum"> 100 </span> :<span class="lineCov"> 416 : ciphertext = calloc(1, pt_len + 32); /* Plus padding for salt and Block */</span> +<span class="lineNum"> 101 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(ciphertext == NULL)</span> +<span class="lineNum"> 102 </span> : : { +<span class="lineNum"> 103 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plaintext, pt_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 104 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 105 </span> : : else +<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 107 </span> : : } +<span class="lineNum"> 108 </span> : : +<span class="lineNum"> 109 </span> :<span class="lineCov"> 416 : cipher_len = rij_encrypt(</span> +<span class="lineNum"> 110 </span> : : (unsigned char*)plaintext, pt_len, +<span class="lineNum"> 111 </span> : : (char*)enc_key, enc_key_len, +<span class="lineNum"> 112 </span> : : ciphertext, ctx-&gt;encryption_mode +<span class="lineNum"> 113 </span> : : ); +<span class="lineNum"> 114 </span> : : +<span class="lineNum"> 115 </span> : : /* Now make a bucket for the base64-encoded version and populate it. +<span class="lineNum"> 116 </span> : : */ +<span class="lineNum"> 117 </span> :<span class="lineCov"> 416 : b64ciphertext = calloc(1, ((cipher_len / 3) * 4) + 8);</span> +<span class="lineNum"> 118 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(b64ciphertext == NULL)</span> +<span class="lineNum"> 119 </span> : : { +<span class="lineNum"> 120 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) ciphertext, pt_len+32) == FKO_SUCCESS</span> +<span class="lineNum"> 121 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; zero_free(plaintext, pt_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 122 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 123 </span> : : else +<span class="lineNum"> 124 </span> : : return(FKO_ERROR_ZERO_OUT_DATA); +<span class="lineNum"> 125 </span> : : } +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> :<span class="lineCov"> 416 : b64_encode(ciphertext, b64ciphertext, cipher_len);</span> +<span class="lineNum"> 128 </span> :<span class="lineCov"> 416 : strip_b64_eq(b64ciphertext);</span> +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(ctx-&gt;encrypted_msg != NULL)</span> +<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE));</span> +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg = strdup(b64ciphertext);</span> +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> : : /* Clean-up +<span class="lineNum"> 137 </span> : : */ +<span class="lineNum"> 138 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(zero_free(plaintext, pt_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(zero_free((char *) ciphertext, pt_len+32) != FKO_SUCCESS)</span> +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> [<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(zero_free(b64ciphertext, strnlen(b64ciphertext,</span> +<span class="lineNum"> 145 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) +<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 147 </span> : : +<span class="lineNum"> 148 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(ctx-&gt;encrypted_msg == NULL)</span> +<span class="lineNum"> 149 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 150 </span> : : +<span class="lineNum"> 151 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg_len = strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if(! is_valid_encoded_msg_len(ctx-&gt;encrypted_msg_len))</span> +<span class="lineNum"> 154 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL); +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> :<span class="lineCov"> 416 : return(zero_free_rv);</span> +<span class="lineNum"> 157 </span> : : } +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> : : /* Decode, decrypt, and parse SPA data into the context. +<a name="160"><span class="lineNum"> 160 </span> : : */</a> +<span class="lineNum"> 161 </span> : : static int +<span class="lineNum"> 162 </span> :<span class="lineCov"> 387 : _rijndael_decrypt(fko_ctx_t ctx,</span> +<span class="lineNum"> 163 </span> : : const char *dec_key, const int key_len, int encryption_mode) +<span class="lineNum"> 164 </span> : : { +<span class="lineNum"> 165 </span> : : unsigned char *ndx; +<span class="lineNum"> 166 </span> : : unsigned char *cipher; +<span class="lineNum"> 167 </span> :<span class="lineCov"> 387 : int cipher_len=0, pt_len, i, err = 0, res = FKO_SUCCESS;</span> +<span class="lineNum"> 168 </span> :<span class="lineCov"> 387 : int zero_free_rv = FKO_SUCCESS;</span> +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(key_len &lt; 0 || key_len &gt; RIJNDAEL_MAX_KEYSIZE)</span> +<span class="lineNum"> 171 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 172 </span> : : +<span class="lineNum"> 173 </span> : : /* Now see if we need to add the &quot;Salted__&quot; string to the front of the +<span class="lineNum"> 174 </span> : : * encrypted data. +<span class="lineNum"> 175 </span> : : */ +<span class="lineNum"> 176 </span> [<span class="branchCov" title="Branch 0 was taken 70 times"> + </span><span class="branchCov" title="Branch 1 was taken 317 times"> + </span>]:<span class="lineCov"> 387 : if(! ctx-&gt;added_salted_str)</span> +<span class="lineNum"> 177 </span> : : { +<span class="lineNum"> 178 </span> :<span class="lineCov"> 70 : res = add_salted_str(ctx);</span> +<span class="lineNum"> 179 </span> [<span class="branchCov" title="Branch 0 was taken 70 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 70 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 180 </span> : : return res; +<span class="lineNum"> 181 </span> : : } +<span class="lineNum"> 182 </span> : : +<span class="lineNum"> 183 </span> : : /* Create a bucket for the (base64) decoded encrypted data and get the +<span class="lineNum"> 184 </span> : : * raw cipher data. +<span class="lineNum"> 185 </span> : : */ +<span class="lineNum"> 186 </span> :<span class="lineCov"> 387 : cipher = calloc(1, ctx-&gt;encrypted_msg_len);</span> +<span class="lineNum"> 187 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(cipher == NULL)</span> +<span class="lineNum"> 188 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 189 </span> : : +<span class="lineNum"> 190 </span> : : #if AFL_FUZZING +<span class="lineNum"> 191 </span> : : cipher_len = ctx-&gt;encrypted_msg_len; +<span class="lineNum"> 192 </span> : : memcpy(cipher, ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len); +<span class="lineNum"> 193 </span> : : #else +<span class="lineNum"> 194 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if((cipher_len = b64_decode(ctx-&gt;encrypted_msg, cipher)) &lt; 0)</span> +<span class="lineNum"> 195 </span> : : { +<span class="lineNum"> 196 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 197 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL); +<span class="lineNum"> 198 </span> : : else +<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 200 </span> : : } +<span class="lineNum"> 201 </span> : : #endif +<span class="lineNum"> 202 </span> : : +<span class="lineNum"> 203 </span> : : /* Since we're using AES, make sure the incoming data is a multiple of +<span class="lineNum"> 204 </span> : : * the blocksize +<span class="lineNum"> 205 </span> : : */ +<span class="lineNum"> 206 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if((cipher_len % RIJNDAEL_BLOCKSIZE) != 0)</span> +<span class="lineNum"> 207 </span> : : { +<span class="lineNum"> 208 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 209 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL); +<span class="lineNum"> 210 </span> : : else +<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 212 </span> : : } +<span class="lineNum"> 213 </span> : : +<span class="lineNum"> 214 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if(ctx-&gt;encoded_msg != NULL)</span> +<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(ctx-&gt;encoded_msg,</span> +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE));</span> +<span class="lineNum"> 217 </span> : : +<span class="lineNum"> 218 </span> : : /* Create a bucket for the plaintext data and decrypt the message +<span class="lineNum"> 219 </span> : : * data into it. +<span class="lineNum"> 220 </span> : : */ +<span class="lineNum"> 221 </span> :<span class="lineCov"> 387 : ctx-&gt;encoded_msg = calloc(1, cipher_len);</span> +<span class="lineNum"> 222 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if(ctx-&gt;encoded_msg == NULL)</span> +<span class="lineNum"> 223 </span> : : { +<span class="lineNum"> 224 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 225 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 226 </span> : : else +<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 228 </span> : : } +<span class="lineNum"> 229 </span> : : +<span class="lineNum"> 230 </span> :<span class="lineCov"> 387 : pt_len = rij_decrypt(cipher, cipher_len, dec_key, key_len,</span> +<span class="lineNum"> 231 </span> : : (unsigned char*)ctx-&gt;encoded_msg, encryption_mode); +<span class="lineNum"> 232 </span> : : +<span class="lineNum"> 233 </span> : : /* Done with cipher... +<span class="lineNum"> 234 </span> : : */ +<span class="lineNum"> 235 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> : : /* The length of the decrypted data should be within 32 bytes of the +<span class="lineNum"> 239 </span> : : * length of the encrypted version. +<span class="lineNum"> 240 </span> : : */ +<span class="lineNum"> 241 </span>[<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 387 : if(pt_len &lt; (cipher_len - 32) || pt_len &lt;= 0)</span> +<span class="lineNum"> 242 </span> : : return(FKO_ERROR_DECRYPTION_SIZE); +<span class="lineNum"> 243 </span> : : +<span class="lineNum"> 244 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(ctx-&gt;encoded_msg == NULL)</span> +<span class="lineNum"> 245 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> [<span class="branchCov" title="Branch 1 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 387 : if(! is_valid_encoded_msg_len(pt_len))</span> +<span class="lineNum"> 248 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL); +<span class="lineNum"> 249 </span> : : +<span class="lineNum"> 250 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(zero_free_rv != FKO_SUCCESS)</span> +<span class="lineNum"> 251 </span> : : return(zero_free_rv); +<span class="lineNum"> 252 </span> : : +<span class="lineNum"> 253 </span> :<span class="lineCov"> 387 : ctx-&gt;encoded_msg_len = pt_len;</span> +<span class="lineNum"> 254 </span> : : +<span class="lineNum"> 255 </span> : : /* At this point we can check the data to see if we have a good +<span class="lineNum"> 256 </span> : : * decryption by ensuring the first field (16-digit random decimal +<span class="lineNum"> 257 </span> : : * value) is valid and is followed by a colon. Additional checks +<span class="lineNum"> 258 </span> : : * are made in fko_decode_spa_data(). +<span class="lineNum"> 259 </span> : : */ +<span class="lineNum"> 260 </span> :<span class="lineCov"> 387 : ndx = (unsigned char *)ctx-&gt;encoded_msg;</span> +<span class="lineNum"> 261 </span> [<span class="branchCov" title="Branch 0 was taken 6192 times"> + </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 6579 : for(i=0; i&lt;FKO_RAND_VAL_SIZE; i++)</span> +<span class="lineNum"> 262 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 6192 times"> + </span>]:<span class="lineCov"> 6192 : if(!isdigit(*(ndx++)))</span> +<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 264 </span> : : +<span class="lineNum"> 265 </span>[<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 387 : if(err &gt; 0 || *ndx != ':')</span> +<span class="lineNum"> 266 </span> : : return(FKO_ERROR_DECRYPTION_FAILURE); +<span class="lineNum"> 267 </span> : : +<span class="lineNum"> 268 </span> : : /* Call fko_decode and return the results. +<span class="lineNum"> 269 </span> : : */ +<span class="lineNum"> 270 </span> :<span class="lineCov"> 387 : return(fko_decode_spa_data(ctx));</span> +<span class="lineNum"> 271 </span> : : } +<span class="lineNum"> 272 </span> : : +<span class="lineNum"> 273 </span> : : +<span class="lineNum"> 274 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> : : /* Prep and encrypt using gpgme +<a name="277"><span class="lineNum"> 277 </span> : : */</a> +<span class="lineNum"> 278 </span> : : static int +<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : gpg_encrypt(fko_ctx_t ctx, const char *enc_key)</span> +<span class="lineNum"> 280 </span> : : { +<span class="lineNum"> 281 </span> : : int res; +<span class="lineNum"> 282 </span> : : char *plain; +<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : int pt_len, zero_free_rv = FKO_SUCCESS;</span> +<span class="lineNum"> 284 </span> : : char *b64cipher; +<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : unsigned char *cipher = NULL;</span> +<span class="lineNum"> 286 </span> : : size_t cipher_len; +<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : char *empty_key = &quot;&quot;;</span> +<span class="lineNum"> 288 </span> : : +<span class="lineNum"> 289 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> +<span class="lineNum"> 290 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL); +<span class="lineNum"> 291 </span> : : +<span class="lineNum"> 292 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : switch(ctx-&gt;digest_len)</span> +<span class="lineNum"> 293 </span> : : { +<span class="lineNum"> 294 </span> : : case MD5_B64_LEN: +<span class="lineNum"> 295 </span> : : break; +<span class="lineNum"> 296 </span> : : case SHA1_B64_LEN: +<span class="lineNum"> 297 </span> : : break; +<span class="lineNum"> 298 </span> : : case SHA256_B64_LEN: +<span class="lineNum"> 299 </span> : : break; +<span class="lineNum"> 300 </span> : : case SHA384_B64_LEN: +<span class="lineNum"> 301 </span> : : break; +<span class="lineNum"> 302 </span> : : case SHA512_B64_LEN: +<span class="lineNum"> 303 </span> : : break; +<span class="lineNum"> 304 </span> : : default: +<span class="lineNum"> 305 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL); +<span class="lineNum"> 306 </span> : : } +<span class="lineNum"> 307 </span> : : +<span class="lineNum"> 308 </span> : : /* First make sure we have a recipient key set. +<span class="lineNum"> 309 </span> : : */ +<span class="lineNum"> 310 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_recipient == NULL)</span> +<span class="lineNum"> 311 </span> : : return(FKO_ERROR_MISSING_GPG_KEY_DATA); +<span class="lineNum"> 312 </span> : : +<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : pt_len = ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + 2;</span> +<span class="lineNum"> 314 </span> : : +<span class="lineNum"> 315 </span> : : /* Make a bucket big enough to hold the enc msg + digest (plaintext) +<span class="lineNum"> 316 </span> : : * and populate it appropriately. +<span class="lineNum"> 317 </span> : : */ +<span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : plain = calloc(1, ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + 2);</span> +<span class="lineNum"> 319 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(plain == NULL)</span> +<span class="lineNum"> 320 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 321 </span> : : +<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : pt_len = snprintf(plain, pt_len+1, &quot;%s:%s&quot;, ctx-&gt;encoded_msg, ctx-&gt;digest);</span> +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_pt_msg_len(pt_len))</span> +<span class="lineNum"> 325 </span> : : { +<span class="lineNum"> 326 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plain, pt_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 327 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL); +<span class="lineNum"> 328 </span> : : else +<span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 330 </span> : : } +<span class="lineNum"> 331 </span> : : +<span class="lineNum"> 332 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (enc_key != NULL)</span> +<span class="lineNum"> 333 </span> : : { +<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : res = gpgme_encrypt(ctx, (unsigned char*)plain, pt_len,</span> +<span class="lineNum"> 335 </span> : : enc_key, &amp;cipher, &amp;cipher_len +<span class="lineNum"> 336 </span> : : ); +<span class="lineNum"> 337 </span> : : } +<span class="lineNum"> 338 </span> : : else +<span class="lineNum"> 339 </span> : : { +<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : res = gpgme_encrypt(ctx, (unsigned char*)plain, pt_len,</span> +<span class="lineNum"> 341 </span> : : empty_key, &amp;cipher, &amp;cipher_len +<span class="lineNum"> 342 </span> : : ); +<span class="lineNum"> 343 </span> : : } +<span class="lineNum"> 344 </span> : : +<span class="lineNum"> 345 </span> : : /* --DSS XXX: Better parsing of what went wrong would be nice :) +<span class="lineNum"> 346 </span> : : */ +<span class="lineNum"> 347 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 348 </span> : : { +<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(plain, pt_len);</span> +<span class="lineNum"> 350 </span> : : +<span class="lineNum"> 351 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(cipher != NULL)</span> +<span class="lineNum"> 352 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, cipher_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 354 </span> : : +<span class="lineNum"> 355 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free_rv == FKO_SUCCESS)</span> +<span class="lineNum"> 356 </span> : : return(res); +<span class="lineNum"> 357 </span> : : else +<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> +<span class="lineNum"> 359 </span> : : } +<span class="lineNum"> 360 </span> : : +<span class="lineNum"> 361 </span> : : /* Now make a bucket for the base64-encoded version and populate it. +<span class="lineNum"> 362 </span> : : */ +<span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : b64cipher = calloc(1, ((cipher_len / 3) * 4) + 8);</span> +<span class="lineNum"> 364 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64cipher == NULL)</span> +<span class="lineNum"> 365 </span> : : { +<span class="lineNum"> 366 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plain, pt_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 368 </span> : : +<span class="lineNum"> 369 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(cipher != NULL)</span> +<span class="lineNum"> 370 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, cipher_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 372 </span> : : +<span class="lineNum"> 373 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free_rv == FKO_SUCCESS)</span> +<span class="lineNum"> 374 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 375 </span> : : else +<span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> +<span class="lineNum"> 377 </span> : : } +<span class="lineNum"> 378 </span> : : +<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : b64_encode(cipher, b64cipher, cipher_len);</span> +<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(b64cipher);</span> +<span class="lineNum"> 381 </span> : : +<span class="lineNum"> 382 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg != NULL)</span> +<span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 384 </span> :<span class="lineNoCov"> 0 : strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE));</span> +<span class="lineNum"> 385 </span> : : +<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg = strdup(b64cipher);</span> +<span class="lineNum"> 387 </span> : : +<span class="lineNum"> 388 </span> : : /* Clean-up +<span class="lineNum"> 389 </span> : : */ +<span class="lineNum"> 390 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plain, pt_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 392 </span> : : +<span class="lineNum"> 393 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, cipher_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 395 </span> : : +<span class="lineNum"> 396 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(b64cipher, strnlen(b64cipher,</span> +<span class="lineNum"> 397 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) +<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 399 </span> : : +<span class="lineNum"> 400 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg == NULL)</span> +<span class="lineNum"> 401 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 402 </span> : : +<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len = strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 404 </span> : : +<span class="lineNum"> 405 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_encoded_msg_len(ctx-&gt;encrypted_msg_len))</span> +<span class="lineNum"> 406 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL); +<span class="lineNum"> 407 </span> : : +<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> +<span class="lineNum"> 409 </span> : : } +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> : : /* Prep and decrypt using gpgme +<a name="412"><span class="lineNum"> 412 </span> : : */</a> +<span class="lineNum"> 413 </span> : : static int +<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : gpg_decrypt(fko_ctx_t ctx, const char *dec_key)</span> +<span class="lineNum"> 415 </span> : : { +<span class="lineNum"> 416 </span> : : unsigned char *cipher; +<span class="lineNum"> 417 </span> : : size_t cipher_len; +<span class="lineNum"> 418 </span> : : int res, pt_len, b64_decode_len; +<span class="lineNum"> 419 </span> : : +<span class="lineNum"> 420 </span> : : /* Now see if we need to add the &quot;hQ&quot; string to the front of the +<span class="lineNum"> 421 </span> : : * base64-encoded-GPG-encrypted data. +<span class="lineNum"> 422 </span> : : */ +<span class="lineNum"> 423 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! ctx-&gt;added_gpg_prefix)</span> +<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : add_gpg_prefix(ctx);</span> +<span class="lineNum"> 425 </span> : : +<span class="lineNum"> 426 </span> : : /* Create a bucket for the (base64) decoded encrypted data and get the +<span class="lineNum"> 427 </span> : : * raw cipher data. +<span class="lineNum"> 428 </span> : : */ +<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : cipher = calloc(1, ctx-&gt;encrypted_msg_len);</span> +<span class="lineNum"> 430 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(cipher == NULL)</span> +<span class="lineNum"> 431 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 432 </span> : : +<span class="lineNum"> 433 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((b64_decode_len = b64_decode(ctx-&gt;encrypted_msg, cipher)) &lt; 0)</span> +<span class="lineNum"> 434 </span> : : { +<span class="lineNum"> 435 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> +<span class="lineNum"> 436 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL); +<span class="lineNum"> 437 </span> : : else +<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 439 </span> : : +<span class="lineNum"> 440 </span> : : } +<span class="lineNum"> 441 </span> : : +<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : cipher_len = b64_decode_len;</span> +<span class="lineNum"> 443 </span> : : +<span class="lineNum"> 444 </span> : : /* Create a bucket for the plaintext data and decrypt the message +<span class="lineNum"> 445 </span> : : * data into it. +<span class="lineNum"> 446 </span> : : */ +<span class="lineNum"> 447 </span> : : /* --DSS Actually, the needed memory will be malloced in the gpgme_decrypt +<span class="lineNum"> 448 </span> : : // function. Just leaving this here for reference (for now). +<span class="lineNum"> 449 </span> : : //ctx-&gt;encoded_msg = malloc(cipher_len); +<span class="lineNum"> 450 </span> : : //if(ctx-&gt;encoded_msg == NULL) +<span class="lineNum"> 451 </span> : : // return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 452 </span> : : */ +<span class="lineNum"> 453 </span> : : +<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : res = gpgme_decrypt(ctx, cipher, cipher_len,</span> +<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : dec_key, (unsigned char**)&amp;ctx-&gt;encoded_msg, &amp;cipher_len</span> +<span class="lineNum"> 456 </span> : : ); +<span class="lineNum"> 457 </span> : : +<span class="lineNum"> 458 </span> : : /* Done with cipher... +<span class="lineNum"> 459 </span> : : */ +<span class="lineNum"> 460 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 461 </span> : : return(FKO_ERROR_ZERO_OUT_DATA); +<span class="lineNum"> 462 </span> : : else +<span class="lineNum"> 463 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS) /* bail if there was some other problem */</span> +<span class="lineNum"> 464 </span> : : return(res); +<span class="lineNum"> 465 </span> : : +<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : pt_len = strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encoded_msg == NULL)</span> +<span class="lineNum"> 469 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING); +<span class="lineNum"> 470 </span> : : +<span class="lineNum"> 471 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_encoded_msg_len(pt_len))</span> +<span class="lineNum"> 472 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL); +<span class="lineNum"> 473 </span> : : +<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encoded_msg_len = pt_len;</span> +<span class="lineNum"> 475 </span> : : +<span class="lineNum"> 476 </span> : : /* Call fko_decode and return the results. +<span class="lineNum"> 477 </span> : : */ +<span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : return(fko_decode_spa_data(ctx));</span> +<span class="lineNum"> 479 </span> : : } +<span class="lineNum"> 480 </span> : : +<span class="lineNum"> 481 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 482 </span> : : +<span class="lineNum"> 483 </span> : : /* Set the SPA encryption type. +<a name="484"><span class="lineNum"> 484 </span> : : */</a> +<span class="lineNum"> 485 </span> : : int +<span class="lineNum"> 486 </span> :<span class="lineCov"> 569 : fko_set_spa_encryption_type(fko_ctx_t ctx, const short encrypt_type)</span> +<span class="lineNum"> 487 </span> : : { +<span class="lineNum"> 488 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 489 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_type_init&quot;, +<span class="lineNum"> 490 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 491 </span> : : #endif +<span class="lineNum"> 492 </span> : : /* Must be initialized +<span class="lineNum"> 493 </span> : : */ +<span class="lineNum"> 494 </span>[<span class="branchCov" title="Branch 0 was taken 569 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 569 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 569 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 495 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 496 </span> : : +<span class="lineNum"> 497 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 498 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_type_val&quot;, +<span class="lineNum"> 499 </span> : : FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL); +<span class="lineNum"> 500 </span> : : #endif +<span class="lineNum"> 501 </span> [<span class="branchCov" title="Branch 0 was taken 569 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 569 : if(encrypt_type &lt; 0 || encrypt_type &gt;= FKO_LAST_ENCRYPTION_TYPE)</span> +<span class="lineNum"> 502 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL); +<span class="lineNum"> 503 </span> : : +<span class="lineNum"> 504 </span> :<span class="lineCov"> 569 : ctx-&gt;encryption_type = encrypt_type;</span> +<span class="lineNum"> 505 </span> : : +<span class="lineNum"> 506 </span> :<span class="lineCov"> 569 : ctx-&gt;state |= FKO_ENCRYPT_TYPE_MODIFIED;</span> +<span class="lineNum"> 507 </span> : : +<span class="lineNum"> 508 </span> :<span class="lineCov"> 569 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 509 </span> : : } +<span class="lineNum"> 510 </span> : : +<span class="lineNum"> 511 </span> : : /* Return the SPA encryption type. +<a name="512"><span class="lineNum"> 512 </span> : : */</a> +<span class="lineNum"> 513 </span> : : int +<span class="lineNum"> 514 </span> :<span class="lineCov"> 801 : fko_get_spa_encryption_type(fko_ctx_t ctx, short *enc_type)</span> +<span class="lineNum"> 515 </span> : : { +<span class="lineNum"> 516 </span> : : /* Must be initialized +<span class="lineNum"> 517 </span> : : */ +<span class="lineNum"> 518 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 519 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 520 </span> : : +<span class="lineNum"> 521 </span> :<span class="lineCov"> 801 : *enc_type = ctx-&gt;encryption_type;</span> +<span class="lineNum"> 522 </span> : : +<span class="lineNum"> 523 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 524 </span> : : } +<span class="lineNum"> 525 </span> : : +<span class="lineNum"> 526 </span> : : /* Set the SPA encryption mode. +<a name="527"><span class="lineNum"> 527 </span> : : */</a> +<span class="lineNum"> 528 </span> : : int +<span class="lineNum"> 529 </span> :<span class="lineCov"> 1781 : fko_set_spa_encryption_mode(fko_ctx_t ctx, const int encrypt_mode)</span> +<span class="lineNum"> 530 </span> : : { +<span class="lineNum"> 531 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 532 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_mode_init&quot;, +<span class="lineNum"> 533 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 534 </span> : : #endif +<span class="lineNum"> 535 </span> : : /* Must be initialized +<span class="lineNum"> 536 </span> : : */ +<span class="lineNum"> 537 </span>[<span class="branchCov" title="Branch 0 was taken 1781 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1781 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1781 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 538 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 539 </span> : : +<span class="lineNum"> 540 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 541 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_mode_val&quot;, +<span class="lineNum"> 542 </span> : : FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL); +<span class="lineNum"> 543 </span> : : #endif +<span class="lineNum"> 544 </span> [<span class="branchCov" title="Branch 0 was taken 1781 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1781 : if(encrypt_mode &lt; 0 || encrypt_mode &gt;= FKO_LAST_ENC_MODE)</span> +<span class="lineNum"> 545 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL); +<span class="lineNum"> 546 </span> : : +<span class="lineNum"> 547 </span> :<span class="lineCov"> 1781 : ctx-&gt;encryption_mode = encrypt_mode;</span> +<span class="lineNum"> 548 </span> : : +<span class="lineNum"> 549 </span> :<span class="lineCov"> 1781 : ctx-&gt;state |= FKO_ENCRYPT_MODE_MODIFIED;</span> +<span class="lineNum"> 550 </span> : : +<span class="lineNum"> 551 </span> :<span class="lineCov"> 1781 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 552 </span> : : } +<span class="lineNum"> 553 </span> : : +<span class="lineNum"> 554 </span> : : /* Return the SPA encryption mode. +<a name="555"><span class="lineNum"> 555 </span> : : */</a> +<span class="lineNum"> 556 </span> : : int +<span class="lineNum"> 557 </span> :<span class="lineCov"> 1217 : fko_get_spa_encryption_mode(fko_ctx_t ctx, int *enc_mode)</span> +<span class="lineNum"> 558 </span> : : { +<span class="lineNum"> 559 </span> : : /* Must be initialized +<span class="lineNum"> 560 </span> : : */ +<span class="lineNum"> 561 </span>[<span class="branchCov" title="Branch 0 was taken 1217 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1217 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1217 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 562 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 563 </span> : : +<span class="lineNum"> 564 </span> [<span class="branchCov" title="Branch 0 was taken 1217 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1217 : if(enc_mode == NULL)</span> +<span class="lineNum"> 565 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 566 </span> : : +<span class="lineNum"> 567 </span> :<span class="lineCov"> 1217 : *enc_mode = ctx-&gt;encryption_mode;</span> +<span class="lineNum"> 568 </span> : : +<span class="lineNum"> 569 </span> :<span class="lineCov"> 1217 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 570 </span> : : } +<span class="lineNum"> 571 </span> : : +<span class="lineNum"> 572 </span> : : /* Encrypt the encoded SPA data. +<a name="573"><span class="lineNum"> 573 </span> : : */</a> +<span class="lineNum"> 574 </span> : : int +<span class="lineNum"> 575 </span> :<span class="lineCov"> 434 : fko_encrypt_spa_data(fko_ctx_t ctx, const char * const enc_key,</span> +<span class="lineNum"> 576 </span> : : const int enc_key_len) +<span class="lineNum"> 577 </span> : : { +<span class="lineNum"> 578 </span> :<span class="lineCov"> 434 : int res = 0;</span> +<span class="lineNum"> 579 </span> : : +<span class="lineNum"> 580 </span> : : /* Must be initialized +<span class="lineNum"> 581 </span> : : */ +<span class="lineNum"> 582 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 583 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 584 </span> : : +<span class="lineNum"> 585 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(enc_key_len &lt; 0)</span> +<span class="lineNum"> 586 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 587 </span> : : +<span class="lineNum"> 588 </span> : : /* If there is no encoded data or the SPA data has been modified, +<span class="lineNum"> 589 </span> : : * go ahead and re-encode here. +<span class="lineNum"> 590 </span> : : */ +<span class="lineNum"> 591 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg == NULL || FKO_IS_SPA_DATA_MODIFIED(ctx))</span> +<span class="lineNum"> 592 </span> :<span class="lineCov"> 434 : res = fko_encode_spa_data(ctx);</span> +<span class="lineNum"> 593 </span> : : +<span class="lineNum"> 594 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 595 </span> : : return(res); +<span class="lineNum"> 596 </span> : : +<span class="lineNum"> 597 </span> : : /* Croak on invalid encoded message as well. At present this is a +<span class="lineNum"> 598 </span> : : * check for a somewhat arbitrary minimum length for the encoded +<span class="lineNum"> 599 </span> : : * data. +<span class="lineNum"> 600 </span> : : */ +<span class="lineNum"> 601 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> +<span class="lineNum"> 602 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 603 </span> : : +<span class="lineNum"> 604 </span> : : /* Encrypt according to type and return... +<span class="lineNum"> 605 </span> : : */ +<span class="lineNum"> 606 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encryption_type == FKO_ENCRYPTION_RIJNDAEL)</span> +<span class="lineNum"> 607 </span> : : { +<span class="lineNum"> 608 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(enc_key == NULL)</span> +<span class="lineNum"> 609 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 610 </span> :<span class="lineCov"> 434 : res = _rijndael_encrypt(ctx, enc_key, enc_key_len);</span> +<span class="lineNum"> 611 </span> : : } +<span class="lineNum"> 612 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;encryption_type == FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 613 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 614 </span> :<span class="lineNoCov"> 0 : res = gpg_encrypt(ctx, enc_key);</span> +<span class="lineNum"> 615 </span> : : #else +<span class="lineNum"> 616 </span> : : res = FKO_ERROR_UNSUPPORTED_FEATURE; +<span class="lineNum"> 617 </span> : : #endif +<span class="lineNum"> 618 </span> : : else +<span class="lineNum"> 619 </span> : : res = FKO_ERROR_INVALID_ENCRYPTION_TYPE; +<span class="lineNum"> 620 </span> : : +<span class="lineNum"> 621 </span> :<span class="lineCov"> 434 : return(res);</span> +<span class="lineNum"> 622 </span> : : } +<span class="lineNum"> 623 </span> : : +<span class="lineNum"> 624 </span> : : /* Decode, decrypt, and parse SPA data into the context. +<a name="625"><span class="lineNum"> 625 </span> : : */</a> +<span class="lineNum"> 626 </span> : : int +<span class="lineNum"> 627 </span> :<span class="lineCov"> 416 : fko_decrypt_spa_data(fko_ctx_t ctx, const char * const dec_key, const int key_len)</span> +<span class="lineNum"> 628 </span> : : { +<span class="lineNum"> 629 </span> : : int enc_type, res; +<span class="lineNum"> 630 </span> : : +<span class="lineNum"> 631 </span>[<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 416 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 632 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 633 </span> : : +<span class="lineNum"> 634 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(key_len &lt; 0)</span> +<span class="lineNum"> 635 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 636 </span> : : +<span class="lineNum"> 637 </span> : : /* Get the (assumed) type of encryption used. This will also provide +<span class="lineNum"> 638 </span> : : * some data validation. +<span class="lineNum"> 639 </span> : : */ +<span class="lineNum"> 640 </span> :<span class="lineCov"> 416 : enc_type = fko_encryption_type(ctx-&gt;encrypted_msg);</span> +<span class="lineNum"> 641 </span> : : +<span class="lineNum"> 642 </span> [<span class="branchCov" title="Branch 0 was taken 29 times"> + </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 416 : if(enc_type == FKO_ENCRYPTION_GPG</span> +<span class="lineNum"> 643 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 29 times"> + </span>]:<span class="lineCov"> 29 : &amp;&amp; ctx-&gt;encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> +<span class="lineNum"> 644 </span> : : { +<span class="lineNum"> 645 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encryption_type = FKO_ENCRYPTION_GPG;</span> +<span class="lineNum"> 646 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 647 </span> :<span class="lineNoCov"> 0 : res = gpg_decrypt(ctx, dec_key);</span> +<span class="lineNum"> 648 </span> : : #else +<span class="lineNum"> 649 </span> : : res = FKO_ERROR_UNSUPPORTED_FEATURE; +<span class="lineNum"> 650 </span> : : #endif +<span class="lineNum"> 651 </span> : : } +<span class="lineNum"> 652 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchCov" title="Branch 1 was taken 29 times"> + </span>]:<span class="lineCov"> 416 : else if(enc_type == FKO_ENCRYPTION_RIJNDAEL)</span> +<span class="lineNum"> 653 </span> : : { +<span class="lineNum"> 654 </span> :<span class="lineCov"> 387 : ctx-&gt;encryption_type = FKO_ENCRYPTION_RIJNDAEL;</span> +<span class="lineNum"> 655 </span> :<span class="lineCov"> 387 : res = _rijndael_decrypt(ctx,</span> +<span class="lineNum"> 656 </span> : : dec_key, key_len, ctx-&gt;encryption_mode); +<span class="lineNum"> 657 </span> : : } +<span class="lineNum"> 658 </span> : : else +<span class="lineNum"> 659 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN); +<span class="lineNum"> 660 </span> : : +<span class="lineNum"> 661 </span> :<span class="lineCov"> 387 : return(res);</span> +<span class="lineNum"> 662 </span> : : } +<span class="lineNum"> 663 </span> : : +<span class="lineNum"> 664 </span> : : /* Return the assumed encryption type based on the raw encrypted data. +<a name="665"><span class="lineNum"> 665 </span> : : */</a> +<span class="lineNum"> 666 </span> : : int +<span class="lineNum"> 667 </span> :<span class="lineCov"> 416 : fko_encryption_type(const char * const enc_data)</span> +<span class="lineNum"> 668 </span> : : { +<span class="lineNum"> 669 </span> : : int enc_data_len; +<span class="lineNum"> 670 </span> : : +<span class="lineNum"> 671 </span> : : /* Sanity check the data. +<span class="lineNum"> 672 </span> : : */ +<span class="lineNum"> 673 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(enc_data == NULL)</span> +<span class="lineNum"> 674 </span> : : return(FKO_ENCRYPTION_INVALID_DATA); +<span class="lineNum"> 675 </span> : : +<span class="lineNum"> 676 </span> :<span class="lineCov"> 416 : enc_data_len = strnlen(enc_data, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 677 </span> : : +<span class="lineNum"> 678 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if(! is_valid_encoded_msg_len(enc_data_len))</span> +<span class="lineNum"> 679 </span> : : return(FKO_ENCRYPTION_UNKNOWN); +<span class="lineNum"> 680 </span> : : +<span class="lineNum"> 681 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchCov" title="Branch 1 was taken 29 times"> + </span>]:<span class="lineCov"> 416 : if(enc_data_len &gt;= MIN_GNUPG_MSG_SIZE)</span> +<span class="lineNum"> 682 </span> : : return(FKO_ENCRYPTION_GPG); +<span class="lineNum"> 683 </span> : : +<span class="lineNum"> 684 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : else if(enc_data_len &lt; MIN_GNUPG_MSG_SIZE</span> +<span class="lineNum"> 685 </span> :<span class="lineCov"> 387 : &amp;&amp; enc_data_len &gt;= MIN_SPA_ENCODED_MSG_SIZE)</span> +<span class="lineNum"> 686 </span> : : return(FKO_ENCRYPTION_RIJNDAEL); +<span class="lineNum"> 687 </span> : : +<span class="lineNum"> 688 </span> : : else +<span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : return(FKO_ENCRYPTION_UNKNOWN);</span> +<span class="lineNum"> 690 </span> : : } +<span class="lineNum"> 691 </span> : : +<span class="lineNum"> 692 </span> : : /* Set the GPG recipient key name. +<a name="693"><span class="lineNum"> 693 </span> : : */</a> +<span class="lineNum"> 694 </span> : : int +<span class="lineNum"> 695 </span> :<span class="lineCov"> 2 : fko_set_gpg_recipient(fko_ctx_t ctx, const char * const recip)</span> +<span class="lineNum"> 696 </span> : : { +<span class="lineNum"> 697 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 698 </span> : : int res; +<span class="lineNum"> 699 </span> :<span class="lineCov"> 2 : gpgme_key_t key = NULL;</span> +<span class="lineNum"> 700 </span> : : +<span class="lineNum"> 701 </span> : : /* Must be initialized +<span class="lineNum"> 702 </span> : : */ +<span class="lineNum"> 703 </span>[<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 2 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 704 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 705 </span> : : +<span class="lineNum"> 706 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 707 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 708 </span> : : +<span class="lineNum"> 709 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(ctx-&gt;gpg_recipient != NULL)</span> +<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_recipient);</span> +<span class="lineNum"> 711 </span> : : +<span class="lineNum"> 712 </span> :<span class="lineCov"> 2 : ctx-&gt;gpg_recipient = strdup(recip);</span> +<span class="lineNum"> 713 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(ctx-&gt;gpg_recipient == NULL)</span> +<span class="lineNum"> 714 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 715 </span> : : +<span class="lineNum"> 716 </span> : : /* Get the key. +<span class="lineNum"> 717 </span> : : */ +<span class="lineNum"> 718 </span> :<span class="lineCov"> 2 : res = get_gpg_key(ctx, &amp;key, 0);</span> +<span class="lineNum"> 719 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 720 </span> : : { +<span class="lineNum"> 721 </span> :<span class="lineCov"> 2 : free(ctx-&gt;gpg_recipient);</span> +<span class="lineNum"> 722 </span> :<span class="lineCov"> 2 : ctx-&gt;gpg_recipient = NULL;</span> +<span class="lineNum"> 723 </span> :<span class="lineCov"> 2 : return(res);</span> +<span class="lineNum"> 724 </span> : : } +<span class="lineNum"> 725 </span> : : +<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : ctx-&gt;recipient_key = key;</span> +<span class="lineNum"> 727 </span> : : +<span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 729 </span> : : +<span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 731 </span> : : #else +<span class="lineNum"> 732 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 733 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 734 </span> : : } +<span class="lineNum"> 735 </span> : : +<span class="lineNum"> 736 </span> : : /* Set the GPG home dir. +<a name="737"><span class="lineNum"> 737 </span> : : */</a> +<span class="lineNum"> 738 </span> : : int +<span class="lineNum"> 739 </span> :<span class="lineCov"> 1 : fko_set_gpg_exe(fko_ctx_t ctx, const char * const gpg_exe)</span> +<span class="lineNum"> 740 </span> : : { +<span class="lineNum"> 741 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 742 </span> : : struct stat st; +<span class="lineNum"> 743 </span> : : +<span class="lineNum"> 744 </span> : : /* Must be initialized +<span class="lineNum"> 745 </span> : : */ +<span class="lineNum"> 746 </span>[<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 747 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 748 </span> : : +<span class="lineNum"> 749 </span> : : /* If we are unable to stat the given path/file and determine if it +<span class="lineNum"> 750 </span> : : * is a regular file or symbolic link, then return with error. +<span class="lineNum"> 751 </span> : : */ +<span class="lineNum"> 752 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : if(stat(gpg_exe, &amp;st) != 0)</span> +<span class="lineNum"> 753 </span> : : return(FKO_ERROR_GPGME_BAD_GPG_EXE); +<span class="lineNum"> 754 </span> : : +<span class="lineNum"> 755 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!S_ISREG(st.st_mode) &amp;&amp; !S_ISLNK(st.st_mode))</span> +<span class="lineNum"> 756 </span> : : return(FKO_ERROR_GPGME_BAD_GPG_EXE); +<span class="lineNum"> 757 </span> : : +<span class="lineNum"> 758 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_exe != NULL)</span> +<span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_exe);</span> +<span class="lineNum"> 760 </span> : : +<span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_exe = strdup(gpg_exe);</span> +<span class="lineNum"> 762 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_exe == NULL)</span> +<span class="lineNum"> 763 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 764 </span> : : +<span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 766 </span> : : #else +<span class="lineNum"> 767 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 768 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 769 </span> : : } +<span class="lineNum"> 770 </span> : : +<span class="lineNum"> 771 </span> : : /* Get the GPG home dir. +<a name="772"><span class="lineNum"> 772 </span> : : */</a> +<span class="lineNum"> 773 </span> : : int +<span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_exe(fko_ctx_t ctx, char **gpg_exe)</span> +<span class="lineNum"> 775 </span> : : { +<span class="lineNum"> 776 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 777 </span> : : /* Must be initialized +<span class="lineNum"> 778 </span> : : */ +<span class="lineNum"> 779 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 780 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 781 </span> : : +<span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : *gpg_exe = ctx-&gt;gpg_exe;</span> +<span class="lineNum"> 783 </span> : : +<span class="lineNum"> 784 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 785 </span> : : #else +<span class="lineNum"> 786 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 787 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 788 </span> : : } +<span class="lineNum"> 789 </span> : : +<span class="lineNum"> 790 </span> : : /* Get the GPG recipient key name. +<a name="791"><span class="lineNum"> 791 </span> : : */</a> +<span class="lineNum"> 792 </span> : : int +<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_recipient(fko_ctx_t ctx, char **recipient)</span> +<span class="lineNum"> 794 </span> : : { +<span class="lineNum"> 795 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 796 </span> : : /* Must be initialized +<span class="lineNum"> 797 </span> : : */ +<span class="lineNum"> 798 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 799 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 800 </span> : : +<span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : *recipient = ctx-&gt;gpg_recipient;</span> +<span class="lineNum"> 802 </span> : : +<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 804 </span> : : #else +<span class="lineNum"> 805 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 806 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 807 </span> : : } +<span class="lineNum"> 808 </span> : : +<span class="lineNum"> 809 </span> : : /* Set the GPG signer key name. +<a name="810"><span class="lineNum"> 810 </span> : : */</a> +<span class="lineNum"> 811 </span> : : int +<span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signer(fko_ctx_t ctx, const char * const signer)</span> +<span class="lineNum"> 813 </span> : : { +<span class="lineNum"> 814 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 815 </span> : : int res; +<span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : gpgme_key_t key = NULL;</span> +<span class="lineNum"> 817 </span> : : +<span class="lineNum"> 818 </span> : : /* Must be initialized +<span class="lineNum"> 819 </span> : : */ +<span class="lineNum"> 820 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 821 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 822 </span> : : +<span class="lineNum"> 823 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 824 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 825 </span> : : +<span class="lineNum"> 826 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_signer != NULL)</span> +<span class="lineNum"> 827 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_signer);</span> +<span class="lineNum"> 828 </span> : : +<span class="lineNum"> 829 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_signer = strdup(signer);</span> +<span class="lineNum"> 830 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_signer == NULL)</span> +<span class="lineNum"> 831 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 832 </span> : : +<span class="lineNum"> 833 </span> : : /* Get the key. +<span class="lineNum"> 834 </span> : : */ +<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : res = get_gpg_key(ctx, &amp;key, 1);</span> +<span class="lineNum"> 836 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 837 </span> : : { +<span class="lineNum"> 838 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_signer);</span> +<span class="lineNum"> 839 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_signer = NULL;</span> +<span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 841 </span> : : } +<span class="lineNum"> 842 </span> : : +<span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : ctx-&gt;signer_key = key;</span> +<span class="lineNum"> 844 </span> : : +<span class="lineNum"> 845 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 846 </span> : : +<span class="lineNum"> 847 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 848 </span> : : #else +<span class="lineNum"> 849 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 850 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 851 </span> : : } +<span class="lineNum"> 852 </span> : : +<span class="lineNum"> 853 </span> : : /* Get the GPG signer key name. +<a name="854"><span class="lineNum"> 854 </span> : : */</a> +<span class="lineNum"> 855 </span> : : int +<span class="lineNum"> 856 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signer(fko_ctx_t ctx, char **signer)</span> +<span class="lineNum"> 857 </span> : : { +<span class="lineNum"> 858 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 859 </span> : : /* Must be initialized +<span class="lineNum"> 860 </span> : : */ +<span class="lineNum"> 861 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 862 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 863 </span> : : +<span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : *signer = ctx-&gt;gpg_signer;</span> +<span class="lineNum"> 865 </span> : : +<span class="lineNum"> 866 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 867 </span> : : #else +<span class="lineNum"> 868 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 869 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 870 </span> : : } +<span class="lineNum"> 871 </span> : : +<span class="lineNum"> 872 </span> : : /* Set the GPG home dir. +<a name="873"><span class="lineNum"> 873 </span> : : */</a> +<span class="lineNum"> 874 </span> : : int +<span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_home_dir(fko_ctx_t ctx, const char * const gpg_home_dir)</span> +<span class="lineNum"> 876 </span> : : { +<span class="lineNum"> 877 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 878 </span> : : struct stat st; +<span class="lineNum"> 879 </span> : : +<span class="lineNum"> 880 </span> : : /* Must be initialized +<span class="lineNum"> 881 </span> : : */ +<span class="lineNum"> 882 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 883 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 884 </span> : : +<span class="lineNum"> 885 </span> : : /* If we are unable to stat the given dir, then return with error. +<span class="lineNum"> 886 </span> : : */ +<span class="lineNum"> 887 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(gpg_home_dir, &amp;st) != 0)</span> +<span class="lineNum"> 888 </span> : : return(FKO_ERROR_GPGME_BAD_HOME_DIR); +<span class="lineNum"> 889 </span> : : +<span class="lineNum"> 890 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!S_ISDIR(st.st_mode))</span> +<span class="lineNum"> 891 </span> : : return(FKO_ERROR_GPGME_BAD_HOME_DIR); +<span class="lineNum"> 892 </span> : : +<span class="lineNum"> 893 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_home_dir != NULL)</span> +<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_home_dir);</span> +<span class="lineNum"> 895 </span> : : +<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_home_dir = strdup(gpg_home_dir);</span> +<span class="lineNum"> 897 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_home_dir == NULL)</span> +<span class="lineNum"> 898 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 899 </span> : : +<span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 901 </span> : : #else +<span class="lineNum"> 902 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 903 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 904 </span> : : } +<span class="lineNum"> 905 </span> : : +<span class="lineNum"> 906 </span> : : /* Get the GPG home dir. +<a name="907"><span class="lineNum"> 907 </span> : : */</a> +<span class="lineNum"> 908 </span> : : int +<span class="lineNum"> 909 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_home_dir(fko_ctx_t ctx, char **home_dir)</span> +<span class="lineNum"> 910 </span> : : { +<span class="lineNum"> 911 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 912 </span> : : /* Must be initialized +<span class="lineNum"> 913 </span> : : */ +<span class="lineNum"> 914 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 915 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 916 </span> : : +<span class="lineNum"> 917 </span> :<span class="lineNoCov"> 0 : *home_dir = ctx-&gt;gpg_home_dir;</span> +<span class="lineNum"> 918 </span> : : +<span class="lineNum"> 919 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 920 </span> : : #else +<span class="lineNum"> 921 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 922 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 923 </span> : : } +<a name="924"><span class="lineNum"> 924 </span> : : </a> +<span class="lineNum"> 925 </span> : : int +<span class="lineNum"> 926 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signature_verify(fko_ctx_t ctx, const unsigned char val)</span> +<span class="lineNum"> 927 </span> : : { +<span class="lineNum"> 928 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 929 </span> : : /* Must be initialized +<span class="lineNum"> 930 </span> : : */ +<span class="lineNum"> 931 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 932 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 933 </span> : : +<span class="lineNum"> 934 </span> :<span class="lineNoCov"> 0 : ctx-&gt;verify_gpg_sigs = (val != 0) ? 1 : 0;</span> +<span class="lineNum"> 935 </span> : : +<span class="lineNum"> 936 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 937 </span> : : #else +<span class="lineNum"> 938 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 939 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 940 </span> : : } +<a name="941"><span class="lineNum"> 941 </span> : : </a> +<span class="lineNum"> 942 </span> : : int +<span class="lineNum"> 943 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_verify(fko_ctx_t ctx, unsigned char * const val)</span> +<span class="lineNum"> 944 </span> : : { +<span class="lineNum"> 945 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 946 </span> : : /* Must be initialized +<span class="lineNum"> 947 </span> : : */ +<span class="lineNum"> 948 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 949 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 950 </span> : : +<span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : *val = ctx-&gt;verify_gpg_sigs;</span> +<span class="lineNum"> 952 </span> : : +<span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 954 </span> : : #else +<span class="lineNum"> 955 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 956 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 957 </span> : : } +<a name="958"><span class="lineNum"> 958 </span> : : </a> +<span class="lineNum"> 959 </span> : : int +<span class="lineNum"> 960 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_ignore_verify_error(fko_ctx_t ctx, const unsigned char val)</span> +<span class="lineNum"> 961 </span> : : { +<span class="lineNum"> 962 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 963 </span> : : /* Must be initialized +<span class="lineNum"> 964 </span> : : */ +<span class="lineNum"> 965 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 966 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 967 </span> : : +<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : ctx-&gt;ignore_gpg_sig_error = (val != 0) ? 1 : 0;</span> +<span class="lineNum"> 969 </span> : : +<span class="lineNum"> 970 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 971 </span> : : #else +<span class="lineNum"> 972 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 973 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 974 </span> : : } +<a name="975"><span class="lineNum"> 975 </span> : : </a> +<span class="lineNum"> 976 </span> : : int +<span class="lineNum"> 977 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_ignore_verify_error(fko_ctx_t ctx, unsigned char * const val)</span> +<span class="lineNum"> 978 </span> : : { +<span class="lineNum"> 979 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 980 </span> : : /* Must be initialized +<span class="lineNum"> 981 </span> : : */ +<span class="lineNum"> 982 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 983 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 984 </span> : : +<span class="lineNum"> 985 </span> :<span class="lineNoCov"> 0 : *val = ctx-&gt;ignore_gpg_sig_error;</span> +<span class="lineNum"> 986 </span> : : +<span class="lineNum"> 987 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 988 </span> : : #else +<span class="lineNum"> 989 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 990 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 991 </span> : : } +<span class="lineNum"> 992 </span> : : +<a name="993"><span class="lineNum"> 993 </span> : : </a> +<span class="lineNum"> 994 </span> : : int +<span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_fpr(fko_ctx_t ctx, char **fpr)</span> +<span class="lineNum"> 996 </span> : : { +<span class="lineNum"> 997 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 998 </span> : : /* Must be initialized +<span class="lineNum"> 999 </span> : : */ +<span class="lineNum"> 1000 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 1001 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 1002 </span> : : +<span class="lineNum"> 1003 </span> : : /* Must be using GPG encryption. +<span class="lineNum"> 1004 </span> : : */ +<span class="lineNum"> 1005 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 1006 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 1007 </span> : : +<span class="lineNum"> 1008 </span> : : /* Make sure we are supposed to verify signatures. +<span class="lineNum"> 1009 </span> : : */ +<span class="lineNum"> 1010 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> +<span class="lineNum"> 1011 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); +<span class="lineNum"> 1012 </span> : : +<span class="lineNum"> 1013 </span> : : /* Make sure we have a signature to work with. +<span class="lineNum"> 1014 </span> : : */ +<span class="lineNum"> 1015 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> +<span class="lineNum"> 1016 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); +<span class="lineNum"> 1017 </span> : : +<span class="lineNum"> 1018 </span> :<span class="lineNoCov"> 0 : *fpr = ctx-&gt;gpg_sigs-&gt;fpr;</span> +<span class="lineNum"> 1019 </span> : : +<span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 1021 </span> : : #else +<span class="lineNum"> 1022 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 1023 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 1024 </span> : : } +<a name="1025"><span class="lineNum"> 1025 </span> : : </a> +<span class="lineNum"> 1026 </span> : : int +<span class="lineNum"> 1027 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_id(fko_ctx_t ctx, char **id)</span> +<span class="lineNum"> 1028 </span> : : { +<span class="lineNum"> 1029 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 1030 </span> : : /* Must be initialized +<span class="lineNum"> 1031 </span> : : */ +<span class="lineNum"> 1032 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 1033 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 1034 </span> : : +<span class="lineNum"> 1035 </span> : : /* Must be using GPG encryption. +<span class="lineNum"> 1036 </span> : : */ +<span class="lineNum"> 1037 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 1038 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 1039 </span> : : +<span class="lineNum"> 1040 </span> : : /* Make sure we are supposed to verify signatures. +<span class="lineNum"> 1041 </span> : : */ +<span class="lineNum"> 1042 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> +<span class="lineNum"> 1043 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); +<span class="lineNum"> 1044 </span> : : +<span class="lineNum"> 1045 </span> : : /* Make sure we have a signature to work with. +<span class="lineNum"> 1046 </span> : : */ +<span class="lineNum"> 1047 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> +<span class="lineNum"> 1048 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); +<span class="lineNum"> 1049 </span> : : +<span class="lineNum"> 1050 </span> :<span class="lineNoCov"> 0 : *id = ctx-&gt;gpg_sigs-&gt;fpr + strlen(ctx-&gt;gpg_sigs-&gt;fpr) - 8;</span> +<span class="lineNum"> 1051 </span> : : +<span class="lineNum"> 1052 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 1053 </span> : : #else +<span class="lineNum"> 1054 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 1055 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 1056 </span> : : } +<a name="1057"><span class="lineNum"> 1057 </span> : : </a> +<span class="lineNum"> 1058 </span> : : int +<span class="lineNum"> 1059 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_summary(fko_ctx_t ctx, int *sigsum)</span> +<span class="lineNum"> 1060 </span> : : { +<span class="lineNum"> 1061 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 1062 </span> : : /* Must be initialized +<span class="lineNum"> 1063 </span> : : */ +<span class="lineNum"> 1064 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 1065 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 1066 </span> : : +<span class="lineNum"> 1067 </span> : : /* Must be using GPG encryption. +<span class="lineNum"> 1068 </span> : : */ +<span class="lineNum"> 1069 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 1070 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 1071 </span> : : +<span class="lineNum"> 1072 </span> : : /* Make sure we are supposed to verify signatures. +<span class="lineNum"> 1073 </span> : : */ +<span class="lineNum"> 1074 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> +<span class="lineNum"> 1075 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); +<span class="lineNum"> 1076 </span> : : +<span class="lineNum"> 1077 </span> : : /* Make sure we have a signature to work with. +<span class="lineNum"> 1078 </span> : : */ +<span class="lineNum"> 1079 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> +<span class="lineNum"> 1080 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); +<span class="lineNum"> 1081 </span> : : +<span class="lineNum"> 1082 </span> :<span class="lineNoCov"> 0 : *sigsum = ctx-&gt;gpg_sigs-&gt;summary;</span> +<span class="lineNum"> 1083 </span> : : +<span class="lineNum"> 1084 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 1085 </span> : : #else +<span class="lineNum"> 1086 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 1087 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 1088 </span> : : } +<a name="1089"><span class="lineNum"> 1089 </span> : : </a> +<span class="lineNum"> 1090 </span> : : int +<span class="lineNum"> 1091 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_status(fko_ctx_t ctx, int *sigstat)</span> +<span class="lineNum"> 1092 </span> : : { +<span class="lineNum"> 1093 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 1094 </span> : : /* Must be initialized +<span class="lineNum"> 1095 </span> : : */ +<span class="lineNum"> 1096 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 1097 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 1098 </span> : : +<span class="lineNum"> 1099 </span> : : /* Must be using GPG encryption. +<span class="lineNum"> 1100 </span> : : */ +<span class="lineNum"> 1101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 1102 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 1103 </span> : : +<span class="lineNum"> 1104 </span> : : /* Make sure we are supposed to verify signatures. +<span class="lineNum"> 1105 </span> : : */ +<span class="lineNum"> 1106 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> +<span class="lineNum"> 1107 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); +<span class="lineNum"> 1108 </span> : : +<span class="lineNum"> 1109 </span> : : /* Make sure we have a signature to work with. +<span class="lineNum"> 1110 </span> : : */ +<span class="lineNum"> 1111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> +<span class="lineNum"> 1112 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); +<span class="lineNum"> 1113 </span> : : +<span class="lineNum"> 1114 </span> :<span class="lineNoCov"> 0 : *sigstat = ctx-&gt;gpg_sigs-&gt;status;</span> +<span class="lineNum"> 1115 </span> : : +<span class="lineNum"> 1116 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 1117 </span> : : #else +<span class="lineNum"> 1118 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 1119 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 1120 </span> : : } +<a name="1121"><span class="lineNum"> 1121 </span> : : </a> +<span class="lineNum"> 1122 </span> : : int +<span class="lineNum"> 1123 </span> :<span class="lineNoCov"> 0 : fko_gpg_signature_id_match(fko_ctx_t ctx, const char * const id,</span> +<span class="lineNum"> 1124 </span> : : unsigned char * const result) +<span class="lineNum"> 1125 </span> : : { +<span class="lineNum"> 1126 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 1127 </span> : : char *curr_id; +<span class="lineNum"> 1128 </span> :<span class="lineNoCov"> 0 : int rv = FKO_SUCCESS;</span> +<span class="lineNum"> 1129 </span> : : +<span class="lineNum"> 1130 </span> : : /* Must be initialized +<span class="lineNum"> 1131 </span> : : */ +<span class="lineNum"> 1132 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 1133 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 1134 </span> : : +<span class="lineNum"> 1135 </span> : : /* Must be using GPG encryption. +<span class="lineNum"> 1136 </span> : : */ +<span class="lineNum"> 1137 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 1138 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 1139 </span> : : +<span class="lineNum"> 1140 </span> : : /* Make sure we are supposed to verify signatures. +<span class="lineNum"> 1141 </span> : : */ +<span class="lineNum"> 1142 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> +<span class="lineNum"> 1143 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); +<span class="lineNum"> 1144 </span> : : +<span class="lineNum"> 1145 </span> : : /* Make sure we have a signature to work with. +<span class="lineNum"> 1146 </span> : : */ +<span class="lineNum"> 1147 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> +<span class="lineNum"> 1148 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); +<span class="lineNum"> 1149 </span> : : +<span class="lineNum"> 1150 </span> :<span class="lineNoCov"> 0 : rv = fko_get_gpg_signature_id(ctx, &amp;curr_id);</span> +<span class="lineNum"> 1151 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rv != FKO_SUCCESS)</span> +<span class="lineNum"> 1152 </span> : : return rv; +<span class="lineNum"> 1153 </span> : : +<span class="lineNum"> 1154 </span> :<span class="lineNoCov"> 0 : *result = strcmp(id, curr_id) == 0 ? 1 : 0;</span> +<span class="lineNum"> 1155 </span> : : +<span class="lineNum"> 1156 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 1157 </span> : : #else +<span class="lineNum"> 1158 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 1159 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 1160 </span> : : } +<a name="1161"><span class="lineNum"> 1161 </span> : : </a> +<span class="lineNum"> 1162 </span> : : int +<span class="lineNum"> 1163 </span> :<span class="lineNoCov"> 0 : fko_gpg_signature_fpr_match(fko_ctx_t ctx, const char * const id,</span> +<span class="lineNum"> 1164 </span> : : unsigned char * const result) +<span class="lineNum"> 1165 </span> : : { +<span class="lineNum"> 1166 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 1167 </span> : : /* Must be initialized +<span class="lineNum"> 1168 </span> : : */ +<span class="lineNum"> 1169 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 1170 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 1171 </span> : : +<span class="lineNum"> 1172 </span> : : /* Must be using GPG encryption. +<span class="lineNum"> 1173 </span> : : */ +<span class="lineNum"> 1174 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 1175 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); +<span class="lineNum"> 1176 </span> : : +<span class="lineNum"> 1177 </span> : : /* Make sure we are supposed to verify signatures. +<span class="lineNum"> 1178 </span> : : */ +<span class="lineNum"> 1179 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> +<span class="lineNum"> 1180 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); +<span class="lineNum"> 1181 </span> : : +<span class="lineNum"> 1182 </span> : : /* Make sure we have a signature to work with. +<span class="lineNum"> 1183 </span> : : */ +<span class="lineNum"> 1184 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> +<span class="lineNum"> 1185 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); +<span class="lineNum"> 1186 </span> : : +<span class="lineNum"> 1187 </span> :<span class="lineNoCov"> 0 : *result = strcmp(id, ctx-&gt;gpg_sigs-&gt;fpr) == 0 ? 1 : 0;</span> +<span class="lineNum"> 1188 </span> : : +<span class="lineNum"> 1189 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 1190 </span> : : #else +<span class="lineNum"> 1191 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 1192 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 1193 </span> : : } +<span class="lineNum"> 1194 </span> : : +<span class="lineNum"> 1195 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html new file mode 100644 index 00000000..8cdc5e62 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_error.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_error.c<span style="font-size: 80%;"> (<a href="fko_error.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">145</td> + <td class="headerCovTableEntryLo">11.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">13</td> + <td class="headerCovTableEntry">146</td> + <td class="headerCovTableEntryLo">8.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_error.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_error.c.gcov.html#37">fko_errstr</a></td> + <td class="coverFnHi">176</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_error.c.gcov.html#475">fko_gpg_errstr</a></td> + <td class="coverFnHi">2</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html new file mode 100644 index 00000000..b3df005b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_error.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_error.c<span style="font-size: 80%;"> (<a href="fko_error.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">145</td> + <td class="headerCovTableEntryLo">11.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">13</td> + <td class="headerCovTableEntry">146</td> + <td class="headerCovTableEntryLo">8.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_error.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_error.c.gcov.html#37">fko_errstr</a></td> + <td class="coverFnHi">176</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_error.c.gcov.html#475">fko_gpg_errstr</a></td> + <td class="coverFnHi">2</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html new file mode 100644 index 00000000..7f39d9f2 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html @@ -0,0 +1,606 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_error.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_error.c<span style="font-size: 80%;"> (source / <a href="fko_error.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">145</td> + <td class="headerCovTableEntryLo">11.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">13</td> + <td class="headerCovTableEntry">146</td> + <td class="headerCovTableEntryLo">8.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_error.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Error handling functions for libfko +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 35 </span> : : #include &lt;gpgme.h&gt; +<span class="lineNum"> 36 </span> : : #endif +<a name="37"><span class="lineNum"> 37 </span> : : </a> +<span class="lineNum"> 38 </span> : : const char* +<span class="lineNum"> 39 </span> :<span class="lineCov"> 176 : fko_errstr(const int err_code)</span> +<span class="lineNum"> 40 </span> : : { +<span class="lineNum"> 41 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 176 : switch (err_code)</span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchCov" title="Branch 6 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span><span class="branchNoCov" title="Branch 8 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 9 was not taken"> - </span><span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchNoCov" title="Branch 11 was not taken"> - </span><span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchNoCov" title="Branch 13 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchNoCov" title="Branch 15 was not taken"> - </span><span class="branchNoCov" title="Branch 16 was not taken"> - </span><span class="branchNoCov" title="Branch 17 was not taken"> - </span><span class="branchNoCov" title="Branch 18 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 19 was not taken"> - </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span><span class="branchNoCov" title="Branch 21 was not taken"> - </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span><span class="branchNoCov" title="Branch 23 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span><span class="branchNoCov" title="Branch 25 was not taken"> - </span><span class="branchNoCov" title="Branch 26 was not taken"> - </span><span class="branchNoCov" title="Branch 27 was not taken"> - </span><span class="branchNoCov" title="Branch 28 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 29 was not taken"> - </span><span class="branchNoCov" title="Branch 30 was not taken"> - </span><span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchNoCov" title="Branch 32 was not taken"> - </span><span class="branchNoCov" title="Branch 33 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 34 was not taken"> - </span><span class="branchNoCov" title="Branch 35 was not taken"> - </span><span class="branchNoCov" title="Branch 36 was not taken"> - </span><span class="branchNoCov" title="Branch 37 was not taken"> - </span><span class="branchNoCov" title="Branch 38 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 39 was not taken"> - </span><span class="branchNoCov" title="Branch 40 was not taken"> - </span><span class="branchNoCov" title="Branch 41 was not taken"> - </span><span class="branchNoCov" title="Branch 42 was not taken"> - </span><span class="branchNoCov" title="Branch 43 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 44 was not taken"> - </span><span class="branchNoCov" title="Branch 45 was not taken"> - </span><span class="branchNoCov" title="Branch 46 was not taken"> - </span><span class="branchNoCov" title="Branch 47 was not taken"> - </span><span class="branchNoCov" title="Branch 48 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 49 was not taken"> - </span><span class="branchNoCov" title="Branch 50 was not taken"> - </span><span class="branchNoCov" title="Branch 51 was not taken"> - </span><span class="branchNoCov" title="Branch 52 was not taken"> - </span><span class="branchNoCov" title="Branch 53 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 54 was not taken"> - </span><span class="branchNoCov" title="Branch 55 was not taken"> - </span><span class="branchNoCov" title="Branch 56 was not taken"> - </span><span class="branchNoCov" title="Branch 57 was not taken"> - </span><span class="branchNoCov" title="Branch 58 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 59 was not taken"> - </span><span class="branchNoCov" title="Branch 60 was not taken"> - </span><span class="branchNoCov" title="Branch 61 was not taken"> - </span><span class="branchNoCov" title="Branch 62 was not taken"> - </span><span class="branchNoCov" title="Branch 63 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchCov" title="Branch 64 was taken 29 times"> + </span><span class="branchNoCov" title="Branch 65 was not taken"> - </span><span class="branchNoCov" title="Branch 66 was not taken"> - </span><span class="branchNoCov" title="Branch 67 was not taken"> - </span><span class="branchNoCov" title="Branch 68 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 69 was not taken"> - </span><span class="branchNoCov" title="Branch 70 was not taken"> - </span><span class="branchNoCov" title="Branch 71 was not taken"> - </span><span class="branchNoCov" title="Branch 72 was not taken"> - </span><span class="branchNoCov" title="Branch 73 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 74 was not taken"> - </span><span class="branchNoCov" title="Branch 75 was not taken"> - </span><span class="branchNoCov" title="Branch 76 was not taken"> - </span><span class="branchNoCov" title="Branch 77 was not taken"> - </span><span class="branchNoCov" title="Branch 78 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 79 was not taken"> - </span><span class="branchNoCov" title="Branch 80 was not taken"> - </span><span class="branchNoCov" title="Branch 81 was not taken"> - </span><span class="branchNoCov" title="Branch 82 was not taken"> - </span><span class="branchNoCov" title="Branch 83 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 84 was not taken"> - </span><span class="branchNoCov" title="Branch 85 was not taken"> - </span><span class="branchNoCov" title="Branch 86 was not taken"> - </span><span class="branchCov" title="Branch 87 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 88 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchCov" title="Branch 89 was taken 3 times"> + </span><span class="branchCov" title="Branch 90 was taken 22 times"> + </span><span class="branchNoCov" title="Branch 91 was not taken"> - </span><span class="branchNoCov" title="Branch 92 was not taken"> - </span><span class="branchCov" title="Branch 93 was taken 1 time"> + </span> +<span class="lineNum"> </span><span class="branchCov" title="Branch 94 was taken 18 times"> + </span><span class="branchNoCov" title="Branch 95 was not taken"> - </span><span class="branchNoCov" title="Branch 96 was not taken"> - </span><span class="branchNoCov" title="Branch 97 was not taken"> - </span><span class="branchNoCov" title="Branch 98 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 99 was not taken"> - </span><span class="branchNoCov" title="Branch 100 was not taken"> - </span><span class="branchCov" title="Branch 101 was taken 97 times"> + </span><span class="branchNoCov" title="Branch 102 was not taken"> - </span><span class="branchNoCov" title="Branch 103 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 104 was not taken"> - </span><span class="branchNoCov" title="Branch 105 was not taken"> - </span><span class="branchNoCov" title="Branch 106 was not taken"> - </span><span class="branchNoCov" title="Branch 107 was not taken"> - </span><span class="branchNoCov" title="Branch 108 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 109 was not taken"> - </span><span class="branchNoCov" title="Branch 110 was not taken"> - </span><span class="branchNoCov" title="Branch 111 was not taken"> - </span><span class="branchNoCov" title="Branch 112 was not taken"> - </span><span class="branchNoCov" title="Branch 113 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 114 was not taken"> - </span><span class="branchNoCov" title="Branch 115 was not taken"> - </span><span class="branchNoCov" title="Branch 116 was not taken"> - </span><span class="branchNoCov" title="Branch 117 was not taken"> - </span><span class="branchNoCov" title="Branch 118 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 119 was not taken"> - </span><span class="branchNoCov" title="Branch 120 was not taken"> - </span><span class="branchNoCov" title="Branch 121 was not taken"> - </span><span class="branchNoCov" title="Branch 122 was not taken"> - </span><span class="branchNoCov" title="Branch 123 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 124 was not taken"> - </span><span class="branchNoCov" title="Branch 125 was not taken"> - </span><span class="branchNoCov" title="Branch 126 was not taken"> - </span><span class="branchNoCov" title="Branch 127 was not taken"> - </span><span class="branchCov" title="Branch 128 was taken 2 times"> + </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 129 was not taken"> - </span><span class="branchNoCov" title="Branch 130 was not taken"> - </span><span class="branchNoCov" title="Branch 131 was not taken"> - </span><span class="branchCov" title="Branch 132 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 133 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 134 was not taken"> - </span><span class="branchNoCov" title="Branch 135 was not taken"> - </span><span class="branchNoCov" title="Branch 136 was not taken"> - </span><span class="branchNoCov" title="Branch 137 was not taken"> - </span><span class="branchNoCov" title="Branch 138 was not taken"> - </span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 139 was not taken"> - </span>] +<span class="lineNum"> 42 </span> : : { +<span class="lineNum"> 43 </span> : : /* Start base FKO errors +<span class="lineNum"> 44 </span> : : */ +<span class="lineNum"> 45 </span> : : case FKO_SUCCESS: +<span class="lineNum"> 46 </span> : : return(&quot;Success&quot;); +<span class="lineNum"> 47 </span> : : +<span class="lineNum"> 48 </span> : : case FKO_ERROR_CTX_NOT_INITIALIZED: +<span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : return(&quot;FKO Context is not initialized&quot;);</span> +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> : : case FKO_ERROR_MEMORY_ALLOCATION: +<span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to allocate memory&quot;);</span> +<span class="lineNum"> 53 </span> : : +<span class="lineNum"> 54 </span> : : case FKO_ERROR_FILESYSTEM_OPERATION: +<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : return(&quot;Read/write bytes mismatch&quot;);</span> +<span class="lineNum"> 56 </span> : : +<span class="lineNum"> 57 </span> : : case FKO_ERROR_INVALID_DATA: +<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data&quot;);</span> +<span class="lineNum"> 59 </span> : : +<span class="lineNum"> 60 </span> : : case FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE: +<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE&quot;);</span> +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL: +<span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 65 </span> : : +<span class="lineNum"> 66 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII: +<span class="lineNum"> 67 </span> :<span class="lineCov"> 2 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII&quot;);</span> +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS: +<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS&quot;);</span> +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_GT_MAX_FIELDS: +<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_GT_MAX_FIELDS&quot;);</span> +<span class="lineNum"> 74 </span> : : +<span class="lineNum"> 75 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS: +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS&quot;);</span> +<span class="lineNum"> 77 </span> : : +<span class="lineNum"> 78 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE: +<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE&quot;);</span> +<span class="lineNum"> 80 </span> : : +<span class="lineNum"> 81 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING: +<span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING&quot;);</span> +<span class="lineNum"> 83 </span> : : +<span class="lineNum"> 84 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING: +<span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING&quot;);</span> +<span class="lineNum"> 86 </span> : : +<span class="lineNum"> 87 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG: +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG&quot;);</span> +<span class="lineNum"> 89 </span> : : +<span class="lineNum"> 90 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL: +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL&quot;);</span> +<span class="lineNum"> 92 </span> : : +<span class="lineNum"> 93 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL: +<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL&quot;);</span> +<span class="lineNum"> 95 </span> : : +<span class="lineNum"> 96 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING: +<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING&quot;);</span> +<span class="lineNum"> 98 </span> : : +<span class="lineNum"> 99 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG: +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG&quot;);</span> +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL: +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL&quot;);</span> +<span class="lineNum"> 104 </span> : : +<span class="lineNum"> 105 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING: +<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING&quot;);</span> +<span class="lineNum"> 107 </span> : : +<span class="lineNum"> 108 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG: +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG&quot;);</span> +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING: +<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING&quot;);</span> +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG: +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG&quot;);</span> +<span class="lineNum"> 116 </span> : : +<span class="lineNum"> 117 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL: +<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL&quot;);</span> +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING: +<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING&quot;);</span> +<span class="lineNum"> 122 </span> : : +<span class="lineNum"> 123 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG: +<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG&quot;);</span> +<span class="lineNum"> 125 </span> : : +<span class="lineNum"> 126 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL: +<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL&quot;);</span> +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL: +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL&quot;);</span> +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL: +<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL&quot;);</span> +<span class="lineNum"> 134 </span> : : +<span class="lineNum"> 135 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING: +<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING&quot;);</span> +<span class="lineNum"> 137 </span> : : +<span class="lineNum"> 138 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG: +<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG&quot;);</span> +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL: +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL&quot;);</span> +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL: +<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL&quot;);</span> +<span class="lineNum"> 146 </span> : : +<span class="lineNum"> 147 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING: +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING&quot;);</span> +<span class="lineNum"> 149 </span> : : +<span class="lineNum"> 150 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL: +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL&quot;);</span> +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG: +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG&quot;);</span> +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG: +<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG&quot;);</span> +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL: +<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL&quot;);</span> +<span class="lineNum"> 161 </span> : : +<span class="lineNum"> 162 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING: +<span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING&quot;);</span> +<span class="lineNum"> 164 </span> : : +<span class="lineNum"> 165 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG: +<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG&quot;);</span> +<span class="lineNum"> 167 </span> : : +<span class="lineNum"> 168 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL: +<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL&quot;);</span> +<span class="lineNum"> 170 </span> : : +<span class="lineNum"> 171 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL: +<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL&quot;);</span> +<span class="lineNum"> 173 </span> : : +<span class="lineNum"> 174 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG: +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG&quot;);</span> +<span class="lineNum"> 176 </span> : : +<span class="lineNum"> 177 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL: +<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL: +<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL&quot;);</span> +<span class="lineNum"> 182 </span> : : +<span class="lineNum"> 183 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG: +<span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG&quot;);</span> +<span class="lineNum"> 185 </span> : : +<span class="lineNum"> 186 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64: +<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64&quot;);</span> +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL: +<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 191 </span> : : +<span class="lineNum"> 192 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL: +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL: +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 197 </span> : : +<span class="lineNum"> 198 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL: +<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 200 </span> : : +<span class="lineNum"> 201 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL: +<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL&quot;);</span> +<span class="lineNum"> 203 </span> : : +<span class="lineNum"> 204 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL: +<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 206 </span> : : +<span class="lineNum"> 207 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING: +<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING&quot;);</span> +<span class="lineNum"> 209 </span> : : +<span class="lineNum"> 210 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL: +<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 212 </span> : : +<span class="lineNum"> 213 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL: +<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL&quot;);</span> +<span class="lineNum"> 215 </span> : : +<span class="lineNum"> 216 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL: +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL&quot;);</span> +<span class="lineNum"> 218 </span> : : +<span class="lineNum"> 219 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL: +<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 221 </span> : : +<span class="lineNum"> 222 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL: +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL: +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL&quot;);</span> +<span class="lineNum"> 227 </span> : : +<span class="lineNum"> 228 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL: +<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL&quot;);</span> +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL: +<span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 233 </span> : : +<span class="lineNum"> 234 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL: +<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL&quot;);</span> +<span class="lineNum"> 236 </span> : : +<span class="lineNum"> 237 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL: +<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL&quot;);</span> +<span class="lineNum"> 239 </span> : : +<span class="lineNum"> 240 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN: +<span class="lineNum"> 241 </span> :<span class="lineCov"> 29 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN&quot;);</span> +<span class="lineNum"> 242 </span> : : +<span class="lineNum"> 243 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING: +<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING&quot;);</span> +<span class="lineNum"> 245 </span> : : +<span class="lineNum"> 246 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL: +<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 248 </span> : : +<span class="lineNum"> 249 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL: +<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 251 </span> : : +<span class="lineNum"> 252 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL: +<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 254 </span> : : +<span class="lineNum"> 255 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL: +<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL&quot;);</span> +<span class="lineNum"> 257 </span> : : +<span class="lineNum"> 258 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL: +<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL&quot;);</span> +<span class="lineNum"> 260 </span> : : +<span class="lineNum"> 261 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL: +<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 263 </span> : : +<span class="lineNum"> 264 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL: +<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 266 </span> : : +<span class="lineNum"> 267 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL: +<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 269 </span> : : +<span class="lineNum"> 270 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL: +<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL&quot;);</span> +<span class="lineNum"> 272 </span> : : +<span class="lineNum"> 273 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL: +<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL&quot;);</span> +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL: +<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 278 </span> : : +<span class="lineNum"> 279 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING: +<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING&quot;);</span> +<span class="lineNum"> 281 </span> : : +<span class="lineNum"> 282 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL: +<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL&quot;);</span> +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY: +<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY&quot;);</span> +<span class="lineNum"> 287 </span> : : +<span class="lineNum"> 288 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING: +<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING&quot;);</span> +<span class="lineNum"> 290 </span> : : +<span class="lineNum"> 291 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING: +<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING&quot;);</span> +<span class="lineNum"> 293 </span> : : +<span class="lineNum"> 294 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING: +<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING&quot;);</span> +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING: +<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING&quot;);</span> +<span class="lineNum"> 299 </span> : : +<span class="lineNum"> 300 </span> : : case FKO_ERROR_INVALID_DATA_NAT_EMPTY: +<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_NAT_EMPTY&quot;);</span> +<span class="lineNum"> 302 </span> : : +<span class="lineNum"> 303 </span> : : case FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL: +<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL&quot;);</span> +<span class="lineNum"> 305 </span> : : +<span class="lineNum"> 306 </span> : : case FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING: +<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING&quot;);</span> +<span class="lineNum"> 308 </span> : : +<span class="lineNum"> 309 </span> : : case FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL: +<span class="lineNum"> 310 </span> :<span class="lineCov"> 1 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL&quot;);</span> +<span class="lineNum"> 311 </span> : : +<span class="lineNum"> 312 </span> : : case FKO_ERROR_INVALID_DATA_USER_MISSING: +<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_USER_MISSING&quot;);</span> +<span class="lineNum"> 314 </span> : : +<span class="lineNum"> 315 </span> : : case FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL: +<span class="lineNum"> 316 </span> :<span class="lineCov"> 3 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL&quot;);</span> +<span class="lineNum"> 317 </span> : : +<span class="lineNum"> 318 </span> : : case FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL: +<span class="lineNum"> 319 </span> :<span class="lineCov"> 22 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL&quot;);</span> +<span class="lineNum"> 320 </span> : : +<span class="lineNum"> 321 </span> : : case FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN: +<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN&quot;);</span> +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> : : case FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX: +<span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX&quot;);</span> +<span class="lineNum"> 326 </span> : : +<span class="lineNum"> 327 </span> : : case FKO_ERROR_DATA_TOO_LARGE: +<span class="lineNum"> 328 </span> :<span class="lineCov"> 1 : return(&quot;Value or Size of the data exceeded the max allowed&quot;);</span> +<span class="lineNum"> 329 </span> : : +<span class="lineNum"> 330 </span> : : case FKO_ERROR_INVALID_KEY_LEN: +<span class="lineNum"> 331 </span> :<span class="lineCov"> 18 : return(&quot;Invalid key length&quot;);</span> +<span class="lineNum"> 332 </span> : : +<span class="lineNum"> 333 </span> : : case FKO_ERROR_USERNAME_UNKNOWN: +<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to determine username&quot;);</span> +<span class="lineNum"> 335 </span> : : +<span class="lineNum"> 336 </span> : : case FKO_ERROR_INCOMPLETE_SPA_DATA: +<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : return(&quot;Missing or incomplete SPA data&quot;);</span> +<span class="lineNum"> 338 </span> : : +<span class="lineNum"> 339 </span> : : case FKO_ERROR_MISSING_ENCODED_DATA: +<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : return(&quot;There is no encoded data to process&quot;);</span> +<span class="lineNum"> 341 </span> : : +<span class="lineNum"> 342 </span> : : case FKO_ERROR_INVALID_DIGEST_TYPE: +<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid digest type&quot;);</span> +<span class="lineNum"> 344 </span> : : +<span class="lineNum"> 345 </span> : : case FKO_ERROR_INVALID_ALLOW_IP: +<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid allow IP address in the SPA message data&quot;);</span> +<span class="lineNum"> 347 </span> : : +<span class="lineNum"> 348 </span> : : case FKO_ERROR_INVALID_SPA_COMMAND_MSG: +<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid SPA command message format&quot;);</span> +<span class="lineNum"> 350 </span> : : +<span class="lineNum"> 351 </span> : : case FKO_ERROR_INVALID_SPA_ACCESS_MSG: +<span class="lineNum"> 352 </span> :<span class="lineCov"> 97 : return(&quot;Invalid SPA access message format&quot;);</span> +<span class="lineNum"> 353 </span> : : +<span class="lineNum"> 354 </span> : : case FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG: +<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid SPA nat_access message format&quot;);</span> +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> : : case FKO_ERROR_INVALID_ENCRYPTION_TYPE: +<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid encryption type&quot;);</span> +<span class="lineNum"> 359 </span> : : +<span class="lineNum"> 360 </span> : : case FKO_ERROR_WRONG_ENCRYPTION_TYPE: +<span class="lineNum"> 361 </span> :<span class="lineNoCov"> 0 : return(&quot;Wrong or inappropriate encryption type for this operation&quot;);</span> +<span class="lineNum"> 362 </span> : : +<span class="lineNum"> 363 </span> : : case FKO_ERROR_DECRYPTION_SIZE: +<span class="lineNum"> 364 </span> :<span class="lineNoCov"> 0 : return(&quot;Unexpected or invalid size for decrypted data&quot;);</span> +<span class="lineNum"> 365 </span> : : +<span class="lineNum"> 366 </span> : : case FKO_ERROR_DECRYPTION_FAILURE: +<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : return(&quot;Decryption failed or decrypted data is invalid&quot;);</span> +<span class="lineNum"> 368 </span> : : +<span class="lineNum"> 369 </span> : : case FKO_ERROR_DIGEST_VERIFICATION_FAILED: +<span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : return(&quot;The computed digest did not match the digest in the spa data&quot;);</span> +<span class="lineNum"> 371 </span> : : +<span class="lineNum"> 372 </span> : : case FKO_ERROR_INVALID_HMAC_KEY_LEN: +<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid HMAC key length&quot;);</span> +<span class="lineNum"> 374 </span> : : +<span class="lineNum"> 375 </span> : : case FKO_ERROR_UNSUPPORTED_HMAC_MODE: +<span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : return(&quot;Unsupported HMAC mode (default: SHA256)&quot;);</span> +<span class="lineNum"> 377 </span> : : +<span class="lineNum"> 378 </span> : : case FKO_ERROR_UNSUPPORTED_FEATURE: +<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : return(&quot;Unsupported or unimplemented feature or function&quot;);</span> +<span class="lineNum"> 380 </span> : : +<span class="lineNum"> 381 </span> : : case FKO_ERROR_ZERO_OUT_DATA: +<span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : return(&quot;Could not zero out sensitive data&quot;);</span> +<span class="lineNum"> 383 </span> : : +<span class="lineNum"> 384 </span> : : case FKO_ERROR_UNKNOWN: +<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown/Unclassified error&quot;);</span> +<span class="lineNum"> 386 </span> : : +<span class="lineNum"> 387 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 388 </span> : : /* Start GPGME-related errors +<span class="lineNum"> 389 </span> : : */ +<span class="lineNum"> 390 </span> : : case FKO_ERROR_MISSING_GPG_KEY_DATA: +<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : return(&quot;Missing GPG key data (signer or recipient not set)&quot;);</span> +<span class="lineNum"> 392 </span> : : +<span class="lineNum"> 393 </span> : : case FKO_ERROR_GPGME_NO_OPENPGP: +<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : return(&quot;This GPGME implementation does not support OpenPGP&quot;);</span> +<span class="lineNum"> 395 </span> : : +<span class="lineNum"> 396 </span> : : case FKO_ERROR_GPGME_CONTEXT: +<span class="lineNum"> 397 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to create GPGME context&quot;);</span> +<span class="lineNum"> 398 </span> : : +<span class="lineNum"> 399 </span> : : case FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ: +<span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : return(&quot;Error creating the plaintext data object&quot;);</span> +<span class="lineNum"> 401 </span> : : +<span class="lineNum"> 402 </span> : : case FKO_ERROR_GPGME_SET_PROTOCOL: +<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to set GPGME to use OpenPGP protocol&quot;);</span> +<span class="lineNum"> 404 </span> : : +<span class="lineNum"> 405 </span> : : case FKO_ERROR_GPGME_CIPHER_DATA_OBJ: +<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : return(&quot;Error creating the encrypted data data object&quot;);</span> +<span class="lineNum"> 407 </span> : : +<span class="lineNum"> 408 </span> : : case FKO_ERROR_GPGME_BAD_PASSPHRASE: +<span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : return(&quot;The GPG passphrase was not valid&quot;);</span> +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> : : case FKO_ERROR_GPGME_ENCRYPT_SIGN: +<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : return(&quot;Error during the encrypt and sign operation&quot;);</span> +<span class="lineNum"> 413 </span> : : +<span class="lineNum"> 414 </span> : : case FKO_ERROR_GPGME_CONTEXT_SIGNER_KEY: +<span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to create GPGME context for the signer key&quot;);</span> +<span class="lineNum"> 416 </span> : : +<span class="lineNum"> 417 </span> : : case FKO_ERROR_GPGME_SIGNER_KEYLIST_START: +<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : return(&quot;Error from signer keylist start operation&quot;);</span> +<span class="lineNum"> 419 </span> : : +<span class="lineNum"> 420 </span> : : case FKO_ERROR_GPGME_SIGNER_KEY_NOT_FOUND: +<span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : return(&quot;The key for the given signer was not found&quot;);</span> +<span class="lineNum"> 422 </span> : : +<span class="lineNum"> 423 </span> : : case FKO_ERROR_GPGME_SIGNER_KEY_AMBIGUOUS: +<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : return(&quot;Ambiguous name/id for the signer key (mulitple matches)&quot;);</span> +<span class="lineNum"> 425 </span> : : +<span class="lineNum"> 426 </span> : : case FKO_ERROR_GPGME_ADD_SIGNER: +<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : return(&quot;Error adding the signer key to the gpgme context&quot;);</span> +<span class="lineNum"> 428 </span> : : +<span class="lineNum"> 429 </span> : : case FKO_ERROR_GPGME_CONTEXT_RECIPIENT_KEY: +<span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to create GPGME context for the recipient key&quot;);</span> +<span class="lineNum"> 431 </span> : : +<span class="lineNum"> 432 </span> : : case FKO_ERROR_GPGME_RECIPIENT_KEYLIST_START: +<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : return(&quot;Error from signer keylist start operation&quot;);</span> +<span class="lineNum"> 434 </span> : : +<span class="lineNum"> 435 </span> : : case FKO_ERROR_GPGME_RECIPIENT_KEY_NOT_FOUND: +<span class="lineNum"> 436 </span> :<span class="lineCov"> 2 : return(&quot;The key for the given recipient was not found&quot;);</span> +<span class="lineNum"> 437 </span> : : +<span class="lineNum"> 438 </span> : : case FKO_ERROR_GPGME_RECIPIENT_KEY_AMBIGUOUS: +<span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : return(&quot;Ambiguous name/id for the recipient key (mulitple matches)&quot;);</span> +<span class="lineNum"> 440 </span> : : +<span class="lineNum"> 441 </span> : : case FKO_ERROR_GPGME_DECRYPT_FAILED: +<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : return(&quot;Decryption operation failed&quot;);</span> +<span class="lineNum"> 443 </span> : : +<span class="lineNum"> 444 </span> : : case FKO_ERROR_GPGME_DECRYPT_UNSUPPORTED_ALGORITHM: +<span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : return(&quot;Decryption operation failed due to unsupported algorithm&quot;);</span> +<span class="lineNum"> 446 </span> : : +<span class="lineNum"> 447 </span> : : case FKO_ERROR_GPGME_BAD_GPG_EXE: +<span class="lineNum"> 448 </span> :<span class="lineCov"> 1 : return(&quot;Unable to stat the given GPG executable&quot;);</span> +<span class="lineNum"> 449 </span> : : +<span class="lineNum"> 450 </span> : : case FKO_ERROR_GPGME_BAD_HOME_DIR: +<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to stat the given GPG home directory&quot;);</span> +<span class="lineNum"> 452 </span> : : +<span class="lineNum"> 453 </span> : : case FKO_ERROR_GPGME_SET_HOME_DIR: +<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to set the given GPG home directory&quot;);</span> +<span class="lineNum"> 455 </span> : : +<span class="lineNum"> 456 </span> : : case FKO_ERROR_GPGME_NO_SIGNATURE: +<span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : return(&quot;Missing GPG signature&quot;);</span> +<span class="lineNum"> 458 </span> : : +<span class="lineNum"> 459 </span> : : case FKO_ERROR_GPGME_BAD_SIGNATURE: +<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : return(&quot;Bad GPG signature&quot;);</span> +<span class="lineNum"> 461 </span> : : +<span class="lineNum"> 462 </span> : : case FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED: +<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : return(&quot;Trying to check signature with verification disabled&quot;);</span> +<span class="lineNum"> 464 </span> : : +<span class="lineNum"> 465 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 466 </span> : : } +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> : : #if !HAVE_LIBGPGME +<span class="lineNum"> 469 </span> : : if(err_code &gt; GPGME_ERR_START &amp;&amp; err_code &lt; FKO_LAST_ERROR) +<span class="lineNum"> 470 </span> : : return(&quot;GPG-related error code given, but GPG is not supported&quot;); +<span class="lineNum"> 471 </span> : : #endif +<span class="lineNum"> 472 </span> : : +<span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : return(&quot;Undefined Error&quot;);</span> +<span class="lineNum"> 474 </span> : : } +<a name="475"><span class="lineNum"> 475 </span> : : </a> +<span class="lineNum"> 476 </span> : : const char* +<span class="lineNum"> 477 </span> :<span class="lineCov"> 2 : fko_gpg_errstr(fko_ctx_t ctx)</span> +<span class="lineNum"> 478 </span> : : { +<span class="lineNum"> 479 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 480 </span> : : +<span class="lineNum"> 481 </span> : : /* Must be initialized +<span class="lineNum"> 482 </span> : : */ +<span class="lineNum"> 483 </span>[<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 2 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 484 </span> : : return(&quot;&quot;); +<span class="lineNum"> 485 </span> : : +<span class="lineNum"> 486 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(ctx-&gt;gpg_err)</span> +<span class="lineNum"> 487 </span> :<span class="lineCov"> 2 : return(gpgme_strerror(ctx-&gt;gpg_err));</span> +<span class="lineNum"> 488 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 489 </span> : : +<span class="lineNum"> 490 </span> : : return(&quot;&quot;); +<span class="lineNum"> 491 </span> : : } +<span class="lineNum"> 492 </span> : : +<span class="lineNum"> 493 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html new file mode 100644 index 00000000..f3abf4a8 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_funcs.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_funcs.c<span style="font-size: 80%;"> (<a href="fko_funcs.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">117</td> + <td class="headerCovTableEntry">216</td> + <td class="headerCovTableEntryLo">54.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">70.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">74</td> + <td class="headerCovTableEntry">166</td> + <td class="headerCovTableEntryLo">44.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_funcs.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#520">fko_get_spa_data</a></td> + <td class="coverFnHi">1633</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#275">fko_destroy</a></td> + <td class="coverFnHi">982</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#436">fko_get_version</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#38">fko_new</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#465">fko_spa_data_final</a></td> + <td class="coverFnHi">434</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#161">fko_new_with_data</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#428">fko_base64_decode</a></td> + <td class="coverFnHi">123</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#422">fko_base64_encode</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#371">fko_key_gen</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#567">fko_set_spa_data</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html new file mode 100644 index 00000000..bfac8a27 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_funcs.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_funcs.c<span style="font-size: 80%;"> (<a href="fko_funcs.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">117</td> + <td class="headerCovTableEntry">216</td> + <td class="headerCovTableEntryLo">54.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">70.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">74</td> + <td class="headerCovTableEntry">166</td> + <td class="headerCovTableEntryLo">44.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_funcs.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#428">fko_base64_decode</a></td> + <td class="coverFnHi">123</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#422">fko_base64_encode</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#275">fko_destroy</a></td> + <td class="coverFnHi">982</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#520">fko_get_spa_data</a></td> + <td class="coverFnHi">1633</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#436">fko_get_version</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#371">fko_key_gen</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#38">fko_new</a></td> + <td class="coverFnHi">566</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#161">fko_new_with_data</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#567">fko_set_spa_data</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_funcs.c.gcov.html#465">fko_spa_data_final</a></td> + <td class="coverFnHi">434</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html new file mode 100644 index 00000000..0d83000b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html @@ -0,0 +1,720 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_funcs.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_funcs.c<span style="font-size: 80%;"> (source / <a href="fko_funcs.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">117</td> + <td class="headerCovTableEntry">216</td> + <td class="headerCovTableEntryLo">54.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">70.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">74</td> + <td class="headerCovTableEntry">166</td> + <td class="headerCovTableEntryLo">44.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_funcs.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: General utility functions for libfko +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;base64.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : /* Initialize an fko context. +<a name="38"><span class="lineNum"> 38 </span> : : */</a> +<span class="lineNum"> 39 </span> : : int +<span class="lineNum"> 40 </span> :<span class="lineCov"> 566 : fko_new(fko_ctx_t *r_ctx)</span> +<span class="lineNum"> 41 </span> : : { +<span class="lineNum"> 42 </span> :<span class="lineCov"> 566 : fko_ctx_t ctx = NULL;</span> +<span class="lineNum"> 43 </span> : : int res; +<span class="lineNum"> 44 </span> : : char *ver; +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 47 </span> : : fiu_return_on(&quot;fko_new_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 48 </span> : : #endif +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> :<span class="lineCov"> 566 : ctx = calloc(1, sizeof *ctx);</span> +<span class="lineNum"> 51 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if(ctx == NULL)</span> +<span class="lineNum"> 52 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 53 </span> : : +<span class="lineNum"> 54 </span> : : /* Set default values and state. +<span class="lineNum"> 55 </span> : : * +<span class="lineNum"> 56 </span> : : * Note: We initialize the context early so that the fko_set_xxx +<span class="lineNum"> 57 </span> : : * functions can operate properly. If there are any problems during +<span class="lineNum"> 58 </span> : : * initialization, then fko_destroy() is called which will clean up +<span class="lineNum"> 59 </span> : : * the context. +<span class="lineNum"> 60 </span> : : */ +<span class="lineNum"> 61 </span> :<span class="lineCov"> 566 : ctx-&gt;initval = FKO_CTX_INITIALIZED;</span> +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> : : /* Set the version string. +<span class="lineNum"> 64 </span> : : */ +<span class="lineNum"> 65 </span> :<span class="lineCov"> 566 : ver = strdup(FKO_PROTOCOL_VERSION);</span> +<span class="lineNum"> 66 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(ver == NULL)</span> +<span class="lineNum"> 67 </span> : : { +<span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_MEMORY_ALLOCATION);</span> +<span class="lineNum"> 71 </span> : : } +<span class="lineNum"> 72 </span> :<span class="lineCov"> 566 : ctx-&gt;version = ver;</span> +<span class="lineNum"> 73 </span> : : +<span class="lineNum"> 74 </span> : : /* Rand value. +<span class="lineNum"> 75 </span> : : */ +<span class="lineNum"> 76 </span> :<span class="lineCov"> 566 : res = fko_set_rand_value(ctx, NULL);</span> +<span class="lineNum"> 77 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 78 </span> : : { +<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 82 </span> : : } +<span class="lineNum"> 83 </span> : : +<span class="lineNum"> 84 </span> : : /* Username. +<span class="lineNum"> 85 </span> : : */ +<span class="lineNum"> 86 </span> :<span class="lineCov"> 566 : res = fko_set_username(ctx, NULL);</span> +<span class="lineNum"> 87 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 88 </span> : : { +<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 92 </span> : : } +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> : : /* Timestamp. +<span class="lineNum"> 95 </span> : : */ +<span class="lineNum"> 96 </span> :<span class="lineCov"> 566 : res = fko_set_timestamp(ctx, 0);</span> +<span class="lineNum"> 97 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 98 </span> : : { +<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 102 </span> : : } +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> : : /* Default Digest Type. +<span class="lineNum"> 105 </span> : : */ +<span class="lineNum"> 106 </span> :<span class="lineCov"> 566 : res = fko_set_spa_digest_type(ctx, FKO_DEFAULT_DIGEST);</span> +<span class="lineNum"> 107 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 108 </span> : : { +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 112 </span> : : } +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : /* Default Message Type. +<span class="lineNum"> 115 </span> : : */ +<span class="lineNum"> 116 </span> :<span class="lineCov"> 566 : res = fko_set_spa_message_type(ctx, FKO_DEFAULT_MSG_TYPE);</span> +<span class="lineNum"> 117 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 118 </span> : : { +<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 122 </span> : : } +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> : : /* Default Encryption Type. +<span class="lineNum"> 125 </span> : : */ +<span class="lineNum"> 126 </span> :<span class="lineCov"> 566 : res = fko_set_spa_encryption_type(ctx, FKO_DEFAULT_ENCRYPTION);</span> +<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 128 </span> : : { +<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 132 </span> : : } +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> : : /* Default is Rijndael in CBC mode +<span class="lineNum"> 135 </span> : : */ +<span class="lineNum"> 136 </span> :<span class="lineCov"> 566 : res = fko_set_spa_encryption_mode(ctx, FKO_DEFAULT_ENC_MODE);</span> +<span class="lineNum"> 137 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 138 </span> : : { +<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 142 </span> : : } +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 145 </span> : : /* Set gpg signature verify on. +<span class="lineNum"> 146 </span> : : */ +<span class="lineNum"> 147 </span> :<span class="lineCov"> 566 : ctx-&gt;verify_gpg_sigs = 1;</span> +<span class="lineNum"> 148 </span> : : +<span class="lineNum"> 149 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 150 </span> : : +<span class="lineNum"> 151 </span> :<span class="lineCov"> 566 : FKO_SET_CTX_INITIALIZED(ctx);</span> +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> :<span class="lineCov"> 566 : *r_ctx = ctx;</span> +<span class="lineNum"> 154 </span> : : +<span class="lineNum"> 155 </span> :<span class="lineCov"> 566 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 156 </span> : : } +<span class="lineNum"> 157 </span> : : +<span class="lineNum"> 158 </span> : : /* Initialize an fko context with external (encrypted/encoded) data. +<span class="lineNum"> 159 </span> : : * This is used to create a context with the purpose of decoding +<span class="lineNum"> 160 </span> : : * and parsing the provided data into the context data. +<a name="161"><span class="lineNum"> 161 </span> : : */</a> +<span class="lineNum"> 162 </span> : : int +<span class="lineNum"> 163 </span> :<span class="lineCov"> 416 : fko_new_with_data(fko_ctx_t *r_ctx, const char * const enc_msg,</span> +<span class="lineNum"> 164 </span> : : const char * const dec_key, const int dec_key_len, +<span class="lineNum"> 165 </span> : : int encryption_mode, const char * const hmac_key, +<span class="lineNum"> 166 </span> : : const int hmac_key_len, const int hmac_type) +<span class="lineNum"> 167 </span> : : { +<span class="lineNum"> 168 </span> :<span class="lineCov"> 416 : fko_ctx_t ctx = NULL;</span> +<span class="lineNum"> 169 </span> :<span class="lineCov"> 416 : int res = FKO_SUCCESS; /* Are we optimistic or what? */</span> +<span class="lineNum"> 170 </span> : : int enc_msg_len; +<span class="lineNum"> 171 </span> : : +<span class="lineNum"> 172 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 173 </span> : : fiu_return_on(&quot;fko_new_with_data_msg&quot;, +<span class="lineNum"> 174 </span> : : FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING); +<span class="lineNum"> 175 </span> : : #endif +<span class="lineNum"> 176 </span> : : +<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(enc_msg == NULL)</span> +<span class="lineNum"> 178 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING); +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 181 </span> : : fiu_return_on(&quot;fko_new_with_data_keylen&quot;, +<span class="lineNum"> 182 </span> : : FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 183 </span> : : #endif +<span class="lineNum"> 184 </span> : : +<span class="lineNum"> 185 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(dec_key_len &lt; 0 || hmac_key_len &lt; 0)</span> +<span class="lineNum"> 186 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 187 </span> : : +<span class="lineNum"> 188 </span> :<span class="lineCov"> 416 : ctx = calloc(1, sizeof *ctx);</span> +<span class="lineNum"> 189 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(ctx == NULL)</span> +<span class="lineNum"> 190 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 191 </span> : : +<span class="lineNum"> 192 </span> :<span class="lineCov"> 416 : enc_msg_len = strnlen(enc_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 193 </span> : : +<span class="lineNum"> 194 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(! is_valid_encoded_msg_len(enc_msg_len))</span> +<span class="lineNum"> 195 </span> : : { +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : free(ctx);</span> +<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL);</span> +<span class="lineNum"> 198 </span> : : } +<span class="lineNum"> 199 </span> : : +<span class="lineNum"> 200 </span> : : /* First, add the data to the context. +<span class="lineNum"> 201 </span> : : */ +<span class="lineNum"> 202 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg = strdup(enc_msg);</span> +<span class="lineNum"> 203 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg_len = enc_msg_len;</span> +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(ctx-&gt;encrypted_msg == NULL)</span> +<span class="lineNum"> 206 </span> : : { +<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : free(ctx);</span> +<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_MEMORY_ALLOCATION);</span> +<span class="lineNum"> 209 </span> : : } +<span class="lineNum"> 210 </span> : : +<span class="lineNum"> 211 </span> : : /* Default Encryption Mode (Rijndael in CBC mode) +<span class="lineNum"> 212 </span> : : */ +<span class="lineNum"> 213 </span> :<span class="lineCov"> 416 : ctx-&gt;initval = FKO_CTX_INITIALIZED;</span> +<span class="lineNum"> 214 </span> :<span class="lineCov"> 416 : res = fko_set_spa_encryption_mode(ctx, encryption_mode);</span> +<span class="lineNum"> 215 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 216 </span> : : { +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 220 </span> : : } +<span class="lineNum"> 221 </span> : : +<span class="lineNum"> 222 </span> : : /* HMAC digest type +<span class="lineNum"> 223 </span> : : */ +<span class="lineNum"> 224 </span> :<span class="lineCov"> 416 : res = fko_set_spa_hmac_type(ctx, hmac_type);</span> +<span class="lineNum"> 225 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 226 </span> : : { +<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 230 </span> : : } +<span class="lineNum"> 231 </span> : : +<span class="lineNum"> 232 </span> : : /* Check HMAC if the access stanza had an HMAC key +<span class="lineNum"> 233 </span> : : */ +<span class="lineNum"> 234 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 416 : if(hmac_key_len &gt; 0 &amp;&amp; hmac_key != NULL)</span> +<span class="lineNum"> 235 </span> :<span class="lineCov"> 345 : res = fko_verify_hmac(ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 236 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 237 </span> : : { +<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 241 </span> : : } +<span class="lineNum"> 242 </span> : : +<span class="lineNum"> 243 </span> : : /* Consider it initialized here. +<span class="lineNum"> 244 </span> : : */ +<span class="lineNum"> 245 </span> :<span class="lineCov"> 416 : FKO_SET_CTX_INITIALIZED(ctx);</span> +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> : : /* If a decryption key is provided, go ahead and decrypt and decode. +<span class="lineNum"> 248 </span> : : */ +<span class="lineNum"> 249 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(dec_key != NULL)</span> +<span class="lineNum"> 250 </span> : : { +<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : res = fko_decrypt_spa_data(ctx, dec_key, dec_key_len);</span> +<span class="lineNum"> 252 </span> : : +<span class="lineNum"> 253 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 254 </span> : : { +<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : *r_ctx = NULL; /* Make sure the caller ctx is null just in case */</span> +<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 259 </span> : : } +<span class="lineNum"> 260 </span> : : } +<span class="lineNum"> 261 </span> : : +<span class="lineNum"> 262 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 263 </span> : : /* Set gpg signature verify on. +<span class="lineNum"> 264 </span> : : */ +<span class="lineNum"> 265 </span> :<span class="lineCov"> 416 : ctx-&gt;verify_gpg_sigs = 1;</span> +<span class="lineNum"> 266 </span> : : +<span class="lineNum"> 267 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 268 </span> : : +<span class="lineNum"> 269 </span> :<span class="lineCov"> 416 : *r_ctx = ctx;</span> +<span class="lineNum"> 270 </span> : : +<span class="lineNum"> 271 </span> :<span class="lineCov"> 416 : return(res);</span> +<span class="lineNum"> 272 </span> : : } +<span class="lineNum"> 273 </span> : : +<span class="lineNum"> 274 </span> : : /* Destroy a context and free its resources +<a name="275"><span class="lineNum"> 275 </span> : : */</a> +<span class="lineNum"> 276 </span> : : int +<span class="lineNum"> 277 </span> :<span class="lineCov"> 982 : fko_destroy(fko_ctx_t ctx)</span> +<span class="lineNum"> 278 </span> : : { +<span class="lineNum"> 279 </span> :<span class="lineCov"> 982 : int zero_free_rv = FKO_SUCCESS;</span> +<span class="lineNum"> 280 </span> : : +<span class="lineNum"> 281 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 282 </span> : : fko_gpg_sig_t gsig, tgsig; +<span class="lineNum"> 283 </span> : : #endif +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span>[<span class="branchCov" title="Branch 0 was taken 982 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 982 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 982 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 286 </span> : : return(zero_free_rv); +<span class="lineNum"> 287 </span> : : +<span class="lineNum"> 288 </span> [<span class="branchCov" title="Branch 0 was taken 951 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;rand_val != NULL)</span> +<span class="lineNum"> 289 </span> :<span class="lineCov"> 951 : free(ctx-&gt;rand_val);</span> +<span class="lineNum"> 290 </span> : : +<span class="lineNum"> 291 </span> [<span class="branchCov" title="Branch 0 was taken 951 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;username != NULL)</span> +<span class="lineNum"> 292 </span> :<span class="lineCov"> 951 : free(ctx-&gt;username);</span> +<span class="lineNum"> 293 </span> : : +<span class="lineNum"> 294 </span> [<span class="branchCov" title="Branch 0 was taken 951 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;version != NULL)</span> +<span class="lineNum"> 295 </span> :<span class="lineCov"> 951 : free(ctx-&gt;version);</span> +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> [<span class="branchCov" title="Branch 0 was taken 852 times"> + </span><span class="branchCov" title="Branch 1 was taken 130 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;message != NULL)</span> +<span class="lineNum"> 298 </span> :<span class="lineCov"> 852 : free(ctx-&gt;message);</span> +<span class="lineNum"> 299 </span> : : +<span class="lineNum"> 300 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;nat_access != NULL)</span> +<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;nat_access);</span> +<span class="lineNum"> 302 </span> : : +<span class="lineNum"> 303 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;server_auth != NULL)</span> +<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> +<span class="lineNum"> 305 </span> : : +<span class="lineNum"> 306 </span> [<span class="branchCov" title="Branch 0 was taken 819 times"> + </span><span class="branchCov" title="Branch 1 was taken 163 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;digest != NULL)</span> +<span class="lineNum"> 307 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 819 times"> + </span>]:<span class="lineCov"> 819 : if(zero_free(ctx-&gt;digest, ctx-&gt;digest_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 309 </span> : : +<span class="lineNum"> 310 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;raw_digest != NULL)</span> +<span class="lineNum"> 311 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(ctx-&gt;raw_digest, ctx-&gt;raw_digest_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 313 </span> : : +<span class="lineNum"> 314 </span> [<span class="branchCov" title="Branch 0 was taken 821 times"> + </span><span class="branchCov" title="Branch 1 was taken 161 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;encoded_msg != NULL)</span> +<span class="lineNum"> 315 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 821 times"> + </span>]:<span class="lineCov"> 821 : if(zero_free(ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 317 </span> : : +<span class="lineNum"> 318 </span> [<span class="branchCov" title="Branch 0 was taken 832 times"> + </span><span class="branchCov" title="Branch 1 was taken 150 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;encrypted_msg != NULL)</span> +<span class="lineNum"> 319 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 832 times"> + </span>]:<span class="lineCov"> 832 : if(zero_free(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 321 </span> : : +<span class="lineNum"> 322 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchCov" title="Branch 1 was taken 290 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;msg_hmac != NULL)</span> +<span class="lineNum"> 323 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 692 times"> + </span>]:<span class="lineCov"> 692 : if(zero_free(ctx-&gt;msg_hmac, ctx-&gt;msg_hmac_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 325 </span> : : +<span class="lineNum"> 326 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 327 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_exe != NULL)</span> +<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_exe);</span> +<span class="lineNum"> 329 </span> : : +<span class="lineNum"> 330 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_home_dir != NULL)</span> +<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_home_dir);</span> +<span class="lineNum"> 332 </span> : : +<span class="lineNum"> 333 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_recipient != NULL)</span> +<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_recipient);</span> +<span class="lineNum"> 335 </span> : : +<span class="lineNum"> 336 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_signer != NULL)</span> +<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_signer);</span> +<span class="lineNum"> 338 </span> : : +<span class="lineNum"> 339 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;recipient_key != NULL)</span> +<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(ctx-&gt;recipient_key);</span> +<span class="lineNum"> 341 </span> : : +<span class="lineNum"> 342 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;signer_key != NULL)</span> +<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(ctx-&gt;signer_key);</span> +<span class="lineNum"> 344 </span> : : +<span class="lineNum"> 345 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 980 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_ctx != NULL)</span> +<span class="lineNum"> 346 </span> :<span class="lineCov"> 2 : gpgme_release(ctx-&gt;gpg_ctx);</span> +<span class="lineNum"> 347 </span> : : +<span class="lineNum"> 348 </span> :<span class="lineCov"> 982 : gsig = ctx-&gt;gpg_sigs;</span> +<span class="lineNum"> 349 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : while(gsig != NULL)</span> +<span class="lineNum"> 350 </span> : : { +<span class="lineNum"> 351 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gsig-&gt;fpr != NULL)</span> +<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : free(gsig-&gt;fpr);</span> +<span class="lineNum"> 353 </span> : : +<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : tgsig = gsig;</span> +<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : gsig = gsig-&gt;next;</span> +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : free(tgsig);</span> +<span class="lineNum"> 358 </span> : : } +<span class="lineNum"> 359 </span> : : +<span class="lineNum"> 360 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 361 </span> : : +<span class="lineNum"> 362 </span> : : memset(ctx, 0x0, sizeof(*ctx)); +<span class="lineNum"> 363 </span> : : +<span class="lineNum"> 364 </span> :<span class="lineCov"> 982 : free(ctx);</span> +<span class="lineNum"> 365 </span> : : +<span class="lineNum"> 366 </span> :<span class="lineCov"> 982 : return(zero_free_rv);</span> +<span class="lineNum"> 367 </span> : : } +<span class="lineNum"> 368 </span> : : +<span class="lineNum"> 369 </span> : : /* Generate Rijndael and HMAC keys from /dev/random and base64 +<span class="lineNum"> 370 </span> : : * encode them +<a name="371"><span class="lineNum"> 371 </span> : : */</a> +<span class="lineNum"> 372 </span> : : int +<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : fko_key_gen(char * const key_base64, const int key_len,</span> +<span class="lineNum"> 374 </span> : : char * const hmac_key_base64, const int hmac_key_len, +<span class="lineNum"> 375 </span> : : const int hmac_type) +<span class="lineNum"> 376 </span> : : { +<span class="lineNum"> 377 </span> : : unsigned char key[RIJNDAEL_MAX_KEYSIZE]; +<span class="lineNum"> 378 </span> : : unsigned char hmac_key[SHA512_BLOCK_LEN]; +<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : int klen = key_len;</span> +<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : int hmac_klen = hmac_key_len;</span> +<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : int b64_len = 0;</span> +<span class="lineNum"> 382 </span> : : +<span class="lineNum"> 383 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len == FKO_DEFAULT_KEY_LEN)</span> +<span class="lineNum"> 384 </span> :<span class="lineNoCov"> 0 : klen = RIJNDAEL_MAX_KEYSIZE;</span> +<span class="lineNum"> 385 </span> : : +<span class="lineNum"> 386 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(hmac_key_len == FKO_DEFAULT_KEY_LEN)</span> +<span class="lineNum"> 387 </span> : : { +<span class="lineNum"> 388 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(hmac_type == FKO_DEFAULT_HMAC_MODE</span> +<span class="lineNum"> 389 </span> : : || hmac_type == FKO_HMAC_SHA256) +<span class="lineNum"> 390 </span> : : hmac_klen = SHA256_BLOCK_LEN; +<span class="lineNum"> 391 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_MD5)</span> +<span class="lineNum"> 392 </span> : : hmac_klen = MD5_DIGEST_LEN; +<span class="lineNum"> 393 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_SHA1)</span> +<span class="lineNum"> 394 </span> : : hmac_klen = SHA1_DIGEST_LEN; +<span class="lineNum"> 395 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_SHA384)</span> +<span class="lineNum"> 396 </span> : : hmac_klen = SHA384_BLOCK_LEN; +<span class="lineNum"> 397 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_SHA512)</span> +<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : hmac_klen = SHA512_BLOCK_LEN;</span> +<span class="lineNum"> 399 </span> : : } +<span class="lineNum"> 400 </span> : : +<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((klen &lt; 1) || (klen &gt; RIJNDAEL_MAX_KEYSIZE))</span> +<span class="lineNum"> 402 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL); +<span class="lineNum"> 403 </span> : : +<span class="lineNum"> 404 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((hmac_klen &lt; 1) || (hmac_klen &gt; SHA512_BLOCK_LEN))</span> +<span class="lineNum"> 405 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL); +<span class="lineNum"> 406 </span> : : +<span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : get_random_data(key, klen);</span> +<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : get_random_data(hmac_key, hmac_klen);</span> +<span class="lineNum"> 409 </span> : : +<span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : b64_len = b64_encode(key, key_base64, klen);</span> +<span class="lineNum"> 411 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_len &lt; klen)</span> +<span class="lineNum"> 412 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL); +<span class="lineNum"> 413 </span> : : +<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : b64_len = b64_encode(hmac_key, hmac_key_base64, hmac_klen);</span> +<span class="lineNum"> 415 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_len &lt; hmac_klen)</span> +<span class="lineNum"> 416 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL); +<span class="lineNum"> 417 </span> : : +<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 419 </span> : : } +<span class="lineNum"> 420 </span> : : +<span class="lineNum"> 421 </span> : : /* Provide an FKO wrapper around base64 encode/decode functions +<a name="422"><span class="lineNum"> 422 </span> : : */</a> +<span class="lineNum"> 423 </span> : : int +<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : fko_base64_encode(unsigned char * const in, char * const out, int in_len)</span> +<span class="lineNum"> 425 </span> : : { +<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : return b64_encode(in, out, in_len);</span> +<span class="lineNum"> 427 </span> : : } +<a name="428"><span class="lineNum"> 428 </span> : : </a> +<span class="lineNum"> 429 </span> : : int +<span class="lineNum"> 430 </span> :<span class="lineCov"> 123 : fko_base64_decode(const char * const in, unsigned char *out)</span> +<span class="lineNum"> 431 </span> : : { +<span class="lineNum"> 432 </span> :<span class="lineCov"> 123 : return b64_decode(in, out);</span> +<span class="lineNum"> 433 </span> : : } +<span class="lineNum"> 434 </span> : : +<span class="lineNum"> 435 </span> : : /* Return the fko version +<a name="436"><span class="lineNum"> 436 </span> : : */</a> +<span class="lineNum"> 437 </span> : : int +<span class="lineNum"> 438 </span> :<span class="lineCov"> 801 : fko_get_version(fko_ctx_t ctx, char **version)</span> +<span class="lineNum"> 439 </span> : : { +<span class="lineNum"> 440 </span> : : +<span class="lineNum"> 441 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 442 </span> : : fiu_return_on(&quot;fko_get_version_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 443 </span> : : #endif +<span class="lineNum"> 444 </span> : : +<span class="lineNum"> 445 </span> : : /* Must be initialized +<span class="lineNum"> 446 </span> : : */ +<span class="lineNum"> 447 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 448 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 449 </span> : : +<span class="lineNum"> 450 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(version == NULL)</span> +<span class="lineNum"> 451 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 452 </span> : : +<span class="lineNum"> 453 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 454 </span> : : fiu_return_on(&quot;fko_get_version_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 455 </span> : : #endif +<span class="lineNum"> 456 </span> : : +<span class="lineNum"> 457 </span> :<span class="lineCov"> 801 : *version = ctx-&gt;version;</span> +<span class="lineNum"> 458 </span> : : +<span class="lineNum"> 459 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 460 </span> : : } +<span class="lineNum"> 461 </span> : : +<span class="lineNum"> 462 </span> : : /* Final update and encoding of data in the context. +<span class="lineNum"> 463 </span> : : * This does require all requisite fields be properly +<span class="lineNum"> 464 </span> : : * set. +<a name="465"><span class="lineNum"> 465 </span> : : */</a> +<span class="lineNum"> 466 </span> : : int +<span class="lineNum"> 467 </span> :<span class="lineCov"> 434 : fko_spa_data_final(fko_ctx_t ctx,</span> +<span class="lineNum"> 468 </span> : : const char * const enc_key, const int enc_key_len, +<span class="lineNum"> 469 </span> : : const char * const hmac_key, const int hmac_key_len) +<span class="lineNum"> 470 </span> : : { +<span class="lineNum"> 471 </span> : : char *tbuf; +<span class="lineNum"> 472 </span> :<span class="lineCov"> 434 : int res = 0, data_with_hmac_len = 0;</span> +<span class="lineNum"> 473 </span> : : +<span class="lineNum"> 474 </span> : : /* Must be initialized +<span class="lineNum"> 475 </span> : : */ +<span class="lineNum"> 476 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 477 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 478 </span> : : +<span class="lineNum"> 479 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(enc_key_len &lt; 0)</span> +<span class="lineNum"> 480 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 481 </span> : : +<span class="lineNum"> 482 </span> :<span class="lineCov"> 434 : res = fko_encrypt_spa_data(ctx, enc_key, enc_key_len);</span> +<span class="lineNum"> 483 </span> : : +<span class="lineNum"> 484 </span> : : /* Now calculate hmac if so configured +<span class="lineNum"> 485 </span> : : */ +<span class="lineNum"> 486 </span>[<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 347 times"> + </span><span class="branchCov" title="Branch 3 was taken 69 times"> + </span>]:<span class="lineCov"> 434 : if (res == FKO_SUCCESS &amp;&amp; ctx-&gt;hmac_type != FKO_HMAC_UNKNOWN)</span> +<span class="lineNum"> 487 </span> : : { +<span class="lineNum"> 488 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if(hmac_key_len &lt; 0)</span> +<span class="lineNum"> 489 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 490 </span> : : +<span class="lineNum"> 491 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if(hmac_key == NULL)</span> +<span class="lineNum"> 492 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); +<span class="lineNum"> 493 </span> : : +<span class="lineNum"> 494 </span> :<span class="lineCov"> 347 : res = fko_set_spa_hmac(ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 495 </span> : : +<span class="lineNum"> 496 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if (res == FKO_SUCCESS)</span> +<span class="lineNum"> 497 </span> : : { +<span class="lineNum"> 498 </span> : : /* Now that we have the hmac, append it to the +<span class="lineNum"> 499 </span> : : * encrypted data (which has already been base64-encoded +<span class="lineNum"> 500 </span> : : * and the trailing '=' chars stripped off). +<span class="lineNum"> 501 </span> : : */ +<span class="lineNum"> 502 </span> : : data_with_hmac_len +<span class="lineNum"> 503 </span> :<span class="lineCov"> 347 : = ctx-&gt;encrypted_msg_len+1+ctx-&gt;msg_hmac_len+1;</span> +<span class="lineNum"> 504 </span> : : +<span class="lineNum"> 505 </span> :<span class="lineCov"> 347 : tbuf = realloc(ctx-&gt;encrypted_msg, data_with_hmac_len);</span> +<span class="lineNum"> 506 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if (tbuf == NULL)</span> +<span class="lineNum"> 507 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 508 </span> : : +<span class="lineNum"> 509 </span> :<span class="lineCov"> 347 : strlcat(tbuf, ctx-&gt;msg_hmac, data_with_hmac_len);</span> +<span class="lineNum"> 510 </span> : : +<span class="lineNum"> 511 </span> :<span class="lineCov"> 347 : ctx-&gt;encrypted_msg = tbuf;</span> +<span class="lineNum"> 512 </span> :<span class="lineCov"> 347 : ctx-&gt;encrypted_msg_len = data_with_hmac_len;</span> +<span class="lineNum"> 513 </span> : : } +<span class="lineNum"> 514 </span> : : } +<span class="lineNum"> 515 </span> : : +<span class="lineNum"> 516 </span> :<span class="lineCov"> 434 : return res;</span> +<span class="lineNum"> 517 </span> : : } +<span class="lineNum"> 518 </span> : : +<span class="lineNum"> 519 </span> : : /* Return the fko SPA encrypted data. +<a name="520"><span class="lineNum"> 520 </span> : : */</a> +<span class="lineNum"> 521 </span> : : int +<span class="lineNum"> 522 </span> :<span class="lineCov"> 1633 : fko_get_spa_data(fko_ctx_t ctx, char **spa_data)</span> +<span class="lineNum"> 523 </span> : : { +<span class="lineNum"> 524 </span> : : +<span class="lineNum"> 525 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 526 </span> : : fiu_return_on(&quot;fko_get_spa_data_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 527 </span> : : #endif +<span class="lineNum"> 528 </span> : : +<span class="lineNum"> 529 </span> : : /* Must be initialized +<span class="lineNum"> 530 </span> : : */ +<span class="lineNum"> 531 </span>[<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1633 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 532 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 533 </span> : : +<span class="lineNum"> 534 </span> [<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1633 : if(spa_data == NULL)</span> +<span class="lineNum"> 535 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 538 </span> : : fiu_return_on(&quot;fko_get_spa_data_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 539 </span> : : #endif +<span class="lineNum"> 540 </span> : : +<span class="lineNum"> 541 </span> : : /* We expect to have encrypted data to process. If not, we bail. +<span class="lineNum"> 542 </span> : : */ +<span class="lineNum"> 543 </span> [<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 3266 : if(ctx-&gt;encrypted_msg == NULL || ! is_valid_encoded_msg_len(</span> +<span class="lineNum"> 544 </span> :<span class="lineCov"> 1633 : strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE)))</span> +<span class="lineNum"> 545 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 546 </span> : : +<span class="lineNum"> 547 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 548 </span> : : fiu_return_on(&quot;fko_get_spa_data_encoded&quot;, FKO_ERROR_MISSING_ENCODED_DATA); +<span class="lineNum"> 549 </span> : : #endif +<span class="lineNum"> 550 </span> : : +<span class="lineNum"> 551 </span> :<span class="lineCov"> 1633 : *spa_data = ctx-&gt;encrypted_msg;</span> +<span class="lineNum"> 552 </span> : : +<span class="lineNum"> 553 </span> : : /* Notice we omit the first 10 bytes if Rijndael encryption is +<span class="lineNum"> 554 </span> : : * used (to eliminate the consistent 'Salted__' string), and +<span class="lineNum"> 555 </span> : : * in GnuPG mode we eliminate the consistent 'hQ' base64 encoded +<span class="lineNum"> 556 </span> : : * prefix +<span class="lineNum"> 557 </span> : : */ +<span class="lineNum"> 558 </span> [<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1633 : if(ctx-&gt;encryption_type == FKO_ENCRYPTION_RIJNDAEL)</span> +<span class="lineNum"> 559 </span> :<span class="lineCov"> 1633 : *spa_data += B64_RIJNDAEL_SALT_STR_LEN;</span> +<span class="lineNum"> 560 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;encryption_type == FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : *spa_data += B64_GPG_PREFIX_STR_LEN;</span> +<span class="lineNum"> 562 </span> : : +<span class="lineNum"> 563 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 564 </span> : : } +<span class="lineNum"> 565 </span> : : +<span class="lineNum"> 566 </span> : : /* Set the fko SPA encrypted data. +<a name="567"><span class="lineNum"> 567 </span> : : */</a> +<span class="lineNum"> 568 </span> : : int +<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : fko_set_spa_data(fko_ctx_t ctx, const char * const enc_msg)</span> +<span class="lineNum"> 570 </span> : : { +<span class="lineNum"> 571 </span> : : int enc_msg_len; +<span class="lineNum"> 572 </span> : : +<span class="lineNum"> 573 </span> : : /* Must be initialized +<span class="lineNum"> 574 </span> : : */ +<span class="lineNum"> 575 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 576 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 577 </span> : : +<span class="lineNum"> 578 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(enc_msg == NULL)</span> +<span class="lineNum"> 579 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); +<span class="lineNum"> 580 </span> : : +<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : enc_msg_len = strnlen(enc_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> +<span class="lineNum"> 582 </span> : : +<span class="lineNum"> 583 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_encoded_msg_len(enc_msg_len))</span> +<span class="lineNum"> 584 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); +<span class="lineNum"> 585 </span> : : +<span class="lineNum"> 586 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg != NULL)</span> +<span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;encrypted_msg);</span> +<span class="lineNum"> 588 </span> : : +<span class="lineNum"> 589 </span> : : /* First, add the data to the context. +<span class="lineNum"> 590 </span> : : */ +<span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg = strdup(enc_msg);</span> +<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len = enc_msg_len;</span> +<span class="lineNum"> 593 </span> : : +<span class="lineNum"> 594 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg == NULL)</span> +<span class="lineNum"> 595 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 596 </span> : : +<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 598 </span> : : } +<span class="lineNum"> 599 </span> : : +<span class="lineNum"> 600 </span> : : #if AFL_FUZZING +<span class="lineNum"> 601 </span> : : /* provide a way to set the encrypted data directly without base64 encoding. +<span class="lineNum"> 602 </span> : : * This allows direct AFL fuzzing against decryption routines. +<span class="lineNum"> 603 </span> : : */ +<span class="lineNum"> 604 </span> : : int +<span class="lineNum"> 605 </span> : : fko_afl_set_spa_data(fko_ctx_t ctx, const char * const enc_msg, const int enc_msg_len) +<span class="lineNum"> 606 </span> : : { +<span class="lineNum"> 607 </span> : : /* Must be initialized +<span class="lineNum"> 608 </span> : : */ +<span class="lineNum"> 609 </span> : : if(!CTX_INITIALIZED(ctx)) +<span class="lineNum"> 610 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 611 </span> : : +<span class="lineNum"> 612 </span> : : if(enc_msg == NULL) +<span class="lineNum"> 613 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); +<span class="lineNum"> 614 </span> : : +<span class="lineNum"> 615 </span> : : if(! is_valid_encoded_msg_len(enc_msg_len)) +<span class="lineNum"> 616 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); +<span class="lineNum"> 617 </span> : : +<span class="lineNum"> 618 </span> : : if(ctx-&gt;encrypted_msg != NULL) +<span class="lineNum"> 619 </span> : : free(ctx-&gt;encrypted_msg); +<span class="lineNum"> 620 </span> : : +<span class="lineNum"> 621 </span> : : /* Copy the raw encrypted data into the context +<span class="lineNum"> 622 </span> : : */ +<span class="lineNum"> 623 </span> : : ctx-&gt;encrypted_msg = calloc(1, enc_msg_len); +<span class="lineNum"> 624 </span> : : if(ctx-&gt;encrypted_msg == NULL) +<span class="lineNum"> 625 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 626 </span> : : +<span class="lineNum"> 627 </span> : : memcpy(ctx-&gt;encrypted_msg, enc_msg, enc_msg_len); +<span class="lineNum"> 628 </span> : : +<span class="lineNum"> 629 </span> : : ctx-&gt;encrypted_msg_len = enc_msg_len; +<span class="lineNum"> 630 </span> : : +<span class="lineNum"> 631 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 632 </span> : : } +<span class="lineNum"> 633 </span> : : #endif +<span class="lineNum"> 634 </span> : : +<span class="lineNum"> 635 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html new file mode 100644 index 00000000..b1939fee --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_hmac.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_hmac.c<span style="font-size: 80%;"> (<a href="fko_hmac.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">79</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryLo">73.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">42</td> + <td class="headerCovTableEntry">96</td> + <td class="headerCovTableEntryLo">43.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_hmac.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#186">fko_set_spa_hmac_type</a></td> + <td class="coverFnHi">1122</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#216">fko_get_spa_hmac_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#168">fko_get_spa_hmac</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#231">fko_set_spa_hmac</a></td> + <td class="coverFnHi">692</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#36">fko_verify_hmac</a></td> + <td class="coverFnHi">345</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html new file mode 100644 index 00000000..31906463 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_hmac.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_hmac.c<span style="font-size: 80%;"> (<a href="fko_hmac.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">79</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryLo">73.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">42</td> + <td class="headerCovTableEntry">96</td> + <td class="headerCovTableEntryLo">43.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_hmac.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#168">fko_get_spa_hmac</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#216">fko_get_spa_hmac_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#231">fko_set_spa_hmac</a></td> + <td class="coverFnHi">692</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#186">fko_set_spa_hmac_type</a></td> + <td class="coverFnHi">1122</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_hmac.c.gcov.html#36">fko_verify_hmac</a></td> + <td class="coverFnHi">345</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html new file mode 100644 index 00000000..9b736f56 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html @@ -0,0 +1,416 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_hmac.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_hmac.c<span style="font-size: 80%;"> (source / <a href="fko_hmac.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">79</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryLo">73.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">42</td> + <td class="headerCovTableEntry">96</td> + <td class="headerCovTableEntryLo">43.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_hmac.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Provide HMAC support to SPA communications +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;hmac.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;base64.h&quot; +<a name="36"><span class="lineNum"> 36 </span> : : </a> +<span class="lineNum"> 37 </span> : : int +<span class="lineNum"> 38 </span> :<span class="lineCov"> 345 : fko_verify_hmac(fko_ctx_t ctx,</span> +<span class="lineNum"> 39 </span> : : const char * const hmac_key, const int hmac_key_len) +<span class="lineNum"> 40 </span> : : { +<span class="lineNum"> 41 </span> :<span class="lineCov"> 345 : char *hmac_digest_from_data = NULL;</span> +<span class="lineNum"> 42 </span> :<span class="lineCov"> 345 : char *tbuf = NULL;</span> +<span class="lineNum"> 43 </span> :<span class="lineCov"> 345 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 44 </span> :<span class="lineCov"> 345 : int hmac_b64_digest_len = 0, zero_free_rv = FKO_SUCCESS;</span> +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : /* Must be initialized +<span class="lineNum"> 47 </span> : : */ +<span class="lineNum"> 48 </span>[<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 345 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 49 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(hmac_key == NULL)</span> +<span class="lineNum"> 52 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 53 </span> : : +<span class="lineNum"> 54 </span> [<span class="branchCov" title="Branch 1 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 345 : if (! is_valid_encoded_msg_len(ctx-&gt;encrypted_msg_len))</span> +<span class="lineNum"> 55 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL); +<span class="lineNum"> 56 </span> : : +<span class="lineNum"> 57 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(hmac_key_len &lt; 0 || hmac_key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 58 </span> : : return(FKO_ERROR_INVALID_HMAC_KEY_LEN); +<span class="lineNum"> 59 </span> : : +<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(ctx-&gt;hmac_type == FKO_HMAC_MD5)</span> +<span class="lineNum"> 61 </span> : : hmac_b64_digest_len = MD5_B64_LEN; +<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 271 times"> + </span><span class="branchCov" title="Branch 1 was taken 74 times"> + </span>]:<span class="lineCov"> 345 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA1)</span> +<span class="lineNum"> 63 </span> : : hmac_b64_digest_len = SHA1_B64_LEN; +<span class="lineNum"> 64 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 271 times"> + </span>]:<span class="lineCov"> 271 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA256)</span> +<span class="lineNum"> 65 </span> : : hmac_b64_digest_len = SHA256_B64_LEN; +<span class="lineNum"> 66 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA384)</span> +<span class="lineNum"> 67 </span> : : hmac_b64_digest_len = SHA384_B64_LEN; +<span class="lineNum"> 68 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA512)</span> +<span class="lineNum"> 69 </span> : : hmac_b64_digest_len = SHA512_B64_LEN; +<span class="lineNum"> 70 </span> : : else +<span class="lineNum"> 71 </span> : : return(FKO_ERROR_UNSUPPORTED_HMAC_MODE); +<span class="lineNum"> 72 </span> : : +<span class="lineNum"> 73 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if((ctx-&gt;encrypted_msg_len - hmac_b64_digest_len)</span> +<span class="lineNum"> 74 </span> : : &lt; MIN_SPA_ENCODED_MSG_SIZE) +<span class="lineNum"> 75 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL); +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : /* Get digest value +<span class="lineNum"> 78 </span> : : */ +<span class="lineNum"> 79 </span> :<span class="lineCov"> 690 : hmac_digest_from_data = strndup((ctx-&gt;encrypted_msg</span> +<span class="lineNum"> 80 </span> :<span class="lineCov"> 345 : + ctx-&gt;encrypted_msg_len - hmac_b64_digest_len),</span> +<span class="lineNum"> 81 </span> : : hmac_b64_digest_len); +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(hmac_digest_from_data == NULL)</span> +<span class="lineNum"> 84 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> : : /* Now we chop the HMAC digest off of the encrypted msg +<span class="lineNum"> 87 </span> : : */ +<span class="lineNum"> 88 </span> :<span class="lineCov"> 345 : tbuf = strndup(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 89 </span> : : ctx-&gt;encrypted_msg_len - hmac_b64_digest_len); +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(tbuf == NULL)</span> +<span class="lineNum"> 92 </span> : : { +<span class="lineNum"> 93 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(hmac_digest_from_data, strnlen(hmac_digest_from_data,</span> +<span class="lineNum"> 94 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) == FKO_SUCCESS) +<span class="lineNum"> 95 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 96 </span> : : else +<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> +<span class="lineNum"> 98 </span> : : } +<span class="lineNum"> 99 </span> : : +<span class="lineNum"> 100 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(zero_free(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> +<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 102 </span> : : +<span class="lineNum"> 103 </span> :<span class="lineCov"> 345 : ctx-&gt;encrypted_msg = tbuf;</span> +<span class="lineNum"> 104 </span> :<span class="lineCov"> 345 : ctx-&gt;encrypted_msg_len -= hmac_b64_digest_len;</span> +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(ctx-&gt;encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> +<span class="lineNum"> 107 </span> : : { +<span class="lineNum"> 108 </span> : : /* See if we need to add the &quot;hQ&quot; string to the front of the +<span class="lineNum"> 109 </span> : : * encrypted data. +<span class="lineNum"> 110 </span> : : */ +<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! ctx-&gt;added_gpg_prefix)</span> +<span class="lineNum"> 112 </span> : : { +<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : res = add_gpg_prefix(ctx);</span> +<span class="lineNum"> 114 </span> : : } +<span class="lineNum"> 115 </span> : : } +<span class="lineNum"> 116 </span> : : else +<span class="lineNum"> 117 </span> : : { +<span class="lineNum"> 118 </span> : : /* See if we need to add the &quot;Salted__&quot; string to the front of the +<span class="lineNum"> 119 </span> : : * encrypted data. +<span class="lineNum"> 120 </span> : : */ +<span class="lineNum"> 121 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(! ctx-&gt;added_salted_str)</span> +<span class="lineNum"> 122 </span> : : { +<span class="lineNum"> 123 </span> :<span class="lineCov"> 345 : res = add_salted_str(ctx);</span> +<span class="lineNum"> 124 </span> : : } +<span class="lineNum"> 125 </span> : : } +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if (res != FKO_SUCCESS)</span> +<span class="lineNum"> 128 </span> : : { +<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(hmac_digest_from_data, strnlen(hmac_digest_from_data,</span> +<span class="lineNum"> 130 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) +<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 132 </span> : : +<span class="lineNum"> 133 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free_rv == FKO_SUCCESS)</span> +<span class="lineNum"> 134 </span> : : return(res); +<span class="lineNum"> 135 </span> : : else +<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> +<span class="lineNum"> 137 </span> : : } +<span class="lineNum"> 138 </span> : : +<span class="lineNum"> 139 </span> : : /* Calculate the HMAC from the encrypted data and then +<span class="lineNum"> 140 </span> : : * compare +<span class="lineNum"> 141 </span> : : */ +<span class="lineNum"> 142 </span> :<span class="lineCov"> 345 : res = fko_set_spa_hmac_type(ctx, ctx-&gt;hmac_type);</span> +<span class="lineNum"> 143 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(res == FKO_SUCCESS)</span> +<span class="lineNum"> 144 </span> : : { +<span class="lineNum"> 145 </span> :<span class="lineCov"> 345 : res = fko_set_spa_hmac(ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 146 </span> : : +<span class="lineNum"> 147 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(res == FKO_SUCCESS)</span> +<span class="lineNum"> 148 </span> : : { +<span class="lineNum"> 149 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(constant_runtime_cmp(hmac_digest_from_data,</span> +<span class="lineNum"> 150 </span> :<span class="lineCov"> 345 : ctx-&gt;msg_hmac, hmac_b64_digest_len) != 0)</span> +<span class="lineNum"> 151 </span> : : { +<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : res = FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL;</span> +<span class="lineNum"> 153 </span> : : } +<span class="lineNum"> 154 </span> : : } +<span class="lineNum"> 155 </span> : : } +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> [<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(zero_free(hmac_digest_from_data, strnlen(hmac_digest_from_data,</span> +<span class="lineNum"> 158 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) +<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 160 </span> : : +<span class="lineNum"> 161 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(res == FKO_SUCCESS)</span> +<span class="lineNum"> 162 </span> : : return(zero_free_rv); +<span class="lineNum"> 163 </span> : : else +<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 165 </span> : : } +<span class="lineNum"> 166 </span> : : +<span class="lineNum"> 167 </span> : : /* Return the fko HMAC data +<a name="168"><span class="lineNum"> 168 </span> : : */</a> +<span class="lineNum"> 169 </span> : : int +<span class="lineNum"> 170 </span> :<span class="lineCov"> 801 : fko_get_spa_hmac(fko_ctx_t ctx, char **hmac_data)</span> +<span class="lineNum"> 171 </span> : : { +<span class="lineNum"> 172 </span> : : /* Must be initialized +<span class="lineNum"> 173 </span> : : */ +<span class="lineNum"> 174 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 175 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 176 </span> : : +<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(hmac_data == NULL)</span> +<span class="lineNum"> 178 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> :<span class="lineCov"> 801 : *hmac_data = ctx-&gt;msg_hmac;</span> +<span class="lineNum"> 181 </span> : : +<span class="lineNum"> 182 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 183 </span> : : } +<span class="lineNum"> 184 </span> : : +<span class="lineNum"> 185 </span> : : /* Set the HMAC type +<a name="186"><span class="lineNum"> 186 </span> : : */</a> +<span class="lineNum"> 187 </span> : : int +<span class="lineNum"> 188 </span> :<span class="lineCov"> 1122 : fko_set_spa_hmac_type(fko_ctx_t ctx, const short hmac_type)</span> +<span class="lineNum"> 189 </span> : : { +<span class="lineNum"> 190 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 191 </span> : : fiu_return_on(&quot;fko_set_spa_hmac_type_init&quot;, +<span class="lineNum"> 192 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 193 </span> : : #endif +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> : : /* Must be initialized +<span class="lineNum"> 196 </span> : : */ +<span class="lineNum"> 197 </span>[<span class="branchCov" title="Branch 0 was taken 1122 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1122 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1122 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 198 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 199 </span> : : +<span class="lineNum"> 200 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 201 </span> : : fiu_return_on(&quot;fko_set_spa_hmac_type_val&quot;, +<span class="lineNum"> 202 </span> : : FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL); +<span class="lineNum"> 203 </span> : : #endif +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> [<span class="branchCov" title="Branch 0 was taken 1122 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1122 : if(hmac_type &lt; 0 || hmac_type &gt;= FKO_LAST_HMAC_MODE)</span> +<span class="lineNum"> 206 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL); +<span class="lineNum"> 207 </span> : : +<span class="lineNum"> 208 </span> :<span class="lineCov"> 1122 : ctx-&gt;hmac_type = hmac_type;</span> +<span class="lineNum"> 209 </span> : : +<span class="lineNum"> 210 </span> :<span class="lineCov"> 1122 : ctx-&gt;state |= FKO_HMAC_MODE_MODIFIED;</span> +<span class="lineNum"> 211 </span> : : +<span class="lineNum"> 212 </span> :<span class="lineCov"> 1122 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 213 </span> : : } +<span class="lineNum"> 214 </span> : : +<span class="lineNum"> 215 </span> : : /* Return the fko HMAC type +<a name="216"><span class="lineNum"> 216 </span> : : */</a> +<span class="lineNum"> 217 </span> : : int +<span class="lineNum"> 218 </span> :<span class="lineCov"> 801 : fko_get_spa_hmac_type(fko_ctx_t ctx, short *hmac_type)</span> +<span class="lineNum"> 219 </span> : : { +<span class="lineNum"> 220 </span> : : /* Must be initialized +<span class="lineNum"> 221 </span> : : */ +<span class="lineNum"> 222 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 223 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(hmac_type == NULL)</span> +<span class="lineNum"> 226 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 227 </span> : : +<span class="lineNum"> 228 </span> :<span class="lineCov"> 801 : *hmac_type = ctx-&gt;hmac_type;</span> +<span class="lineNum"> 229 </span> : : +<span class="lineNum"> 230 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<a name="231"><span class="lineNum"> 231 </span> : : }</a> +<span class="lineNum"> 232 </span> : : +<span class="lineNum"> 233 </span> :<span class="lineCov"> 692 : int fko_set_spa_hmac(fko_ctx_t ctx,</span> +<span class="lineNum"> 234 </span> : : const char * const hmac_key, const int hmac_key_len) +<span class="lineNum"> 235 </span> : : { +<span class="lineNum"> 236 </span> :<span class="lineCov"> 692 : unsigned char hmac[SHA512_DIGEST_STR_LEN] = {0};</span> +<span class="lineNum"> 237 </span> :<span class="lineCov"> 692 : char *hmac_base64 = NULL;</span> +<span class="lineNum"> 238 </span> :<span class="lineCov"> 692 : int hmac_digest_str_len = 0;</span> +<span class="lineNum"> 239 </span> :<span class="lineCov"> 692 : int hmac_digest_len = 0;</span> +<span class="lineNum"> 240 </span> : : +<span class="lineNum"> 241 </span> : : /* Must be initialized +<span class="lineNum"> 242 </span> : : */ +<span class="lineNum"> 243 </span>[<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 692 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 244 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 245 </span> : : +<span class="lineNum"> 246 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if(hmac_key == NULL)</span> +<span class="lineNum"> 247 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 248 </span> : : +<span class="lineNum"> 249 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if(hmac_key_len &lt; 0 || hmac_key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 250 </span> : : return(FKO_ERROR_INVALID_HMAC_KEY_LEN); +<span class="lineNum"> 251 </span> : : +<span class="lineNum"> 252 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 692 times"> + </span>]:<span class="lineCov"> 692 : if(ctx-&gt;hmac_type == FKO_HMAC_MD5)</span> +<span class="lineNum"> 253 </span> : : { +<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : hmac_md5(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 256 </span> : : +<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : hmac_digest_len = MD5_DIGEST_LEN;</span> +<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : hmac_digest_str_len = MD5_DIGEST_STR_LEN;</span> +<span class="lineNum"> 259 </span> : : } +<span class="lineNum"> 260 </span> [<span class="branchCov" title="Branch 0 was taken 148 times"> + </span><span class="branchCov" title="Branch 1 was taken 544 times"> + </span>]:<span class="lineCov"> 692 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA1)</span> +<span class="lineNum"> 261 </span> : : { +<span class="lineNum"> 262 </span> :<span class="lineCov"> 148 : hmac_sha1(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 263 </span> :<span class="lineCov"> 148 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 264 </span> : : +<span class="lineNum"> 265 </span> :<span class="lineCov"> 148 : hmac_digest_len = SHA1_DIGEST_LEN;</span> +<span class="lineNum"> 266 </span> :<span class="lineCov"> 148 : hmac_digest_str_len = SHA1_DIGEST_STR_LEN;</span> +<span class="lineNum"> 267 </span> : : } +<span class="lineNum"> 268 </span> [<span class="branchCov" title="Branch 0 was taken 544 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 544 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA256)</span> +<span class="lineNum"> 269 </span> : : { +<span class="lineNum"> 270 </span> :<span class="lineCov"> 544 : hmac_sha256(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 271 </span> :<span class="lineCov"> 544 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 272 </span> : : +<span class="lineNum"> 273 </span> :<span class="lineCov"> 544 : hmac_digest_len = SHA256_DIGEST_LEN;</span> +<span class="lineNum"> 274 </span> :<span class="lineCov"> 544 : hmac_digest_str_len = SHA256_DIGEST_STR_LEN;</span> +<span class="lineNum"> 275 </span> : : } +<span class="lineNum"> 276 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA384)</span> +<span class="lineNum"> 277 </span> : : { +<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : hmac_sha384(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 280 </span> : : +<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : hmac_digest_len = SHA384_DIGEST_LEN;</span> +<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : hmac_digest_str_len = SHA384_DIGEST_STR_LEN;</span> +<span class="lineNum"> 283 </span> : : } +<span class="lineNum"> 284 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA512)</span> +<span class="lineNum"> 285 </span> : : { +<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : hmac_sha512(ctx-&gt;encrypted_msg,</span> +<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 288 </span> : : +<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : hmac_digest_len = SHA512_DIGEST_LEN;</span> +<span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : hmac_digest_str_len = SHA512_DIGEST_STR_LEN;</span> +<span class="lineNum"> 291 </span> : : } +<span class="lineNum"> 292 </span> : : +<span class="lineNum"> 293 </span> :<span class="lineCov"> 692 : hmac_base64 = calloc(1, MD_HEX_SIZE(hmac_digest_len)+1);</span> +<span class="lineNum"> 294 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if (hmac_base64 == NULL)</span> +<span class="lineNum"> 295 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 296 </span> : : +<span class="lineNum"> 297 </span> :<span class="lineCov"> 692 : b64_encode(hmac, hmac_base64, hmac_digest_len);</span> +<span class="lineNum"> 298 </span> :<span class="lineCov"> 692 : strip_b64_eq(hmac_base64);</span> +<span class="lineNum"> 299 </span> : : +<span class="lineNum"> 300 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 692 times"> + </span>]:<span class="lineCov"> 692 : if(ctx-&gt;msg_hmac != NULL)</span> +<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;msg_hmac);</span> +<span class="lineNum"> 302 </span> : : +<span class="lineNum"> 303 </span> :<span class="lineCov"> 692 : ctx-&gt;msg_hmac = strdup(hmac_base64);</span> +<span class="lineNum"> 304 </span> : : +<span class="lineNum"> 305 </span> :<span class="lineCov"> 692 : free(hmac_base64);</span> +<span class="lineNum"> 306 </span> : : +<span class="lineNum"> 307 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if(ctx-&gt;msg_hmac == NULL)</span> +<span class="lineNum"> 308 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 309 </span> : : +<span class="lineNum"> 310 </span> :<span class="lineCov"> 692 : ctx-&gt;msg_hmac_len = strnlen(ctx-&gt;msg_hmac, hmac_digest_str_len);</span> +<span class="lineNum"> 311 </span> : : +<span class="lineNum"> 312 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : switch(ctx-&gt;msg_hmac_len)</span> +<span class="lineNum"> 313 </span> : : { +<span class="lineNum"> 314 </span> : : case MD5_B64_LEN: +<span class="lineNum"> 315 </span> : : break; +<span class="lineNum"> 316 </span> : : case SHA1_B64_LEN: +<span class="lineNum"> 317 </span> : : break; +<span class="lineNum"> 318 </span> : : case SHA256_B64_LEN: +<span class="lineNum"> 319 </span> : : break; +<span class="lineNum"> 320 </span> : : case SHA384_B64_LEN: +<span class="lineNum"> 321 </span> : : break; +<span class="lineNum"> 322 </span> : : case SHA512_B64_LEN: +<span class="lineNum"> 323 </span> : : break; +<span class="lineNum"> 324 </span> : : default: +<span class="lineNum"> 325 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL); +<span class="lineNum"> 326 </span> : : } +<span class="lineNum"> 327 </span> : : +<span class="lineNum"> 328 </span> :<span class="lineCov"> 692 : return FKO_SUCCESS;</span> +<span class="lineNum"> 329 </span> : : } +<span class="lineNum"> 330 </span> : : +<span class="lineNum"> 331 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html new file mode 100644 index 00000000..e8b44c7f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_message.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_message.c<span style="font-size: 80%;"> (<a href="fko_message.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">86</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryMed">79.6 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryMed">80.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">60</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryLo">55.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_message.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#335">validate_proto_port_spec</a></td> + <td class="coverFnHi">2837</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#74">have_port</a></td> + <td class="coverFnHi">2760</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#110">fko_set_spa_message_type</a></td> + <td class="coverFnHi">1132</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#268">validate_access_msg</a></td> + <td class="coverFnHi">949</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#35">have_allow_ip</a></td> + <td class="coverFnHi">949</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#138">fko_get_spa_message_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#215">fko_get_spa_message</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#166">fko_set_spa_message</a></td> + <td class="coverFnHi">565</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#242">validate_cmd_msg</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#302">validate_nat_access_msg</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html new file mode 100644 index 00000000..aa1e6b47 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html @@ -0,0 +1,121 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_message.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_message.c<span style="font-size: 80%;"> (<a href="fko_message.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">86</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryMed">79.6 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryMed">80.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">60</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryLo">55.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_message.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#215">fko_get_spa_message</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#138">fko_get_spa_message_type</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#166">fko_set_spa_message</a></td> + <td class="coverFnHi">565</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#110">fko_set_spa_message_type</a></td> + <td class="coverFnHi">1132</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#35">have_allow_ip</a></td> + <td class="coverFnHi">949</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#74">have_port</a></td> + <td class="coverFnHi">2760</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#268">validate_access_msg</a></td> + <td class="coverFnHi">949</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#242">validate_cmd_msg</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#302">validate_nat_access_msg</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_message.c.gcov.html#335">validate_proto_port_spec</a></td> + <td class="coverFnHi">2837</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html new file mode 100644 index 00000000..09d27f3b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html @@ -0,0 +1,449 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_message.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_message.c<span style="font-size: 80%;"> (source / <a href="fko_message.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">86</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryMed">79.6 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryMed">80.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">60</td> + <td class="headerCovTableEntry">108</td> + <td class="headerCovTableEntryLo">55.6 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_message.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa message (access req/command/etc) based +<span class="lineNum"> 7 </span> : : * on the current spa data. +<span class="lineNum"> 8 </span> : : * +<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 12 </span> : : * +<span class="lineNum"> 13 </span> : : * License (GNU General Public License): +<span class="lineNum"> 14 </span> : : * +<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 19 </span> : : * +<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 24 </span> : : * +<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 28 </span> : : * USA +<span class="lineNum"> 29 </span> : : * +<span class="lineNum"> 30 </span> : : ***************************************************************************** +<span class="lineNum"> 31 </span> : : */ +<span class="lineNum"> 32 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;fko_message.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;fko.h&quot; +<a name="35"><span class="lineNum"> 35 </span> : : </a> +<span class="lineNum"> 36 </span> : : static int +<span class="lineNum"> 37 </span> :<span class="lineCov"> 949 : have_allow_ip(const char *msg)</span> +<span class="lineNum"> 38 </span> : : { +<span class="lineNum"> 39 </span> :<span class="lineCov"> 949 : const char *ndx = msg;</span> +<span class="lineNum"> 40 </span> : : char ip_str[MAX_IPV4_STR_LEN]; +<span class="lineNum"> 41 </span> :<span class="lineCov"> 949 : int dot_ctr = 0, char_ctr = 0;</span> +<span class="lineNum"> 42 </span> :<span class="lineCov"> 949 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> [<span class="branchCov" title="Branch 0 was taken 6643 times"> + </span><span class="branchCov" title="Branch 1 was taken 949 times"> + </span>]:<span class="lineCov"> 7592 : while(*ndx != ',' &amp;&amp; *ndx != '\0')</span> +<span class="lineNum"> 45 </span> : : { +<span class="lineNum"> 46 </span> :<span class="lineCov"> 6643 : ip_str[char_ctr] = *ndx;</span> +<span class="lineNum"> 47 </span> :<span class="lineCov"> 6643 : char_ctr++;</span> +<span class="lineNum"> 48 </span> [<span class="branchCov" title="Branch 0 was taken 6643 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 6643 : if(char_ctr &gt;= MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 49 </span> : : { +<span class="lineNum"> 50 </span> : : res = FKO_ERROR_INVALID_ALLOW_IP; +<span class="lineNum"> 51 </span> : : break; +<span class="lineNum"> 52 </span> : : } +<span class="lineNum"> 53 </span> [<span class="branchCov" title="Branch 0 was taken 3796 times"> + </span><span class="branchCov" title="Branch 1 was taken 2847 times"> + </span>]:<span class="lineCov"> 6643 : if(*ndx == '.')</span> +<span class="lineNum"> 54 </span> : : dot_ctr++; +<span class="lineNum"> 55 </span> [<span class="branchCov" title="Branch 1 was taken 3796 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 3796 : else if(isdigit(*ndx) == 0)</span> +<span class="lineNum"> 56 </span> : : { +<span class="lineNum"> 57 </span> : : res = FKO_ERROR_INVALID_ALLOW_IP; +<span class="lineNum"> 58 </span> : : break; +<span class="lineNum"> 59 </span> : : } +<span class="lineNum"> 60 </span> :<span class="lineCov"> 6643 : ndx++;</span> +<span class="lineNum"> 61 </span> : : } +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> [<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 949 : if(char_ctr &lt; MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 64 </span> :<span class="lineCov"> 949 : ip_str[char_ctr] = '\0';</span> +<span class="lineNum"> 65 </span> : : else +<span class="lineNum"> 66 </span> : : res = FKO_ERROR_INVALID_ALLOW_IP; +<span class="lineNum"> 67 </span> : : +<span class="lineNum"> 68 </span> [<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 949 : if(res == FKO_SUCCESS)</span> +<span class="lineNum"> 69 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 949 times"> + </span>]:<span class="lineCov"> 949 : if (! is_valid_ipv4_addr(ip_str))</span> +<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : res = FKO_ERROR_INVALID_ALLOW_IP;</span> +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> :<span class="lineCov"> 949 : return(res);</span> +<span class="lineNum"> 73 </span> : : } +<a name="74"><span class="lineNum"> 74 </span> : : </a> +<span class="lineNum"> 75 </span> : : static int +<span class="lineNum"> 76 </span> :<span class="lineCov"> 2760 : have_port(const char *msg)</span> +<span class="lineNum"> 77 </span> : : { +<span class="lineNum"> 78 </span> :<span class="lineCov"> 2760 : const char *ndx = msg;</span> +<span class="lineNum"> 79 </span> :<span class="lineCov"> 2760 : char port_str[MAX_PORT_STR_LEN+1] = {0};</span> +<span class="lineNum"> 80 </span> :<span class="lineCov"> 2760 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> +<span class="lineNum"> 81 </span> :<span class="lineCov"> 2760 : int port_str_len=0, i=0, is_err;</span> +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> [<span class="branchCov" title="Branch 0 was taken 2760 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2760 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 84 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING); +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> : : /* Must have at least one digit for the port number +<span class="lineNum"> 87 </span> : : */ +<span class="lineNum"> 88 </span> [<span class="branchCov" title="Branch 1 was taken 2759 times"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 2760 : if(isdigit(*ndx) == 0)</span> +<span class="lineNum"> 89 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> [<span class="branchCov" title="Branch 0 was taken 8250 times"> + </span><span class="branchCov" title="Branch 1 was taken 2745 times"> + </span>]:<span class="lineCov"> 10995 : while(*ndx != '\0' &amp;&amp; *ndx != ',')</span> +<span class="lineNum"> 92 </span> : : { +<span class="lineNum"> 93 </span> :<span class="lineCov"> 8250 : port_str_len++;</span> +<span class="lineNum"> 94 </span>[<span class="branchCov" title="Branch 0 was taken 8237 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 8236 times"> + </span><span class="branchCov" title="Branch 3 was taken 1 time"> + </span>]:<span class="lineCov"> 8250 : if((isdigit(*ndx) == 0) || (port_str_len &gt; MAX_PORT_STR_LEN))</span> +<span class="lineNum"> 95 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); +<span class="lineNum"> 96 </span> :<span class="lineCov"> 8236 : port_str[i] = *ndx;</span> +<span class="lineNum"> 97 </span> :<span class="lineCov"> 8236 : ndx++;</span> +<span class="lineNum"> 98 </span> :<span class="lineCov"> 8236 : i++;</span> +<span class="lineNum"> 99 </span> : : } +<span class="lineNum"> 100 </span> :<span class="lineCov"> 2745 : port_str[i] = '\0';</span> +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> :<span class="lineCov"> 2745 : strtol_wrapper(port_str, 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 103 </span> [<span class="branchCov" title="Branch 0 was taken 2740 times"> + </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 2745 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 104 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> :<span class="lineCov"> 2740 : return FKO_SUCCESS;</span> +<span class="lineNum"> 107 </span> : : } +<span class="lineNum"> 108 </span> : : +<span class="lineNum"> 109 </span> : : /* Set the SPA message type. +<a name="110"><span class="lineNum"> 110 </span> : : */</a> +<span class="lineNum"> 111 </span> : : int +<span class="lineNum"> 112 </span> :<span class="lineCov"> 1132 : fko_set_spa_message_type(fko_ctx_t ctx, const short msg_type)</span> +<span class="lineNum"> 113 </span> : : { +<span class="lineNum"> 114 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 115 </span> : : fiu_return_on(&quot;fko_set_spa_message_type_init&quot;, +<span class="lineNum"> 116 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 117 </span> : : #endif +<span class="lineNum"> 118 </span> : : /* Must be initialized +<span class="lineNum"> 119 </span> : : */ +<span class="lineNum"> 120 </span>[<span class="branchCov" title="Branch 0 was taken 1132 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1132 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1132 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 121 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 122 </span> : : +<span class="lineNum"> 123 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 124 </span> : : fiu_return_on(&quot;fko_set_spa_message_type_val&quot;, +<span class="lineNum"> 125 </span> : : FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL); +<span class="lineNum"> 126 </span> : : #endif +<span class="lineNum"> 127 </span> [<span class="branchCov" title="Branch 0 was taken 1132 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1132 : if(msg_type &lt; 0 || msg_type &gt;= FKO_LAST_MSG_TYPE)</span> +<span class="lineNum"> 128 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL); +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> :<span class="lineCov"> 1132 : ctx-&gt;message_type = msg_type;</span> +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> :<span class="lineCov"> 1132 : ctx-&gt;state |= FKO_SPA_MSG_TYPE_MODIFIED;</span> +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> :<span class="lineCov"> 1132 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 135 </span> : : } +<span class="lineNum"> 136 </span> : : +<span class="lineNum"> 137 </span> : : /* Return the SPA message type. +<a name="138"><span class="lineNum"> 138 </span> : : */</a> +<span class="lineNum"> 139 </span> : : int +<span class="lineNum"> 140 </span> :<span class="lineCov"> 801 : fko_get_spa_message_type(fko_ctx_t ctx, short *msg_type)</span> +<span class="lineNum"> 141 </span> : : { +<span class="lineNum"> 142 </span> : : +<span class="lineNum"> 143 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 144 </span> : : fiu_return_on(&quot;fko_get_spa_message_type_init&quot;, +<span class="lineNum"> 145 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 146 </span> : : #endif +<span class="lineNum"> 147 </span> : : +<span class="lineNum"> 148 </span> : : /* Must be initialized +<span class="lineNum"> 149 </span> : : */ +<span class="lineNum"> 150 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 151 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(msg_type == NULL)</span> +<span class="lineNum"> 154 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 157 </span> : : fiu_return_on(&quot;fko_get_spa_message_type_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 158 </span> : : #endif +<span class="lineNum"> 159 </span> : : +<span class="lineNum"> 160 </span> :<span class="lineCov"> 801 : *msg_type = ctx-&gt;message_type;</span> +<span class="lineNum"> 161 </span> : : +<span class="lineNum"> 162 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 163 </span> : : } +<span class="lineNum"> 164 </span> : : +<span class="lineNum"> 165 </span> : : /* Set the SPA MESSAGE data +<a name="166"><span class="lineNum"> 166 </span> : : */</a> +<span class="lineNum"> 167 </span> : : int +<span class="lineNum"> 168 </span> :<span class="lineCov"> 565 : fko_set_spa_message(fko_ctx_t ctx, const char * const msg)</span> +<span class="lineNum"> 169 </span> : : { +<span class="lineNum"> 170 </span> :<span class="lineCov"> 565 : int res = FKO_ERROR_UNKNOWN;</span> +<span class="lineNum"> 171 </span> : : +<span class="lineNum"> 172 </span> : : /* Context must be initialized. +<span class="lineNum"> 173 </span> : : */ +<span class="lineNum"> 174 </span>[<span class="branchCov" title="Branch 0 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 565 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 175 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 176 </span> : : +<span class="lineNum"> 177 </span> : : /* Gotta have a valid string. +<span class="lineNum"> 178 </span> : : */ +<span class="lineNum"> 179 </span>[<span class="branchCov" title="Branch 0 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 565 : if(msg == NULL || strnlen(msg, MAX_SPA_MESSAGE_SIZE) == 0)</span> +<span class="lineNum"> 180 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY); +<span class="lineNum"> 181 </span> : : +<span class="lineNum"> 182 </span> : : /* --DSS XXX: Bail out for now. But consider just +<span class="lineNum"> 183 </span> : : * truncating in the future... +<span class="lineNum"> 184 </span> : : */ +<span class="lineNum"> 185 </span> [<span class="branchCov" title="Branch 0 was taken 564 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 565 : if(strnlen(msg, MAX_SPA_MESSAGE_SIZE) == MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 186 </span> : : return(FKO_ERROR_DATA_TOO_LARGE); +<span class="lineNum"> 187 </span> : : +<span class="lineNum"> 188 </span> : : /* Basic message type and format checking... +<span class="lineNum"> 189 </span> : : */ +<span class="lineNum"> 190 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 564 times"> + </span>]:<span class="lineCov"> 564 : if(ctx-&gt;message_type == FKO_COMMAND_MSG)</span> +<span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : res = validate_cmd_msg(msg);</span> +<span class="lineNum"> 192 </span> : : else +<span class="lineNum"> 193 </span> :<span class="lineCov"> 564 : res = validate_access_msg(msg);</span> +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> [<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchCov" title="Branch 1 was taken 97 times"> + </span>]:<span class="lineCov"> 564 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 196 </span> : : return(res); +<span class="lineNum"> 197 </span> : : +<span class="lineNum"> 198 </span> : : /* Just in case this is a subsquent call to this function. We +<span class="lineNum"> 199 </span> : : * do not want to be leaking memory. +<span class="lineNum"> 200 </span> : : */ +<span class="lineNum"> 201 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 467 times"> + </span>]:<span class="lineCov"> 467 : if(ctx-&gt;message != NULL)</span> +<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;message);</span> +<span class="lineNum"> 203 </span> : : +<span class="lineNum"> 204 </span> :<span class="lineCov"> 467 : ctx-&gt;message = strdup(msg);</span> +<span class="lineNum"> 205 </span> : : +<span class="lineNum"> 206 </span> :<span class="lineCov"> 467 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 207 </span> : : +<span class="lineNum"> 208 </span> [<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 467 : if(ctx-&gt;message == NULL)</span> +<span class="lineNum"> 209 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 210 </span> : : +<span class="lineNum"> 211 </span> :<span class="lineCov"> 467 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 212 </span> : : } +<span class="lineNum"> 213 </span> : : +<span class="lineNum"> 214 </span> : : /* Return the SPA message data. +<a name="215"><span class="lineNum"> 215 </span> : : */</a> +<span class="lineNum"> 216 </span> : : int +<span class="lineNum"> 217 </span> :<span class="lineCov"> 801 : fko_get_spa_message(fko_ctx_t ctx, char **msg)</span> +<span class="lineNum"> 218 </span> : : { +<span class="lineNum"> 219 </span> : : +<span class="lineNum"> 220 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 221 </span> : : fiu_return_on(&quot;fko_get_spa_message_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 222 </span> : : #endif +<span class="lineNum"> 223 </span> : : +<span class="lineNum"> 224 </span> : : /* Must be initialized +<span class="lineNum"> 225 </span> : : */ +<span class="lineNum"> 226 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 227 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 228 </span> : : +<span class="lineNum"> 229 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(msg == NULL)</span> +<span class="lineNum"> 230 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 231 </span> : : +<span class="lineNum"> 232 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 233 </span> : : fiu_return_on(&quot;fko_get_spa_message_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 234 </span> : : #endif +<span class="lineNum"> 235 </span> : : +<span class="lineNum"> 236 </span> :<span class="lineCov"> 801 : *msg = ctx-&gt;message;</span> +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 239 </span> : : } +<span class="lineNum"> 240 </span> : : +<span class="lineNum"> 241 </span> : : /* Validate a command message format. +<a name="242"><span class="lineNum"> 242 </span> : : */</a> +<span class="lineNum"> 243 </span> : : int +<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : validate_cmd_msg(const char *msg)</span> +<span class="lineNum"> 245 </span> : : { +<span class="lineNum"> 246 </span> : : const char *ndx; +<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : int startlen = strnlen(msg, MAX_SPA_CMD_LEN);</span> +<span class="lineNum"> 249 </span> : : +<span class="lineNum"> 250 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(startlen == MAX_SPA_CMD_LEN)</span> +<span class="lineNum"> 251 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING); +<span class="lineNum"> 252 </span> : : +<span class="lineNum"> 253 </span> : : /* Should always have a valid allow IP regardless of message type +<span class="lineNum"> 254 </span> : : */ +<span class="lineNum"> 255 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = have_allow_ip(msg)) != FKO_SUCCESS)</span> +<span class="lineNum"> 256 </span> : : return(FKO_ERROR_INVALID_SPA_COMMAND_MSG); +<span class="lineNum"> 257 </span> : : +<span class="lineNum"> 258 </span> : : /* Commands are fairly free-form so all we can really verify is +<span class="lineNum"> 259 </span> : : * there is something at all. Get past the IP and comma, and make +<span class="lineNum"> 260 </span> : : * sure we have some string leftover... +<span class="lineNum"> 261 </span> : : */ +<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : ndx = strchr(msg, ',');</span> +<span class="lineNum"> 263 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL || (1+(ndx - msg)) &gt;= startlen)</span> +<span class="lineNum"> 264 </span> : : return(FKO_ERROR_INVALID_SPA_COMMAND_MSG); +<span class="lineNum"> 265 </span> : : +<span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 267 </span> : : } +<a name="268"><span class="lineNum"> 268 </span> : : </a> +<span class="lineNum"> 269 </span> : : int +<span class="lineNum"> 270 </span> :<span class="lineCov"> 949 : validate_access_msg(const char *msg)</span> +<span class="lineNum"> 271 </span> : : { +<span class="lineNum"> 272 </span> : : const char *ndx; +<span class="lineNum"> 273 </span> :<span class="lineCov"> 949 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 274 </span> :<span class="lineCov"> 949 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> [<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 949 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 277 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING); +<span class="lineNum"> 278 </span> : : +<span class="lineNum"> 279 </span> : : /* Should always have a valid allow IP regardless of message type +<span class="lineNum"> 280 </span> : : */ +<span class="lineNum"> 281 </span> [<span class="branchCov" title="Branch 1 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 949 : if((res = have_allow_ip(msg)) != FKO_SUCCESS)</span> +<span class="lineNum"> 282 </span> : : return(res); +<span class="lineNum"> 283 </span> : : +<span class="lineNum"> 284 </span> : : /* Position ourselves beyond the allow IP and make sure we are +<span class="lineNum"> 285 </span> : : * still good. +<span class="lineNum"> 286 </span> : : */ +<span class="lineNum"> 287 </span> :<span class="lineCov"> 949 : ndx = strchr(msg, ',');</span> +<span class="lineNum"> 288 </span>[<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 949 : if(ndx == NULL || (1+(ndx - msg)) &gt;= startlen)</span> +<span class="lineNum"> 289 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); +<span class="lineNum"> 290 </span> : : +<span class="lineNum"> 291 </span> : : /* Look for a comma to see if this is a multi-part access request. +<span class="lineNum"> 292 </span> : : */ +<span class="lineNum"> 293 </span> : : do { +<span class="lineNum"> 294 </span> :<span class="lineCov"> 2837 : ndx++;</span> +<span class="lineNum"> 295 </span> :<span class="lineCov"> 2837 : res = validate_proto_port_spec(ndx);</span> +<span class="lineNum"> 296 </span> [<span class="branchCov" title="Branch 0 was taken 2740 times"> + </span><span class="branchCov" title="Branch 1 was taken 97 times"> + </span>]:<span class="lineCov"> 2837 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 297 </span> : : break; +<span class="lineNum"> 298 </span> [<span class="branchCov" title="Branch 0 was taken 1888 times"> + </span><span class="branchCov" title="Branch 1 was taken 852 times"> + </span>]:<span class="lineCov"> 2740 : } while((ndx = strchr(ndx, ',')));</span> +<span class="lineNum"> 299 </span> : : +<span class="lineNum"> 300 </span> :<span class="lineCov"> 949 : return(res);</span> +<span class="lineNum"> 301 </span> : : } +<a name="302"><span class="lineNum"> 302 </span> : : </a> +<span class="lineNum"> 303 </span> : : int +<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : validate_nat_access_msg(const char *msg)</span> +<span class="lineNum"> 305 </span> : : { +<span class="lineNum"> 306 </span> : : const char *ndx; +<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> +<span class="lineNum"> 309 </span> : : +<span class="lineNum"> 310 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 311 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING); +<span class="lineNum"> 312 </span> : : +<span class="lineNum"> 313 </span> : : /* Should always have a valid allow IP regardless of message type +<span class="lineNum"> 314 </span> : : */ +<span class="lineNum"> 315 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = have_allow_ip(msg)) != FKO_SUCCESS)</span> +<span class="lineNum"> 316 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); +<span class="lineNum"> 317 </span> : : +<span class="lineNum"> 318 </span> : : /* Position ourselves beyond the allow IP and make sure we have +<span class="lineNum"> 319 </span> : : * a single port value +<span class="lineNum"> 320 </span> : : */ +<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : ndx = strchr(msg, ',');</span> +<span class="lineNum"> 322 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL || (1+(ndx - msg)) &gt;= startlen)</span> +<span class="lineNum"> 323 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); +<span class="lineNum"> 324 </span> : : +<span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : ndx++;</span> +<span class="lineNum"> 326 </span> : : +<span class="lineNum"> 327 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = have_port(ndx)) != FKO_SUCCESS)</span> +<span class="lineNum"> 328 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); +<span class="lineNum"> 329 </span> : : +<span class="lineNum"> 330 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(msg[startlen-1] == ',')</span> +<span class="lineNum"> 331 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); +<span class="lineNum"> 332 </span> : : +<span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 334 </span> : : } +<a name="335"><span class="lineNum"> 335 </span> : : </a> +<span class="lineNum"> 336 </span> : : int +<span class="lineNum"> 337 </span> :<span class="lineCov"> 2837 : validate_proto_port_spec(const char *msg)</span> +<span class="lineNum"> 338 </span> : : { +<span class="lineNum"> 339 </span> :<span class="lineCov"> 2837 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> +<span class="lineNum"> 340 </span> :<span class="lineCov"> 2837 : const char *ndx = msg;</span> +<span class="lineNum"> 341 </span> : : +<span class="lineNum"> 342 </span> [<span class="branchCov" title="Branch 0 was taken 2837 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2837 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> +<span class="lineNum"> 343 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING); +<span class="lineNum"> 344 </span> : : +<span class="lineNum"> 345 </span> : : /* Now check for proto/port string. +<span class="lineNum"> 346 </span> : : */ +<span class="lineNum"> 347 </span> [<span class="branchCov" title="Branch 0 was taken 70 times"> + </span><span class="branchCov" title="Branch 1 was taken 2767 times"> + </span>]:<span class="lineCov"> 2837 : if(strncmp(ndx, &quot;tcp&quot;, 3)</span> +<span class="lineNum"> 348 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 70 : &amp;&amp; strncmp(ndx, &quot;udp&quot;, 3)</span> +<span class="lineNum"> 349 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : &amp;&amp; strncmp(ndx, &quot;icmp&quot;, 4)</span> +<span class="lineNum"> 350 </span> [<span class="branchCov" title="Branch 0 was taken 40 times"> + </span><span class="branchCov" title="Branch 1 was taken 27 times"> + </span>]:<span class="lineCov"> 67 : &amp;&amp; strncmp(ndx, &quot;none&quot;, 4))</span> +<span class="lineNum"> 351 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); +<span class="lineNum"> 352 </span> : : +<span class="lineNum"> 353 </span> :<span class="lineCov"> 2810 : ndx = strchr(ndx, '/');</span> +<span class="lineNum"> 354 </span>[<span class="branchCov" title="Branch 0 was taken 2801 times"> + </span><span class="branchCov" title="Branch 1 was taken 9 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 2760 times"> + </span><span class="branchCov" title="Branch 3 was taken 41 times"> + </span>]:<span class="lineCov"> 2810 : if(ndx == NULL || ((1+(ndx - msg)) &gt; MAX_PROTO_STR_LEN))</span> +<span class="lineNum"> 355 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> : : /* Skip over the '/' and make sure we only have digits. +<span class="lineNum"> 358 </span> : : */ +<span class="lineNum"> 359 </span> :<span class="lineCov"> 2760 : ndx++;</span> +<span class="lineNum"> 360 </span> : : +<span class="lineNum"> 361 </span> :<span class="lineCov"> 2760 : return have_port(ndx);</span> +<span class="lineNum"> 362 </span> : : } +<span class="lineNum"> 363 </span> : : +<span class="lineNum"> 364 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html new file mode 100644 index 00000000..3ff7f53c --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_nat_access.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_nat_access.c<span style="font-size: 80%;"> (<a href="fko_nat_access.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">21</td> + <td class="headerCovTableEntryLo">23.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntryLo">10.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_nat_access.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_nat_access.c.gcov.html#103">fko_get_spa_nat_access</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_nat_access.c.gcov.html#35">fko_set_spa_nat_access</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html new file mode 100644 index 00000000..b420ebfd --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_nat_access.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_nat_access.c<span style="font-size: 80%;"> (<a href="fko_nat_access.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">21</td> + <td class="headerCovTableEntryLo">23.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntryLo">10.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_nat_access.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_nat_access.c.gcov.html#103">fko_get_spa_nat_access</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_nat_access.c.gcov.html#35">fko_set_spa_nat_access</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html new file mode 100644 index 00000000..6697face --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html @@ -0,0 +1,214 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_nat_access.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_nat_access.c<span style="font-size: 80%;"> (source / <a href="fko_nat_access.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">21</td> + <td class="headerCovTableEntryLo">23.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntryLo">10.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_nat_access.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa nat access request data. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : /* Set the SPA Nat Access data +<a name="35"><span class="lineNum"> 35 </span> : : */</a> +<span class="lineNum"> 36 </span> : : int +<span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : fko_set_spa_nat_access(fko_ctx_t ctx, const char * const msg)</span> +<span class="lineNum"> 38 </span> : : { +<span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 40 </span> : : +<span class="lineNum"> 41 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 42 </span> : : fiu_return_on(&quot;fko_set_spa_nat_access_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 43 </span> : : #endif +<span class="lineNum"> 44 </span> : : +<span class="lineNum"> 45 </span> : : /* Context must be initialized. +<span class="lineNum"> 46 </span> : : */ +<span class="lineNum"> 47 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 48 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : /* Gotta have a valid string. +<span class="lineNum"> 51 </span> : : */ +<span class="lineNum"> 52 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(msg == NULL || strnlen(msg, MAX_SPA_NAT_ACCESS_SIZE) == 0)</span> +<span class="lineNum"> 53 </span> : : return(FKO_ERROR_INVALID_DATA_NAT_EMPTY); +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 56 </span> : : fiu_return_on(&quot;fko_set_spa_nat_access_empty&quot;, FKO_ERROR_INVALID_DATA_NAT_EMPTY); +<span class="lineNum"> 57 </span> : : #endif +<span class="lineNum"> 58 </span> : : +<span class="lineNum"> 59 </span> : : /* --DSS XXX: Bail out for now. But consider just +<span class="lineNum"> 60 </span> : : * truncating in the future... +<span class="lineNum"> 61 </span> : : */ +<span class="lineNum"> 62 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strnlen(msg, MAX_SPA_NAT_ACCESS_SIZE) == MAX_SPA_NAT_ACCESS_SIZE)</span> +<span class="lineNum"> 63 </span> : : return(FKO_ERROR_DATA_TOO_LARGE); +<span class="lineNum"> 64 </span> : : +<span class="lineNum"> 65 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 66 </span> : : fiu_return_on(&quot;fko_set_spa_nat_access_large&quot;, FKO_ERROR_DATA_TOO_LARGE); +<span class="lineNum"> 67 </span> : : #endif +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = validate_nat_access_msg(msg)) != FKO_SUCCESS)</span> +<span class="lineNum"> 70 </span> : : return(res); +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : /* Just in case this is a subsquent call to this function. We +<span class="lineNum"> 73 </span> : : * do not want to be leaking memory. +<span class="lineNum"> 74 </span> : : */ +<span class="lineNum"> 75 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access != NULL)</span> +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;nat_access);</span> +<span class="lineNum"> 77 </span> : : +<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : ctx-&gt;nat_access = strdup(msg);</span> +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 81 </span> : : +<span class="lineNum"> 82 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access == NULL)</span> +<span class="lineNum"> 83 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> : : /* If we set the nat_access message Then we force the message_type +<span class="lineNum"> 86 </span> : : * as well. Technically, the message type should be set already. +<span class="lineNum"> 87 </span> : : * This will serve a half-protective measure. +<span class="lineNum"> 88 </span> : : * --DSS XXX: should do this better. +<span class="lineNum"> 89 </span> : : */ +<span class="lineNum"> 90 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;client_timeout &gt; 0)</span> +<span class="lineNum"> 91 </span> : : { +<span class="lineNum"> 92 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;message_type != FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 94 </span> : : } +<span class="lineNum"> 95 </span> : : else +<span class="lineNum"> 96 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;message_type != FKO_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_NAT_ACCESS_MSG;</span> +<span class="lineNum"> 98 </span> : : +<span class="lineNum"> 99 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 100 </span> : : } +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> : : /* Return the SPA message data. +<a name="103"><span class="lineNum"> 103 </span> : : */</a> +<span class="lineNum"> 104 </span> : : int +<span class="lineNum"> 105 </span> :<span class="lineCov"> 801 : fko_get_spa_nat_access(fko_ctx_t ctx, char **nat_access)</span> +<span class="lineNum"> 106 </span> : : { +<span class="lineNum"> 107 </span> : : +<span class="lineNum"> 108 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 109 </span> : : fiu_return_on(&quot;fko_get_spa_nat_access_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 110 </span> : : #endif +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : /* Must be initialized +<span class="lineNum"> 113 </span> : : */ +<span class="lineNum"> 114 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 115 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 116 </span> : : +<span class="lineNum"> 117 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(nat_access == NULL)</span> +<span class="lineNum"> 118 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 121 </span> : : fiu_return_on(&quot;fko_get_spa_nat_access_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 122 </span> : : #endif +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> :<span class="lineCov"> 801 : *nat_access = ctx-&gt;nat_access;</span> +<span class="lineNum"> 125 </span> : : +<span class="lineNum"> 126 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 127 </span> : : } +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html new file mode 100644 index 00000000..c50fc29a --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_rand_value.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_rand_value.c<span style="font-size: 80%;"> (<a href="fko_rand_value.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">26</td> + <td class="headerCovTableEntry">35</td> + <td class="headerCovTableEntryLo">74.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">46.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_rand_value.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_rand_value.c.gcov.html#164">fko_get_rand_value</a></td> + <td class="coverFnHi">806</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_rand_value.c.gcov.html#49">fko_set_rand_value</a></td> + <td class="coverFnHi">571</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html new file mode 100644 index 00000000..6a6b9ad9 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_rand_value.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_rand_value.c<span style="font-size: 80%;"> (<a href="fko_rand_value.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">26</td> + <td class="headerCovTableEntry">35</td> + <td class="headerCovTableEntryLo">74.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">46.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_rand_value.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_rand_value.c.gcov.html#164">fko_get_rand_value</a></td> + <td class="coverFnHi">806</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_rand_value.c.gcov.html#49">fko_set_rand_value</a></td> + <td class="coverFnHi">571</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html new file mode 100644 index 00000000..5b42b409 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html @@ -0,0 +1,266 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_rand_value.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_rand_value.c<span style="font-size: 80%;"> (source / <a href="fko_rand_value.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">26</td> + <td class="headerCovTableEntry">35</td> + <td class="headerCovTableEntryLo">74.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">46.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_rand_value.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Generate a 16-byte random numeric value. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #ifdef WIN32 +<span class="lineNum"> 35 </span> : : #include &lt;sys/timeb.h&gt; +<span class="lineNum"> 36 </span> : : #include &lt;time.h&gt; +<span class="lineNum"> 37 </span> : : #else +<span class="lineNum"> 38 </span> : : #ifdef HAVE_SYS_TIME_H +<span class="lineNum"> 39 </span> : : #include &lt;sys/time.h&gt; +<span class="lineNum"> 40 </span> : : #ifdef TIME_WITH_SYS_TIME +<span class="lineNum"> 41 </span> : : #include &lt;time.h&gt; +<span class="lineNum"> 42 </span> : : #endif +<span class="lineNum"> 43 </span> : : #endif +<span class="lineNum"> 44 </span> : : +<span class="lineNum"> 45 </span> : : #define RAND_FILE &quot;/dev/urandom&quot; +<span class="lineNum"> 46 </span> : : #endif +<span class="lineNum"> 47 </span> : : +<span class="lineNum"> 48 </span> : : /* Set/Generate the SPA data random value string. +<a name="49"><span class="lineNum"> 49 </span> : : */</a> +<span class="lineNum"> 50 </span> : : int +<span class="lineNum"> 51 </span> :<span class="lineCov"> 571 : fko_set_rand_value(fko_ctx_t ctx, const char * const new_val)</span> +<span class="lineNum"> 52 </span> : : { +<span class="lineNum"> 53 </span> : : #ifdef WIN32 +<span class="lineNum"> 54 </span> : : struct _timeb tb; +<span class="lineNum"> 55 </span> : : #else +<span class="lineNum"> 56 </span> : : FILE *rfd; +<span class="lineNum"> 57 </span> : : struct timeval tv; +<span class="lineNum"> 58 </span> : : size_t amt_read; +<span class="lineNum"> 59 </span> : : #endif +<span class="lineNum"> 60 </span> : : unsigned long seed; +<span class="lineNum"> 61 </span> : : char *tmp_buf; +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 64 </span> : : fiu_return_on(&quot;fko_set_rand_value_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 65 </span> : : #endif +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> : : /* Context must be initialized. +<span class="lineNum"> 68 </span> : : */ +<span class="lineNum"> 69 </span>[<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 571 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 70 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : /* If a valid value was given, use it and return happy. +<span class="lineNum"> 73 </span> : : */ +<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 571 times"> + </span>]:<span class="lineCov"> 571 : if(new_val != NULL)</span> +<span class="lineNum"> 75 </span> : : { +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 78 </span> : : fiu_return_on(&quot;fko_set_rand_value_lenval&quot;, FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL); +<span class="lineNum"> 79 </span> : : #endif +<span class="lineNum"> 80 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strnlen(new_val, FKO_RAND_VAL_SIZE+1) != FKO_RAND_VAL_SIZE)</span> +<span class="lineNum"> 81 </span> : : return(FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL); +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;rand_val != NULL)</span> +<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;rand_val);</span> +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 87 </span> : : fiu_return_on(&quot;fko_set_rand_value_strdup&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 88 </span> : : #endif +<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : ctx-&gt;rand_val = strdup(new_val);</span> +<span class="lineNum"> 90 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;rand_val == NULL)</span> +<span class="lineNum"> 91 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 92 </span> : : +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 96 </span> : : } +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : #ifdef WIN32 +<span class="lineNum"> 99 </span> : : _ftime_s(&amp;tb); +<span class="lineNum"> 100 </span> : : seed = ((tb.time * 1000) + tb.millitm) &amp; 0xFFFFFFFF; +<span class="lineNum"> 101 </span> : : #else +<span class="lineNum"> 102 </span> : : /* Attempt to read seed data from /dev/urandom. If that does not +<span class="lineNum"> 103 </span> : : * work, then fall back to a time-based method (less secure, but +<span class="lineNum"> 104 </span> : : * probably more portable). +<span class="lineNum"> 105 </span> : : */ +<span class="lineNum"> 106 </span> [<span class="branchCov" title="Branch 1 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 571 : if((rfd = fopen(RAND_FILE, &quot;r&quot;)) != NULL)</span> +<span class="lineNum"> 107 </span> : : { +<span class="lineNum"> 108 </span> : : /* Read seed from /dev/urandom +<span class="lineNum"> 109 </span> : : */ +<span class="lineNum"> 110 </span> :<span class="lineCov"> 571 : amt_read = fread(&amp;seed, 4, 1, rfd);</span> +<span class="lineNum"> 111 </span> :<span class="lineCov"> 571 : fclose(rfd);</span> +<span class="lineNum"> 112 </span> : : +<span class="lineNum"> 113 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 114 </span> : : fiu_return_on(&quot;fko_set_rand_value_read&quot;, FKO_ERROR_FILESYSTEM_OPERATION); +<span class="lineNum"> 115 </span> : : #endif +<span class="lineNum"> 116 </span> [<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 571 : if (amt_read != 1)</span> +<span class="lineNum"> 117 </span> : : return(FKO_ERROR_FILESYSTEM_OPERATION); +<span class="lineNum"> 118 </span> : : } +<span class="lineNum"> 119 </span> : : else +<span class="lineNum"> 120 </span> : : { +<span class="lineNum"> 121 </span> : : /* Seed based on time (current usecs). +<span class="lineNum"> 122 </span> : : */ +<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : gettimeofday(&amp;tv, NULL);</span> +<span class="lineNum"> 124 </span> : : +<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : seed = tv.tv_usec;</span> +<span class="lineNum"> 126 </span> : : } +<span class="lineNum"> 127 </span> : : #endif +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> :<span class="lineCov"> 571 : srand(seed);</span> +<span class="lineNum"> 130 </span> : : +<span class="lineNum"> 131 </span> [<span class="branchCov" title="Branch 0 was taken 5 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 571 : if(ctx-&gt;rand_val != NULL)</span> +<span class="lineNum"> 132 </span> :<span class="lineCov"> 5 : free(ctx-&gt;rand_val);</span> +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 135 </span> : : fiu_return_on(&quot;fko_set_rand_value_calloc1&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 136 </span> : : #endif +<span class="lineNum"> 137 </span> :<span class="lineCov"> 571 : ctx-&gt;rand_val = calloc(1, FKO_RAND_VAL_SIZE+1);</span> +<span class="lineNum"> 138 </span> [<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 571 : if(ctx-&gt;rand_val == NULL)</span> +<span class="lineNum"> 139 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 142 </span> : : fiu_return_on(&quot;fko_set_rand_value_calloc2&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 143 </span> : : #endif +<span class="lineNum"> 144 </span> :<span class="lineCov"> 571 : tmp_buf = calloc(1, FKO_RAND_VAL_SIZE+1);</span> +<span class="lineNum"> 145 </span> [<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 571 : if(tmp_buf == NULL)</span> +<span class="lineNum"> 146 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 147 </span> : : +<span class="lineNum"> 148 </span> :<span class="lineCov"> 571 : snprintf(ctx-&gt;rand_val, FKO_RAND_VAL_SIZE, &quot;%u&quot;, rand());</span> +<span class="lineNum"> 149 </span> : : +<span class="lineNum"> 150 </span> [<span class="branchCov" title="Branch 1 was taken 572 times"> + </span><span class="branchCov" title="Branch 2 was taken 571 times"> + </span>]:<span class="lineCov"> 1143 : while(strnlen(ctx-&gt;rand_val, FKO_RAND_VAL_SIZE+1) &lt; FKO_RAND_VAL_SIZE)</span> +<span class="lineNum"> 151 </span> : : { +<span class="lineNum"> 152 </span> :<span class="lineCov"> 572 : snprintf(tmp_buf, FKO_RAND_VAL_SIZE, &quot;%u&quot;, rand());</span> +<span class="lineNum"> 153 </span> :<span class="lineCov"> 572 : strlcat(ctx-&gt;rand_val, tmp_buf, FKO_RAND_VAL_SIZE+1);</span> +<span class="lineNum"> 154 </span> : : } +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> :<span class="lineCov"> 571 : free(tmp_buf);</span> +<span class="lineNum"> 157 </span> : : +<span class="lineNum"> 158 </span> :<span class="lineCov"> 571 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 159 </span> : : +<span class="lineNum"> 160 </span> :<span class="lineCov"> 571 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 161 </span> : : } +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> : : /* Return the current rand value. +<a name="164"><span class="lineNum"> 164 </span> : : */</a> +<span class="lineNum"> 165 </span> : : int +<span class="lineNum"> 166 </span> :<span class="lineCov"> 806 : fko_get_rand_value(fko_ctx_t ctx, char **rand_value)</span> +<span class="lineNum"> 167 </span> : : { +<span class="lineNum"> 168 </span> : : /* Must be initialized +<span class="lineNum"> 169 </span> : : */ +<span class="lineNum"> 170 </span>[<span class="branchCov" title="Branch 0 was taken 806 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 806 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 806 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 171 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 172 </span> : : +<span class="lineNum"> 173 </span> [<span class="branchCov" title="Branch 0 was taken 806 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 806 : if(rand_value == NULL)</span> +<span class="lineNum"> 174 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 175 </span> : : +<span class="lineNum"> 176 </span> :<span class="lineCov"> 806 : *rand_value = ctx-&gt;rand_val;</span> +<span class="lineNum"> 177 </span> : : +<span class="lineNum"> 178 </span> :<span class="lineCov"> 806 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 179 </span> : : } +<span class="lineNum"> 180 </span> : : +<span class="lineNum"> 181 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html new file mode 100644 index 00000000..f6c03a55 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_server_auth.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_server_auth.c<span style="font-size: 80%;"> (<a href="fko_server_auth.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">15</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntryLo">15.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_server_auth.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_server_auth.c.gcov.html#89">fko_get_spa_server_auth</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_server_auth.c.gcov.html#35">fko_set_spa_server_auth</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html new file mode 100644 index 00000000..0c208929 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_server_auth.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_server_auth.c<span style="font-size: 80%;"> (<a href="fko_server_auth.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">15</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntryLo">15.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_server_auth.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_server_auth.c.gcov.html#89">fko_get_spa_server_auth</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_server_auth.c.gcov.html#35">fko_set_spa_server_auth</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html new file mode 100644 index 00000000..a2263811 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html @@ -0,0 +1,200 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_server_auth.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_server_auth.c<span style="font-size: 80%;"> (source / <a href="fko_server_auth.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">15</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntryLo">15.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_server_auth.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa server auth data. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : /* Set the SPA Server Auth data +<a name="35"><span class="lineNum"> 35 </span> : : */</a> +<span class="lineNum"> 36 </span> : : int +<span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : fko_set_spa_server_auth(fko_ctx_t ctx, const char * const msg)</span> +<span class="lineNum"> 38 </span> : : { +<span class="lineNum"> 39 </span> : : /**************************************** +<span class="lineNum"> 40 </span> : : * --DSS This is not supported yet +<span class="lineNum"> 41 </span> : : **************************************** +<span class="lineNum"> 42 </span> : : */ +<span class="lineNum"> 43 </span> : : //return(FKO_ERROR_UNSUPPORTED_FEATURE); +<span class="lineNum"> 44 </span> : : +<span class="lineNum"> 45 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 46 </span> : : fiu_return_on(&quot;fko_set_spa_server_auth_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 47 </span> : : #endif +<span class="lineNum"> 48 </span> : : +<span class="lineNum"> 49 </span> : : /* Context must be initialized. +<span class="lineNum"> 50 </span> : : */ +<span class="lineNum"> 51 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 52 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 53 </span> : : +<span class="lineNum"> 54 </span> : : /* Gotta have a valid string. +<span class="lineNum"> 55 </span> : : */ +<span class="lineNum"> 56 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(msg == NULL || strnlen(msg, MAX_SPA_SERVER_AUTH_SIZE) == 0)</span> +<span class="lineNum"> 57 </span> : : return(FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING); +<span class="lineNum"> 58 </span> : : +<span class="lineNum"> 59 </span> : : /* --DSS XXX: Bail out for now. But consider just +<span class="lineNum"> 60 </span> : : * truncating in the future... +<span class="lineNum"> 61 </span> : : */ +<span class="lineNum"> 62 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strnlen(msg, MAX_SPA_SERVER_AUTH_SIZE) == MAX_SPA_SERVER_AUTH_SIZE)</span> +<span class="lineNum"> 63 </span> : : return(FKO_ERROR_DATA_TOO_LARGE); +<span class="lineNum"> 64 </span> : : +<span class="lineNum"> 65 </span> : : /* --DSS TODO: ??? +<span class="lineNum"> 66 </span> : : * Do we want to add message type and format checking here +<span class="lineNum"> 67 </span> : : * or continue to leave it to the implementor? +<span class="lineNum"> 68 </span> : : */ +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> : : /**/ +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : /* Just in case this is a subsquent call to this function. We +<span class="lineNum"> 73 </span> : : * do not want to be leaking memory. +<span class="lineNum"> 74 </span> : : */ +<span class="lineNum"> 75 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth != NULL)</span> +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> +<span class="lineNum"> 77 </span> : : +<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : ctx-&gt;server_auth = strdup(msg);</span> +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 81 </span> : : +<span class="lineNum"> 82 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth == NULL)</span> +<span class="lineNum"> 83 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 86 </span> : : } +<span class="lineNum"> 87 </span> : : +<span class="lineNum"> 88 </span> : : /* Return the SPA message data. +<a name="89"><span class="lineNum"> 89 </span> : : */</a> +<span class="lineNum"> 90 </span> : : int +<span class="lineNum"> 91 </span> :<span class="lineCov"> 801 : fko_get_spa_server_auth(fko_ctx_t ctx, char **server_auth)</span> +<span class="lineNum"> 92 </span> : : { +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 95 </span> : : fiu_return_on(&quot;fko_get_spa_server_auth_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 96 </span> : : #endif +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : /* Must be initialized +<span class="lineNum"> 99 </span> : : */ +<span class="lineNum"> 100 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 101 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 102 </span> : : +<span class="lineNum"> 103 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(server_auth == NULL)</span> +<span class="lineNum"> 104 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 107 </span> : : fiu_return_on(&quot;fko_get_spa_server_auth_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 108 </span> : : #endif +<span class="lineNum"> 109 </span> : : +<span class="lineNum"> 110 </span> :<span class="lineCov"> 801 : *server_auth = ctx-&gt;server_auth;</span> +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 113 </span> : : } +<span class="lineNum"> 114 </span> : : +<span class="lineNum"> 115 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html new file mode 100644 index 00000000..f439e90f --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_timestamp.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_timestamp.c<span style="font-size: 80%;"> (<a href="fko_timestamp.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryLo">58.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_timestamp.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_timestamp.c.gcov.html#36">fko_set_timestamp</a></td> + <td class="coverFnHi">1069</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_timestamp.c.gcov.html#68">fko_get_timestamp</a></td> + <td class="coverFnHi">801</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html new file mode 100644 index 00000000..555e413b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html @@ -0,0 +1,89 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_timestamp.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_timestamp.c<span style="font-size: 80%;"> (<a href="fko_timestamp.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryLo">58.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_timestamp.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_timestamp.c.gcov.html#68">fko_get_timestamp</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_timestamp.c.gcov.html#36">fko_set_timestamp</a></td> + <td class="coverFnHi">1069</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html new file mode 100644 index 00000000..d1f64db2 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html @@ -0,0 +1,179 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_timestamp.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_timestamp.c<span style="font-size: 80%;"> (source / <a href="fko_timestamp.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryLo">58.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_timestamp.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Get the current timestamp with optional offset applied. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : +<span class="lineNum"> 35 </span> : : /* Set the timestamp. +<a name="36"><span class="lineNum"> 36 </span> : : */</a> +<span class="lineNum"> 37 </span> : : int +<span class="lineNum"> 38 </span> :<span class="lineCov"> 1069 : fko_set_timestamp(fko_ctx_t ctx, const int offset)</span> +<span class="lineNum"> 39 </span> : : { +<span class="lineNum"> 40 </span> : : time_t ts; +<span class="lineNum"> 41 </span> : : +<span class="lineNum"> 42 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 43 </span> : : fiu_return_on(&quot;fko_set_timestamp_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 44 </span> : : #endif +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : /* Must be initialized +<span class="lineNum"> 47 </span> : : */ +<span class="lineNum"> 48 </span>[<span class="branchCov" title="Branch 0 was taken 1069 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1069 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1069 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 49 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> :<span class="lineCov"> 1069 : ts = time(NULL) + offset;</span> +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 54 </span> : : fiu_return_on(&quot;fko_set_timestamp_val&quot;, +<span class="lineNum"> 55 </span> : : FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL); +<span class="lineNum"> 56 </span> : : #endif +<span class="lineNum"> 57 </span> [<span class="branchCov" title="Branch 0 was taken 1068 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1069 : if(ts &lt; 0)</span> +<span class="lineNum"> 58 </span> : : return(FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL); +<span class="lineNum"> 59 </span> : : +<span class="lineNum"> 60 </span> :<span class="lineCov"> 1068 : ctx-&gt;timestamp = ts;</span> +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> :<span class="lineCov"> 1068 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> :<span class="lineCov"> 1068 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 65 </span> : : } +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> : : /* Return the current timestamp. +<a name="68"><span class="lineNum"> 68 </span> : : */</a> +<span class="lineNum"> 69 </span> : : int +<span class="lineNum"> 70 </span> :<span class="lineCov"> 801 : fko_get_timestamp(fko_ctx_t ctx, time_t *timestamp)</span> +<span class="lineNum"> 71 </span> : : { +<span class="lineNum"> 72 </span> : : +<span class="lineNum"> 73 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 74 </span> : : fiu_return_on(&quot;fko_get_timestamp_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 75 </span> : : #endif +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : /* Must be initialized +<span class="lineNum"> 78 </span> : : */ +<span class="lineNum"> 79 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 80 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 81 </span> : : +<span class="lineNum"> 82 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(timestamp == NULL)</span> +<span class="lineNum"> 83 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 86 </span> : : fiu_return_on(&quot;fko_get_timestamp_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 87 </span> : : #endif +<span class="lineNum"> 88 </span> : : +<span class="lineNum"> 89 </span> :<span class="lineCov"> 801 : *timestamp = ctx-&gt;timestamp;</span> +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 92 </span> : : } +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html new file mode 100644 index 00000000..d82e07a5 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_user.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_user.c<span style="font-size: 80%;"> (<a href="fko_user.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntry">54</td> + <td class="headerCovTableEntryMed">85.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">49</td> + <td class="headerCovTableEntry">76</td> + <td class="headerCovTableEntryLo">64.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_user.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_user.c.gcov.html#161">validate_username</a></td> + <td class="coverFnHi">1763</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_user.c.gcov.html#39">fko_set_username</a></td> + <td class="coverFnHi">944</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_user.c.gcov.html#136">fko_get_username</a></td> + <td class="coverFnHi">801</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html new file mode 100644 index 00000000..e2b1cf5b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_user.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_user.c<span style="font-size: 80%;"> (<a href="fko_user.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntry">54</td> + <td class="headerCovTableEntryMed">85.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">49</td> + <td class="headerCovTableEntry">76</td> + <td class="headerCovTableEntryLo">64.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_user.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_user.c.gcov.html#136">fko_get_username</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_user.c.gcov.html#39">fko_set_username</a></td> + <td class="coverFnHi">944</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_user.c.gcov.html#161">validate_username</a></td> + <td class="coverFnHi">1763</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html new file mode 100644 index 00000000..380c4730 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html @@ -0,0 +1,295 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_user.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_user.c<span style="font-size: 80%;"> (source / <a href="fko_user.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntry">54</td> + <td class="headerCovTableEntryMed">85.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">49</td> + <td class="headerCovTableEntry">76</td> + <td class="headerCovTableEntryLo">64.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_user.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the current username. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #ifdef WIN32 +<span class="lineNum"> 35 </span> : : #include &lt;getlogin.h&gt; +<span class="lineNum"> 36 </span> : : #endif +<span class="lineNum"> 37 </span> : : +<span class="lineNum"> 38 </span> : : /* Get or Set the username for the fko context spa data. +<a name="39"><span class="lineNum"> 39 </span> : : */</a> +<span class="lineNum"> 40 </span> : : int +<span class="lineNum"> 41 </span> :<span class="lineCov"> 944 : fko_set_username(fko_ctx_t ctx, const char * const spoof_user)</span> +<span class="lineNum"> 42 </span> : : { +<span class="lineNum"> 43 </span> :<span class="lineCov"> 944 : char *username = NULL;</span> +<span class="lineNum"> 44 </span> :<span class="lineCov"> 944 : int res = FKO_SUCCESS, is_user_heap_allocated=0;</span> +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 47 </span> : : fiu_return_on(&quot;fko_set_username_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 48 </span> : : #endif +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : /* Must be initialized +<span class="lineNum"> 51 </span> : : */ +<span class="lineNum"> 52 </span>[<span class="branchCov" title="Branch 0 was taken 944 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 944 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 944 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 53 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : /* If spoof_user was not passed in, check for a SPOOF_USER enviroment +<span class="lineNum"> 56 </span> : : * variable. If it is set, use its value. +<span class="lineNum"> 57 </span> : : */ +<span class="lineNum"> 58 </span>[<span class="branchCov" title="Branch 0 was taken 378 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>][<span class="branchNoCov" title="Branch 3 was not taken"> - </span><span class="branchCov" title="Branch 4 was taken 378 times"> + </span>]:<span class="lineCov"> 944 : if(spoof_user != NULL &amp;&amp; strnlen(spoof_user, MAX_SPA_USERNAME_SIZE))</span> +<span class="lineNum"> 59 </span> : : username = (char*)spoof_user; +<span class="lineNum"> 60 </span> : : else +<span class="lineNum"> 61 </span> :<span class="lineCov"> 566 : username = getenv(&quot;SPOOF_USER&quot;);</span> +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> : : /* Try to get the username from the system. +<span class="lineNum"> 64 </span> : : */ +<span class="lineNum"> 65 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchCov" title="Branch 1 was taken 378 times"> + </span>]:<span class="lineCov"> 944 : if(username == NULL)</span> +<span class="lineNum"> 66 </span> : : { +<span class="lineNum"> 67 </span> : : /* Since we've already tried looking at an env variable, try +<span class="lineNum"> 68 </span> : : * LOGNAME next (and the cuserid() man page recommends this) +<span class="lineNum"> 69 </span> : : */ +<span class="lineNum"> 70 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if((username = getenv(&quot;LOGNAME&quot;)) == NULL)</span> +<span class="lineNum"> 71 </span> : : { +<span class="lineNum"> 72 </span> : : #ifdef _XOPEN_SOURCE +<span class="lineNum"> 73 </span> : : /* cuserid will return the effective user (i.e. su or setuid). +<span class="lineNum"> 74 </span> : : */ +<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : username = cuserid(NULL);</span> +<span class="lineNum"> 76 </span> : : #else +<span class="lineNum"> 77 </span> : : username = getlogin(); +<span class="lineNum"> 78 </span> : : #endif +<span class="lineNum"> 79 </span> : : /* if we still didn't get a username, continue falling back +<span class="lineNum"> 80 </span> : : */ +<span class="lineNum"> 81 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(username == NULL)</span> +<span class="lineNum"> 82 </span> : : { +<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((username = getenv(&quot;USER&quot;)) == NULL)</span> +<span class="lineNum"> 84 </span> : : { +<span class="lineNum"> 85 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 86 </span> : : fiu_return_on(&quot;fko_set_username_strdup1&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 87 </span> : : #endif +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : username = strdup(&quot;NO_USER&quot;);</span> +<span class="lineNum"> 89 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(username == NULL)</span> +<span class="lineNum"> 90 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 91 </span> : : is_user_heap_allocated = 1; +<span class="lineNum"> 92 </span> : : } +<span class="lineNum"> 93 </span> : : } +<span class="lineNum"> 94 </span> : : } +<span class="lineNum"> 95 </span> : : } +<span class="lineNum"> 96 </span> : : +<span class="lineNum"> 97 </span> : : /* Truncate the username if it is too long. +<span class="lineNum"> 98 </span> : : */ +<span class="lineNum"> 99 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 944 times"> + </span>]:<span class="lineCov"> 944 : if(strnlen(username, MAX_SPA_USERNAME_SIZE) == MAX_SPA_USERNAME_SIZE)</span> +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : *(username + MAX_SPA_USERNAME_SIZE - 1) = '\0';</span> +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> [<span class="branchCov" title="Branch 1 was taken 25 times"> + </span><span class="branchCov" title="Branch 2 was taken 919 times"> + </span>]:<span class="lineCov"> 944 : if((res = validate_username(username)) != FKO_SUCCESS)</span> +<span class="lineNum"> 103 </span> : : { +<span class="lineNum"> 104 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 25 times"> + </span>]:<span class="lineCov"> 25 : if(is_user_heap_allocated == 1)</span> +<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : free(username);</span> +<span class="lineNum"> 106 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 107 </span> : : fiu_return_on(&quot;fko_set_username_valuser&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 108 </span> : : #endif +<span class="lineNum"> 109 </span> :<span class="lineCov"> 25 : return res;</span> +<span class="lineNum"> 110 </span> : : } +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : /* Just in case this is a subsquent call to this function. We +<span class="lineNum"> 113 </span> : : * do not want to be leaking memory. +<span class="lineNum"> 114 </span> : : */ +<span class="lineNum"> 115 </span> [<span class="branchCov" title="Branch 0 was taken 353 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 919 : if(ctx-&gt;username != NULL)</span> +<span class="lineNum"> 116 </span> :<span class="lineCov"> 353 : free(ctx-&gt;username);</span> +<span class="lineNum"> 117 </span> : : +<span class="lineNum"> 118 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 119 </span> : : fiu_return_on(&quot;fko_set_username_strdup2&quot;, FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 120 </span> : : #endif +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> :<span class="lineCov"> 919 : ctx-&gt;username = strdup(username);</span> +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> :<span class="lineCov"> 919 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> +<span class="lineNum"> 125 </span> : : +<span class="lineNum"> 126 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 919 times"> + </span>]:<span class="lineCov"> 919 : if(is_user_heap_allocated == 1)</span> +<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : free(username);</span> +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> [<span class="branchCov" title="Branch 0 was taken 919 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 919 : if(ctx-&gt;username == NULL)</span> +<span class="lineNum"> 130 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> :<span class="lineCov"> 919 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 133 </span> : : } +<span class="lineNum"> 134 </span> : : +<span class="lineNum"> 135 </span> : : /* Return the current username for this fko context. +<a name="136"><span class="lineNum"> 136 </span> : : */</a> +<span class="lineNum"> 137 </span> : : int +<span class="lineNum"> 138 </span> :<span class="lineCov"> 801 : fko_get_username(fko_ctx_t ctx, char **username)</span> +<span class="lineNum"> 139 </span> : : { +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 142 </span> : : fiu_return_on(&quot;fko_get_username_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 143 </span> : : #endif +<span class="lineNum"> 144 </span> : : +<span class="lineNum"> 145 </span> : : /* Must be initialized +<span class="lineNum"> 146 </span> : : */ +<span class="lineNum"> 147 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 148 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); +<span class="lineNum"> 149 </span> : : +<span class="lineNum"> 150 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(username == NULL)</span> +<span class="lineNum"> 151 </span> : : return(FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 154 </span> : : fiu_return_on(&quot;fko_get_username_val&quot;, FKO_ERROR_INVALID_DATA); +<span class="lineNum"> 155 </span> : : #endif +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> :<span class="lineCov"> 801 : *username = ctx-&gt;username;</span> +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 160 </span> : : } +<a name="161"><span class="lineNum"> 161 </span> : : </a> +<span class="lineNum"> 162 </span> : : int +<span class="lineNum"> 163 </span> :<span class="lineCov"> 1763 : validate_username(const char *username)</span> +<span class="lineNum"> 164 </span> : : { +<span class="lineNum"> 165 </span> : : int i; +<span class="lineNum"> 166 </span> : : +<span class="lineNum"> 167 </span>[<span class="branchCov" title="Branch 0 was taken 1763 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 1763 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 1763 : if(username == NULL || strnlen(username, MAX_SPA_USERNAME_SIZE) == 0)</span> +<span class="lineNum"> 168 </span> : : return(FKO_ERROR_INVALID_DATA_USER_MISSING); +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> : : /* Exclude a few chars - this list is consistent with MS guidance since +<span class="lineNum"> 171 </span> : : * libfko runs on Windows: +<span class="lineNum"> 172 </span> : : * http://technet.microsoft.com/en-us/library/bb726984.aspx +<span class="lineNum"> 173 </span> : : */ +<span class="lineNum"> 174 </span> [<span class="branchCov" title="Branch 0 was taken 11290 times"> + </span><span class="branchCov" title="Branch 1 was taken 1738 times"> + </span>]:<span class="lineCov"> 13028 : for (i=0; i &lt; (int)strnlen(username, MAX_SPA_USERNAME_SIZE); i++)</span> +<span class="lineNum"> 175 </span> : : { +<span class="lineNum"> 176 </span> [<span class="branchCov" title="Branch 1 was taken 1023 times"> + </span><span class="branchCov" title="Branch 2 was taken 10267 times"> + </span>]:<span class="lineCov"> 11290 : if((isalnum(username[i]) == 0)</span> +<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 1012 times"> + </span><span class="branchCov" title="Branch 1 was taken 11 times"> + </span>]:<span class="lineCov"> 1023 : &amp;&amp; ((username[i] &lt; 0x20 || username[i] &gt; 0x7e)</span> +<span class="lineNum"> 178 </span> : : /* Not allowed chars: &quot; / \ [ ] : ; | = , + * ? &lt; &gt; +<span class="lineNum"> 179 </span> : : */ +<span class="lineNum"> 180 </span> [<span class="branchCov" title="Branch 0 was taken 1007 times"> + </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 1012 : || (username[i] == 0x22</span> +<span class="lineNum"> 181 </span> :<span class="lineCov"> 1012 : || username[i] == 0x2f</span> +<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 1007 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1007 : || username[i] == 0x5c</span> +<span class="lineNum"> 183 </span> [<span class="branchCov" title="Branch 0 was taken 1007 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1007 : || username[i] == 0x5b</span> +<span class="lineNum"> 184 </span> [<span class="branchCov" title="Branch 0 was taken 1004 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 1007 : || username[i] == 0x5d</span> +<span class="lineNum"> 185 </span> [<span class="branchCov" title="Branch 0 was taken 1004 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1004 : || username[i] == 0x3a</span> +<span class="lineNum"> 186 </span> [<span class="branchCov" title="Branch 0 was taken 1004 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1004 : || username[i] == 0x3b</span> +<span class="lineNum"> 187 </span> [<span class="branchCov" title="Branch 0 was taken 1003 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1004 : || username[i] == 0x7c</span> +<span class="lineNum"> 188 </span> [<span class="branchCov" title="Branch 0 was taken 1003 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1003 : || username[i] == 0x3d</span> +<span class="lineNum"> 189 </span> [<span class="branchCov" title="Branch 0 was taken 1002 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1003 : || username[i] == 0x2c</span> +<span class="lineNum"> 190 </span> [<span class="branchCov" title="Branch 0 was taken 1000 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 1002 : || username[i] == 0x2b</span> +<span class="lineNum"> 191 </span> [<span class="branchCov" title="Branch 0 was taken 998 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 1000 : || username[i] == 0x2a</span> +<span class="lineNum"> 192 </span> [<span class="branchCov" title="Branch 0 was taken 998 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 998 : || username[i] == 0x3f</span> +<span class="lineNum"> 193 </span> [<span class="branchCov" title="Branch 0 was taken 998 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 998 : || username[i] == 0x3c</span> +<span class="lineNum"> 194 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 998 times"> + </span>]:<span class="lineCov"> 998 : || username[i] == 0x3e)))</span> +<span class="lineNum"> 195 </span> : : { +<span class="lineNum"> 196 </span> [<span class="branchCov" title="Branch 0 was taken 22 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 25 : if(i == 0)</span> +<span class="lineNum"> 197 </span> : : { +<span class="lineNum"> 198 </span> : : return(FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL); +<span class="lineNum"> 199 </span> : : } +<span class="lineNum"> 200 </span> : : else +<span class="lineNum"> 201 </span> : : { +<span class="lineNum"> 202 </span> :<span class="lineCov"> 22 : return(FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL);</span> +<span class="lineNum"> 203 </span> : : } +<span class="lineNum"> 204 </span> : : } +<span class="lineNum"> 205 </span> : : } +<span class="lineNum"> 206 </span> : : +<span class="lineNum"> 207 </span> : : return FKO_SUCCESS; +<span class="lineNum"> 208 </span> : : } +<span class="lineNum"> 209 </span> : : +<span class="lineNum"> 210 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html new file mode 100644 index 00000000..09ec05b6 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html @@ -0,0 +1,153 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_util.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_util.c<span style="font-size: 80%;"> (<a href="fko_util.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">213</td> + <td class="headerCovTableEntry">273</td> + <td class="headerCovTableEntryMed">78.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">131</td> + <td class="headerCovTableEntry">246</td> + <td class="headerCovTableEntryLo">53.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_util.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#507">zero_buf</a></td> + <td class="coverFnHi">37967</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#419">strtol_wrapper</a></td> + <td class="coverFnHi">20672</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#569">append_msg_to_buf</a></td> + <td class="coverFnHi">14418</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#119">is_valid_ipv4_addr</a></td> + <td class="coverFnHi">8215</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#606">is_base64</a></td> + <td class="coverFnHi">7677</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#233">hmac_digest_strtoint</a></td> + <td class="coverFnHi">6176</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#355">enc_mode_strtoint</a></td> + <td class="coverFnHi">5625</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#478">zero_free</a></td> + <td class="coverFnHi">5489</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#105">is_valid_encoded_msg_len</a></td> + <td class="coverFnHi">5284</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#171">digest_strtoint</a></td> + <td class="coverFnHi">4540</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#83">constant_runtime_cmp</a></td> + <td class="coverFnHi">1145</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#391">enc_mode_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#200">digest_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#252">enc_type_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#636">dump_ctx_to_buffer</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#267">msg_type_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#300">hmac_digest_inttostr</a></td> + <td class="coverFnHi">664</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#335">is_valid_pt_msg_len</a></td> + <td class="coverFnHi">416</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html new file mode 100644 index 00000000..ad662510 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html @@ -0,0 +1,153 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_util.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_util.c<span style="font-size: 80%;"> (<a href="fko_util.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">213</td> + <td class="headerCovTableEntry">273</td> + <td class="headerCovTableEntryMed">78.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">131</td> + <td class="headerCovTableEntry">246</td> + <td class="headerCovTableEntryLo">53.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_util.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#569">append_msg_to_buf</a></td> + <td class="coverFnHi">14418</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#83">constant_runtime_cmp</a></td> + <td class="coverFnHi">1145</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#200">digest_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#171">digest_strtoint</a></td> + <td class="coverFnHi">4540</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#636">dump_ctx_to_buffer</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#391">enc_mode_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#355">enc_mode_strtoint</a></td> + <td class="coverFnHi">5625</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#252">enc_type_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#300">hmac_digest_inttostr</a></td> + <td class="coverFnHi">664</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#233">hmac_digest_strtoint</a></td> + <td class="coverFnHi">6176</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#606">is_base64</a></td> + <td class="coverFnHi">7677</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#105">is_valid_encoded_msg_len</a></td> + <td class="coverFnHi">5284</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#119">is_valid_ipv4_addr</a></td> + <td class="coverFnHi">8215</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#335">is_valid_pt_msg_len</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#267">msg_type_inttostr</a></td> + <td class="coverFnHi">801</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#419">strtol_wrapper</a></td> + <td class="coverFnHi">20672</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#507">zero_buf</a></td> + <td class="coverFnHi">37967</td> + </tr> + <tr> + <td class="coverFn"><a href="fko_util.c.gcov.html#478">zero_free</a></td> + <td class="coverFnHi">5489</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html new file mode 100644 index 00000000..21b3c8e6 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html @@ -0,0 +1,872 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_util.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_util.c<span style="font-size: 80%;"> (source / <a href="fko_util.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">213</td> + <td class="headerCovTableEntry">273</td> + <td class="headerCovTableEntryMed">78.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">131</td> + <td class="headerCovTableEntry">246</td> + <td class="headerCovTableEntryLo">53.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_util.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Provide a set of common utility functions that fwknop can use. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fko_util.h&quot; +<span class="lineNum"> 33 </span> : : #include &lt;errno.h&gt; +<span class="lineNum"> 34 </span> : : #include &lt;stdarg.h&gt; +<span class="lineNum"> 35 </span> : : +<span class="lineNum"> 36 </span> : : #ifndef WIN32 +<span class="lineNum"> 37 </span> : : /* for inet_aton() IP validation +<span class="lineNum"> 38 </span> : : */ +<span class="lineNum"> 39 </span> : : #include &lt;sys/socket.h&gt; +<span class="lineNum"> 40 </span> : : #include &lt;netinet/in.h&gt; +<span class="lineNum"> 41 </span> : : #include &lt;arpa/inet.h&gt; +<span class="lineNum"> 42 </span> : : #endif +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : /* Check for a FKO error returned by a function an return the error code */ +<span class="lineNum"> 45 </span> : : #define RETURN_ON_FKO_ERROR(e, f) do { if (((e)=(f)) != FKO_SUCCESS) { return (e); } } while(0); +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> : : #define FKO_ENCRYPTION_MODE_BUFSIZE 16 /*!&lt; Maximum size of an encryption mode string */ +<span class="lineNum"> 48 </span> : : #define FKO_ENC_MODE_SUPPORTED 0 /*!&lt; Defined a supported fko encryption mode */ +<span class="lineNum"> 49 </span> : : #define FKO_ENC_MODE_NOT_SUPPORTED !FKO_ENC_MODE_SUPPORTED /*!&lt; Defined an unsupported fko encryption mode */ +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> : : #define NULL_STRING &quot;&lt;NULL&gt;&quot; /*!&lt; String which represents a NULL buffer */ +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> : : /** +<span class="lineNum"> 54 </span> : : * Structure to handle an encryption mode string string and its associated integer value +<span class="lineNum"> 55 </span> : : */ +<span class="lineNum"> 56 </span> : : typedef struct fko_enc_mode_str +<span class="lineNum"> 57 </span> : : { +<span class="lineNum"> 58 </span> : : const char str[FKO_ENCRYPTION_MODE_BUFSIZE]; /*!&lt; String which represents an encryption mode value for the FKO library */ +<span class="lineNum"> 59 </span> : : int val; /*!&lt; Value of the encryption mode according to the FKO library */ +<span class="lineNum"> 60 </span> : : int supported; /*!&lt; SUPPORTED or NOT_SUPPORTED */ +<span class="lineNum"> 61 </span> : : } fko_enc_mode_str_t; +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> : : /** +<span class="lineNum"> 64 </span> : : * Array to associate all of encryption modes with their respective string +<span class="lineNum"> 65 </span> : : */ +<span class="lineNum"> 66 </span> : : static fko_enc_mode_str_t fko_enc_mode_strs[] = +<span class="lineNum"> 67 </span> : : { +<span class="lineNum"> 68 </span> : : { &quot;CBC&quot;, FKO_ENC_MODE_CBC, FKO_ENC_MODE_SUPPORTED }, +<span class="lineNum"> 69 </span> : : { &quot;ECB&quot;, FKO_ENC_MODE_ECB, FKO_ENC_MODE_SUPPORTED }, +<span class="lineNum"> 70 </span> : : { &quot;CFB&quot;, FKO_ENC_MODE_CFB, FKO_ENC_MODE_SUPPORTED }, +<span class="lineNum"> 71 </span> : : { &quot;PCBC&quot;, FKO_ENC_MODE_PCBC, FKO_ENC_MODE_NOT_SUPPORTED }, +<span class="lineNum"> 72 </span> : : { &quot;OFB&quot;, FKO_ENC_MODE_OFB, FKO_ENC_MODE_SUPPORTED }, +<span class="lineNum"> 73 </span> : : { &quot;CTR&quot;, FKO_ENC_MODE_CTR, FKO_ENC_MODE_SUPPORTED }, +<span class="lineNum"> 74 </span> : : { &quot;Asymmetric&quot;, FKO_ENC_MODE_ASYMMETRIC, FKO_ENC_MODE_SUPPORTED }, +<span class="lineNum"> 75 </span> : : { &quot;legacy&quot;, FKO_ENC_MODE_CBC_LEGACY_IV, FKO_ENC_MODE_SUPPORTED } +<span class="lineNum"> 76 </span> : : }; +<span class="lineNum"> 77 </span> : : +<span class="lineNum"> 78 </span> : : /* Compare all bytes with constant run time regardless of +<span class="lineNum"> 79 </span> : : * input characteristics (i.e. don't return early if a difference +<span class="lineNum"> 80 </span> : : * is found before comparing all bytes). This code was adapted +<span class="lineNum"> 81 </span> : : * from YaSSL which is GPLv2 after a timing bug was reported by +<span class="lineNum"> 82 </span> : : * Ryman through github (#85) +<a name="83"><span class="lineNum"> 83 </span> : : */</a> +<span class="lineNum"> 84 </span> : : int +<span class="lineNum"> 85 </span> :<span class="lineCov"> 1145 : constant_runtime_cmp(const char *a, const char *b, int len)</span> +<span class="lineNum"> 86 </span> : : { +<span class="lineNum"> 87 </span> :<span class="lineCov"> 1145 : int good = 0;</span> +<span class="lineNum"> 88 </span> :<span class="lineCov"> 1145 : int bad = 0;</span> +<span class="lineNum"> 89 </span> : : int i; +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> [<span class="branchCov" title="Branch 0 was taken 33604 times"> + </span><span class="branchCov" title="Branch 1 was taken 1145 times"> + </span>]:<span class="lineCov"> 34749 : for(i=0; i &lt; len; i++) {</span> +<span class="lineNum"> 92 </span> [<span class="branchCov" title="Branch 0 was taken 29515 times"> + </span><span class="branchCov" title="Branch 1 was taken 4089 times"> + </span>]:<span class="lineCov"> 33604 : if (a[i] == b[i])</span> +<span class="lineNum"> 93 </span> :<span class="lineCov"> 29515 : good++;</span> +<span class="lineNum"> 94 </span> : : else +<span class="lineNum"> 95 </span> :<span class="lineCov"> 4089 : bad++;</span> +<span class="lineNum"> 96 </span> : : } +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> [<span class="branchCov" title="Branch 0 was taken 415 times"> + </span><span class="branchCov" title="Branch 1 was taken 730 times"> + </span>]:<span class="lineCov"> 1145 : if (good == len)</span> +<span class="lineNum"> 99 </span> : : return 0; +<span class="lineNum"> 100 </span> : : else +<span class="lineNum"> 101 </span> :<span class="lineCov"> 415 : return 0 - bad;</span> +<span class="lineNum"> 102 </span> : : } +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> : : /* Validate encoded message length +<a name="105"><span class="lineNum"> 105 </span> : : */</a> +<span class="lineNum"> 106 </span> : : int +<span class="lineNum"> 107 </span> :<span class="lineCov"> 5284 : is_valid_encoded_msg_len(const int len)</span> +<span class="lineNum"> 108 </span> : : { +<span class="lineNum"> 109 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 110 </span> : : fiu_return_on(&quot;is_valid_encoded_msg_len_val&quot;, 0); +<span class="lineNum"> 111 </span> : : #endif +<span class="lineNum"> 112 </span> [<span class="branchCov" title="Branch 0 was taken 5284 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 5284 : if(len &lt; MIN_SPA_ENCODED_MSG_SIZE || len &gt;= MAX_SPA_ENCODED_MSG_SIZE)</span> +<span class="lineNum"> 113 </span> : : return(0); +<span class="lineNum"> 114 </span> : : +<span class="lineNum"> 115 </span> :<span class="lineCov"> 5284 : return(1);</span> +<span class="lineNum"> 116 </span> : : } +<span class="lineNum"> 117 </span> : : +<span class="lineNum"> 118 </span> : : /* Validate an IPv4 address +<a name="119"><span class="lineNum"> 119 </span> : : */</a> +<span class="lineNum"> 120 </span> : : int +<span class="lineNum"> 121 </span> :<span class="lineCov"> 8215 : is_valid_ipv4_addr(const char * const ip_str)</span> +<span class="lineNum"> 122 </span> : : { +<span class="lineNum"> 123 </span> :<span class="lineCov"> 8215 : const char *ndx = ip_str;</span> +<span class="lineNum"> 124 </span> :<span class="lineCov"> 8215 : int dot_ctr = 0, char_ctr = 0;</span> +<span class="lineNum"> 125 </span> :<span class="lineCov"> 8215 : int res = 1;</span> +<span class="lineNum"> 126 </span> : : #if HAVE_SYS_SOCKET_H +<span class="lineNum"> 127 </span> : : struct in_addr in; +<span class="lineNum"> 128 </span> : : #endif +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> [<span class="branchCov" title="Branch 0 was taken 8215 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 8215 : if(ip_str == NULL)</span> +<span class="lineNum"> 131 </span> : : return 0; +<span class="lineNum"> 132 </span> : : +<span class="lineNum"> 133 </span> [<span class="branchCov" title="Branch 0 was taken 47902 times"> + </span><span class="branchCov" title="Branch 1 was taken 4997 times"> + </span>]:<span class="lineCov"> 52899 : while(*ndx != '\0')</span> +<span class="lineNum"> 134 </span> : : { +<span class="lineNum"> 135 </span> :<span class="lineCov"> 47902 : char_ctr++;</span> +<span class="lineNum"> 136 </span> [<span class="branchCov" title="Branch 0 was taken 47902 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 47902 : if(char_ctr &gt;= MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 137 </span> : : { +<span class="lineNum"> 138 </span> : : res = 0; +<span class="lineNum"> 139 </span> : : break; +<span class="lineNum"> 140 </span> : : } +<span class="lineNum"> 141 </span> [<span class="branchCov" title="Branch 0 was taken 14402 times"> + </span><span class="branchCov" title="Branch 1 was taken 33500 times"> + </span>]:<span class="lineCov"> 47902 : if(*ndx == '.')</span> +<span class="lineNum"> 142 </span> :<span class="lineCov"> 14402 : dot_ctr++;</span> +<span class="lineNum"> 143 </span> [<span class="branchCov" title="Branch 1 was taken 30282 times"> + </span><span class="branchCov" title="Branch 2 was taken 3218 times"> + </span>]:<span class="lineCov"> 33500 : else if(isdigit(*ndx) == 0)</span> +<span class="lineNum"> 144 </span> : : { +<span class="lineNum"> 145 </span> : : res = 0; +<span class="lineNum"> 146 </span> : : break; +<span class="lineNum"> 147 </span> : : } +<span class="lineNum"> 148 </span> :<span class="lineCov"> 44684 : ndx++;</span> +<span class="lineNum"> 149 </span> : : } +<span class="lineNum"> 150 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8215 times"> + </span>]:<span class="lineCov"> 8215 : if(char_ctr &gt;= MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : res = 0;</span> +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> [<span class="branchCov" title="Branch 0 was taken 667 times"> + </span><span class="branchCov" title="Branch 1 was taken 7548 times"> + </span>]:<span class="lineCov"> 8215 : if ((res == 1) &amp;&amp; (char_ctr &lt; MIN_IPV4_STR_LEN))</span> +<span class="lineNum"> 154 </span> :<span class="lineCov"> 667 : res = 0;</span> +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> [<span class="branchCov" title="Branch 0 was taken 329 times"> + </span><span class="branchCov" title="Branch 1 was taken 7886 times"> + </span>]:<span class="lineCov"> 8215 : if((res == 1) &amp;&amp; dot_ctr != 3)</span> +<span class="lineNum"> 157 </span> :<span class="lineCov"> 329 : res = 0;</span> +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> : : #if HAVE_SYS_SOCKET_H +<span class="lineNum"> 160 </span> : : /* Stronger IP validation now that we have a candidate that looks +<span class="lineNum"> 161 </span> : : * close enough +<span class="lineNum"> 162 </span> : : */ +<span class="lineNum"> 163 </span>[<span class="branchCov" title="Branch 0 was taken 4001 times"> + </span><span class="branchCov" title="Branch 1 was taken 4214 times"> + </span>][<span class="branchCov" title="Branch 3 was taken 4 times"> + </span><span class="branchCov" title="Branch 4 was taken 3997 times"> + </span>]:<span class="lineCov"> 8215 : if((res == 1) &amp;&amp; (inet_aton(ip_str, &amp;in) == 0))</span> +<span class="lineNum"> 164 </span> :<span class="lineCov"> 4 : res = 0;</span> +<span class="lineNum"> 165 </span> : : #endif +<span class="lineNum"> 166 </span> : : +<span class="lineNum"> 167 </span> :<span class="lineCov"> 8215 : return(res);</span> +<span class="lineNum"> 168 </span> : : } +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> : : /* Convert a digest_type string to its integer value. +<a name="171"><span class="lineNum"> 171 </span> : : */</a> +<span class="lineNum"> 172 </span> : : short +<span class="lineNum"> 173 </span> :<span class="lineCov"> 4540 : digest_strtoint(const char *dt_str)</span> +<span class="lineNum"> 174 </span> : : { +<span class="lineNum"> 175 </span> [<span class="branchCov" title="Branch 0 was taken 4540 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 4540 : if(strcasecmp(dt_str, &quot;md5&quot;) == 0)</span> +<span class="lineNum"> 176 </span> : : return(FKO_DIGEST_MD5); +<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 4366 times"> + </span><span class="branchCov" title="Branch 1 was taken 174 times"> + </span>]:<span class="lineCov"> 4540 : else if(strcasecmp(dt_str, &quot;sha1&quot;) == 0)</span> +<span class="lineNum"> 178 </span> : : return(FKO_DIGEST_SHA1); +<span class="lineNum"> 179 </span> [<span class="branchCov" title="Branch 0 was taken 2261 times"> + </span><span class="branchCov" title="Branch 1 was taken 2105 times"> + </span>]:<span class="lineCov"> 4366 : else if(strcasecmp(dt_str, &quot;sha256&quot;) == 0)</span> +<span class="lineNum"> 180 </span> : : return(FKO_DIGEST_SHA256); +<span class="lineNum"> 181 </span> [<span class="branchCov" title="Branch 0 was taken 2261 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2261 : else if(strcasecmp(dt_str, &quot;sha384&quot;) == 0)</span> +<span class="lineNum"> 182 </span> : : return(FKO_DIGEST_SHA384); +<span class="lineNum"> 183 </span> [<span class="branchCov" title="Branch 0 was taken 2261 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2261 : else if(strcasecmp(dt_str, &quot;sha512&quot;) == 0)</span> +<span class="lineNum"> 184 </span> : : return(FKO_DIGEST_SHA512); +<span class="lineNum"> 185 </span> : : else +<span class="lineNum"> 186 </span> :<span class="lineCov"> 2261 : return(-1);</span> +<span class="lineNum"> 187 </span> : : } +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> : : /** +<span class="lineNum"> 190 </span> : : * \brief Return a digest string according to a digest integer value +<span class="lineNum"> 191 </span> : : * +<span class="lineNum"> 192 </span> : : * This function checks the digest integer is valid, and write the digest +<span class="lineNum"> 193 </span> : : * string associated. +<span class="lineNum"> 194 </span> : : * +<span class="lineNum"> 195 </span> : : * \param digest Digest inetger value (FKO_DIGEST_MD5, FKO_DIGEST_SHA1 ...) +<span class="lineNum"> 196 </span> : : * \param digest_str Buffer to write the digest string +<span class="lineNum"> 197 </span> : : * \param digest_size size of the digest string buffer +<span class="lineNum"> 198 </span> : : * +<span class="lineNum"> 199 </span> : : * \return -1 if the digest integer value is not supported, 0 otherwise +<a name="200"><span class="lineNum"> 200 </span> : : */</a> +<span class="lineNum"> 201 </span> : : short +<span class="lineNum"> 202 </span> :<span class="lineCov"> 801 : digest_inttostr(int digest, char* digest_str, size_t digest_size)</span> +<span class="lineNum"> 203 </span> : : { +<span class="lineNum"> 204 </span> :<span class="lineCov"> 801 : short digest_not_valid = 0;</span> +<span class="lineNum"> 205 </span> : : +<span class="lineNum"> 206 </span> : : memset(digest_str, 0, digest_size); +<span class="lineNum"> 207 </span> : : +<span class="lineNum"> 208 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 105 times"> + </span><span class="branchCov" title="Branch 2 was taken 696 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 801 : switch (digest)</span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] +<span class="lineNum"> 209 </span> : : { +<span class="lineNum"> 210 </span> : : case FKO_DIGEST_MD5: +<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;MD5&quot;, digest_size);</span> +<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 213 </span> : : case FKO_DIGEST_SHA1: +<span class="lineNum"> 214 </span> :<span class="lineCov"> 105 : strlcpy(digest_str, &quot;SHA1&quot;, digest_size);</span> +<span class="lineNum"> 215 </span> :<span class="lineCov"> 105 : break;</span> +<span class="lineNum"> 216 </span> : : case FKO_DIGEST_SHA256: +<span class="lineNum"> 217 </span> :<span class="lineCov"> 696 : strlcpy(digest_str, &quot;SHA256&quot;, digest_size);</span> +<span class="lineNum"> 218 </span> :<span class="lineCov"> 696 : break;</span> +<span class="lineNum"> 219 </span> : : case FKO_DIGEST_SHA384: +<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA384&quot;, digest_size);</span> +<span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 222 </span> : : case FKO_DIGEST_SHA512: +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA512&quot;, digest_size);</span> +<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 225 </span> : : default: +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;Unknown&quot;, digest_size);</span> +<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : digest_not_valid = -1;</span> +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 229 </span> : : } +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> :<span class="lineCov"> 801 : return digest_not_valid;</span> +<span class="lineNum"> 232 </span> : : } +<a name="233"><span class="lineNum"> 233 </span> : : </a> +<span class="lineNum"> 234 </span> : : short +<span class="lineNum"> 235 </span> :<span class="lineCov"> 6176 : hmac_digest_strtoint(const char *dt_str)</span> +<span class="lineNum"> 236 </span> : : { +<span class="lineNum"> 237 </span> [<span class="branchCov" title="Branch 0 was taken 6176 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 6176 : if(strcasecmp(dt_str, &quot;md5&quot;) == 0)</span> +<span class="lineNum"> 238 </span> : : return(FKO_HMAC_MD5); +<span class="lineNum"> 239 </span> [<span class="branchCov" title="Branch 0 was taken 5462 times"> + </span><span class="branchCov" title="Branch 1 was taken 714 times"> + </span>]:<span class="lineCov"> 6176 : else if(strcasecmp(dt_str, &quot;sha1&quot;) == 0)</span> +<span class="lineNum"> 240 </span> : : return(FKO_HMAC_SHA1); +<span class="lineNum"> 241 </span> [<span class="branchCov" title="Branch 0 was taken 2619 times"> + </span><span class="branchCov" title="Branch 1 was taken 2843 times"> + </span>]:<span class="lineCov"> 5462 : else if(strcasecmp(dt_str, &quot;sha256&quot;) == 0)</span> +<span class="lineNum"> 242 </span> : : return(FKO_HMAC_SHA256); +<span class="lineNum"> 243 </span> [<span class="branchCov" title="Branch 0 was taken 2619 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2619 : else if(strcasecmp(dt_str, &quot;sha384&quot;) == 0)</span> +<span class="lineNum"> 244 </span> : : return(FKO_HMAC_SHA384); +<span class="lineNum"> 245 </span> [<span class="branchCov" title="Branch 0 was taken 2606 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>]:<span class="lineCov"> 2619 : else if(strcasecmp(dt_str, &quot;sha512&quot;) == 0)</span> +<span class="lineNum"> 246 </span> : : return(FKO_HMAC_SHA512); +<span class="lineNum"> 247 </span> : : else +<span class="lineNum"> 248 </span> :<span class="lineCov"> 2606 : return(-1);</span> +<span class="lineNum"> 249 </span> : : } +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> : : /* Return encryption type string representation +<a name="252"><span class="lineNum"> 252 </span> : : */</a> +<span class="lineNum"> 253 </span> : : const char * +<span class="lineNum"> 254 </span> :<span class="lineCov"> 801 : enc_type_inttostr(const int type)</span> +<span class="lineNum"> 255 </span> : : { +<span class="lineNum"> 256 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(type == FKO_ENC_MODE_UNKNOWN)</span> +<span class="lineNum"> 257 </span> : : return(&quot;Unknown encryption type&quot;); +<span class="lineNum"> 258 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : else if(type == FKO_ENCRYPTION_RIJNDAEL)</span> +<span class="lineNum"> 259 </span> : : return(&quot;Rijndael&quot;); +<span class="lineNum"> 260 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_ENCRYPTION_GPG)</span> +<span class="lineNum"> 261 </span> : : return(&quot;GPG&quot;); +<span class="lineNum"> 262 </span> : : +<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown encryption type&quot;);</span> +<span class="lineNum"> 264 </span> : : } +<span class="lineNum"> 265 </span> : : +<span class="lineNum"> 266 </span> : : /* Return message type string representation +<a name="267"><span class="lineNum"> 267 </span> : : */</a> +<span class="lineNum"> 268 </span> : : const char * +<span class="lineNum"> 269 </span> :<span class="lineCov"> 801 : msg_type_inttostr(const int type)</span> +<span class="lineNum"> 270 </span> : : { +<span class="lineNum"> 271 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(type == FKO_COMMAND_MSG)</span> +<span class="lineNum"> 272 </span> : : return(&quot;Command msg&quot;); +<span class="lineNum"> 273 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 799 times"> + </span>]:<span class="lineCov"> 801 : else if(type == FKO_ACCESS_MSG)</span> +<span class="lineNum"> 274 </span> : : return(&quot;Access msg&quot;); +<span class="lineNum"> 275 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : else if(type == FKO_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 276 </span> : : return(&quot;NAT access msg&quot;); +<span class="lineNum"> 277 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : else if(type == FKO_CLIENT_TIMEOUT_ACCESS_MSG)</span> +<span class="lineNum"> 278 </span> : : return(&quot;Client timeout access msg&quot;); +<span class="lineNum"> 279 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 280 </span> : : return(&quot;Client timeout NAT access msg&quot;); +<span class="lineNum"> 281 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 282 </span> : : return(&quot;Local NAT access msg&quot;); +<span class="lineNum"> 283 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 284 </span> : : return(&quot;Client timeout local NAT access msg&quot;); +<span class="lineNum"> 285 </span> : : +<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown message type&quot;);</span> +<span class="lineNum"> 287 </span> : : } +<span class="lineNum"> 288 </span> : : +<span class="lineNum"> 289 </span> : : /** +<span class="lineNum"> 290 </span> : : * \brief Return a hmac digest string according to a hmac digest integer value +<span class="lineNum"> 291 </span> : : * +<span class="lineNum"> 292 </span> : : * This function checks if the digest integer is valid, and write the digest +<span class="lineNum"> 293 </span> : : * string associated. +<span class="lineNum"> 294 </span> : : * +<span class="lineNum"> 295 </span> : : * \param digest Digest inetger value (FKO_HMAC_MD5, FKO_HMAC_SHA1 ...) +<span class="lineNum"> 296 </span> : : * \param digest_str Buffer to write the digest string +<span class="lineNum"> 297 </span> : : * \param digest_size size of the digest string buffer +<span class="lineNum"> 298 </span> : : * +<span class="lineNum"> 299 </span> : : * \return -1 if the digest integer value is not supported, 0 otherwise +<a name="300"><span class="lineNum"> 300 </span> : : */</a> +<span class="lineNum"> 301 </span> : : short +<span class="lineNum"> 302 </span> :<span class="lineCov"> 664 : hmac_digest_inttostr(int digest, char* digest_str, size_t digest_size)</span> +<span class="lineNum"> 303 </span> : : { +<span class="lineNum"> 304 </span> :<span class="lineCov"> 664 : short digest_not_valid = 0;</span> +<span class="lineNum"> 305 </span> : : +<span class="lineNum"> 306 </span> : : memset(digest_str, 0, digest_size); +<span class="lineNum"> 307 </span> : : +<span class="lineNum"> 308 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 136 times"> + </span><span class="branchCov" title="Branch 2 was taken 528 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 664 : switch (digest)</span> +<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] +<span class="lineNum"> 309 </span> : : { +<span class="lineNum"> 310 </span> : : case FKO_HMAC_MD5: +<span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;MD5&quot;, digest_size);</span> +<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 313 </span> : : case FKO_HMAC_SHA1: +<span class="lineNum"> 314 </span> :<span class="lineCov"> 136 : strlcpy(digest_str, &quot;SHA1&quot;, digest_size);</span> +<span class="lineNum"> 315 </span> :<span class="lineCov"> 136 : break;</span> +<span class="lineNum"> 316 </span> : : case FKO_HMAC_SHA256: +<span class="lineNum"> 317 </span> :<span class="lineCov"> 528 : strlcpy(digest_str, &quot;SHA256&quot;, digest_size);</span> +<span class="lineNum"> 318 </span> :<span class="lineCov"> 528 : break;</span> +<span class="lineNum"> 319 </span> : : case FKO_HMAC_SHA384: +<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA384&quot;, digest_size);</span> +<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 322 </span> : : case FKO_HMAC_SHA512: +<span class="lineNum"> 323 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA512&quot;, digest_size);</span> +<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 325 </span> : : default: +<span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;Unknown&quot;, digest_size);</span> +<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : digest_not_valid = -1;</span> +<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 329 </span> : : } +<span class="lineNum"> 330 </span> : : +<span class="lineNum"> 331 </span> :<span class="lineCov"> 664 : return digest_not_valid;</span> +<span class="lineNum"> 332 </span> : : } +<span class="lineNum"> 333 </span> : : +<span class="lineNum"> 334 </span> : : /* Validate plaintext input size +<a name="335"><span class="lineNum"> 335 </span> : : */</a> +<span class="lineNum"> 336 </span> : : int +<span class="lineNum"> 337 </span> :<span class="lineCov"> 416 : is_valid_pt_msg_len(const int len)</span> +<span class="lineNum"> 338 </span> : : { +<span class="lineNum"> 339 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 340 </span> : : fiu_return_on(&quot;is_valid_pt_msg_len_val&quot;, 0); +<span class="lineNum"> 341 </span> : : #endif +<span class="lineNum"> 342 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(len &lt; MIN_SPA_PLAINTEXT_MSG_SIZE || len &gt;= MAX_SPA_PLAINTEXT_MSG_SIZE)</span> +<span class="lineNum"> 343 </span> : : return(0); +<span class="lineNum"> 344 </span> : : +<span class="lineNum"> 345 </span> :<span class="lineCov"> 416 : return(1);</span> +<span class="lineNum"> 346 </span> : : } +<span class="lineNum"> 347 </span> : : +<span class="lineNum"> 348 </span> : : /** +<span class="lineNum"> 349 </span> : : * @brief Convert an encryption mode string to its integer value. +<span class="lineNum"> 350 </span> : : * +<span class="lineNum"> 351 </span> : : * @param enc_mode_str Encryption mode string (CBC,ECB...) +<span class="lineNum"> 352 </span> : : * +<span class="lineNum"> 353 </span> : : * @return -1 if the encryption mode string is not supported, +<span class="lineNum"> 354 </span> : : * otherwise the encryption mode value +<a name="355"><span class="lineNum"> 355 </span> : : */</a> +<span class="lineNum"> 356 </span> : : int +<span class="lineNum"> 357 </span> :<span class="lineCov"> 5625 : enc_mode_strtoint(const char *enc_mode_str)</span> +<span class="lineNum"> 358 </span> : : { +<span class="lineNum"> 359 </span> : : unsigned char ndx_enc_mode; +<span class="lineNum"> 360 </span> :<span class="lineCov"> 5625 : int enc_mode_int = -1; /* Encryption mode integer value */</span> +<span class="lineNum"> 361 </span> : : fko_enc_mode_str_t *enc_mode_str_pt; +<span class="lineNum"> 362 </span> : : +<span class="lineNum"> 363 </span> : : /* Look into the fko_enc_mode_strs array to find out the right encryption mode */ +<span class="lineNum"> 364 </span> [<span class="branchCov" title="Branch 0 was taken 31879 times"> + </span><span class="branchCov" title="Branch 1 was taken 2818 times"> + </span>]:<span class="lineCov"> 34697 : for (ndx_enc_mode = 0 ; ndx_enc_mode &lt; ARRAY_SIZE(fko_enc_mode_strs) ; ndx_enc_mode++)</span> +<span class="lineNum"> 365 </span> : : { +<span class="lineNum"> 366 </span> :<span class="lineCov"> 31879 : enc_mode_str_pt = &amp;(fko_enc_mode_strs[ndx_enc_mode]);</span> +<span class="lineNum"> 367 </span> : : +<span class="lineNum"> 368 </span> : : /* If the encryption mode matches, grab it */ +<span class="lineNum"> 369 </span> [<span class="branchCov" title="Branch 0 was taken 2825 times"> + </span><span class="branchCov" title="Branch 1 was taken 29054 times"> + </span>]:<span class="lineCov"> 31879 : if ( (strcasecmp(enc_mode_str, enc_mode_str_pt-&gt;str) == 0)</span> +<span class="lineNum"> 370 </span> [<span class="branchCov" title="Branch 0 was taken 2807 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 2825 : &amp;&amp; (enc_mode_str_pt-&gt;supported == FKO_ENC_MODE_SUPPORTED) )</span> +<span class="lineNum"> 371 </span> : : { +<span class="lineNum"> 372 </span> :<span class="lineCov"> 2807 : enc_mode_int = enc_mode_str_pt-&gt;val;</span> +<span class="lineNum"> 373 </span> :<span class="lineCov"> 2807 : break;</span> +<span class="lineNum"> 374 </span> : : } +<span class="lineNum"> 375 </span> : : } +<span class="lineNum"> 376 </span> : : +<span class="lineNum"> 377 </span> :<span class="lineCov"> 5625 : return enc_mode_int;</span> +<span class="lineNum"> 378 </span> : : } +<span class="lineNum"> 379 </span> : : +<span class="lineNum"> 380 </span> : : /** +<span class="lineNum"> 381 </span> : : * @brief Return an encryption mode string according to an enc_mode integer value +<span class="lineNum"> 382 </span> : : * +<span class="lineNum"> 383 </span> : : * This function checks if the encryption mode integer is valid, and write the +<span class="lineNum"> 384 </span> : : * encryption mode string associated. +<span class="lineNum"> 385 </span> : : * +<span class="lineNum"> 386 </span> : : * @param enc_mode Encryption mode integer value (FKO_ENC_MODE_CBC, FKO_ENC_MODE_ECB ...) +<span class="lineNum"> 387 </span> : : * @param enc_mode_str Buffer to write the encryption mode string to +<span class="lineNum"> 388 </span> : : * @param enc_mode_size Size of the encryption mode string buffer +<span class="lineNum"> 389 </span> : : * +<span class="lineNum"> 390 </span> : : * @return -1 if the encryption mode integer value is not supported, 0 otherwise +<a name="391"><span class="lineNum"> 391 </span> : : */</a> +<span class="lineNum"> 392 </span> : : short +<span class="lineNum"> 393 </span> :<span class="lineCov"> 801 : enc_mode_inttostr(int enc_mode, char* enc_mode_str, size_t enc_mode_size)</span> +<span class="lineNum"> 394 </span> : : { +<span class="lineNum"> 395 </span> :<span class="lineCov"> 801 : short enc_mode_error = -1;</span> +<span class="lineNum"> 396 </span> : : unsigned char ndx_enc_mode; +<span class="lineNum"> 397 </span> : : fko_enc_mode_str_t *enc_mode_str_pt; +<span class="lineNum"> 398 </span> : : +<span class="lineNum"> 399 </span> : : /* Initialize the protocol string */ +<span class="lineNum"> 400 </span> : : memset(enc_mode_str, 0, enc_mode_size); +<span class="lineNum"> 401 </span> : : +<span class="lineNum"> 402 </span> : : /* Look into the fko_enc_mode_strs array to find out the right protocol */ +<span class="lineNum"> 403 </span> [<span class="branchCov" title="Branch 0 was taken 887 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 887 : for (ndx_enc_mode = 0 ; ndx_enc_mode &lt; ARRAY_SIZE(fko_enc_mode_strs) ; ndx_enc_mode++)</span> +<span class="lineNum"> 404 </span> : : { +<span class="lineNum"> 405 </span> :<span class="lineCov"> 887 : enc_mode_str_pt = &amp;(fko_enc_mode_strs[ndx_enc_mode]);</span> +<span class="lineNum"> 406 </span> : : +<span class="lineNum"> 407 </span> : : /* If the encryption mode matches, grab it */ +<span class="lineNum"> 408 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchCov" title="Branch 1 was taken 86 times"> + </span>]:<span class="lineCov"> 887 : if ( (enc_mode_str_pt-&gt;val == enc_mode)</span> +<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : &amp;&amp; (enc_mode_str_pt-&gt;supported == FKO_ENC_MODE_SUPPORTED) )</span> +<span class="lineNum"> 410 </span> : : { +<span class="lineNum"> 411 </span> :<span class="lineCov"> 801 : strlcpy(enc_mode_str, enc_mode_str_pt-&gt;str, enc_mode_size);</span> +<span class="lineNum"> 412 </span> :<span class="lineCov"> 801 : enc_mode_error = 0;</span> +<span class="lineNum"> 413 </span> :<span class="lineCov"> 801 : break;</span> +<span class="lineNum"> 414 </span> : : } +<span class="lineNum"> 415 </span> : : } +<span class="lineNum"> 416 </span> : : +<span class="lineNum"> 417 </span> :<span class="lineCov"> 801 : return enc_mode_error;</span> +<span class="lineNum"> 418 </span> : : } +<a name="419"><span class="lineNum"> 419 </span> : : </a> +<span class="lineNum"> 420 </span> : : int +<span class="lineNum"> 421 </span> :<span class="lineCov"> 20672 : strtol_wrapper(const char * const str, const int min,</span> +<span class="lineNum"> 422 </span> : : const int max, const int exit_upon_err, int *err) +<span class="lineNum"> 423 </span> : : { +<span class="lineNum"> 424 </span> : : int val; +<span class="lineNum"> 425 </span> : : +<span class="lineNum"> 426 </span> :<span class="lineCov"> 20672 : errno = 0;</span> +<span class="lineNum"> 427 </span> :<span class="lineCov"> 20672 : *err = FKO_SUCCESS;</span> +<span class="lineNum"> 428 </span> : : +<span class="lineNum"> 429 </span> :<span class="lineCov"> 20672 : val = strtol(str, (char **) NULL, 10);</span> +<span class="lineNum"> 430 </span> : : +<span class="lineNum"> 431 </span>[<span class="branchCov" title="Branch 0 was taken 20501 times"> + </span><span class="branchCov" title="Branch 1 was taken 171 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 20501 times"> + </span>]:<span class="lineCov"> 20672 : if ((errno == ERANGE || (errno != 0 &amp;&amp; val == 0)))</span> +<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] +<span class="lineNum"> 432 </span> : : { +<span class="lineNum"> 433 </span> :<span class="lineCov"> 171 : *err = errno;</span> +<span class="lineNum"> 434 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 171 times"> + </span>]:<span class="lineCov"> 171 : if(exit_upon_err == EXIT_UPON_ERR)</span> +<span class="lineNum"> 435 </span> : : { +<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : perror(&quot;strtol&quot;);</span> +<span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] Value %d out of range [(%d)-(%d)]\n&quot;,</span> +<span class="lineNum"> 438 </span> : : val, min, max); +<span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 440 </span> : : } +<span class="lineNum"> 441 </span> : : } +<span class="lineNum"> 442 </span> : : +<span class="lineNum"> 443 </span> [<span class="branchCov" title="Branch 0 was taken 222 times"> + </span><span class="branchCov" title="Branch 1 was taken 20450 times"> + </span>]:<span class="lineCov"> 20672 : if(val &lt; min)</span> +<span class="lineNum"> 444 </span> : : { +<span class="lineNum"> 445 </span> :<span class="lineCov"> 222 : *err = FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN;</span> +<span class="lineNum"> 446 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 222 times"> + </span>]:<span class="lineCov"> 222 : if(exit_upon_err == EXIT_UPON_ERR)</span> +<span class="lineNum"> 447 </span> : : { +<span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] Value %d out of range [(%d)-(%d)]\n&quot;,</span> +<span class="lineNum"> 449 </span> : : val, min, max); +<span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 451 </span> : : } +<span class="lineNum"> 452 </span> : : } +<span class="lineNum"> 453 </span> : : +<span class="lineNum"> 454 </span> : : /* allow max == -1 to be an exception where we don't care about the +<span class="lineNum"> 455 </span> : : * maximum - note that the ERANGE check is still in place above +<span class="lineNum"> 456 </span> : : */ +<span class="lineNum"> 457 </span> [<span class="branchCov" title="Branch 0 was taken 2008 times"> + </span><span class="branchCov" title="Branch 1 was taken 18664 times"> + </span>]:<span class="lineCov"> 20672 : if((max &gt;= 0) &amp;&amp; (val &gt; max))</span> +<span class="lineNum"> 458 </span> : : { +<span class="lineNum"> 459 </span> :<span class="lineCov"> 2008 : *err = FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX;</span> +<span class="lineNum"> 460 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2008 times"> + </span>]:<span class="lineCov"> 2008 : if(exit_upon_err == EXIT_UPON_ERR)</span> +<span class="lineNum"> 461 </span> : : { +<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] Value %d out of range [(%d)-(%d)]\n&quot;,</span> +<span class="lineNum"> 463 </span> : : val, min, max); +<span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 465 </span> : : } +<span class="lineNum"> 466 </span> : : } +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 469 </span> : : fiu_return_on(&quot;strtol_wrapper_lt_min&quot;, +<span class="lineNum"> 470 </span> : : FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN); +<span class="lineNum"> 471 </span> : : fiu_return_on(&quot;strtol_wrapper_gt_max&quot;, +<span class="lineNum"> 472 </span> : : FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX); +<span class="lineNum"> 473 </span> : : #endif +<span class="lineNum"> 474 </span> : : +<span class="lineNum"> 475 </span> :<span class="lineCov"> 20672 : return val;</span> +<span class="lineNum"> 476 </span> : : } +<span class="lineNum"> 477 </span> : : +<a name="478"><span class="lineNum"> 478 </span> : : /* zero out a buffer before free()</a> +<span class="lineNum"> 479 </span> : : */ +<span class="lineNum"> 480 </span> :<span class="lineCov"> 5489 : int zero_free(char *buf, int len)</span> +<span class="lineNum"> 481 </span> : : { +<span class="lineNum"> 482 </span> :<span class="lineCov"> 5489 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 483 </span> : : +<span class="lineNum"> 484 </span> [<span class="branchCov" title="Branch 0 was taken 5489 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 5489 : if(buf == NULL)</span> +<span class="lineNum"> 485 </span> : : return res; +<span class="lineNum"> 486 </span> : : +<span class="lineNum"> 487 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5489 times"> + </span>]:<span class="lineCov"> 5489 : if(len == 0)</span> +<span class="lineNum"> 488 </span> : : { +<span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : free(buf); /* always free() if buf != NULL */</span> +<span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 491 </span> : : } +<span class="lineNum"> 492 </span> : : +<span class="lineNum"> 493 </span> :<span class="lineCov"> 5489 : res = zero_buf(buf, len);</span> +<span class="lineNum"> 494 </span> : : +<span class="lineNum"> 495 </span> :<span class="lineCov"> 5489 : free(buf);</span> +<span class="lineNum"> 496 </span> : : +<span class="lineNum"> 497 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 498 </span> : : fiu_return_on(&quot;zero_free_err&quot;, FKO_ERROR_ZERO_OUT_DATA); +<span class="lineNum"> 499 </span> : : #endif +<span class="lineNum"> 500 </span> : : +<span class="lineNum"> 501 </span> :<span class="lineCov"> 5489 : return res;</span> +<span class="lineNum"> 502 </span> : : } +<span class="lineNum"> 503 </span> : : +<span class="lineNum"> 504 </span> : : /* zero out sensitive information in a way that isn't optimized out by the compiler +<span class="lineNum"> 505 </span> : : * since we force a comparision and return an error if there is a problem (though +<span class="lineNum"> 506 </span> : : * the caller should do something with this information too). +<a name="507"><span class="lineNum"> 507 </span> : : */</a> +<span class="lineNum"> 508 </span> : : int +<span class="lineNum"> 509 </span> :<span class="lineCov"> 37967 : zero_buf(char *buf, int len)</span> +<span class="lineNum"> 510 </span> : : { +<span class="lineNum"> 511 </span> :<span class="lineCov"> 37967 : int i, res = FKO_SUCCESS;</span> +<span class="lineNum"> 512 </span> : : +<span class="lineNum"> 513 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 514 </span> : : fiu_return_on(&quot;zero_buf_err&quot;, FKO_ERROR_ZERO_OUT_DATA); +<span class="lineNum"> 515 </span> : : #endif +<span class="lineNum"> 516 </span> : : +<span class="lineNum"> 517 </span> [<span class="branchCov" title="Branch 0 was taken 37967 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 37967 : if(buf == NULL || len == 0)</span> +<span class="lineNum"> 518 </span> : : return res; +<span class="lineNum"> 519 </span> : : +<span class="lineNum"> 520 </span> [<span class="branchCov" title="Branch 0 was taken 37967 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 37967 : if(len &lt; 0 || len &gt; MAX_SPA_ENCODED_MSG_SIZE)</span> +<span class="lineNum"> 521 </span> : : return FKO_ERROR_ZERO_OUT_DATA; +<span class="lineNum"> 522 </span> : : +<span class="lineNum"> 523 </span> [<span class="branchCov" title="Branch 0 was taken 2560399 times"> + </span><span class="branchCov" title="Branch 1 was taken 37967 times"> + </span>]:<span class="lineCov"> 2598366 : for(i=0; i &lt; len; i++)</span> +<span class="lineNum"> 524 </span> :<span class="lineCov"> 2560399 : buf[i] = 0x0;</span> +<span class="lineNum"> 525 </span> : : +<span class="lineNum"> 526 </span> [<span class="branchCov" title="Branch 0 was taken 2560399 times"> + </span><span class="branchCov" title="Branch 1 was taken 37967 times"> + </span>]:<span class="lineCov"> 2598366 : for(i=0; i &lt; len; i++)</span> +<span class="lineNum"> 527 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2560399 times"> + </span>]:<span class="lineCov"> 2560399 : if(buf[i] != 0x0)</span> +<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : res = FKO_ERROR_ZERO_OUT_DATA;</span> +<span class="lineNum"> 529 </span> : : +<span class="lineNum"> 530 </span> :<span class="lineCov"> 37967 : return res;</span> +<span class="lineNum"> 531 </span> : : } +<span class="lineNum"> 532 </span> : : +<span class="lineNum"> 533 </span> : : #if defined(WIN32) || !defined(HAVE_STRNDUP) +<span class="lineNum"> 534 </span> : : /* Windows does not have strndup, so we well implement it here. +<span class="lineNum"> 535 </span> : : * This was the Public Domain C Library (PDCLib). +<span class="lineNum"> 536 </span> : : */ +<span class="lineNum"> 537 </span> : : char +<span class="lineNum"> 538 </span> : : *strndup( const char * s, size_t len ) +<span class="lineNum"> 539 </span> : : { +<span class="lineNum"> 540 </span> : : char* ns = NULL; +<span class="lineNum"> 541 </span> : : if(s) { +<span class="lineNum"> 542 </span> : : ns = calloc(1, len + 1); +<span class="lineNum"> 543 </span> : : if(ns) { +<span class="lineNum"> 544 </span> : : ns[len] = 0; +<span class="lineNum"> 545 </span> : : // strncpy to be pedantic about modification in multithreaded +<span class="lineNum"> 546 </span> : : // applications +<span class="lineNum"> 547 </span> : : return strncpy(ns, s, len); +<span class="lineNum"> 548 </span> : : } +<span class="lineNum"> 549 </span> : : } +<span class="lineNum"> 550 </span> : : return ns; +<span class="lineNum"> 551 </span> : : } +<span class="lineNum"> 552 </span> : : #endif +<span class="lineNum"> 553 </span> : : +<span class="lineNum"> 554 </span> : : /** +<span class="lineNum"> 555 </span> : : * @brief Add a printf style message to a buffer +<span class="lineNum"> 556 </span> : : * +<span class="lineNum"> 557 </span> : : * This function allows to append a printf style message to a buffer +<span class="lineNum"> 558 </span> : : * and prevents buffer overflow by taking care of the size the buffer. +<span class="lineNum"> 559 </span> : : * It returns the number of bytes really written to the buffer. +<span class="lineNum"> 560 </span> : : * Thus if an error is encoutered during the process the number of bytes +<span class="lineNum"> 561 </span> : : * written is set to 0. This way the user knows exactly how many bytes +<span class="lineNum"> 562 </span> : : * can be appended afterwards. +<span class="lineNum"> 563 </span> : : * +<span class="lineNum"> 564 </span> : : * @param buf Buffer to write the formated message to +<span class="lineNum"> 565 </span> : : * @param buf_size Maximum number of bytes to write to the buffer +<span class="lineNum"> 566 </span> : : * @param msg Message to format and to append to the buffer +<span class="lineNum"> 567 </span> : : * +<span class="lineNum"> 568 </span> : : * @return the number of bytes written to the buffer +<a name="569"><span class="lineNum"> 569 </span> : : */</a> +<span class="lineNum"> 570 </span> : : static int +<span class="lineNum"> 571 </span> :<span class="lineCov"> 14418 : append_msg_to_buf(char *buf, size_t buf_size, const char* msg, ...)</span> +<span class="lineNum"> 572 </span> : : { +<span class="lineNum"> 573 </span> :<span class="lineCov"> 14418 : int bytes_written = 0; /* Number of bytes written to buf */</span> +<span class="lineNum"> 574 </span> : : va_list ap; +<span class="lineNum"> 575 </span> : : +<span class="lineNum"> 576 </span> : : /* Check if the buffer is valid */ +<span class="lineNum"> 577 </span> [<span class="branchCov" title="Branch 0 was taken 14418 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 14418 : if (buf_size &gt; 0)</span> +<span class="lineNum"> 578 </span> : : { +<span class="lineNum"> 579 </span> :<span class="lineCov"> 14418 : va_start(ap, msg);</span> +<span class="lineNum"> 580 </span> : : +<span class="lineNum"> 581 </span> : : /* Format the message like a printf message */ +<span class="lineNum"> 582 </span> :<span class="lineCov"> 14418 : bytes_written = vsnprintf(buf, buf_size, msg, ap);</span> +<span class="lineNum"> 583 </span> : : +<span class="lineNum"> 584 </span> : : /* It looks like the message has been truncated or an error occured*/ +<span class="lineNum"> 585 </span> [<span class="branchCov" title="Branch 0 was taken 14418 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 14418 : if (bytes_written &lt; 0)</span> +<span class="lineNum"> 586 </span> : : bytes_written = 0; +<span class="lineNum"> 587 </span> : : +<span class="lineNum"> 588 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 14418 times"> + </span>]:<span class="lineCov"> 14418 : else if (bytes_written &gt;= buf_size)</span> +<span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : bytes_written = buf_size;</span> +<span class="lineNum"> 590 </span> : : +<span class="lineNum"> 591 </span> : : /* The messsage has been formatted correctly */ +<span class="lineNum"> 592 </span> : : else; +<span class="lineNum"> 593 </span> : : +<span class="lineNum"> 594 </span> :<span class="lineCov"> 14418 : va_end(ap);</span> +<span class="lineNum"> 595 </span> : : } +<span class="lineNum"> 596 </span> : : +<span class="lineNum"> 597 </span> : : /* No valid buffer has been supplied, thus we do not write anything */ +<span class="lineNum"> 598 </span> : : else; +<span class="lineNum"> 599 </span> : : +<span class="lineNum"> 600 </span> : : /* Return the number of bytes written to the buffer */ +<span class="lineNum"> 601 </span> :<span class="lineCov"> 14418 : return bytes_written;</span> +<span class="lineNum"> 602 </span> : : } +<span class="lineNum"> 603 </span> : : +<span class="lineNum"> 604 </span> : : /* Determine if a buffer contains only characters from the base64 +<span class="lineNum"> 605 </span> : : * encoding set +<a name="606"><span class="lineNum"> 606 </span> : : */</a> +<span class="lineNum"> 607 </span> : : int +<span class="lineNum"> 608 </span> :<span class="lineCov"> 7677 : is_base64(const unsigned char * const buf, const unsigned short int len)</span> +<span class="lineNum"> 609 </span> : : { +<span class="lineNum"> 610 </span> : : unsigned short int i; +<span class="lineNum"> 611 </span> :<span class="lineCov"> 7677 : int rv = 1;</span> +<span class="lineNum"> 612 </span> : : +<span class="lineNum"> 613 </span> [<span class="branchCov" title="Branch 0 was taken 169585 times"> + </span><span class="branchCov" title="Branch 1 was taken 4397 times"> + </span>]:<span class="lineCov"> 173982 : for(i=0; i&lt;len; i++)</span> +<span class="lineNum"> 614 </span> : : { +<span class="lineNum"> 615 </span>[<span class="branchCov" title="Branch 1 was taken 11928 times"> + </span><span class="branchCov" title="Branch 2 was taken 157657 times"> + </span>][<span class="branchCov" title="Branch 3 was taken 9892 times"> + </span><span class="branchCov" title="Branch 4 was taken 2036 times"> + </span>]:<span class="lineCov"> 169585 : if(!(isalnum(buf[i]) || buf[i] == '/' || buf[i] == '+' || buf[i] == '='))</span> +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 5 was taken 5176 times"> + </span><span class="branchCov" title="Branch 6 was taken 4716 times"> + </span>][<span class="branchCov" title="Branch 7 was taken 1896 times"> + </span><span class="branchCov" title="Branch 8 was taken 3280 times"> + </span>] +<span class="lineNum"> 616 </span> : : { +<span class="lineNum"> 617 </span> : : rv = 0; +<span class="lineNum"> 618 </span> : : break; +<span class="lineNum"> 619 </span> : : } +<span class="lineNum"> 620 </span> : : } +<span class="lineNum"> 621 </span> : : +<span class="lineNum"> 622 </span> :<span class="lineCov"> 7677 : return rv;</span> +<span class="lineNum"> 623 </span> : : } +<span class="lineNum"> 624 </span> : : +<span class="lineNum"> 625 </span> : : /** +<span class="lineNum"> 626 </span> : : * @brief Dump a FKO context to a buffer +<span class="lineNum"> 627 </span> : : * +<span class="lineNum"> 628 </span> : : * This function parses a FKO context and decodes each field to dump them to a +<span class="lineNum"> 629 </span> : : * buffer in a comprehensible way. +<span class="lineNum"> 630 </span> : : * +<span class="lineNum"> 631 </span> : : * @param ctx FKO context to dump +<span class="lineNum"> 632 </span> : : * @param dump_buf Buffer where to store the dump of the context +<span class="lineNum"> 633 </span> : : * @param dump_buf_len Number of bytes available in the dump_buf array +<span class="lineNum"> 634 </span> : : * +<span class="lineNum"> 635 </span> : : * @return a FKO error code. FKO_SUCCESS if successful. +<a name="636"><span class="lineNum"> 636 </span> : : */</a> +<span class="lineNum"> 637 </span> : : int +<span class="lineNum"> 638 </span> :<span class="lineCov"> 801 : dump_ctx_to_buffer(fko_ctx_t ctx, char *dump_buf, size_t dump_buf_len)</span> +<span class="lineNum"> 639 </span> : : { +<span class="lineNum"> 640 </span> :<span class="lineCov"> 801 : int cp = 0;</span> +<span class="lineNum"> 641 </span> :<span class="lineCov"> 801 : int err = FKO_LAST_ERROR;</span> +<span class="lineNum"> 642 </span> : : +<span class="lineNum"> 643 </span> :<span class="lineCov"> 801 : char *rand_val = NULL;</span> +<span class="lineNum"> 644 </span> :<span class="lineCov"> 801 : char *username = NULL;</span> +<span class="lineNum"> 645 </span> :<span class="lineCov"> 801 : char *version = NULL;</span> +<span class="lineNum"> 646 </span> :<span class="lineCov"> 801 : char *spa_message = NULL;</span> +<span class="lineNum"> 647 </span> :<span class="lineCov"> 801 : char *nat_access = NULL;</span> +<span class="lineNum"> 648 </span> :<span class="lineCov"> 801 : char *server_auth = NULL;</span> +<span class="lineNum"> 649 </span> :<span class="lineCov"> 801 : char *enc_data = NULL;</span> +<span class="lineNum"> 650 </span> :<span class="lineCov"> 801 : char *hmac_data = NULL;</span> +<span class="lineNum"> 651 </span> :<span class="lineCov"> 801 : char *spa_digest = NULL;</span> +<span class="lineNum"> 652 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 653 </span> :<span class="lineCov"> 801 : char *gpg_signer = NULL;</span> +<span class="lineNum"> 654 </span> :<span class="lineCov"> 801 : char *gpg_recip = NULL;</span> +<span class="lineNum"> 655 </span> :<span class="lineCov"> 801 : char *gpg_sig_id = NULL;</span> +<span class="lineNum"> 656 </span> :<span class="lineCov"> 801 : unsigned char gpg_sig_verify = 0;</span> +<span class="lineNum"> 657 </span> :<span class="lineCov"> 801 : unsigned char gpg_ignore_verify = 0;</span> +<span class="lineNum"> 658 </span> :<span class="lineCov"> 801 : char *gpg_sig_fpr = NULL;</span> +<span class="lineNum"> 659 </span> :<span class="lineCov"> 801 : char *gpg_home_dir = NULL;</span> +<span class="lineNum"> 660 </span> :<span class="lineCov"> 801 : char *gpg_exe = NULL;</span> +<span class="lineNum"> 661 </span> :<span class="lineCov"> 801 : int gpg_sigsum = -1;</span> +<span class="lineNum"> 662 </span> :<span class="lineCov"> 801 : int gpg_sig_stat = -1;</span> +<span class="lineNum"> 663 </span> : : #endif +<span class="lineNum"> 664 </span> :<span class="lineCov"> 801 : char *spa_data = NULL;</span> +<span class="lineNum"> 665 </span> :<span class="lineCov"> 801 : char digest_str[24] = {0};</span> +<span class="lineNum"> 666 </span> :<span class="lineCov"> 801 : char hmac_str[24] = {0};</span> +<span class="lineNum"> 667 </span> :<span class="lineCov"> 801 : char enc_mode_str[FKO_ENCRYPTION_MODE_BUFSIZE] = {0};</span> +<span class="lineNum"> 668 </span> : : +<span class="lineNum"> 669 </span> :<span class="lineCov"> 801 : time_t timestamp = 0;</span> +<span class="lineNum"> 670 </span> :<span class="lineCov"> 801 : short msg_type = -1;</span> +<span class="lineNum"> 671 </span> :<span class="lineCov"> 801 : short digest_type = -1;</span> +<span class="lineNum"> 672 </span> :<span class="lineCov"> 801 : short hmac_type = -1;</span> +<span class="lineNum"> 673 </span> :<span class="lineCov"> 801 : short encryption_type = -1;</span> +<span class="lineNum"> 674 </span> :<span class="lineCov"> 801 : int encryption_mode = -1;</span> +<span class="lineNum"> 675 </span> :<span class="lineCov"> 801 : int client_timeout = -1;</span> +<span class="lineNum"> 676 </span> : : +<span class="lineNum"> 677 </span> : : /* Zero-ed the buffer */ +<span class="lineNum"> 678 </span> : : memset(dump_buf, 0, dump_buf_len); +<span class="lineNum"> 679 </span> : : +<span class="lineNum"> 680 </span> : : /* Make sure the FKO context is initialized before printing it */ +<span class="lineNum"> 681 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> +<span class="lineNum"> 682 </span> : : err = FKO_ERROR_CTX_NOT_INITIALIZED; +<span class="lineNum"> 683 </span> : : +<span class="lineNum"> 684 </span> : : else +<span class="lineNum"> 685 </span> : : { +<span class="lineNum"> 686 </span> : : /* Parse the FKO context and collect data */ +<span class="lineNum"> 687 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_rand_value(ctx, &amp;rand_val));</span> +<span class="lineNum"> 688 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_username(ctx, &amp;username));</span> +<span class="lineNum"> 689 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_timestamp(ctx, &amp;timestamp));</span> +<span class="lineNum"> 690 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_version(ctx, &amp;version));</span> +<span class="lineNum"> 691 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_message_type(ctx, &amp;msg_type));</span> +<span class="lineNum"> 692 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_message(ctx, &amp;spa_message));</span> +<span class="lineNum"> 693 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_nat_access(ctx, &amp;nat_access));</span> +<span class="lineNum"> 694 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_server_auth(ctx, &amp;server_auth));</span> +<span class="lineNum"> 695 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_client_timeout(ctx, &amp;client_timeout));</span> +<span class="lineNum"> 696 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_digest_type(ctx, &amp;digest_type));</span> +<span class="lineNum"> 697 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_hmac_type(ctx, &amp;hmac_type));</span> +<span class="lineNum"> 698 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_encryption_type(ctx, &amp;encryption_type));</span> +<span class="lineNum"> 699 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_encryption_mode(ctx, &amp;encryption_mode));</span> +<span class="lineNum"> 700 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_encoded_data(ctx, &amp;enc_data));</span> +<span class="lineNum"> 701 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_hmac(ctx, &amp;hmac_data));</span> +<span class="lineNum"> 702 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_digest(ctx, &amp;spa_digest));</span> +<span class="lineNum"> 703 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_data(ctx, &amp;spa_data));</span> +<span class="lineNum"> 704 </span> : : +<span class="lineNum"> 705 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 706 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : if(encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> +<span class="lineNum"> 707 </span> : : { +<span class="lineNum"> 708 </span> : : /* Populate GPG variables +<span class="lineNum"> 709 </span> : : */ +<span class="lineNum"> 710 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_signer(ctx, &amp;gpg_signer));</span> +<span class="lineNum"> 711 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_recipient(ctx, &amp;gpg_recip));</span> +<span class="lineNum"> 712 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_signature_verify(ctx, &amp;gpg_sig_verify));</span> +<span class="lineNum"> 713 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_ignore_verify_error(ctx, &amp;gpg_ignore_verify));</span> +<span class="lineNum"> 714 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_home_dir(ctx, &amp;gpg_home_dir));</span> +<span class="lineNum"> 715 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_exe(ctx, &amp;gpg_exe));</span> +<span class="lineNum"> 716 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_id(ctx, &amp;gpg_sig_id) != FKO_SUCCESS)</span> +<span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : gpg_sig_id = NULL;</span> +<span class="lineNum"> 718 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_summary(ctx, &amp;gpg_sigsum) != FKO_SUCCESS)</span> +<span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : gpg_sigsum = -1;</span> +<span class="lineNum"> 720 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_status(ctx, &amp;gpg_sig_stat) != FKO_SUCCESS)</span> +<span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : gpg_sig_stat = -1;</span> +<span class="lineNum"> 722 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_fpr(ctx, &amp;gpg_sig_fpr) != FKO_SUCCESS)</span> +<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : gpg_sig_fpr = NULL;</span> +<span class="lineNum"> 724 </span> : : } +<span class="lineNum"> 725 </span> : : #endif +<span class="lineNum"> 726 </span> : : +<span class="lineNum"> 727 </span> : : /* Convert the digest integer to a string */ +<span class="lineNum"> 728 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : if (digest_inttostr(digest_type, digest_str, sizeof(digest_str)) != 0)</span> +<span class="lineNum"> 729 </span> : : return (FKO_ERROR_INVALID_DIGEST_TYPE); +<span class="lineNum"> 730 </span> : : +<span class="lineNum"> 731 </span> : : /* Convert the encryption mode integer to a string */ +<span class="lineNum"> 732 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : if (enc_mode_inttostr(encryption_mode, enc_mode_str, sizeof(enc_mode_str)) != 0)</span> +<span class="lineNum"> 733 </span> : : return (FKO_ERROR_INVALID_ENCRYPTION_TYPE); +<span class="lineNum"> 734 </span> : : +<span class="lineNum"> 735 </span> : : /* Convert the HMAC digest integer to a string if a HMAC message is available */ +<span class="lineNum"> 736 </span> [<span class="branchCov" title="Branch 0 was taken 664 times"> + </span><span class="branchCov" title="Branch 1 was taken 137 times"> + </span>]:<span class="lineCov"> 801 : if (ctx-&gt;msg_hmac_len != 0)</span> +<span class="lineNum"> 737 </span> : : { +<span class="lineNum"> 738 </span> [<span class="branchCov" title="Branch 1 was taken 664 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 664 : if (hmac_digest_inttostr(hmac_type, hmac_str, sizeof(hmac_str)) != 0)</span> +<span class="lineNum"> 739 </span> : : return (FKO_ERROR_UNSUPPORTED_HMAC_MODE); +<span class="lineNum"> 740 </span> : : } +<span class="lineNum"> 741 </span> : : +<span class="lineNum"> 742 </span> : : /* Fill in the buffer to dump */ +<span class="lineNum"> 743 </span> :<span class="lineCov"> 801 : cp = append_msg_to_buf(dump_buf, dump_buf_len, &quot;SPA Field Values:\n=================\n&quot;);</span> +<span class="lineNum"> 744 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Random Value: %s\n&quot;, rand_val == NULL ? NULL_STRING : rand_val);</span> +<span class="lineNum"> 745 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Username: %s\n&quot;, username == NULL ? NULL_STRING : username);</span> +<span class="lineNum"> 746 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Timestamp: %u\n&quot;, (unsigned int) timestamp);</span> +<span class="lineNum"> 747 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; FKO Version: %s\n&quot;, version == NULL ? NULL_STRING : version);</span> +<span class="lineNum"> 748 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Message Type: %i (%s)\n&quot;, msg_type, msg_type_inttostr(msg_type));</span> +<span class="lineNum"> 749 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Message String: %s\n&quot;, spa_message == NULL ? NULL_STRING : spa_message);</span> +<span class="lineNum"> 750 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Nat Access: %s\n&quot;, nat_access == NULL ? NULL_STRING : nat_access);</span> +<span class="lineNum"> 751 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Server Auth: %s\n&quot;, server_auth == NULL ? NULL_STRING : server_auth);</span> +<span class="lineNum"> 752 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Client Timeout: %u\n&quot;, client_timeout);</span> +<span class="lineNum"> 753 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Digest Type: %u (%s)\n&quot;, digest_type, digest_str);</span> +<span class="lineNum"> 754 </span> [<span class="branchCov" title="Branch 0 was taken 94 times"> + </span><span class="branchCov" title="Branch 1 was taken 707 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; HMAC Type: %u (%s)\n&quot;, hmac_type, hmac_type == 0 ? &quot;None&quot; : hmac_str);</span> +<span class="lineNum"> 755 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;Encryption Type: %d (%s)\n&quot;, encryption_type, enc_type_inttostr(encryption_type));</span> +<span class="lineNum"> 756 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;Encryption Mode: %d (%s)\n&quot;, encryption_mode, enc_mode_str);</span> +<span class="lineNum"> 757 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 758 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : if(encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> +<span class="lineNum"> 759 </span> : : { +<span class="lineNum"> 760 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG signer: %s\n&quot;, gpg_signer == NULL ? NULL_STRING : gpg_signer);</span> +<span class="lineNum"> 761 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG recipient: %s\n&quot;, gpg_recip == NULL ? NULL_STRING : gpg_recip);</span> +<span class="lineNum"> 762 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig verify: %s\n&quot;, gpg_sig_verify == 0 ? &quot;No&quot; : &quot;Yes&quot;);</span> +<span class="lineNum"> 763 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG ignore sig: %s\n&quot;, gpg_ignore_verify == 0 ? &quot;No&quot; : &quot;Yes&quot;);</span> +<span class="lineNum"> 764 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig ID: %s\n&quot;, gpg_sig_id == NULL ? NULL_STRING : gpg_sig_id);</span> +<span class="lineNum"> 765 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig fpr: %s\n&quot;, gpg_sig_fpr == NULL ? NULL_STRING : gpg_sig_fpr);</span> +<span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;GPG sig summary: %d\n&quot;, gpg_sigsum);</span> +<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig status: %d\n&quot;, gpg_sig_stat);</span> +<span class="lineNum"> 768 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG home dir: %s\n&quot;, gpg_home_dir == NULL ? NULL_STRING : gpg_home_dir);</span> +<span class="lineNum"> 769 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG exe: %s\n&quot;, gpg_exe == NULL ? GPG_EXE : gpg_exe);</span> +<span class="lineNum"> 770 </span> : : } +<span class="lineNum"> 771 </span> : : #endif +<span class="lineNum"> 772 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Encoded Data: %s\n&quot;, enc_data == NULL ? NULL_STRING : enc_data);</span> +<span class="lineNum"> 773 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;SPA Data Digest: %s\n&quot;, spa_digest == NULL ? NULL_STRING : spa_digest);</span> +<span class="lineNum"> 774 </span> [<span class="branchCov" title="Branch 0 was taken 664 times"> + </span><span class="branchCov" title="Branch 1 was taken 137 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; HMAC: %s\n&quot;, hmac_data == NULL ? NULL_STRING : hmac_data);</span> +<span class="lineNum"> 775 </span> :<span class="lineCov"> 801 : append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Final SPA Data: %s\n&quot;, spa_data);</span> +<span class="lineNum"> 776 </span> : : +<span class="lineNum"> 777 </span> :<span class="lineCov"> 801 : err = FKO_SUCCESS;</span> +<span class="lineNum"> 778 </span> : : } +<span class="lineNum"> 779 </span> : : +<span class="lineNum"> 780 </span> :<span class="lineCov"> 801 : return (err);</span> +<span class="lineNum"> 781 </span> : : } +<span class="lineNum"> 782 </span> : : +<span class="lineNum"> 783 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html new file mode 100644 index 00000000..014da9c9 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html @@ -0,0 +1,105 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/gpgme_funcs.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - gpgme_funcs.c<span style="font-size: 80%;"> (<a href="gpgme_funcs.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntry">190</td> + <td class="headerCovTableEntryLo">14.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntry">86</td> + <td class="headerCovTableEntryLo">10.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="gpgme_funcs.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#182">get_gpg_key</a></td> + <td class="coverFnHi">2</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#37">init_gpgme</a></td> + <td class="coverFnHi">2</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#415">gpgme_decrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#109">process_sigs.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#271">gpgme_encrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#86">my_passphrase_cb</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html new file mode 100644 index 00000000..8a0da44b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html @@ -0,0 +1,105 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/gpgme_funcs.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - gpgme_funcs.c<span style="font-size: 80%;"> (<a href="gpgme_funcs.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntry">190</td> + <td class="headerCovTableEntryLo">14.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntry">86</td> + <td class="headerCovTableEntryLo">10.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="gpgme_funcs.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#182">get_gpg_key</a></td> + <td class="coverFnHi">2</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#415">gpgme_decrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#271">gpgme_encrypt</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#37">init_gpgme</a></td> + <td class="coverFnHi">2</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#86">my_passphrase_cb</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#109">process_sigs.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html new file mode 100644 index 00000000..02099795 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html @@ -0,0 +1,627 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/gpgme_funcs.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - gpgme_funcs.c<span style="font-size: 80%;"> (source / <a href="gpgme_funcs.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">28</td> + <td class="headerCovTableEntry">190</td> + <td class="headerCovTableEntryLo">14.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntry">86</td> + <td class="headerCovTableEntryLo">10.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: gpgme_funcs.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: gpgme-related functions for GPG encryptions support in libfko. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : +<span class="lineNum"> 32 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;fko.h&quot; +<span class="lineNum"> 34 </span> : : +<span class="lineNum"> 35 </span> : : #if HAVE_LIBGPGME +<span class="lineNum"> 36 </span> : : #include &quot;gpgme_funcs.h&quot; +<a name="37"><span class="lineNum"> 37 </span> : : </a> +<span class="lineNum"> 38 </span> : : int +<span class="lineNum"> 39 </span> :<span class="lineCov"> 2 : init_gpgme(fko_ctx_t fko_ctx)</span> +<span class="lineNum"> 40 </span> : : { +<span class="lineNum"> 41 </span> : : gpgme_error_t err; +<span class="lineNum"> 42 </span> : : +<span class="lineNum"> 43 </span> : : /* If we already have a context, we are done. +<span class="lineNum"> 44 </span> : : */ +<span class="lineNum"> 45 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(fko_ctx-&gt;have_gpgme_context)</span> +<span class="lineNum"> 46 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 47 </span> : : +<span class="lineNum"> 48 </span> : : /* Because the gpgme manual says you should. +<span class="lineNum"> 49 </span> : : */ +<span class="lineNum"> 50 </span> :<span class="lineCov"> 2 : gpgme_check_version(NULL);</span> +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> : : /* Check for OpenPGP support +<span class="lineNum"> 53 </span> : : */ +<span class="lineNum"> 54 </span> :<span class="lineCov"> 2 : err = gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP);</span> +<span class="lineNum"> 55 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 56 </span> : : { +<span class="lineNum"> 57 </span> : : /* GPG engine is not available. +<span class="lineNum"> 58 </span> : : */ +<span class="lineNum"> 59 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_NO_OPENPGP);</span> +<span class="lineNum"> 61 </span> : : } +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> : : /* Extract the current gpgme engine information. +<span class="lineNum"> 64 </span> : : */ +<span class="lineNum"> 65 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : gpgme_set_engine_info(</span> +<span class="lineNum"> 66 </span> : : GPGME_PROTOCOL_OpenPGP, +<span class="lineNum"> 67 </span> :<span class="lineCov"> 2 : (fko_ctx-&gt;gpg_exe != NULL) ? fko_ctx-&gt;gpg_exe : GPG_EXE,</span> +<span class="lineNum"> 68 </span> :<span class="lineCov"> 2 : fko_ctx-&gt;gpg_home_dir /* If this is NULL, the default is used */</span> +<span class="lineNum"> 69 </span> : : ); +<span class="lineNum"> 70 </span> : : +<span class="lineNum"> 71 </span> : : /* Create our gpgme context +<span class="lineNum"> 72 </span> : : */ +<span class="lineNum"> 73 </span> :<span class="lineCov"> 2 : err = gpgme_new(&amp;(fko_ctx-&gt;gpg_ctx));</span> +<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 75 </span> : : { +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CONTEXT);</span> +<span class="lineNum"> 78 </span> : : } +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> :<span class="lineCov"> 2 : fko_ctx-&gt;have_gpgme_context = 1;</span> +<span class="lineNum"> 81 </span> : : +<span class="lineNum"> 82 </span> :<span class="lineCov"> 2 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 83 </span> : : } +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> : : /* Callback function that supplies the password when gpgme needs it. +<a name="86"><span class="lineNum"> 86 </span> : : */</a> +<span class="lineNum"> 87 </span> : : gpgme_error_t +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : my_passphrase_cb(</span> +<span class="lineNum"> 89 </span> : : void *pw, const char *uid_hint, const char *passphrase_info, +<span class="lineNum"> 90 </span> : : int prev_was_bad, int fd) +<span class="lineNum"> 91 </span> : : { +<span class="lineNum"> 92 </span> : : /* We only need to try once as it is fed by the program +<span class="lineNum"> 93 </span> : : * (for now --DSS). +<span class="lineNum"> 94 </span> : : */ +<span class="lineNum"> 95 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(prev_was_bad)</span> +<span class="lineNum"> 96 </span> : : return(GPG_ERR_CANCELED); +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(fd, (const char*)pw, strlen((const char*)pw))</span> +<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : != strlen((const char*)pw))</span> +<span class="lineNum"> 100 </span> : : return(GPG_ERR_SYSTEM_ERROR); /* Must be a GPG error, but which one? */ +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(fd, &quot;\n&quot;, 1) != 1)</span> +<span class="lineNum"> 103 </span> : : return(GPG_ERR_SYSTEM_ERROR); /* Must be a GPG error, but which one? */ +<span class="lineNum"> 104 </span> : : +<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 106 </span> : : } +<span class="lineNum"> 107 </span> : : +<span class="lineNum"> 108 </span> : : /* Verify gpg signatures in a verify_result set. +<a name="109"><span class="lineNum"> 109 </span> : : */</a> +<span class="lineNum"> 110 </span> : : static int +<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : process_sigs(fko_ctx_t fko_ctx, gpgme_verify_result_t vres)</span> +<span class="lineNum"> 112 </span> : : { +<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : unsigned int sig_cnt = 0;</span> +<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : gpgme_signature_t sig = vres-&gt;signatures;</span> +<span class="lineNum"> 115 </span> : : fko_gpg_sig_t fgs; +<span class="lineNum"> 116 </span> : : +<span class="lineNum"> 117 </span> : : /* only want to see one signature (for now). +<span class="lineNum"> 118 </span> : : */ +<span class="lineNum"> 119 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!sig)</span> +<span class="lineNum"> 120 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> : : /* Iterate over the sigs and store the info we are interested in +<span class="lineNum"> 123 </span> : : * to the context. +<span class="lineNum"> 124 </span> : : * +<span class="lineNum"> 125 </span> : : * NOTE: At present, we support only a single signature. However, +<span class="lineNum"> 126 </span> : : * that may change in a future release. We go a head and +<span class="lineNum"> 127 </span> : : * grab all signatures even though we will only use the first +<span class="lineNum"> 128 </span> : : * one. --DSS +<span class="lineNum"> 129 </span> : : */ +<span class="lineNum"> 130 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(sig != NULL)</span> +<span class="lineNum"> 131 </span> : : { +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : fgs = calloc(1, sizeof(struct fko_gpg_sig));</span> +<span class="lineNum"> 133 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgs == NULL)</span> +<span class="lineNum"> 134 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> : : /* Grab the summary and status values. +<span class="lineNum"> 137 </span> : : */ +<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : fgs-&gt;summary = sig-&gt;summary;</span> +<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : fgs-&gt;status = sig-&gt;status;</span> +<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : fgs-&gt;validity = sig-&gt;validity;</span> +<span class="lineNum"> 141 </span> : : +<span class="lineNum"> 142 </span> : : /* Grab the signature fingerprint. +<span class="lineNum"> 143 </span> : : */ +<span class="lineNum"> 144 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig-&gt;fpr != NULL)</span> +<span class="lineNum"> 145 </span> : : { +<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : fgs-&gt;fpr = strdup(sig-&gt;fpr);</span> +<span class="lineNum"> 147 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgs-&gt;fpr == NULL)</span> +<span class="lineNum"> 148 </span> : : { +<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : free(fgs);</span> +<span class="lineNum"> 150 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); +<span class="lineNum"> 151 </span> : : } +<span class="lineNum"> 152 </span> : : } +<span class="lineNum"> 153 </span> : : +<span class="lineNum"> 154 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig_cnt == 0)</span> +<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_sigs = fgs;</span> +<span class="lineNum"> 156 </span> : : else +<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_sigs-&gt;next = fgs;</span> +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : sig_cnt++;</span> +<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : sig = sig-&gt;next;</span> +<span class="lineNum"> 161 </span> : : } +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> : : /* If we are ignoring bad signatures, return success here. +<span class="lineNum"> 164 </span> : : */ +<span class="lineNum"> 165 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;ignore_gpg_sig_error != 0)</span> +<span class="lineNum"> 166 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 167 </span> : : +<span class="lineNum"> 168 </span> : : /* Otherwise, we check them here and respond accordingly. +<span class="lineNum"> 169 </span> : : */ +<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : fgs = fko_ctx-&gt;gpg_sigs;</span> +<span class="lineNum"> 171 </span> : : +<span class="lineNum"> 172 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgs-&gt;status != GPG_ERR_NO_ERROR || fgs-&gt;validity &lt; 3) {</span> +<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = fgs-&gt;status;</span> +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> : : return(FKO_ERROR_GPGME_BAD_SIGNATURE); +<span class="lineNum"> 176 </span> : : } +<span class="lineNum"> 177 </span> : : +<span class="lineNum"> 178 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 179 </span> : : } +<span class="lineNum"> 180 </span> : : +<span class="lineNum"> 181 </span> : : /* Get the GPG key for the given name or ID. +<a name="182"><span class="lineNum"> 182 </span> : : */</a> +<span class="lineNum"> 183 </span> : : int +<span class="lineNum"> 184 </span> :<span class="lineCov"> 2 : get_gpg_key(fko_ctx_t fko_ctx, gpgme_key_t *mykey, const int signer)</span> +<span class="lineNum"> 185 </span> : : { +<span class="lineNum"> 186 </span> : : int res; +<span class="lineNum"> 187 </span> : : const char *name; +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> :<span class="lineCov"> 2 : gpgme_ctx_t list_ctx = NULL;</span> +<span class="lineNum"> 190 </span> :<span class="lineCov"> 2 : gpgme_key_t key = NULL;</span> +<span class="lineNum"> 191 </span> :<span class="lineCov"> 2 : gpgme_key_t key2 = NULL;</span> +<span class="lineNum"> 192 </span> : : gpgme_error_t err; +<span class="lineNum"> 193 </span> : : +<span class="lineNum"> 194 </span> : : /* Create a gpgme context for the list +<span class="lineNum"> 195 </span> : : */ +<span class="lineNum"> 196 </span> : : /* Initialize gpgme +<span class="lineNum"> 197 </span> : : */ +<span class="lineNum"> 198 </span> :<span class="lineCov"> 2 : res = init_gpgme(fko_ctx);</span> +<span class="lineNum"> 199 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 200 </span> : : { +<span class="lineNum"> 201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(signer)</span> +<span class="lineNum"> 202 </span> : : return(FKO_ERROR_GPGME_CONTEXT_SIGNER_KEY); +<span class="lineNum"> 203 </span> : : else +<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CONTEXT_RECIPIENT_KEY);</span> +<span class="lineNum"> 205 </span> : : } +<span class="lineNum"> 206 </span> : : +<span class="lineNum"> 207 </span> :<span class="lineCov"> 2 : list_ctx = fko_ctx-&gt;gpg_ctx;</span> +<span class="lineNum"> 208 </span> : : +<span class="lineNum"> 209 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(signer)</span> +<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : name = fko_ctx-&gt;gpg_signer;</span> +<span class="lineNum"> 211 </span> : : else +<span class="lineNum"> 212 </span> :<span class="lineCov"> 2 : name = fko_ctx-&gt;gpg_recipient;</span> +<span class="lineNum"> 213 </span> : : +<span class="lineNum"> 214 </span> :<span class="lineCov"> 2 : err = gpgme_op_keylist_start(list_ctx, name, signer);</span> +<span class="lineNum"> 215 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if (err)</span> +<span class="lineNum"> 216 </span> : : { +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : gpgme_release(list_ctx);</span> +<span class="lineNum"> 218 </span> : : +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(signer)</span> +<span class="lineNum"> 222 </span> : : return(FKO_ERROR_GPGME_SIGNER_KEYLIST_START); +<span class="lineNum"> 223 </span> : : else +<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_RECIPIENT_KEYLIST_START);</span> +<span class="lineNum"> 225 </span> : : } +<span class="lineNum"> 226 </span> : : +<span class="lineNum"> 227 </span> : : /* Grab the first key in the list (we hope it is the only one). +<span class="lineNum"> 228 </span> : : */ +<span class="lineNum"> 229 </span> :<span class="lineCov"> 2 : err = gpgme_op_keylist_next(list_ctx, &amp;key);</span> +<span class="lineNum"> 230 </span> [<span class="branchCov" title="Branch 1 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 2 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 231 </span> : : { +<span class="lineNum"> 232 </span> : : /* Key not found +<span class="lineNum"> 233 </span> : : */ +<span class="lineNum"> 234 </span> :<span class="lineCov"> 2 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 235 </span> : : +<span class="lineNum"> 236 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(signer)</span> +<span class="lineNum"> 237 </span> : : return(FKO_ERROR_GPGME_SIGNER_KEY_NOT_FOUND); +<span class="lineNum"> 238 </span> : : else +<span class="lineNum"> 239 </span> :<span class="lineCov"> 2 : return(FKO_ERROR_GPGME_RECIPIENT_KEY_NOT_FOUND);</span> +<span class="lineNum"> 240 </span> : : } +<span class="lineNum"> 241 </span> : : +<span class="lineNum"> 242 </span> : : /* We try to get the next key match. If we do, then the name is +<span class="lineNum"> 243 </span> : : * ambiguous, so we return an error. +<span class="lineNum"> 244 </span> : : */ +<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_keylist_next(list_ctx, &amp;key2);</span> +<span class="lineNum"> 246 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) == GPG_ERR_NO_ERROR) /* Note: look for NO error */</span> +<span class="lineNum"> 247 </span> : : { +<span class="lineNum"> 248 </span> : : /* Ambiguous specfication of key +<span class="lineNum"> 249 </span> : : */ +<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(key);</span> +<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(key2);</span> +<span class="lineNum"> 252 </span> : : +<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 254 </span> : : +<span class="lineNum"> 255 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(signer)</span> +<span class="lineNum"> 256 </span> : : return(FKO_ERROR_GPGME_SIGNER_KEY_AMBIGUOUS); +<span class="lineNum"> 257 </span> : : else +<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_RECIPIENT_KEY_AMBIGUOUS);</span> +<span class="lineNum"> 259 </span> : : } +<span class="lineNum"> 260 </span> : : +<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : gpgme_op_keylist_end(list_ctx);</span> +<span class="lineNum"> 262 </span> : : +<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(key2);</span> +<span class="lineNum"> 264 </span> : : +<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : *mykey = key;</span> +<span class="lineNum"> 266 </span> : : +<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> +<span class="lineNum"> 268 </span> : : } +<span class="lineNum"> 269 </span> : : +<span class="lineNum"> 270 </span> : : /* The main GPG encryption routine for libfko. +<a name="271"><span class="lineNum"> 271 </span> : : */</a> +<span class="lineNum"> 272 </span> : : int +<span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : gpgme_encrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len,</span> +<span class="lineNum"> 274 </span> : : const char *pw, unsigned char **out, size_t *out_len) +<span class="lineNum"> 275 </span> : : { +<span class="lineNum"> 276 </span> : : char *tmp_buf; +<span class="lineNum"> 277 </span> : : int res; +<span class="lineNum"> 278 </span> : : +<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : gpgme_ctx_t gpg_ctx = NULL;</span> +<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : gpgme_data_t cipher = NULL;</span> +<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : gpgme_data_t plaintext = NULL;</span> +<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : gpgme_key_t key[2] = { NULL, NULL };</span> +<span class="lineNum"> 283 </span> : : gpgme_error_t err; +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span> : : /* Initialize gpgme +<span class="lineNum"> 286 </span> : : */ +<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : res = init_gpgme(fko_ctx);</span> +<span class="lineNum"> 288 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 289 </span> : : return(res); +<span class="lineNum"> 290 </span> : : +<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : gpg_ctx = fko_ctx-&gt;gpg_ctx;</span> +<span class="lineNum"> 292 </span> : : +<span class="lineNum"> 293 </span> : : /* Initialize the plaintext data (place into gpgme_data object) +<span class="lineNum"> 294 </span> : : */ +<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new_from_mem(&amp;plaintext, (char*)indata, in_len, 1);</span> +<span class="lineNum"> 296 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 297 </span> : : { +<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 301 </span> : : +<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ);</span> +<span class="lineNum"> 303 </span> : : } +<span class="lineNum"> 304 </span> : : +<span class="lineNum"> 305 </span> : : /* Set protocol +<span class="lineNum"> 306 </span> : : */ +<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : err = gpgme_set_protocol(gpg_ctx, GPGME_PROTOCOL_OpenPGP);</span> +<span class="lineNum"> 308 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 309 </span> : : { +<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 313 </span> : : +<span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 315 </span> : : +<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_SET_PROTOCOL);</span> +<span class="lineNum"> 317 </span> : : } +<span class="lineNum"> 318 </span> : : +<span class="lineNum"> 319 </span> : : /* Set ascii-armor off (we will be base64-encoding the encrypted data +<span class="lineNum"> 320 </span> : : * ourselves. +<span class="lineNum"> 321 </span> : : */ +<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : gpgme_set_armor(gpg_ctx, 0);</span> +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> : : /* The gpgme_encrypt.... functions take a recipient key array, so we add +<span class="lineNum"> 325 </span> : : * our single key here. +<span class="lineNum"> 326 </span> : : */ +<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : key[0] = fko_ctx-&gt;recipient_key;</span> +<span class="lineNum"> 328 </span> : : +<span class="lineNum"> 329 </span> : : /* Create the buffer for our encrypted data. +<span class="lineNum"> 330 </span> : : */ +<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new(&amp;cipher);</span> +<span class="lineNum"> 332 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 333 </span> : : { +<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 337 </span> : : +<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 339 </span> : : +<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CIPHER_DATA_OBJ);</span> +<span class="lineNum"> 341 </span> : : } +<span class="lineNum"> 342 </span> : : +<span class="lineNum"> 343 </span> : : /* Here we add the signer to the gpgme context if there is one. +<span class="lineNum"> 344 </span> : : */ +<span class="lineNum"> 345 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;gpg_signer != NULL) {</span> +<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : gpgme_signers_clear(gpg_ctx);</span> +<span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : err = gpgme_signers_add(gpg_ctx, fko_ctx-&gt;signer_key);</span> +<span class="lineNum"> 348 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 349 </span> : : { +<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> +<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 354 </span> : : +<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_ADD_SIGNER);</span> +<span class="lineNum"> 358 </span> : : } +<span class="lineNum"> 359 </span> : : } +<span class="lineNum"> 360 </span> : : +<span class="lineNum"> 361 </span> : : /* Set the passphrase callback. +<span class="lineNum"> 362 </span> : : */ +<span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : gpgme_set_passphrase_cb(gpg_ctx, my_passphrase_cb, (void*)pw);</span> +<span class="lineNum"> 364 </span> : : +<span class="lineNum"> 365 </span> : : /* Encrypt and sign (if a sig was provided) the SPA data. +<span class="lineNum"> 366 </span> : : */ +<span class="lineNum"> 367 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;gpg_signer == NULL)</span> +<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_encrypt(</span> +<span class="lineNum"> 369 </span> : : gpg_ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, plaintext, cipher +<span class="lineNum"> 370 </span> : : ); +<span class="lineNum"> 371 </span> : : else +<span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_encrypt_sign(</span> +<span class="lineNum"> 373 </span> : : gpg_ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, plaintext, cipher +<span class="lineNum"> 374 </span> : : ); +<span class="lineNum"> 375 </span> : : +<span class="lineNum"> 376 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 377 </span> : : { +<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> +<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 382 </span> : : +<span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 384 </span> : : +<span class="lineNum"> 385 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpgme_err_code(err) == GPG_ERR_CANCELED)</span> +<span class="lineNum"> 386 </span> : : return(FKO_ERROR_GPGME_BAD_PASSPHRASE); +<span class="lineNum"> 387 </span> : : +<span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_ENCRYPT_SIGN);</span> +<span class="lineNum"> 389 </span> : : } +<span class="lineNum"> 390 </span> : : +<span class="lineNum"> 391 </span> : : /* Done with the plaintext. +<span class="lineNum"> 392 </span> : : */ +<span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 394 </span> : : +<span class="lineNum"> 395 </span> : : /* Get the encrypted data and its length from the gpgme data object. +<span class="lineNum"> 396 </span> : : * BTW, this does free the memory used by cipher. +<span class="lineNum"> 397 </span> : : */ +<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : tmp_buf = gpgme_data_release_and_get_mem(cipher, out_len);</span> +<span class="lineNum"> 399 </span> : : +<span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : *out = calloc(1, *out_len); /* This is freed upon fko_ctx destruction. */</span> +<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*out == NULL)</span> +<span class="lineNum"> 402 </span> : : res = FKO_ERROR_MEMORY_ALLOCATION; +<span class="lineNum"> 403 </span> : : else +<span class="lineNum"> 404 </span> : : { +<span class="lineNum"> 405 </span> :<span class="lineNoCov"> 0 : memcpy(*out, tmp_buf, *out_len);</span> +<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : res = FKO_SUCCESS;</span> +<span class="lineNum"> 407 </span> : : } +<span class="lineNum"> 408 </span> : : +<span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : gpgme_free(tmp_buf);</span> +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 412 </span> : : } +<span class="lineNum"> 413 </span> : : +<span class="lineNum"> 414 </span> : : /* The main GPG decryption routine for libfko. +<a name="415"><span class="lineNum"> 415 </span> : : */</a> +<span class="lineNum"> 416 </span> : : int +<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : gpgme_decrypt(fko_ctx_t fko_ctx, unsigned char *indata,</span> +<span class="lineNum"> 418 </span> : : size_t in_len, const char *pw, unsigned char **out, size_t *out_len) +<span class="lineNum"> 419 </span> : : { +<span class="lineNum"> 420 </span> : : char *tmp_buf; +<span class="lineNum"> 421 </span> : : int res; +<span class="lineNum"> 422 </span> : : +<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : gpgme_ctx_t gpg_ctx = NULL;</span> +<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : gpgme_data_t cipher = NULL;</span> +<span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : gpgme_data_t plaintext = NULL;</span> +<span class="lineNum"> 426 </span> : : gpgme_error_t err; +<span class="lineNum"> 427 </span> : : gpgme_decrypt_result_t decrypt_res; +<span class="lineNum"> 428 </span> : : gpgme_verify_result_t verify_res; +<span class="lineNum"> 429 </span> : : +<span class="lineNum"> 430 </span> : : /* Initialize gpgme +<span class="lineNum"> 431 </span> : : */ +<span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : res = init_gpgme(fko_ctx);</span> +<span class="lineNum"> 433 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 434 </span> : : return(res); +<span class="lineNum"> 435 </span> : : +<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : gpg_ctx = fko_ctx-&gt;gpg_ctx;</span> +<span class="lineNum"> 437 </span> : : +<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new(&amp;plaintext);</span> +<span class="lineNum"> 439 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 440 </span> : : { +<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 443 </span> : : +<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 445 </span> : : +<span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ);</span> +<span class="lineNum"> 447 </span> : : } +<span class="lineNum"> 448 </span> : : +<span class="lineNum"> 449 </span> : : /* Initialize the cipher data (place into gpgme_data object) +<span class="lineNum"> 450 </span> : : */ +<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new_from_mem(&amp;cipher, (char*)indata, in_len, 0);</span> +<span class="lineNum"> 452 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 453 </span> : : { +<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 457 </span> : : +<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 459 </span> : : +<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CIPHER_DATA_OBJ);</span> +<span class="lineNum"> 461 </span> : : } +<span class="lineNum"> 462 </span> : : +<span class="lineNum"> 463 </span> : : /* Set the passphrase callback. +<span class="lineNum"> 464 </span> : : */ +<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : gpgme_set_passphrase_cb(gpg_ctx, my_passphrase_cb, (void*)pw);</span> +<span class="lineNum"> 466 </span> : : +<span class="lineNum"> 467 </span> : : /* Now decrypt and verify. +<span class="lineNum"> 468 </span> : : */ +<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_decrypt_verify(gpg_ctx, cipher, plaintext);</span> +<span class="lineNum"> 470 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> +<span class="lineNum"> 471 </span> : : { +<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> +<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 476 </span> : : +<span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> +<span class="lineNum"> 478 </span> : : +<span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_DECRYPT_FAILED);</span> +<span class="lineNum"> 480 </span> : : } +<span class="lineNum"> 481 </span> : : +<span class="lineNum"> 482 </span> : : /* Done with the cipher text. +<span class="lineNum"> 483 </span> : : */ +<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> +<span class="lineNum"> 485 </span> : : +<span class="lineNum"> 486 </span> : : /* We check the &quot;usupported_algorithm&quot; flag in the decrypt result. +<span class="lineNum"> 487 </span> : : */ +<span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : decrypt_res = gpgme_op_decrypt_result(gpg_ctx);</span> +<span class="lineNum"> 489 </span> : : +<span class="lineNum"> 490 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(decrypt_res-&gt;unsupported_algorithm)</span> +<span class="lineNum"> 491 </span> : : { +<span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 495 </span> : : +<span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_DECRYPT_UNSUPPORTED_ALGORITHM);</span> +<span class="lineNum"> 497 </span> : : } +<span class="lineNum"> 498 </span> : : +<span class="lineNum"> 499 </span> : : /* Now verify the signatures if so configured. +<span class="lineNum"> 500 </span> : : */ +<span class="lineNum"> 501 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;verify_gpg_sigs)</span> +<span class="lineNum"> 502 </span> : : { +<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : verify_res = gpgme_op_verify_result(gpg_ctx);</span> +<span class="lineNum"> 504 </span> : : +<span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : res = process_sigs(fko_ctx, verify_res);</span> +<span class="lineNum"> 506 </span> : : +<span class="lineNum"> 507 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 508 </span> : : { +<span class="lineNum"> 509 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> +<span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> +<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> +<span class="lineNum"> 512 </span> : : +<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 514 </span> : : } +<span class="lineNum"> 515 </span> : : } +<span class="lineNum"> 516 </span> : : +<span class="lineNum"> 517 </span> : : /* Get the encrypted data and its length from the gpgme data object. +<span class="lineNum"> 518 </span> : : */ +<span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : tmp_buf = gpgme_data_release_and_get_mem(plaintext, out_len);</span> +<span class="lineNum"> 520 </span> : : +<span class="lineNum"> 521 </span> : : /* Use calloc here with an extra byte because I am not sure if all systems +<span class="lineNum"> 522 </span> : : * will include the terminating NULL with the decrypted data (which is +<span class="lineNum"> 523 </span> : : * expected to be a string). +<span class="lineNum"> 524 </span> : : */ +<span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : *out = calloc(1, *out_len+1); /* This is freed upon fko_ctx destruction. */</span> +<span class="lineNum"> 526 </span> : : +<span class="lineNum"> 527 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*out == NULL)</span> +<span class="lineNum"> 528 </span> : : res = FKO_ERROR_MEMORY_ALLOCATION; +<span class="lineNum"> 529 </span> : : else +<span class="lineNum"> 530 </span> : : { +<span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : memcpy(*out, tmp_buf, *out_len);</span> +<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : res = FKO_SUCCESS;</span> +<span class="lineNum"> 533 </span> : : } +<span class="lineNum"> 534 </span> : : +<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : gpgme_free(tmp_buf);</span> +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 538 </span> : : } +<span class="lineNum"> 539 </span> : : +<span class="lineNum"> 540 </span> : : #endif /* HAVE_LIBGPGME */ +<span class="lineNum"> 541 </span> : : +<span class="lineNum"> 542 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html new file mode 100644 index 00000000..596dc7b0 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html @@ -0,0 +1,165 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/hmac.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - hmac.c<span style="font-size: 80%;"> (<a href="hmac.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">67</td> + <td class="headerCovTableEntry">148</td> + <td class="headerCovTableEntryLo">45.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntry">21</td> + <td class="headerCovTableEntryLo">42.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">22</td> + <td class="headerCovTableEntryLo">54.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="hmac.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#73">pad_init</a></td> + <td class="coverFnHi">692</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#240">hmac_sha256_init</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#282">hmac_sha256_final</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#274">hmac_sha256_update</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#294">hmac_sha256</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#203">hmac_sha1_update</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#223">hmac_sha1</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#211">hmac_sha1_final</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#169">hmac_sha1_init</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#398">hmac_sha512_update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#336">hmac_sha384_update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#373">hmac_sha512_init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#152">hmac_md5</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#311">hmac_sha384_init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#418">hmac_sha512</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#132">hmac_md5_update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#344">hmac_sha384_final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#406">hmac_sha512_final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#140">hmac_md5_final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#356">hmac_sha384</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#98">hmac_md5_init</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html new file mode 100644 index 00000000..e52b0e03 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html @@ -0,0 +1,165 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/hmac.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - hmac.c<span style="font-size: 80%;"> (<a href="hmac.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">67</td> + <td class="headerCovTableEntry">148</td> + <td class="headerCovTableEntryLo">45.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntry">21</td> + <td class="headerCovTableEntryLo">42.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">22</td> + <td class="headerCovTableEntryLo">54.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="hmac.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#152">hmac_md5</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#140">hmac_md5_final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#98">hmac_md5_init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#132">hmac_md5_update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#223">hmac_sha1</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#211">hmac_sha1_final</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#169">hmac_sha1_init</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#203">hmac_sha1_update</a></td> + <td class="coverFnHi">148</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#294">hmac_sha256</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#282">hmac_sha256_final</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#240">hmac_sha256_init</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#274">hmac_sha256_update</a></td> + <td class="coverFnHi">544</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#356">hmac_sha384</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#344">hmac_sha384_final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#311">hmac_sha384_init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#336">hmac_sha384_update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#418">hmac_sha512</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#406">hmac_sha512_final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#373">hmac_sha512_init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#398">hmac_sha512_update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="hmac.c.gcov.html#73">pad_init</a></td> + <td class="coverFnHi">692</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html new file mode 100644 index 00000000..29553e9d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html @@ -0,0 +1,517 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/hmac.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - hmac.c<span style="font-size: 80%;"> (source / <a href="hmac.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">67</td> + <td class="headerCovTableEntry">148</td> + <td class="headerCovTableEntryLo">45.3 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntry">21</td> + <td class="headerCovTableEntryLo">42.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">22</td> + <td class="headerCovTableEntryLo">54.5 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fko_hmac.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Provide HMAC support to SPA communications +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : +<span class="lineNum"> 32 </span> : : #include &quot;hmac.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : typedef struct { +<span class="lineNum"> 35 </span> : : MD5Context ctx_inside; +<span class="lineNum"> 36 </span> : : MD5Context ctx_outside; +<span class="lineNum"> 37 </span> : : +<span class="lineNum"> 38 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 39 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 40 </span> : : } hmac_md5_ctx; +<span class="lineNum"> 41 </span> : : +<span class="lineNum"> 42 </span> : : typedef struct { +<span class="lineNum"> 43 </span> : : SHA1_INFO ctx_inside; +<span class="lineNum"> 44 </span> : : SHA1_INFO ctx_outside; +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 47 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 48 </span> : : } hmac_sha1_ctx; +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : typedef struct { +<span class="lineNum"> 51 </span> : : SHA256_CTX ctx_inside; +<span class="lineNum"> 52 </span> : : SHA256_CTX ctx_outside; +<span class="lineNum"> 53 </span> : : +<span class="lineNum"> 54 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 55 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 56 </span> : : } hmac_sha256_ctx; +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> : : typedef struct { +<span class="lineNum"> 59 </span> : : SHA384_CTX ctx_inside; +<span class="lineNum"> 60 </span> : : SHA384_CTX ctx_outside; +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 63 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 64 </span> : : } hmac_sha384_ctx; +<span class="lineNum"> 65 </span> : : +<span class="lineNum"> 66 </span> : : typedef struct { +<span class="lineNum"> 67 </span> : : SHA512_CTX ctx_inside; +<span class="lineNum"> 68 </span> : : SHA512_CTX ctx_outside; +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 71 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; +<span class="lineNum"> 72 </span> : : } hmac_sha512_ctx; +<a name="73"><span class="lineNum"> 73 </span> : : </a> +<span class="lineNum"> 74 </span> : : static void +<span class="lineNum"> 75 </span> :<span class="lineCov"> 692 : pad_init(unsigned char *inner_pad, unsigned char *outer_pad,</span> +<span class="lineNum"> 76 </span> : : const unsigned char * const key, const int key_len) +<span class="lineNum"> 77 </span> : : { +<span class="lineNum"> 78 </span> :<span class="lineCov"> 692 : int i = 0;</span> +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> [<span class="branchCov" title="Branch 0 was taken 27758 times"> + </span><span class="branchCov" title="Branch 1 was taken 692 times"> + </span>]:<span class="lineCov"> 28450 : for (i=0; i &lt; MAX_DIGEST_BLOCK_LEN &amp;&amp; i &lt; key_len; i++) {</span> +<span class="lineNum"> 81 </span> :<span class="lineCov"> 27758 : inner_pad[i] = key[i] ^ 0x36;</span> +<span class="lineNum"> 82 </span> :<span class="lineCov"> 27758 : outer_pad[i] = key[i] ^ 0x5c;</span> +<span class="lineNum"> 83 </span> : : } +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> [<span class="branchCov" title="Branch 0 was taken 670 times"> + </span><span class="branchCov" title="Branch 1 was taken 22 times"> + </span>]:<span class="lineCov"> 692 : if(i &lt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 86 </span> : : { +<span class="lineNum"> 87 </span> [<span class="branchCov" title="Branch 0 was taken 60818 times"> + </span><span class="branchCov" title="Branch 1 was taken 670 times"> + </span>]:<span class="lineCov"> 61488 : while(i &lt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 88 </span> : : { +<span class="lineNum"> 89 </span> :<span class="lineCov"> 60818 : inner_pad[i] = 0x36;</span> +<span class="lineNum"> 90 </span> :<span class="lineCov"> 60818 : outer_pad[i] = 0x5c;</span> +<span class="lineNum"> 91 </span> :<span class="lineCov"> 60818 : i++;</span> +<span class="lineNum"> 92 </span> : : } +<span class="lineNum"> 93 </span> : : } +<span class="lineNum"> 94 </span> :<span class="lineCov"> 692 : return;</span> +<span class="lineNum"> 95 </span> : : } +<span class="lineNum"> 96 </span> : : +<span class="lineNum"> 97 </span> : : /* Begin MD5 HMAC functions +<a name="98"><span class="lineNum"> 98 </span> : : */</a> +<span class="lineNum"> 99 </span> : : static void +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : hmac_md5_init(hmac_md5_ctx *ctx, const char *key, const int key_len)</span> +<span class="lineNum"> 101 </span> : : { +<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : unsigned char init_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : int final_len = key_len;</span> +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> +<span class="lineNum"> 108 </span> : : +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : memcpy(init_key, key, final_len);</span> +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(MD5_BLOCK_LEN &lt; key_len)</span> +<span class="lineNum"> 112 </span> : : { +<span class="lineNum"> 113 </span> : : /* Calculate the digest of the key +<span class="lineNum"> 114 </span> : : */ +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : md5(final_key, init_key, final_len);</span> +<span class="lineNum"> 116 </span> : : } +<span class="lineNum"> 117 </span> : : else +<span class="lineNum"> 118 </span> : : { +<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : memcpy(final_key, init_key, key_len);</span> +<span class="lineNum"> 120 </span> : : } +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : MD5Init(&amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, MD5_BLOCK_LEN);</span> +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : MD5Init(&amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, MD5_BLOCK_LEN);</span> +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 131 </span> : : } +<a name="132"><span class="lineNum"> 132 </span> : : </a> +<span class="lineNum"> 133 </span> : : static void +<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : hmac_md5_update(hmac_md5_ctx *ctx, const char *msg,</span> +<span class="lineNum"> 135 </span> : : unsigned int msg_len) +<span class="lineNum"> 136 </span> : : { +<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> +<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 139 </span> : : } +<a name="140"><span class="lineNum"> 140 </span> : : </a> +<span class="lineNum"> 141 </span> : : static void +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : hmac_md5_final(hmac_md5_ctx *ctx, unsigned char *hmac)</span> +<span class="lineNum"> 143 </span> : : { +<span class="lineNum"> 144 </span> : : unsigned char digest_inside[MD5_DIGEST_LEN]; +<span class="lineNum"> 145 </span> : : +<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : MD5Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_outside, digest_inside, MD5_DIGEST_LEN);</span> +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : MD5Final(hmac, &amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 149 </span> : : +<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 151 </span> : : } +<a name="152"><span class="lineNum"> 152 </span> : : </a> +<span class="lineNum"> 153 </span> : : void +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : hmac_md5(const char *msg, const unsigned int msg_len,</span> +<span class="lineNum"> 155 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) +<span class="lineNum"> 156 </span> : : { +<span class="lineNum"> 157 </span> : : hmac_md5_ctx ctx; +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); +<span class="lineNum"> 160 </span> : : +<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : hmac_md5_init(&amp;ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : hmac_md5_update(&amp;ctx, msg, msg_len);</span> +<span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : hmac_md5_final(&amp;ctx, hmac);</span> +<span class="lineNum"> 164 </span> : : +<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 166 </span> : : } +<span class="lineNum"> 167 </span> : : +<span class="lineNum"> 168 </span> : : /* Begin SHA1 HMAC functions +<a name="169"><span class="lineNum"> 169 </span> : : */</a> +<span class="lineNum"> 170 </span> : : static void +<span class="lineNum"> 171 </span> :<span class="lineCov"> 148 : hmac_sha1_init(hmac_sha1_ctx *ctx, const char *key, const int key_len)</span> +<span class="lineNum"> 172 </span> : : { +<span class="lineNum"> 173 </span> :<span class="lineCov"> 148 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 174 </span> :<span class="lineCov"> 148 : unsigned char init_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 175 </span> :<span class="lineCov"> 148 : int final_len = key_len;</span> +<span class="lineNum"> 176 </span> : : +<span class="lineNum"> 177 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 148 times"> + </span>]:<span class="lineCov"> 148 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> :<span class="lineCov"> 148 : memcpy(init_key, key, final_len);</span> +<span class="lineNum"> 181 </span> : : +<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 100 times"> + </span><span class="branchCov" title="Branch 1 was taken 48 times"> + </span>]:<span class="lineCov"> 148 : if(SHA1_BLOCK_LEN &lt; key_len)</span> +<span class="lineNum"> 183 </span> : : { +<span class="lineNum"> 184 </span> : : /* Calculate the digest of the key +<span class="lineNum"> 185 </span> : : */ +<span class="lineNum"> 186 </span> :<span class="lineCov"> 100 : sha1(final_key, init_key, final_len);</span> +<span class="lineNum"> 187 </span> : : } +<span class="lineNum"> 188 </span> : : else +<span class="lineNum"> 189 </span> : : { +<span class="lineNum"> 190 </span> :<span class="lineCov"> 48 : memcpy(final_key, init_key, key_len);</span> +<span class="lineNum"> 191 </span> : : } +<span class="lineNum"> 192 </span> : : +<span class="lineNum"> 193 </span> :<span class="lineCov"> 148 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> :<span class="lineCov"> 148 : sha1_init(&amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 196 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA1_BLOCK_LEN);</span> +<span class="lineNum"> 197 </span> : : +<span class="lineNum"> 198 </span> :<span class="lineCov"> 148 : sha1_init(&amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 199 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA1_BLOCK_LEN);</span> +<span class="lineNum"> 200 </span> : : +<span class="lineNum"> 201 </span> :<span class="lineCov"> 148 : return;</span> +<span class="lineNum"> 202 </span> : : } +<a name="203"><span class="lineNum"> 203 </span> : : </a> +<span class="lineNum"> 204 </span> : : static void +<span class="lineNum"> 205 </span> :<span class="lineCov"> 148 : hmac_sha1_update(hmac_sha1_ctx *ctx, const char *msg,</span> +<span class="lineNum"> 206 </span> : : unsigned int msg_len) +<span class="lineNum"> 207 </span> : : { +<span class="lineNum"> 208 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> +<span class="lineNum"> 209 </span> :<span class="lineCov"> 148 : return;</span> +<span class="lineNum"> 210 </span> : : } +<a name="211"><span class="lineNum"> 211 </span> : : </a> +<span class="lineNum"> 212 </span> : : static void +<span class="lineNum"> 213 </span> :<span class="lineCov"> 148 : hmac_sha1_final(hmac_sha1_ctx *ctx, unsigned char *hmac)</span> +<span class="lineNum"> 214 </span> : : { +<span class="lineNum"> 215 </span> : : unsigned char digest_inside[SHA1_DIGEST_LEN]; +<span class="lineNum"> 216 </span> : : +<span class="lineNum"> 217 </span> :<span class="lineCov"> 148 : sha1_final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 218 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA1_DIGEST_LEN);</span> +<span class="lineNum"> 219 </span> :<span class="lineCov"> 148 : sha1_final(hmac, &amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> :<span class="lineCov"> 148 : return;</span> +<span class="lineNum"> 222 </span> : : } +<a name="223"><span class="lineNum"> 223 </span> : : </a> +<span class="lineNum"> 224 </span> : : void +<span class="lineNum"> 225 </span> :<span class="lineCov"> 148 : hmac_sha1(const char *msg, const unsigned int msg_len,</span> +<span class="lineNum"> 226 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) +<span class="lineNum"> 227 </span> : : { +<span class="lineNum"> 228 </span> : : hmac_sha1_ctx ctx; +<span class="lineNum"> 229 </span> : : +<span class="lineNum"> 230 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); +<span class="lineNum"> 231 </span> : : +<span class="lineNum"> 232 </span> :<span class="lineCov"> 148 : hmac_sha1_init(&amp;ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 233 </span> :<span class="lineCov"> 148 : hmac_sha1_update(&amp;ctx, msg, msg_len);</span> +<span class="lineNum"> 234 </span> :<span class="lineCov"> 148 : hmac_sha1_final(&amp;ctx, hmac);</span> +<span class="lineNum"> 235 </span> : : +<span class="lineNum"> 236 </span> :<span class="lineCov"> 148 : return;</span> +<span class="lineNum"> 237 </span> : : } +<span class="lineNum"> 238 </span> : : +<span class="lineNum"> 239 </span> : : /* Begin SHA256 HMAC functions +<a name="240"><span class="lineNum"> 240 </span> : : */</a> +<span class="lineNum"> 241 </span> : : static void +<span class="lineNum"> 242 </span> :<span class="lineCov"> 544 : hmac_sha256_init(hmac_sha256_ctx *ctx, const char *key, const int key_len)</span> +<span class="lineNum"> 243 </span> : : { +<span class="lineNum"> 244 </span> :<span class="lineCov"> 544 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 245 </span> :<span class="lineCov"> 544 : unsigned char init_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 246 </span> :<span class="lineCov"> 544 : int final_len = key_len;</span> +<span class="lineNum"> 247 </span> : : +<span class="lineNum"> 248 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 544 times"> + </span>]:<span class="lineCov"> 544 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> :<span class="lineCov"> 544 : memcpy(init_key, key, final_len);</span> +<span class="lineNum"> 252 </span> : : +<span class="lineNum"> 253 </span> [<span class="branchCov" title="Branch 0 was taken 134 times"> + </span><span class="branchCov" title="Branch 1 was taken 410 times"> + </span>]:<span class="lineCov"> 544 : if(SHA256_BLOCK_LEN &lt; key_len)</span> +<span class="lineNum"> 254 </span> : : { +<span class="lineNum"> 255 </span> : : /* Calculate the digest of the key +<span class="lineNum"> 256 </span> : : */ +<span class="lineNum"> 257 </span> :<span class="lineCov"> 134 : sha256(final_key, init_key, final_len);</span> +<span class="lineNum"> 258 </span> : : } +<span class="lineNum"> 259 </span> : : else +<span class="lineNum"> 260 </span> : : { +<span class="lineNum"> 261 </span> :<span class="lineCov"> 410 : memcpy(final_key, init_key, key_len);</span> +<span class="lineNum"> 262 </span> : : } +<span class="lineNum"> 263 </span> : : +<span class="lineNum"> 264 </span> :<span class="lineCov"> 544 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> +<span class="lineNum"> 265 </span> : : +<span class="lineNum"> 266 </span> :<span class="lineCov"> 544 : SHA256_Init(&amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 267 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA256_BLOCK_LEN);</span> +<span class="lineNum"> 268 </span> : : +<span class="lineNum"> 269 </span> :<span class="lineCov"> 544 : SHA256_Init(&amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 270 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA256_BLOCK_LEN);</span> +<span class="lineNum"> 271 </span> : : +<span class="lineNum"> 272 </span> :<span class="lineCov"> 544 : return;</span> +<span class="lineNum"> 273 </span> : : } +<a name="274"><span class="lineNum"> 274 </span> : : </a> +<span class="lineNum"> 275 </span> : : static void +<span class="lineNum"> 276 </span> :<span class="lineCov"> 544 : hmac_sha256_update(hmac_sha256_ctx *ctx, const char *msg,</span> +<span class="lineNum"> 277 </span> : : unsigned int msg_len) +<span class="lineNum"> 278 </span> : : { +<span class="lineNum"> 279 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> +<span class="lineNum"> 280 </span> :<span class="lineCov"> 544 : return;</span> +<span class="lineNum"> 281 </span> : : } +<a name="282"><span class="lineNum"> 282 </span> : : </a> +<span class="lineNum"> 283 </span> : : static void +<span class="lineNum"> 284 </span> :<span class="lineCov"> 544 : hmac_sha256_final(hmac_sha256_ctx *ctx, unsigned char *hmac)</span> +<span class="lineNum"> 285 </span> : : { +<span class="lineNum"> 286 </span> : : unsigned char digest_inside[SHA256_DIGEST_LEN]; +<span class="lineNum"> 287 </span> : : +<span class="lineNum"> 288 </span> :<span class="lineCov"> 544 : SHA256_Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 289 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA256_DIGEST_LEN);</span> +<span class="lineNum"> 290 </span> :<span class="lineCov"> 544 : SHA256_Final(hmac, &amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 291 </span> : : +<span class="lineNum"> 292 </span> :<span class="lineCov"> 544 : return;</span> +<span class="lineNum"> 293 </span> : : } +<a name="294"><span class="lineNum"> 294 </span> : : </a> +<span class="lineNum"> 295 </span> : : void +<span class="lineNum"> 296 </span> :<span class="lineCov"> 544 : hmac_sha256(const char *msg, const unsigned int msg_len,</span> +<span class="lineNum"> 297 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) +<span class="lineNum"> 298 </span> : : { +<span class="lineNum"> 299 </span> : : hmac_sha256_ctx ctx; +<span class="lineNum"> 300 </span> : : +<span class="lineNum"> 301 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); +<span class="lineNum"> 302 </span> : : +<span class="lineNum"> 303 </span> :<span class="lineCov"> 544 : hmac_sha256_init(&amp;ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 304 </span> :<span class="lineCov"> 544 : hmac_sha256_update(&amp;ctx, msg, msg_len);</span> +<span class="lineNum"> 305 </span> :<span class="lineCov"> 544 : hmac_sha256_final(&amp;ctx, hmac);</span> +<span class="lineNum"> 306 </span> : : +<span class="lineNum"> 307 </span> :<span class="lineCov"> 544 : return;</span> +<span class="lineNum"> 308 </span> : : } +<span class="lineNum"> 309 </span> : : +<span class="lineNum"> 310 </span> : : /* Begin SHA384 HMAC functions +<a name="311"><span class="lineNum"> 311 </span> : : */</a> +<span class="lineNum"> 312 </span> : : static void +<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : hmac_sha384_init(hmac_sha384_ctx *ctx, const char *key, const int key_len)</span> +<span class="lineNum"> 314 </span> : : { +<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : int final_len = key_len;</span> +<span class="lineNum"> 317 </span> : : +<span class="lineNum"> 318 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> +<span class="lineNum"> 320 </span> : : +<span class="lineNum"> 321 </span> : : /* When we eventually support arbitrary key sizes, take the digest +<span class="lineNum"> 322 </span> : : * of the key with: sha384(final_key, init_key, final_len); +<span class="lineNum"> 323 </span> : : */ +<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : memcpy(final_key, key, final_len);</span> +<span class="lineNum"> 325 </span> : : +<span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> +<span class="lineNum"> 327 </span> : : +<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : SHA384_Init(&amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA384_BLOCK_LEN);</span> +<span class="lineNum"> 330 </span> : : +<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : SHA384_Init(&amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA384_BLOCK_LEN);</span> +<span class="lineNum"> 333 </span> : : +<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 335 </span> : : } +<a name="336"><span class="lineNum"> 336 </span> : : </a> +<span class="lineNum"> 337 </span> : : static void +<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : hmac_sha384_update(hmac_sha384_ctx *ctx, const char *msg,</span> +<span class="lineNum"> 339 </span> : : unsigned int msg_len) +<span class="lineNum"> 340 </span> : : { +<span class="lineNum"> 341 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> +<span class="lineNum"> 342 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 343 </span> : : } +<a name="344"><span class="lineNum"> 344 </span> : : </a> +<span class="lineNum"> 345 </span> : : static void +<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : hmac_sha384_final(hmac_sha384_ctx *ctx, unsigned char *hmac)</span> +<span class="lineNum"> 347 </span> : : { +<span class="lineNum"> 348 </span> : : unsigned char digest_inside[SHA384_DIGEST_LEN]; +<span class="lineNum"> 349 </span> : : +<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : SHA384_Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA384_DIGEST_LEN);</span> +<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : SHA384_Final(hmac, &amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 353 </span> : : +<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 355 </span> : : } +<a name="356"><span class="lineNum"> 356 </span> : : </a> +<span class="lineNum"> 357 </span> : : void +<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : hmac_sha384(const char *msg, const unsigned int msg_len,</span> +<span class="lineNum"> 359 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) +<span class="lineNum"> 360 </span> : : { +<span class="lineNum"> 361 </span> : : hmac_sha384_ctx ctx; +<span class="lineNum"> 362 </span> : : +<span class="lineNum"> 363 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); +<span class="lineNum"> 364 </span> : : +<span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : hmac_sha384_init(&amp;ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : hmac_sha384_update(&amp;ctx, msg, msg_len);</span> +<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : hmac_sha384_final(&amp;ctx, hmac);</span> +<span class="lineNum"> 368 </span> : : +<span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 370 </span> : : } +<span class="lineNum"> 371 </span> : : +<span class="lineNum"> 372 </span> : : /* Begin SHA512 HMAC functions +<a name="373"><span class="lineNum"> 373 </span> : : */</a> +<span class="lineNum"> 374 </span> : : static void +<span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : hmac_sha512_init(hmac_sha512_ctx *ctx, const char *key, const int key_len)</span> +<span class="lineNum"> 376 </span> : : { +<span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> +<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : int final_len = key_len;</span> +<span class="lineNum"> 379 </span> : : +<span class="lineNum"> 380 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> +<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> +<span class="lineNum"> 382 </span> : : +<span class="lineNum"> 383 </span> : : /* When we eventually support arbitrary key sizes, take the digest +<span class="lineNum"> 384 </span> : : * of the key with: sha512(final_key, init_key, final_len); +<span class="lineNum"> 385 </span> : : */ +<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : memcpy(final_key, key, final_len);</span> +<span class="lineNum"> 387 </span> : : +<span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> +<span class="lineNum"> 389 </span> : : +<span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : SHA512_Init(&amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA512_BLOCK_LEN);</span> +<span class="lineNum"> 392 </span> : : +<span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : SHA512_Init(&amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA512_BLOCK_LEN);</span> +<span class="lineNum"> 395 </span> : : +<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 397 </span> : : } +<a name="398"><span class="lineNum"> 398 </span> : : </a> +<span class="lineNum"> 399 </span> : : static void +<span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : hmac_sha512_update(hmac_sha512_ctx *ctx, const char *msg,</span> +<span class="lineNum"> 401 </span> : : unsigned int msg_len) +<span class="lineNum"> 402 </span> : : { +<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> +<span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 405 </span> : : } +<a name="406"><span class="lineNum"> 406 </span> : : </a> +<span class="lineNum"> 407 </span> : : static void +<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : hmac_sha512_final(hmac_sha512_ctx *ctx, unsigned char *hmac)</span> +<span class="lineNum"> 409 </span> : : { +<span class="lineNum"> 410 </span> : : unsigned char digest_inside[SHA512_DIGEST_LEN]; +<span class="lineNum"> 411 </span> : : +<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : SHA512_Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> +<span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA512_DIGEST_LEN);</span> +<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : SHA512_Final(hmac, &amp;ctx-&gt;ctx_outside);</span> +<span class="lineNum"> 415 </span> : : +<span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 417 </span> : : } +<a name="418"><span class="lineNum"> 418 </span> : : </a> +<span class="lineNum"> 419 </span> : : void +<span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : hmac_sha512(const char *msg, const unsigned int msg_len,</span> +<span class="lineNum"> 421 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) +<span class="lineNum"> 422 </span> : : { +<span class="lineNum"> 423 </span> : : hmac_sha512_ctx ctx; +<span class="lineNum"> 424 </span> : : +<span class="lineNum"> 425 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); +<span class="lineNum"> 426 </span> : : +<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : hmac_sha512_init(&amp;ctx, hmac_key, hmac_key_len);</span> +<span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : hmac_sha512_update(&amp;ctx, msg, msg_len);</span> +<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : hmac_sha512_final(&amp;ctx, hmac);</span> +<span class="lineNum"> 430 </span> : : +<span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 432 </span> : : } +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html new file mode 100644 index 00000000..85749690 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html @@ -0,0 +1,407 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">1704</td> + <td class="headerCovTableEntry">2851</td> + <td class="headerCovTableEntryLo">59.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">136</td> + <td class="headerCovTableEntry">195</td> + <td class="headerCovTableEntryLo">69.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">840</td> + <td class="headerCovTableEntry">2002</td> + <td class="headerCovTableEntryLo">42.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> + </tr> + <tr> + <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> + </td> + <td class="coverPerLo">11.0&nbsp;%</td> + <td class="coverNumLo">16 / 145</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">8.9&nbsp;%</td> + <td class="coverNumLo">13 / 146</td> + </tr> + <tr> + <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> + </td> + <td class="coverPerLo">14.7&nbsp;%</td> + <td class="coverNumLo">28 / 190</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">2 / 6</td> + <td class="coverPerLo">10.5&nbsp;%</td> + <td class="coverNumLo">9 / 86</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> + </td> + <td class="coverPerLo">23.8&nbsp;%</td> + <td class="coverNumLo">5 / 21</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">10.7&nbsp;%</td> + <td class="coverNumLo">3 / 28</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> + </td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">5 / 15</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">15.0&nbsp;%</td> + <td class="coverNumLo">3 / 20</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> + </td> + <td class="coverPerLo">36.3&nbsp;%</td> + <td class="coverNumLo">117 / 322</td> + <td class="coverPerLo">37.9&nbsp;%</td> + <td class="coverNumLo">11 / 29</td> + <td class="coverPerLo">22.1&nbsp;%</td> + <td class="coverNumLo">75 / 340</td> + </tr> + <tr> + <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> + </td> + <td class="coverPerLo">41.2&nbsp;%</td> + <td class="coverNumLo">94 / 228</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">4 / 12</td> + <td class="coverPerLo">28.9&nbsp;%</td> + <td class="coverNumLo">22 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> + </td> + <td class="coverPerLo">56.9&nbsp;%</td> + <td class="coverNumLo">41 / 72</td> + <td class="coverPerLo">60.0&nbsp;%</td> + <td class="coverNumLo">6 / 10</td> + <td class="coverPerLo">31.0&nbsp;%</td> + <td class="coverNumLo">18 / 58</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> + </td> + <td class="coverPerLo">73.1&nbsp;%</td> + <td class="coverNumLo">79 / 108</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerLo">43.8&nbsp;%</td> + <td class="coverNumLo">42 / 96</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> + </td> + <td class="coverPerLo">73.2&nbsp;%</td> + <td class="coverNumLo">139 / 190</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">14 / 14</td> + <td class="coverPerLo">44.5&nbsp;%</td> + <td class="coverNumLo">73 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">117 / 216</td> + <td class="coverPerLo">70.0&nbsp;%</td> + <td class="coverNumLo">7 / 10</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">74 / 166</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> + </td> + <td class="coverPerMed">78.1&nbsp;%</td> + <td class="coverNumMed">50 / 64</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">25 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> + </td> + <td class="coverPerLo">74.3&nbsp;%</td> + <td class="coverNumLo">26 / 35</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">46.7&nbsp;%</td> + <td class="coverNumLo">14 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> + </td> + <td class="coverPerMed">89.9&nbsp;%</td> + <td class="coverNumMed">107 / 119</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> + </td> + <td class="coverPerMed">78.0&nbsp;%</td> + <td class="coverNumMed">213 / 273</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">18 / 18</td> + <td class="coverPerLo">53.3&nbsp;%</td> + <td class="coverNumLo">131 / 246</td> + </tr> + <tr> + <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> + </td> + <td class="coverPerLo">45.3&nbsp;%</td> + <td class="coverNumLo">67 / 148</td> + <td class="coverPerLo">42.9&nbsp;%</td> + <td class="coverNumLo">9 / 21</td> + <td class="coverPerLo">54.5&nbsp;%</td> + <td class="coverNumLo">12 / 22</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> + </td> + <td class="coverPerMed">79.6&nbsp;%</td> + <td class="coverNumMed">86 / 108</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + <td class="coverPerLo">55.6&nbsp;%</td> + <td class="coverNumLo">60 / 108</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">7 / 12</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> + </td> + <td class="coverPerLo">71.4&nbsp;%</td> + <td class="coverNumLo">20 / 28</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">14 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> + </td> + <td class="coverPerMed">79.2&nbsp;%</td> + <td class="coverNumMed">95 / 120</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">6 / 7</td> + <td class="coverPerLo">58.9&nbsp;%</td> + <td class="coverNumLo">33 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> + </td> + <td class="coverPerMed">85.2&nbsp;%</td> + <td class="coverNumMed">46 / 54</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">64.5&nbsp;%</td> + <td class="coverNumLo">49 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> + </td> + <td class="coverPerHi">91.5&nbsp;%</td> + <td class="coverNumHi">97 / 106</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerMed">75.0&nbsp;%</td> + <td class="coverNumMed">18 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> + </td> + <td class="coverPerHi">94.1&nbsp;%</td> + <td class="coverNumHi">16 / 17</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">32 / 32</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerMed">85.0&nbsp;%</td> + <td class="coverNumMed">17 / 20</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">12 / 14</td> + </tr> + <tr> + <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> + </td> + <td class="coverPerHi">95.8&nbsp;%</td> + <td class="coverNumHi">159 / 166</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">11 / 11</td> + <td class="coverPerHi">90.4&nbsp;%</td> + <td class="coverNumHi">103 / 114</td> + </tr> + <tr> + <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> + </td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">25 / 50</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + <td class="coverPerHi">-</td> + <td class="coverNumHi">0 / 0</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html new file mode 100644 index 00000000..5ebfbf33 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html @@ -0,0 +1,407 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">1704</td> + <td class="headerCovTableEntry">2851</td> + <td class="headerCovTableEntryLo">59.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">136</td> + <td class="headerCovTableEntry">195</td> + <td class="headerCovTableEntryLo">69.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">840</td> + <td class="headerCovTableEntry">2002</td> + <td class="headerCovTableEntryLo">42.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> + </td> + <td class="coverPerLo">14.7&nbsp;%</td> + <td class="coverNumLo">28 / 190</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">2 / 6</td> + <td class="coverPerLo">10.5&nbsp;%</td> + <td class="coverNumLo">9 / 86</td> + </tr> + <tr> + <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> + </td> + <td class="coverPerLo">41.2&nbsp;%</td> + <td class="coverNumLo">94 / 228</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">4 / 12</td> + <td class="coverPerLo">28.9&nbsp;%</td> + <td class="coverNumLo">22 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> + </td> + <td class="coverPerLo">36.3&nbsp;%</td> + <td class="coverNumLo">117 / 322</td> + <td class="coverPerLo">37.9&nbsp;%</td> + <td class="coverNumLo">11 / 29</td> + <td class="coverPerLo">22.1&nbsp;%</td> + <td class="coverNumLo">75 / 340</td> + </tr> + <tr> + <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> + </td> + <td class="coverPerLo">45.3&nbsp;%</td> + <td class="coverNumLo">67 / 148</td> + <td class="coverPerLo">42.9&nbsp;%</td> + <td class="coverNumLo">9 / 21</td> + <td class="coverPerLo">54.5&nbsp;%</td> + <td class="coverNumLo">12 / 22</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> + </td> + <td class="coverPerLo">23.8&nbsp;%</td> + <td class="coverNumLo">5 / 21</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">10.7&nbsp;%</td> + <td class="coverNumLo">3 / 28</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> + </td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">5 / 15</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">15.0&nbsp;%</td> + <td class="coverNumLo">3 / 20</td> + </tr> + <tr> + <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> + </td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">25 / 50</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + <td class="coverPerHi">-</td> + <td class="coverNumHi">0 / 0</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> + </td> + <td class="coverPerLo">56.9&nbsp;%</td> + <td class="coverNumLo">41 / 72</td> + <td class="coverPerLo">60.0&nbsp;%</td> + <td class="coverNumLo">6 / 10</td> + <td class="coverPerLo">31.0&nbsp;%</td> + <td class="coverNumLo">18 / 58</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">117 / 216</td> + <td class="coverPerLo">70.0&nbsp;%</td> + <td class="coverNumLo">7 / 10</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">74 / 166</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> + </td> + <td class="coverPerMed">79.6&nbsp;%</td> + <td class="coverNumMed">86 / 108</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + <td class="coverPerLo">55.6&nbsp;%</td> + <td class="coverNumLo">60 / 108</td> + </tr> + <tr> + <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> + </td> + <td class="coverPerMed">79.2&nbsp;%</td> + <td class="coverNumMed">95 / 120</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">6 / 7</td> + <td class="coverPerLo">58.9&nbsp;%</td> + <td class="coverNumLo">33 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">12 / 14</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> + </td> + <td class="coverPerHi">94.1&nbsp;%</td> + <td class="coverNumHi">16 / 17</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> + </td> + <td class="coverPerLo">11.0&nbsp;%</td> + <td class="coverNumLo">16 / 145</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">8.9&nbsp;%</td> + <td class="coverNumLo">13 / 146</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> + </td> + <td class="coverPerLo">74.3&nbsp;%</td> + <td class="coverNumLo">26 / 35</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">46.7&nbsp;%</td> + <td class="coverNumLo">14 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> + </td> + <td class="coverPerLo">71.4&nbsp;%</td> + <td class="coverNumLo">20 / 28</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">14 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">7 / 12</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> + </td> + <td class="coverPerMed">85.2&nbsp;%</td> + <td class="coverNumMed">46 / 54</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">64.5&nbsp;%</td> + <td class="coverNumLo">49 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">32 / 32</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerMed">85.0&nbsp;%</td> + <td class="coverNumMed">17 / 20</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> + </td> + <td class="coverPerMed">78.1&nbsp;%</td> + <td class="coverNumMed">50 / 64</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">25 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> + </td> + <td class="coverPerMed">89.9&nbsp;%</td> + <td class="coverNumMed">107 / 119</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> + </td> + <td class="coverPerHi">91.5&nbsp;%</td> + <td class="coverNumHi">97 / 106</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerMed">75.0&nbsp;%</td> + <td class="coverNumMed">18 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> + </td> + <td class="coverPerLo">73.1&nbsp;%</td> + <td class="coverNumLo">79 / 108</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerLo">43.8&nbsp;%</td> + <td class="coverNumLo">42 / 96</td> + </tr> + <tr> + <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> + </td> + <td class="coverPerHi">95.8&nbsp;%</td> + <td class="coverNumHi">159 / 166</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">11 / 11</td> + <td class="coverPerHi">90.4&nbsp;%</td> + <td class="coverNumHi">103 / 114</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> + </td> + <td class="coverPerLo">73.2&nbsp;%</td> + <td class="coverNumLo">139 / 190</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">14 / 14</td> + <td class="coverPerLo">44.5&nbsp;%</td> + <td class="coverNumLo">73 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> + </td> + <td class="coverPerMed">78.0&nbsp;%</td> + <td class="coverNumMed">213 / 273</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">18 / 18</td> + <td class="coverPerLo">53.3&nbsp;%</td> + <td class="coverNumLo">131 / 246</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html new file mode 100644 index 00000000..1d2e35e0 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html @@ -0,0 +1,407 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">1704</td> + <td class="headerCovTableEntry">2851</td> + <td class="headerCovTableEntryLo">59.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">136</td> + <td class="headerCovTableEntry">195</td> + <td class="headerCovTableEntryLo">69.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">840</td> + <td class="headerCovTableEntry">2002</td> + <td class="headerCovTableEntryLo">42.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> + </td> + <td class="coverPerLo">11.0&nbsp;%</td> + <td class="coverNumLo">16 / 145</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">8.9&nbsp;%</td> + <td class="coverNumLo">13 / 146</td> + </tr> + <tr> + <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> + </td> + <td class="coverPerLo">14.7&nbsp;%</td> + <td class="coverNumLo">28 / 190</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">2 / 6</td> + <td class="coverPerLo">10.5&nbsp;%</td> + <td class="coverNumLo">9 / 86</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> + </td> + <td class="coverPerLo">23.8&nbsp;%</td> + <td class="coverNumLo">5 / 21</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">10.7&nbsp;%</td> + <td class="coverNumLo">3 / 28</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> + </td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">5 / 15</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">15.0&nbsp;%</td> + <td class="coverNumLo">3 / 20</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> + </td> + <td class="coverPerLo">36.3&nbsp;%</td> + <td class="coverNumLo">117 / 322</td> + <td class="coverPerLo">37.9&nbsp;%</td> + <td class="coverNumLo">11 / 29</td> + <td class="coverPerLo">22.1&nbsp;%</td> + <td class="coverNumLo">75 / 340</td> + </tr> + <tr> + <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> + </td> + <td class="coverPerLo">41.2&nbsp;%</td> + <td class="coverNumLo">94 / 228</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">4 / 12</td> + <td class="coverPerLo">28.9&nbsp;%</td> + <td class="coverNumLo">22 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> + </td> + <td class="coverPerLo">45.3&nbsp;%</td> + <td class="coverNumLo">67 / 148</td> + <td class="coverPerLo">42.9&nbsp;%</td> + <td class="coverNumLo">9 / 21</td> + <td class="coverPerLo">54.5&nbsp;%</td> + <td class="coverNumLo">12 / 22</td> + </tr> + <tr> + <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> + </td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">25 / 50</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + <td class="coverPerHi">-</td> + <td class="coverNumHi">0 / 0</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">117 / 216</td> + <td class="coverPerLo">70.0&nbsp;%</td> + <td class="coverNumLo">7 / 10</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">74 / 166</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> + </td> + <td class="coverPerLo">56.9&nbsp;%</td> + <td class="coverNumLo">41 / 72</td> + <td class="coverPerLo">60.0&nbsp;%</td> + <td class="coverNumLo">6 / 10</td> + <td class="coverPerLo">31.0&nbsp;%</td> + <td class="coverNumLo">18 / 58</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> + </td> + <td class="coverPerLo">71.4&nbsp;%</td> + <td class="coverNumLo">20 / 28</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">14 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> + </td> + <td class="coverPerLo">73.1&nbsp;%</td> + <td class="coverNumLo">79 / 108</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerLo">43.8&nbsp;%</td> + <td class="coverNumLo">42 / 96</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> + </td> + <td class="coverPerLo">73.2&nbsp;%</td> + <td class="coverNumLo">139 / 190</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">14 / 14</td> + <td class="coverPerLo">44.5&nbsp;%</td> + <td class="coverNumLo">73 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> + </td> + <td class="coverPerLo">74.3&nbsp;%</td> + <td class="coverNumLo">26 / 35</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">46.7&nbsp;%</td> + <td class="coverNumLo">14 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> + </td> + <td class="coverPerMed">78.0&nbsp;%</td> + <td class="coverNumMed">213 / 273</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">18 / 18</td> + <td class="coverPerLo">53.3&nbsp;%</td> + <td class="coverNumLo">131 / 246</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> + </td> + <td class="coverPerMed">78.1&nbsp;%</td> + <td class="coverNumMed">50 / 64</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">25 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> + </td> + <td class="coverPerMed">79.2&nbsp;%</td> + <td class="coverNumMed">95 / 120</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">6 / 7</td> + <td class="coverPerLo">58.9&nbsp;%</td> + <td class="coverNumLo">33 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> + </td> + <td class="coverPerMed">79.6&nbsp;%</td> + <td class="coverNumMed">86 / 108</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + <td class="coverPerLo">55.6&nbsp;%</td> + <td class="coverNumLo">60 / 108</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> + </td> + <td class="coverPerMed">85.2&nbsp;%</td> + <td class="coverNumMed">46 / 54</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">64.5&nbsp;%</td> + <td class="coverNumLo">49 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> + </td> + <td class="coverPerMed">89.9&nbsp;%</td> + <td class="coverNumMed">107 / 119</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> + </td> + <td class="coverPerHi">91.5&nbsp;%</td> + <td class="coverNumHi">97 / 106</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerMed">75.0&nbsp;%</td> + <td class="coverNumMed">18 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> + </td> + <td class="coverPerHi">94.1&nbsp;%</td> + <td class="coverNumHi">16 / 17</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> + </td> + <td class="coverPerHi">95.8&nbsp;%</td> + <td class="coverNumHi">159 / 166</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">11 / 11</td> + <td class="coverPerHi">90.4&nbsp;%</td> + <td class="coverNumHi">103 / 114</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">12 / 14</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">7 / 12</td> + </tr> + <tr> + <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">32 / 32</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerMed">85.0&nbsp;%</td> + <td class="coverNumMed">17 / 20</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html new file mode 100644 index 00000000..a3a57978 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html @@ -0,0 +1,407 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">1704</td> + <td class="headerCovTableEntry">2851</td> + <td class="headerCovTableEntryLo">59.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">136</td> + <td class="headerCovTableEntry">195</td> + <td class="headerCovTableEntryLo">69.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">840</td> + <td class="headerCovTableEntry">2002</td> + <td class="headerCovTableEntryLo">42.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">32 / 32</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerMed">85.0&nbsp;%</td> + <td class="coverNumMed">17 / 20</td> + </tr> + <tr> + <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> + </td> + <td class="coverPerMed">79.2&nbsp;%</td> + <td class="coverNumMed">95 / 120</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">6 / 7</td> + <td class="coverPerLo">58.9&nbsp;%</td> + <td class="coverNumLo">33 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> + </td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">25 / 50</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + <td class="coverPerHi">-</td> + <td class="coverNumHi">0 / 0</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> + </td> + <td class="coverPerLo">71.4&nbsp;%</td> + <td class="coverNumLo">20 / 28</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">14 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> + </td> + <td class="coverPerLo">73.2&nbsp;%</td> + <td class="coverNumLo">139 / 190</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">14 / 14</td> + <td class="coverPerLo">44.5&nbsp;%</td> + <td class="coverNumLo">73 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> + </td> + <td class="coverPerLo">56.9&nbsp;%</td> + <td class="coverNumLo">41 / 72</td> + <td class="coverPerLo">60.0&nbsp;%</td> + <td class="coverNumLo">6 / 10</td> + <td class="coverPerLo">31.0&nbsp;%</td> + <td class="coverNumLo">18 / 58</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> + </td> + <td class="coverPerMed">78.1&nbsp;%</td> + <td class="coverNumMed">50 / 64</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">25 / 56</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> + </td> + <td class="coverPerLo">36.3&nbsp;%</td> + <td class="coverNumLo">117 / 322</td> + <td class="coverPerLo">37.9&nbsp;%</td> + <td class="coverNumLo">11 / 29</td> + <td class="coverPerLo">22.1&nbsp;%</td> + <td class="coverNumLo">75 / 340</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> + </td> + <td class="coverPerLo">11.0&nbsp;%</td> + <td class="coverNumLo">16 / 145</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">8.9&nbsp;%</td> + <td class="coverNumLo">13 / 146</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">117 / 216</td> + <td class="coverPerLo">70.0&nbsp;%</td> + <td class="coverNumLo">7 / 10</td> + <td class="coverPerLo">44.6&nbsp;%</td> + <td class="coverNumLo">74 / 166</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> + </td> + <td class="coverPerLo">73.1&nbsp;%</td> + <td class="coverNumLo">79 / 108</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerLo">43.8&nbsp;%</td> + <td class="coverNumLo">42 / 96</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> + </td> + <td class="coverPerMed">79.6&nbsp;%</td> + <td class="coverNumMed">86 / 108</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + <td class="coverPerLo">55.6&nbsp;%</td> + <td class="coverNumLo">60 / 108</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> + </td> + <td class="coverPerLo">23.8&nbsp;%</td> + <td class="coverNumLo">5 / 21</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">10.7&nbsp;%</td> + <td class="coverNumLo">3 / 28</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> + </td> + <td class="coverPerLo">74.3&nbsp;%</td> + <td class="coverNumLo">26 / 35</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">46.7&nbsp;%</td> + <td class="coverNumLo">14 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> + </td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">5 / 15</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">1 / 2</td> + <td class="coverPerLo">15.0&nbsp;%</td> + <td class="coverNumLo">3 / 20</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">2 / 2</td> + <td class="coverPerLo">58.3&nbsp;%</td> + <td class="coverNumLo">7 / 12</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> + </td> + <td class="coverPerMed">85.2&nbsp;%</td> + <td class="coverNumMed">46 / 54</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">3 / 3</td> + <td class="coverPerLo">64.5&nbsp;%</td> + <td class="coverNumLo">49 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> + </td> + <td class="coverPerMed">78.0&nbsp;%</td> + <td class="coverNumMed">213 / 273</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">18 / 18</td> + <td class="coverPerLo">53.3&nbsp;%</td> + <td class="coverNumLo">131 / 246</td> + </tr> + <tr> + <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> + </td> + <td class="coverPerLo">14.7&nbsp;%</td> + <td class="coverNumLo">28 / 190</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">2 / 6</td> + <td class="coverPerLo">10.5&nbsp;%</td> + <td class="coverNumLo">9 / 86</td> + </tr> + <tr> + <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> + </td> + <td class="coverPerLo">45.3&nbsp;%</td> + <td class="coverNumLo">67 / 148</td> + <td class="coverPerLo">42.9&nbsp;%</td> + <td class="coverNumLo">9 / 21</td> + <td class="coverPerLo">54.5&nbsp;%</td> + <td class="coverNumLo">12 / 22</td> + </tr> + <tr> + <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> + </td> + <td class="coverPerMed">89.9&nbsp;%</td> + <td class="coverNumMed">107 / 119</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">5 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> + </td> + <td class="coverPerHi">95.8&nbsp;%</td> + <td class="coverNumHi">159 / 166</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">11 / 11</td> + <td class="coverPerHi">90.4&nbsp;%</td> + <td class="coverNumHi">103 / 114</td> + </tr> + <tr> + <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> + </td> + <td class="coverPerHi">91.5&nbsp;%</td> + <td class="coverNumHi">97 / 106</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">5 / 5</td> + <td class="coverPerMed">75.0&nbsp;%</td> + <td class="coverNumMed">18 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> + </td> + <td class="coverPerLo">41.2&nbsp;%</td> + <td class="coverNumLo">94 / 228</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">4 / 12</td> + <td class="coverPerLo">28.9&nbsp;%</td> + <td class="coverNumLo">22 / 76</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> + </td> + <td class="coverPerHi">94.1&nbsp;%</td> + <td class="coverNumHi">16 / 17</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">80.0&nbsp;%</td> + <td class="coverNumMed">8 / 10</td> + </tr> + <tr> + <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> + </td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">12 / 12</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">1 / 1</td> + <td class="coverPerMed">85.7&nbsp;%</td> + <td class="coverNumMed">12 / 14</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html new file mode 100644 index 00000000..8d81e8be --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/md5.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - md5.c<span style="font-size: 80%;"> (<a href="md5.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">107</td> + <td class="headerCovTableEntry">119</td> + <td class="headerCovTableEntryMed">89.9 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="md5.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#193">MD5Transform</a></td> + <td class="coverFnHi">2413</td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#124">MD5Final</a></td> + <td class="coverFnHi">2409</td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#58">MD5Init</a></td> + <td class="coverFnHi">2409</td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#73">MD5Update</a></td> + <td class="coverFnHi">2409</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html new file mode 100644 index 00000000..0cfe3c15 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/md5.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - md5.c<span style="font-size: 80%;"> (<a href="md5.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">107</td> + <td class="headerCovTableEntry">119</td> + <td class="headerCovTableEntryMed">89.9 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="md5.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#124">MD5Final</a></td> + <td class="coverFnHi">2409</td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#58">MD5Init</a></td> + <td class="coverFnHi">2409</td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#193">MD5Transform</a></td> + <td class="coverFnHi">2413</td> + </tr> + <tr> + <td class="coverFn"><a href="md5.c.gcov.html#73">MD5Update</a></td> + <td class="coverFnHi">2409</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html new file mode 100644 index 00000000..60b7c536 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html @@ -0,0 +1,363 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/md5.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - md5.c<span style="font-size: 80%;"> (source / <a href="md5.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">107</td> + <td class="headerCovTableEntry">119</td> + <td class="headerCovTableEntryMed">89.9 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: md5.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Implementation of the MD5 message-digest algorithm for libfwknop. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * This code implements the MD5 message-digest algorithm. +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * The algorithm is due to Ron Rivest. This code was +<span class="lineNum"> 11 </span> : : * written by Colin Plumb in 1993, no copyright is claimed. +<span class="lineNum"> 12 </span> : : * This code is in the public domain; do with it what you wish. +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * Equivalent code is available from RSA Data Security, Inc. +<span class="lineNum"> 15 </span> : : * This code has been tested against that, and is equivalent, +<span class="lineNum"> 16 </span> : : * except that you don't need to include two pages of legalese +<span class="lineNum"> 17 </span> : : * with every copy. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * To compute the message digest of a chunk of bytes, declare an +<span class="lineNum"> 20 </span> : : * MD5Context structure, pass it to MD5Init, call MD5Update as +<span class="lineNum"> 21 </span> : : * needed on buffers full of bytes, and then call MD5Final, which +<span class="lineNum"> 22 </span> : : * will fill a supplied 16-byte array with the digest. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 25 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 26 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +<span class="lineNum"> 27 </span> : : * +<span class="lineNum"> 28 </span> : : ***************************************************************************** +<span class="lineNum"> 29 </span> : : */ +<span class="lineNum"> 30 </span> : : #include &quot;md5.h&quot; +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : +<span class="lineNum"> 33 </span> : : #if BYTEORDER == 1234 +<span class="lineNum"> 34 </span> : : #define byteReverse(buf, len) /* Nothing */ +<span class="lineNum"> 35 </span> : : #elif BYTEORDER == 4321 +<span class="lineNum"> 36 </span> : : /* Note: this code is harmless on little-endian machines. +<span class="lineNum"> 37 </span> : : */ +<span class="lineNum"> 38 </span> : : void byteReverse(unsigned char *buf, unsigned longs) +<span class="lineNum"> 39 </span> : : { +<span class="lineNum"> 40 </span> : : uint32_t t; +<span class="lineNum"> 41 </span> : : do { +<span class="lineNum"> 42 </span> : : t = (uint32_t) ((unsigned) buf[3] &lt;&lt; 8 | buf[2]) &lt;&lt; 16 | +<span class="lineNum"> 43 </span> : : ((unsigned) buf[1] &lt;&lt; 8 | buf[0]); +<span class="lineNum"> 44 </span> : : *(uint32_t *) buf = t; +<span class="lineNum"> 45 </span> : : buf += 4; +<span class="lineNum"> 46 </span> : : } while (--longs); +<span class="lineNum"> 47 </span> : : } +<span class="lineNum"> 48 </span> : : #else +<span class="lineNum"> 49 </span> : : #define byteReverse(buf, len) /* Nothing */ +<span class="lineNum"> 50 </span> : : #ifndef WIN32 +<span class="lineNum"> 51 </span> : : #warning Undetermined or unsupported Byte Order... We will try LITTLE_ENDIAN +<span class="lineNum"> 52 </span> : : #endif +<span class="lineNum"> 53 </span> : : #endif +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : /* +<span class="lineNum"> 56 </span> : : * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious +<span class="lineNum"> 57 </span> : : * initialization constants. +<a name="58"><span class="lineNum"> 58 </span> : : */</a> +<span class="lineNum"> 59 </span> : : void +<span class="lineNum"> 60 </span> :<span class="lineCov"> 2409 : MD5Init(MD5Context *ctx)</span> +<span class="lineNum"> 61 </span> : : { +<span class="lineNum"> 62 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[0] = 0x67452301;</span> +<span class="lineNum"> 63 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[1] = 0xefcdab89;</span> +<span class="lineNum"> 64 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[2] = 0x98badcfe;</span> +<span class="lineNum"> 65 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[3] = 0x10325476;</span> +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> :<span class="lineCov"> 2409 : ctx-&gt;bits[0] = 0;</span> +<span class="lineNum"> 68 </span> :<span class="lineCov"> 2409 : ctx-&gt;bits[1] = 0;</span> +<span class="lineNum"> 69 </span> :<span class="lineCov"> 2409 : }</span> +<span class="lineNum"> 70 </span> : : +<span class="lineNum"> 71 </span> : : /* Update context to reflect the concatenation of another buffer full +<span class="lineNum"> 72 </span> : : * of bytes. +<a name="73"><span class="lineNum"> 73 </span> : : */</a> +<span class="lineNum"> 74 </span> : : void +<span class="lineNum"> 75 </span> :<span class="lineCov"> 2409 : MD5Update(MD5Context *ctx, unsigned char *buf, unsigned len)</span> +<span class="lineNum"> 76 </span> : : { +<span class="lineNum"> 77 </span> : : uint32_t t; +<span class="lineNum"> 78 </span> : : +<span class="lineNum"> 79 </span> : : /* Update bitcount +<span class="lineNum"> 80 </span> : : */ +<span class="lineNum"> 81 </span> :<span class="lineCov"> 2409 : t = ctx-&gt;bits[0];</span> +<span class="lineNum"> 82 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2409 times"> + </span>]:<span class="lineCov"> 2409 : if ((ctx-&gt;bits[0] = t + ((uint32_t) len &lt;&lt; 3)) &lt; t)</span> +<span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : ctx-&gt;bits[1]++; /* Carry from low to high */</span> +<span class="lineNum"> 84 </span> :<span class="lineCov"> 2409 : ctx-&gt;bits[1] += len &gt;&gt; 29;</span> +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> :<span class="lineCov"> 2409 : t = (t &gt;&gt; 3) &amp; 0x3f; /* Bytes already in shsInfo-&gt;data */</span> +<span class="lineNum"> 87 </span> : : +<span class="lineNum"> 88 </span> : : /* Handle any leading odd-sized chunks +<span class="lineNum"> 89 </span> : : */ +<span class="lineNum"> 90 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2409 times"> + </span>]:<span class="lineCov"> 2409 : if (t) {</span> +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : unsigned char *p = (unsigned char *) ctx-&gt;in + t;</span> +<span class="lineNum"> 92 </span> : : +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : t = 64 - t;</span> +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &lt; t) {</span> +<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : memcpy(p, buf, len);</span> +<span class="lineNum"> 97 </span> :<span class="lineCov"> 2409 : return;</span> +<span class="lineNum"> 98 </span> : : } +<span class="lineNum"> 99 </span> : : +<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : memcpy(p, buf, t);</span> +<span class="lineNum"> 101 </span> : : byteReverse(ctx-&gt;in, 16); +<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : buf += t;</span> +<span class="lineNum"> 104 </span> :<span class="lineCov"> 2409 : len -= t;</span> +<span class="lineNum"> 105 </span> : : } +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> : : /* Process data in 64-byte chunks +<span class="lineNum"> 108 </span> : : */ +<span class="lineNum"> 109 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2409 times"> + </span>]:<span class="lineCov"> 2409 : while (len &gt;= 64) {</span> +<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : memcpy(ctx-&gt;in, buf, 64);</span> +<span class="lineNum"> 111 </span> : : byteReverse(ctx-&gt;in, 16); +<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> +<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : buf += 64;</span> +<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : len -= 64;</span> +<span class="lineNum"> 115 </span> : : } +<span class="lineNum"> 116 </span> : : +<span class="lineNum"> 117 </span> : : /* Handle any remaining bytes of data. +<span class="lineNum"> 118 </span> : : */ +<span class="lineNum"> 119 </span> :<span class="lineCov"> 2409 : memcpy(ctx-&gt;in, buf, len);</span> +<span class="lineNum"> 120 </span> : : } +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> : : /* Final wrapup - pad to 64-byte boundary with the bit pattern +<span class="lineNum"> 123 </span> : : * 1 0* (64-bit count of bits processed, MSB-first) +<a name="124"><span class="lineNum"> 124 </span> : : */</a> +<span class="lineNum"> 125 </span> : : void +<span class="lineNum"> 126 </span> :<span class="lineCov"> 2409 : MD5Final(unsigned char digest[16], MD5Context *ctx)</span> +<span class="lineNum"> 127 </span> : : { +<span class="lineNum"> 128 </span> : : unsigned count; +<span class="lineNum"> 129 </span> : : unsigned char *p; +<span class="lineNum"> 130 </span> : : +<span class="lineNum"> 131 </span> : : /* Compute number of bytes mod 64 +<span class="lineNum"> 132 </span> : : */ +<span class="lineNum"> 133 </span> :<span class="lineCov"> 2409 : count = (ctx-&gt;bits[0] &gt;&gt; 3) &amp; 0x3F;</span> +<span class="lineNum"> 134 </span> : : +<span class="lineNum"> 135 </span> : : /* Set the first char of padding to 0x80. This is safe since there is +<span class="lineNum"> 136 </span> : : * always at least one byte free +<span class="lineNum"> 137 </span> : : */ +<span class="lineNum"> 138 </span> :<span class="lineCov"> 2409 : p = ctx-&gt;in + count;</span> +<span class="lineNum"> 139 </span> :<span class="lineCov"> 2409 : *p++ = 0x80;</span> +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> : : /* Bytes of padding needed to make 64 bytes +<span class="lineNum"> 142 </span> : : */ +<span class="lineNum"> 143 </span> :<span class="lineCov"> 2409 : count = 64 - 1 - count;</span> +<span class="lineNum"> 144 </span> : : +<span class="lineNum"> 145 </span> : : /* Pad out to 56 mod 64 +<span class="lineNum"> 146 </span> : : */ +<span class="lineNum"> 147 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 2405 times"> + </span>]:<span class="lineCov"> 2409 : if (count &lt; 8) {</span> +<span class="lineNum"> 148 </span> : : /* Two lots of padding: Pad the first block to 64 bytes +<span class="lineNum"> 149 </span> : : */ +<span class="lineNum"> 150 </span> :<span class="lineCov"> 4 : memset(p, 0, count);</span> +<span class="lineNum"> 151 </span> : : byteReverse(ctx-&gt;in, 16); +<span class="lineNum"> 152 </span> :<span class="lineCov"> 4 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> +<span class="lineNum"> 153 </span> : : +<span class="lineNum"> 154 </span> : : /* Now fill the next block with 56 bytes +<span class="lineNum"> 155 </span> : : */ +<span class="lineNum"> 156 </span> :<span class="lineCov"> 4 : memset(ctx-&gt;in, 0, 56);</span> +<span class="lineNum"> 157 </span> : : } else { +<span class="lineNum"> 158 </span> : : /* Pad block to 56 bytes +<span class="lineNum"> 159 </span> : : */ +<span class="lineNum"> 160 </span> :<span class="lineCov"> 2405 : memset(p, 0, count - 8);</span> +<span class="lineNum"> 161 </span> : : } +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> : : byteReverse(ctx-&gt;in, 14); +<span class="lineNum"> 164 </span> : : +<span class="lineNum"> 165 </span> : : /* Append length in bits and transform +<span class="lineNum"> 166 </span> : : */ +<span class="lineNum"> 167 </span> :<span class="lineCov"> 2409 : memcpy(&amp;(ctx-&gt;in[56]), &amp;(ctx-&gt;bits[0]), sizeof(uint32_t));</span> +<span class="lineNum"> 168 </span> :<span class="lineCov"> 2409 : memcpy(&amp;(ctx-&gt;in[60]), &amp;(ctx-&gt;bits[1]), sizeof(uint32_t));</span> +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> :<span class="lineCov"> 2409 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> +<span class="lineNum"> 171 </span> : : byteReverse((unsigned char *) ctx-&gt;buf, 4); +<span class="lineNum"> 172 </span> :<span class="lineCov"> 2409 : memcpy(digest, ctx-&gt;buf, 16);</span> +<span class="lineNum"> 173 </span> : : +<span class="lineNum"> 174 </span> : : memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ +<span class="lineNum"> 175 </span> :<span class="lineCov"> 2409 : }</span> +<span class="lineNum"> 176 </span> : : +<span class="lineNum"> 177 </span> : : +<span class="lineNum"> 178 </span> : : /* The four core functions +<span class="lineNum"> 179 </span> : : */ +<span class="lineNum"> 180 </span> : : #define F1(x, y, z) (z ^ (x &amp; (y ^ z))) +<span class="lineNum"> 181 </span> : : #define F2(x, y, z) F1(z, x, y) +<span class="lineNum"> 182 </span> : : #define F3(x, y, z) (x ^ y ^ z) +<span class="lineNum"> 183 </span> : : #define F4(x, y, z) (y ^ (x | ~z)) +<span class="lineNum"> 184 </span> : : +<span class="lineNum"> 185 </span> : : /* This is the central step in the MD5 algorithm. +<span class="lineNum"> 186 </span> : : */ +<span class="lineNum"> 187 </span> : : #define MD5STEP(f, w, x, y, z, data, s) \ +<span class="lineNum"> 188 </span> : : ( w += f(x, y, z) + data, w = w&lt;&lt;s | w&gt;&gt;(32-s), w += x ) +<span class="lineNum"> 189 </span> : : +<span class="lineNum"> 190 </span> : : /* The core of the MD5 algorithm, this alters an existing MD5 hash to +<span class="lineNum"> 191 </span> : : * reflect the addition of 16 longwords of new data. MD5Update blocks +<span class="lineNum"> 192 </span> : : * the data and converts bytes into longwords for this routine. +<a name="193"><span class="lineNum"> 193 </span> : : */</a> +<span class="lineNum"> 194 </span> : : void +<span class="lineNum"> 195 </span> :<span class="lineCov"> 2413 : MD5Transform(uint32_t buf[4], uint32_t in[16])</span> +<span class="lineNum"> 196 </span> : : { +<span class="lineNum"> 197 </span> : : register uint32_t a, b, c, d; +<span class="lineNum"> 198 </span> : : +<span class="lineNum"> 199 </span> :<span class="lineCov"> 2413 : a = buf[0];</span> +<span class="lineNum"> 200 </span> :<span class="lineCov"> 2413 : b = buf[1];</span> +<span class="lineNum"> 201 </span> :<span class="lineCov"> 2413 : c = buf[2];</span> +<span class="lineNum"> 202 </span> :<span class="lineCov"> 2413 : d = buf[3];</span> +<span class="lineNum"> 203 </span> : : +<span class="lineNum"> 204 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);</span> +<span class="lineNum"> 205 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);</span> +<span class="lineNum"> 206 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);</span> +<span class="lineNum"> 207 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);</span> +<span class="lineNum"> 208 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);</span> +<span class="lineNum"> 209 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);</span> +<span class="lineNum"> 210 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);</span> +<span class="lineNum"> 211 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);</span> +<span class="lineNum"> 212 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);</span> +<span class="lineNum"> 213 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);</span> +<span class="lineNum"> 214 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);</span> +<span class="lineNum"> 215 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);</span> +<span class="lineNum"> 216 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);</span> +<span class="lineNum"> 217 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);</span> +<span class="lineNum"> 218 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);</span> +<span class="lineNum"> 219 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);</span> +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);</span> +<span class="lineNum"> 222 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);</span> +<span class="lineNum"> 223 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);</span> +<span class="lineNum"> 224 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);</span> +<span class="lineNum"> 225 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);</span> +<span class="lineNum"> 226 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);</span> +<span class="lineNum"> 227 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);</span> +<span class="lineNum"> 228 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);</span> +<span class="lineNum"> 229 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);</span> +<span class="lineNum"> 230 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);</span> +<span class="lineNum"> 231 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);</span> +<span class="lineNum"> 232 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);</span> +<span class="lineNum"> 233 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);</span> +<span class="lineNum"> 234 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);</span> +<span class="lineNum"> 235 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);</span> +<span class="lineNum"> 236 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);</span> +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);</span> +<span class="lineNum"> 239 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);</span> +<span class="lineNum"> 240 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);</span> +<span class="lineNum"> 241 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);</span> +<span class="lineNum"> 242 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);</span> +<span class="lineNum"> 243 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);</span> +<span class="lineNum"> 244 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);</span> +<span class="lineNum"> 245 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);</span> +<span class="lineNum"> 246 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);</span> +<span class="lineNum"> 247 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);</span> +<span class="lineNum"> 248 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);</span> +<span class="lineNum"> 249 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);</span> +<span class="lineNum"> 250 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);</span> +<span class="lineNum"> 251 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);</span> +<span class="lineNum"> 252 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);</span> +<span class="lineNum"> 253 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);</span> +<span class="lineNum"> 254 </span> : : +<span class="lineNum"> 255 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);</span> +<span class="lineNum"> 256 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);</span> +<span class="lineNum"> 257 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);</span> +<span class="lineNum"> 258 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);</span> +<span class="lineNum"> 259 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);</span> +<span class="lineNum"> 260 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);</span> +<span class="lineNum"> 261 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);</span> +<span class="lineNum"> 262 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);</span> +<span class="lineNum"> 263 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);</span> +<span class="lineNum"> 264 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);</span> +<span class="lineNum"> 265 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);</span> +<span class="lineNum"> 266 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);</span> +<span class="lineNum"> 267 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);</span> +<span class="lineNum"> 268 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);</span> +<span class="lineNum"> 269 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);</span> +<span class="lineNum"> 270 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);</span> +<span class="lineNum"> 271 </span> : : +<span class="lineNum"> 272 </span> :<span class="lineCov"> 2413 : buf[0] += a;</span> +<span class="lineNum"> 273 </span> :<span class="lineCov"> 2413 : buf[1] += b;</span> +<span class="lineNum"> 274 </span> :<span class="lineCov"> 2413 : buf[2] += c;</span> +<span class="lineNum"> 275 </span> :<span class="lineCov"> 2413 : buf[3] += d;</span> +<span class="lineNum"> 276 </span> :<span class="lineCov"> 2413 : } </span> +<span class="lineNum"> 277 </span> : : +<span class="lineNum"> 278 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html new file mode 100644 index 00000000..c7d0e3c1 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html @@ -0,0 +1,125 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/rijndael.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - rijndael.c<span style="font-size: 80%;"> (<a href="rijndael.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">159</td> + <td class="headerCovTableEntry">166</td> + <td class="headerCovTableEntryHi">95.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">103</td> + <td class="headerCovTableEntry">114</td> + <td class="headerCovTableEntryHi">90.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="rijndael.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#277">mul</a></td> + <td class="coverFnHi">668096</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#367">key_addition32</a></td> + <td class="coverFnHi">89765</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#284">inv_mix_column</a></td> + <td class="coverFnHi">10439</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#376">key_addition32to8</a></td> + <td class="coverFnHi">6905</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#351">key_addition_8to32</a></td> + <td class="coverFnHi">6905</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#266">xtime</a></td> + <td class="coverFnHi">5621</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#397">rijndael_encrypt</a></td> + <td class="coverFnHi">3827</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#436">rijndael_decrypt</a></td> + <td class="coverFnHi">3078</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#305">rijndael_setup</a></td> + <td class="coverFnHi">803</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#469">block_encrypt</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#538">block_decrypt</a></td> + <td class="coverFnHi">387</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html new file mode 100644 index 00000000..3ae6a256 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html @@ -0,0 +1,125 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/rijndael.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - rijndael.c<span style="font-size: 80%;"> (<a href="rijndael.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">159</td> + <td class="headerCovTableEntry">166</td> + <td class="headerCovTableEntryHi">95.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">103</td> + <td class="headerCovTableEntry">114</td> + <td class="headerCovTableEntryHi">90.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="rijndael.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#538">block_decrypt</a></td> + <td class="coverFnHi">387</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#469">block_encrypt</a></td> + <td class="coverFnHi">416</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#284">inv_mix_column</a></td> + <td class="coverFnHi">10439</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#367">key_addition32</a></td> + <td class="coverFnHi">89765</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#376">key_addition32to8</a></td> + <td class="coverFnHi">6905</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#351">key_addition_8to32</a></td> + <td class="coverFnHi">6905</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#277">mul</a></td> + <td class="coverFnHi">668096</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#436">rijndael_decrypt</a></td> + <td class="coverFnHi">3078</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#397">rijndael_encrypt</a></td> + <td class="coverFnHi">3827</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#305">rijndael_setup</a></td> + <td class="coverFnHi">803</td> + </tr> + <tr> + <td class="coverFn"><a href="rijndael.c.gcov.html#266">xtime</a></td> + <td class="coverFnHi">5621</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html new file mode 100644 index 00000000..ca03e6ab --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html @@ -0,0 +1,702 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/rijndael.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - rijndael.c<span style="font-size: 80%;"> (source / <a href="rijndael.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">159</td> + <td class="headerCovTableEntry">166</td> + <td class="headerCovTableEntryHi">95.8 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">103</td> + <td class="headerCovTableEntry">114</td> + <td class="headerCovTableEntryHi">90.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: rijndael.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: rijndael - An implementation of the Rijndael cipher. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Copyright (C) 2000, 2001 Rafael R. Sevilla &lt;sevillar@team.ph.inter.net&gt; +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * Currently maintained by brian d foy, &lt;bdfoy@cpan.org&gt; +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;rijndael.h&quot; +<span class="lineNum"> 33 </span> : : #include &lt;stdlib.h&gt; +<span class="lineNum"> 34 </span> : : #include &lt;string.h&gt; +<span class="lineNum"> 35 </span> : : #include &lt;stdio.h&gt; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : /* These tables combine both the S-boxes and the mixcolumn transformation, so +<span class="lineNum"> 38 </span> : : that we can perform a round's encryption or by means of four table lookups +<span class="lineNum"> 39 </span> : : and four XOR's per column of state. They were generated by the +<span class="lineNum"> 40 </span> : : makertbls.pl script. */ +<span class="lineNum"> 41 </span> : : uint32_t dtbl[] = { +<span class="lineNum"> 42 </span> : : 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, +<span class="lineNum"> 43 </span> : : 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, +<span class="lineNum"> 44 </span> : : 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, +<span class="lineNum"> 45 </span> : : 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, +<span class="lineNum"> 46 </span> : : 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, +<span class="lineNum"> 47 </span> : : 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, +<span class="lineNum"> 48 </span> : : 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, +<span class="lineNum"> 49 </span> : : 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b, +<span class="lineNum"> 50 </span> : : 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, +<span class="lineNum"> 51 </span> : : 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, +<span class="lineNum"> 52 </span> : : 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, +<span class="lineNum"> 53 </span> : : 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a, +<span class="lineNum"> 54 </span> : : 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, +<span class="lineNum"> 55 </span> : : 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f, +<span class="lineNum"> 56 </span> : : 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, +<span class="lineNum"> 57 </span> : : 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, +<span class="lineNum"> 58 </span> : : 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34, +<span class="lineNum"> 59 </span> : : 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b, +<span class="lineNum"> 60 </span> : : 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, +<span class="lineNum"> 61 </span> : : 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, +<span class="lineNum"> 62 </span> : : 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, +<span class="lineNum"> 63 </span> : : 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, +<span class="lineNum"> 64 </span> : : 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972, +<span class="lineNum"> 65 </span> : : 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85, +<span class="lineNum"> 66 </span> : : 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, +<span class="lineNum"> 67 </span> : : 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, +<span class="lineNum"> 68 </span> : : 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe, +<span class="lineNum"> 69 </span> : : 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, +<span class="lineNum"> 70 </span> : : 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05, +<span class="lineNum"> 71 </span> : : 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, +<span class="lineNum"> 72 </span> : : 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, +<span class="lineNum"> 73 </span> : : 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, +<span class="lineNum"> 74 </span> : : 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, +<span class="lineNum"> 75 </span> : : 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, +<span class="lineNum"> 76 </span> : : 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, +<span class="lineNum"> 77 </span> : : 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, +<span class="lineNum"> 78 </span> : : 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, +<span class="lineNum"> 79 </span> : : 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b, +<span class="lineNum"> 80 </span> : : 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, +<span class="lineNum"> 81 </span> : : 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, +<span class="lineNum"> 82 </span> : : 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, +<span class="lineNum"> 83 </span> : : 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8, +<span class="lineNum"> 84 </span> : : 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, +<span class="lineNum"> 85 </span> : : 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2, +<span class="lineNum"> 86 </span> : : 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, +<span class="lineNum"> 87 </span> : : 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, +<span class="lineNum"> 88 </span> : : 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, +<span class="lineNum"> 89 </span> : : 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810, +<span class="lineNum"> 90 </span> : : 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, +<span class="lineNum"> 91 </span> : : 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, +<span class="lineNum"> 92 </span> : : 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, +<span class="lineNum"> 93 </span> : : 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, +<span class="lineNum"> 94 </span> : : 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc, +<span class="lineNum"> 95 </span> : : 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c, +<span class="lineNum"> 96 </span> : : 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, +<span class="lineNum"> 97 </span> : : 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, +<span class="lineNum"> 98 </span> : : 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, +<span class="lineNum"> 99 </span> : : 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, +<span class="lineNum"> 100 </span> : : 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, +<span class="lineNum"> 101 </span> : : 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, +<span class="lineNum"> 102 </span> : : 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, +<span class="lineNum"> 103 </span> : : 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0, +<span class="lineNum"> 104 </span> : : 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, +<span class="lineNum"> 105 </span> : : 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c, +<span class="lineNum"> 106 </span> : : }; +<span class="lineNum"> 107 </span> : : +<span class="lineNum"> 108 </span> : : uint32_t itbl[] = { +<span class="lineNum"> 109 </span> : : 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, +<span class="lineNum"> 110 </span> : : 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b, +<span class="lineNum"> 111 </span> : : 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5, +<span class="lineNum"> 112 </span> : : 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5, +<span class="lineNum"> 113 </span> : : 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, +<span class="lineNum"> 114 </span> : : 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, +<span class="lineNum"> 115 </span> : : 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295, +<span class="lineNum"> 116 </span> : : 0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e, +<span class="lineNum"> 117 </span> : : 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927, +<span class="lineNum"> 118 </span> : : 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, +<span class="lineNum"> 119 </span> : : 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, +<span class="lineNum"> 120 </span> : : 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, +<span class="lineNum"> 121 </span> : : 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52, +<span class="lineNum"> 122 </span> : : 0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566, +<span class="lineNum"> 123 </span> : : 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, +<span class="lineNum"> 124 </span> : : 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, +<span class="lineNum"> 125 </span> : : 0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e, +<span class="lineNum"> 126 </span> : : 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4, +<span class="lineNum"> 127 </span> : : 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4, +<span class="lineNum"> 128 </span> : : 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, +<span class="lineNum"> 129 </span> : : 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, +<span class="lineNum"> 130 </span> : : 0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060, +<span class="lineNum"> 131 </span> : : 0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967, +<span class="lineNum"> 132 </span> : : 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879, +<span class="lineNum"> 133 </span> : : 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, +<span class="lineNum"> 134 </span> : : 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, +<span class="lineNum"> 135 </span> : : 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36, +<span class="lineNum"> 136 </span> : : 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624, +<span class="lineNum"> 137 </span> : : 0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b, +<span class="lineNum"> 138 </span> : : 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, +<span class="lineNum"> 139 </span> : : 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, +<span class="lineNum"> 140 </span> : : 0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, +<span class="lineNum"> 141 </span> : : 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3, +<span class="lineNum"> 142 </span> : : 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b, +<span class="lineNum"> 143 </span> : : 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, +<span class="lineNum"> 144 </span> : : 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, +<span class="lineNum"> 145 </span> : : 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, +<span class="lineNum"> 146 </span> : : 0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177, +<span class="lineNum"> 147 </span> : : 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947, +<span class="lineNum"> 148 </span> : : 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, +<span class="lineNum"> 149 </span> : : 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, +<span class="lineNum"> 150 </span> : : 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, +<span class="lineNum"> 151 </span> : : 0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54, +<span class="lineNum"> 152 </span> : : 0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382, +<span class="lineNum"> 153 </span> : : 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, +<span class="lineNum"> 154 </span> : : 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, +<span class="lineNum"> 155 </span> : : 0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83, +<span class="lineNum"> 156 </span> : : 0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef, +<span class="lineNum"> 157 </span> : : 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029, +<span class="lineNum"> 158 </span> : : 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, +<span class="lineNum"> 159 </span> : : 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, +<span class="lineNum"> 160 </span> : : 0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117, +<span class="lineNum"> 161 </span> : : 0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4, +<span class="lineNum"> 162 </span> : : 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546, +<span class="lineNum"> 163 </span> : : 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, +<span class="lineNum"> 164 </span> : : 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, +<span class="lineNum"> 165 </span> : : 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb, +<span class="lineNum"> 166 </span> : : 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a, +<span class="lineNum"> 167 </span> : : 0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773, +<span class="lineNum"> 168 </span> : : 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, +<span class="lineNum"> 169 </span> : : 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, +<span class="lineNum"> 170 </span> : : 0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff, +<span class="lineNum"> 171 </span> : : 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664, +<span class="lineNum"> 172 </span> : : 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0, +<span class="lineNum"> 173 </span> : : }; +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> : : +<span class="lineNum"> 176 </span> : : /* Needed only for the key schedule and for final rounds */ +<span class="lineNum"> 177 </span> : : uint8_t sbox[256] = { +<span class="lineNum"> 178 </span> : : 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, +<span class="lineNum"> 179 </span> : : 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, +<span class="lineNum"> 180 </span> : : 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, +<span class="lineNum"> 181 </span> : : 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, +<span class="lineNum"> 182 </span> : : 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, +<span class="lineNum"> 183 </span> : : 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, +<span class="lineNum"> 184 </span> : : 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, +<span class="lineNum"> 185 </span> : : 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, +<span class="lineNum"> 186 </span> : : 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, +<span class="lineNum"> 187 </span> : : 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, +<span class="lineNum"> 188 </span> : : 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, +<span class="lineNum"> 189 </span> : : 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, +<span class="lineNum"> 190 </span> : : 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, +<span class="lineNum"> 191 </span> : : 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, +<span class="lineNum"> 192 </span> : : 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, +<span class="lineNum"> 193 </span> : : 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, +<span class="lineNum"> 194 </span> : : 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, +<span class="lineNum"> 195 </span> : : 22, +<span class="lineNum"> 196 </span> : : }; +<span class="lineNum"> 197 </span> : : +<span class="lineNum"> 198 </span> : : uint8_t isbox[256] = { +<span class="lineNum"> 199 </span> : : 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, +<span class="lineNum"> 200 </span> : : 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, +<span class="lineNum"> 201 </span> : : 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, +<span class="lineNum"> 202 </span> : : 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, +<span class="lineNum"> 203 </span> : : 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, +<span class="lineNum"> 204 </span> : : 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, +<span class="lineNum"> 205 </span> : : 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, +<span class="lineNum"> 206 </span> : : 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, +<span class="lineNum"> 207 </span> : : 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, +<span class="lineNum"> 208 </span> : : 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, +<span class="lineNum"> 209 </span> : : 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, +<span class="lineNum"> 210 </span> : : 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, +<span class="lineNum"> 211 </span> : : 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, +<span class="lineNum"> 212 </span> : : 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, +<span class="lineNum"> 213 </span> : : 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, +<span class="lineNum"> 214 </span> : : 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, +<span class="lineNum"> 215 </span> : : 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, +<span class="lineNum"> 216 </span> : : 125, +<span class="lineNum"> 217 </span> : : }; +<span class="lineNum"> 218 </span> : : +<span class="lineNum"> 219 </span> : : /* Used only by the key schedule */ +<span class="lineNum"> 220 </span> : : uint8_t Logtable[256] = { +<span class="lineNum"> 221 </span> : : 0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3, +<span class="lineNum"> 222 </span> : : 100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, +<span class="lineNum"> 223 </span> : : 193, 125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, +<span class="lineNum"> 224 </span> : : 9, 120, 101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, +<span class="lineNum"> 225 </span> : : 147, 218, 142, 150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, +<span class="lineNum"> 226 </span> : : 64, 70, 131, 56, 102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, +<span class="lineNum"> 227 </span> : : 152, 34, 136, 145, 16, 126, 110, 72, 195, 163, 182, 30, 66, 58, 107, +<span class="lineNum"> 228 </span> : : 40, 84, 250, 133, 61, 186, 43, 121, 10, 21, 155, 159, 94, 202, 78, +<span class="lineNum"> 229 </span> : : 212, 172, 229, 243, 115, 167, 87, 175, 88, 168, 80, 244, 234, 214, 116, +<span class="lineNum"> 230 </span> : : 79, 174, 233, 213, 231, 230, 173, 232, 44, 215, 117, 122, 235, 22, 11, +<span class="lineNum"> 231 </span> : : 245, 89, 203, 95, 176, 156, 169, 81, 160, 127, 12, 246, 111, 23, 196, +<span class="lineNum"> 232 </span> : : 73, 236, 216, 67, 31, 45, 164, 118, 123, 183, 204, 187, 62, 90, 251, +<span class="lineNum"> 233 </span> : : 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157, 151, 178, 135, 144, +<span class="lineNum"> 234 </span> : : 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209, 83, 57, 132, +<span class="lineNum"> 235 </span> : : 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171, 68, 17, +<span class="lineNum"> 236 </span> : : 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165, 103, +<span class="lineNum"> 237 </span> : : 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7, +<span class="lineNum"> 238 </span> : : }; +<span class="lineNum"> 239 </span> : : +<span class="lineNum"> 240 </span> : : uint8_t Alogtable[256] = { +<span class="lineNum"> 241 </span> : : 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, +<span class="lineNum"> 242 </span> : : 53, 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, +<span class="lineNum"> 243 </span> : : 102, 170, 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, +<span class="lineNum"> 244 </span> : : 171, 230, 49, 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, +<span class="lineNum"> 245 </span> : : 211, 110, 178, 205, 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, +<span class="lineNum"> 246 </span> : : 8, 24, 40, 120, 136, 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, +<span class="lineNum"> 247 </span> : : 179, 206, 73, 219, 118, 154, 181, 196, 87, 249, 16, 48, 80, 240, 11, +<span class="lineNum"> 248 </span> : : 29, 39, 105, 187, 214, 97, 163, 254, 25, 43, 125, 135, 146, 173, 236, +<span class="lineNum"> 249 </span> : : 47, 113, 147, 174, 233, 32, 96, 160, 251, 22, 58, 78, 210, 109, 183, +<span class="lineNum"> 250 </span> : : 194, 93, 231, 50, 86, 250, 21, 63, 65, 195, 94, 226, 61, 71, 201, +<span class="lineNum"> 251 </span> : : 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, 159, 186, 213, 100, 172, +<span class="lineNum"> 252 </span> : : 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, 155, 182, 193, 88, +<span class="lineNum"> 253 </span> : : 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, 252, 31, 33, +<span class="lineNum"> 254 </span> : : 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, 69, 207, +<span class="lineNum"> 255 </span> : : 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, 18, +<span class="lineNum"> 256 </span> : : 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, +<span class="lineNum"> 257 </span> : : 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1, +<span class="lineNum"> 258 </span> : : }; +<span class="lineNum"> 259 </span> : : +<span class="lineNum"> 260 </span> : : #define ROTBYTE(x) (((x) &gt;&gt; 8) | (((x) &amp; 0xff) &lt;&lt; 24)) +<span class="lineNum"> 261 </span> : : #define ROTRBYTE(x) (((x) &lt;&lt; 8) | (((x) &gt;&gt; 24) &amp; 0xff)) +<span class="lineNum"> 262 </span> : : #define SUBBYTE(x, box) (((box)[((x) &amp; 0xff)]) | \ +<span class="lineNum"> 263 </span> : : ((box)[(((x) &gt;&gt; 8) &amp; 0xff)] &lt;&lt; 8) | \ +<span class="lineNum"> 264 </span> : : ((box)[(((x) &gt;&gt; 16) &amp; 0xff)] &lt;&lt; 16) | \ +<span class="lineNum"> 265 </span> : : ((box)[(((x) &gt;&gt; 24) &amp; 0xff)] &lt;&lt; 24)) +<a name="266"><span class="lineNum"> 266 </span> : : </a> +<span class="lineNum"> 267 </span> : : static uint8_t +<span class="lineNum"> 268 </span> :<span class="lineCov"> 5621 : xtime(uint8_t a)</span> +<span class="lineNum"> 269 </span> : : { +<span class="lineNum"> 270 </span> : : uint8_t b; +<span class="lineNum"> 271 </span> : : +<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 0 was taken 5621 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 5621 : b = (a &amp; 0x80) ? 0x1b : 0;</span> +<span class="lineNum"> 273 </span> :<span class="lineCov"> 5621 : a&lt;&lt;=1;</span> +<span class="lineNum"> 274 </span> :<span class="lineCov"> 5621 : a^=b;</span> +<span class="lineNum"> 275 </span> :<span class="lineCov"> 5621 : return(a);</span> +<span class="lineNum"> 276 </span> : : } +<a name="277"><span class="lineNum"> 277 </span> : : </a> +<span class="lineNum"> 278 </span> : : static uint8_t +<span class="lineNum"> 279 </span> :<span class="lineCov"> 668096 : mul(uint8_t a, uint8_t b)</span> +<span class="lineNum"> 280 </span> : : { +<span class="lineNum"> 281 </span> [<span class="branchCov" title="Branch 0 was taken 665900 times"> + </span><span class="branchCov" title="Branch 1 was taken 2196 times"> + </span>]:<span class="lineCov"> 668096 : if (a &amp;&amp; b) return Alogtable[(Logtable[a] + Logtable[b])%255];</span> +<span class="lineNum"> 282 </span> : : else return 0; +<span class="lineNum"> 283 </span> : : } +<a name="284"><span class="lineNum"> 284 </span> : : </a> +<span class="lineNum"> 285 </span> : : static void +<span class="lineNum"> 286 </span> :<span class="lineCov"> 10439 : inv_mix_column(uint32_t *a, uint32_t *b)</span> +<span class="lineNum"> 287 </span> : : { +<span class="lineNum"> 288 </span> : : uint8_t c[4][4]; +<span class="lineNum"> 289 </span> : : int i, j; +<span class="lineNum"> 290 </span> : : +<span class="lineNum"> 291 </span> [<span class="branchCov" title="Branch 0 was taken 41756 times"> + </span><span class="branchCov" title="Branch 1 was taken 10439 times"> + </span>]:<span class="lineCov"> 52195 : for(j = 0; j &lt; 4; j++) {</span> +<span class="lineNum"> 292 </span> [<span class="branchCov" title="Branch 0 was taken 167024 times"> + </span><span class="branchCov" title="Branch 1 was taken 41756 times"> + </span>]:<span class="lineCov"> 208780 : for(i = 0; i &lt; 4; i++) {</span> +<span class="lineNum"> 293 </span> :<span class="lineCov"> 167024 : c[j][i] = mul(0xe, (a[j] &gt;&gt; i*8) &amp; 0xff)</span> +<span class="lineNum"> 294 </span> :<span class="lineCov"> 167024 : ^ mul(0xb, (a[j] &gt;&gt; ((i+1)%4)*8) &amp; 0xff)</span> +<span class="lineNum"> 295 </span> :<span class="lineCov"> 167024 : ^ mul(0xd, (a[j] &gt;&gt; ((i+2)%4)*8) &amp; 0xff)</span> +<span class="lineNum"> 296 </span> :<span class="lineCov"> 167024 : ^ mul(0x9, (a[j] &gt;&gt; ((i+3)%4)*8) &amp; 0xff);</span> +<span class="lineNum"> 297 </span> : : } +<span class="lineNum"> 298 </span> : : } +<span class="lineNum"> 299 </span> [<span class="branchCov" title="Branch 0 was taken 41756 times"> + </span><span class="branchCov" title="Branch 1 was taken 10439 times"> + </span>]:<span class="lineCov"> 52195 : for(i = 0; i &lt; 4; i++) {</span> +<span class="lineNum"> 300 </span> :<span class="lineCov"> 41756 : b[i] = 0;</span> +<span class="lineNum"> 301 </span> [<span class="branchCov" title="Branch 0 was taken 167024 times"> + </span><span class="branchCov" title="Branch 1 was taken 41756 times"> + </span>]:<span class="lineCov"> 208780 : for(j = 0; j &lt; 4; j++)</span> +<span class="lineNum"> 302 </span> :<span class="lineCov"> 167024 : b[i] |= c[i][j] &lt;&lt; (j*8);</span> +<span class="lineNum"> 303 </span> : : } +<span class="lineNum"> 304 </span> :<span class="lineCov"> 10439 : }</span> +<a name="305"><span class="lineNum"> 305 </span> : : </a> +<span class="lineNum"> 306 </span> : : void +<span class="lineNum"> 307 </span> :<span class="lineCov"> 803 : rijndael_setup(RIJNDAEL_context *ctx, const size_t keysize, const uint8_t *key)</span> +<span class="lineNum"> 308 </span> : : { +<span class="lineNum"> 309 </span> : : int nk, nr, i, lastkey; +<span class="lineNum"> 310 </span> : : uint32_t temp, rcon; +<span class="lineNum"> 311 </span> : : +<span class="lineNum"> 312 </span> : : /* Truncate keysizes to the valid key sizes provided by Rijndael */ +<span class="lineNum"> 313 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 803 : if (keysize &gt;= RIJNDAEL_MAX_KEYSIZE) {</span> +<span class="lineNum"> 314 </span> : : nk = 8; +<span class="lineNum"> 315 </span> : : nr = 14; +<span class="lineNum"> 316 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } else if (keysize &gt;= 24) {</span> +<span class="lineNum"> 317 </span> : : nk = 6; +<span class="lineNum"> 318 </span> : : nr = 12; +<span class="lineNum"> 319 </span> : : } else { /* must be 16 or more */ +<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : nk = 4;</span> +<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : nr = 10;</span> +<span class="lineNum"> 322 </span> : : } +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> :<span class="lineCov"> 803 : lastkey = (RIJNDAEL_BLOCKSIZE/4) * (nr + 1);</span> +<span class="lineNum"> 325 </span> :<span class="lineCov"> 803 : ctx-&gt;nrounds = nr;</span> +<span class="lineNum"> 326 </span> :<span class="lineCov"> 803 : rcon = 1;</span> +<span class="lineNum"> 327 </span> [<span class="branchCov" title="Branch 0 was taken 6424 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 7227 : for (i=0; i&lt;nk; i++) {</span> +<span class="lineNum"> 328 </span> :<span class="lineCov"> 12848 : ctx-&gt;keys[i] = key[i*4] + (key[i*4+1]&lt;&lt;8) + (key[i*4+2]&lt;&lt;16) +</span> +<span class="lineNum"> 329 </span> :<span class="lineCov"> 6424 : (key[i*4+3]&lt;&lt;24);</span> +<span class="lineNum"> 330 </span> : : } +<span class="lineNum"> 331 </span> : : +<span class="lineNum"> 332 </span> [<span class="branchCov" title="Branch 0 was taken 41756 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 42559 : for (i=nk; i&lt;lastkey; i++) {</span> +<span class="lineNum"> 333 </span> :<span class="lineCov"> 41756 : temp = ctx-&gt;keys[i-1];</span> +<span class="lineNum"> 334 </span> [<span class="branchCov" title="Branch 0 was taken 5621 times"> + </span><span class="branchCov" title="Branch 1 was taken 36135 times"> + </span>]:<span class="lineCov"> 41756 : if (i % nk == 0) {</span> +<span class="lineNum"> 335 </span> :<span class="lineCov"> 5621 : temp = SUBBYTE(ROTBYTE(temp), sbox) ^ rcon;</span> +<span class="lineNum"> 336 </span> :<span class="lineCov"> 5621 : rcon = (uint32_t)xtime((uint8_t)rcon&amp;0xff);</span> +<span class="lineNum"> 337 </span>[<span class="branchCov" title="Branch 0 was taken 36135 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 4818 times"> + </span><span class="branchCov" title="Branch 3 was taken 31317 times"> + </span>]:<span class="lineCov"> 36135 : } else if (nk &gt; 6 &amp;&amp; (i%nk) == 4) {</span> +<span class="lineNum"> 338 </span> :<span class="lineCov"> 4818 : temp = SUBBYTE(temp, sbox);</span> +<span class="lineNum"> 339 </span> : : } +<span class="lineNum"> 340 </span> :<span class="lineCov"> 41756 : ctx-&gt;keys[i] = ctx-&gt;keys[i-nk] ^ temp;</span> +<span class="lineNum"> 341 </span> : : } +<span class="lineNum"> 342 </span> : : /* Generate the inverse keys */ +<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 3212 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 4015 : for (i=0; i&lt;4; i++) {</span> +<span class="lineNum"> 344 </span> :<span class="lineCov"> 3212 : ctx-&gt;ikeys[i] = ctx-&gt;keys[i];</span> +<span class="lineNum"> 345 </span> :<span class="lineCov"> 3212 : ctx-&gt;ikeys[lastkey-4 + i] = ctx-&gt;keys[lastkey-4 + i];</span> +<span class="lineNum"> 346 </span> : : } +<span class="lineNum"> 347 </span> [<span class="branchCov" title="Branch 0 was taken 10439 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 11242 : for (i=4; i&lt;lastkey-4; i+=4)</span> +<span class="lineNum"> 348 </span> :<span class="lineCov"> 10439 : inv_mix_column(&amp;(ctx-&gt;keys[i]), &amp;(ctx-&gt;ikeys[i]));</span> +<span class="lineNum"> 349 </span> :<span class="lineCov"> 803 : }</span> +<span class="lineNum"> 350 </span> : : +<a name="351"><span class="lineNum"> 351 </span> : : /* Key addition that also packs every byte in the key to a word rep. */</a> +<span class="lineNum"> 352 </span> : : static void +<span class="lineNum"> 353 </span> :<span class="lineCov"> 6905 : key_addition_8to32(const uint8_t *txt, uint32_t *keys, uint32_t *out)</span> +<span class="lineNum"> 354 </span> : : { +<span class="lineNum"> 355 </span> : : const uint8_t *ptr; +<span class="lineNum"> 356 </span> : : int i, j; +<span class="lineNum"> 357 </span> : : uint32_t val; +<span class="lineNum"> 358 </span> : : +<span class="lineNum"> 359 </span> :<span class="lineCov"> 6905 : ptr = txt;</span> +<span class="lineNum"> 360 </span> [<span class="branchCov" title="Branch 0 was taken 27620 times"> + </span><span class="branchCov" title="Branch 1 was taken 6905 times"> + </span>]:<span class="lineCov"> 34525 : for (i=0; i&lt;4; i++) {</span> +<span class="lineNum"> 361 </span> : : val = 0; +<span class="lineNum"> 362 </span> [<span class="branchCov" title="Branch 0 was taken 110480 times"> + </span><span class="branchCov" title="Branch 1 was taken 27620 times"> + </span>]:<span class="lineCov"> 138100 : for (j=0; j&lt;4; j++)</span> +<span class="lineNum"> 363 </span> :<span class="lineCov"> 110480 : val |= (*ptr++ &lt;&lt; 8*j);</span> +<span class="lineNum"> 364 </span> :<span class="lineCov"> 27620 : out[i] = keys[i]^val;</span> +<span class="lineNum"> 365 </span> : : } +<span class="lineNum"> 366 </span> :<span class="lineCov"> 6905 : }</span> +<a name="367"><span class="lineNum"> 367 </span> : : </a> +<span class="lineNum"> 368 </span> : : static void +<span class="lineNum"> 369 </span> :<span class="lineCov"> 89765 : key_addition32(const uint32_t *txt, uint32_t *keys, uint32_t *out)</span> +<span class="lineNum"> 370 </span> : : { +<span class="lineNum"> 371 </span> : : int i; +<span class="lineNum"> 372 </span> : : +<span class="lineNum"> 373 </span> [<span class="branchCov" title="Branch 0 was taken 359060 times"> + </span><span class="branchCov" title="Branch 1 was taken 89765 times"> + </span>]:<span class="lineCov"> 448825 : for (i=0; i&lt;4; i++)</span> +<span class="lineNum"> 374 </span> :<span class="lineCov"> 359060 : out[i] = keys[i] ^ txt[i];</span> +<span class="lineNum"> 375 </span> :<span class="lineCov"> 89765 : }</span> +<a name="376"><span class="lineNum"> 376 </span> : : </a> +<span class="lineNum"> 377 </span> : : static void +<span class="lineNum"> 378 </span> :<span class="lineCov"> 6905 : key_addition32to8(const uint32_t *txt, uint32_t *keys, uint8_t *out)</span> +<span class="lineNum"> 379 </span> : : { +<span class="lineNum"> 380 </span> : : uint8_t *ptr; +<span class="lineNum"> 381 </span> : : int i, j; +<span class="lineNum"> 382 </span> : : uint32_t val; +<span class="lineNum"> 383 </span> : : +<span class="lineNum"> 384 </span> :<span class="lineCov"> 6905 : ptr = out;</span> +<span class="lineNum"> 385 </span> [<span class="branchCov" title="Branch 0 was taken 27620 times"> + </span><span class="branchCov" title="Branch 1 was taken 6905 times"> + </span>]:<span class="lineCov"> 34525 : for (i=0; i&lt;4; i++) {</span> +<span class="lineNum"> 386 </span> :<span class="lineCov"> 27620 : val = txt[i] ^ keys[i];</span> +<span class="lineNum"> 387 </span> [<span class="branchCov" title="Branch 0 was taken 110480 times"> + </span><span class="branchCov" title="Branch 1 was taken 27620 times"> + </span>]:<span class="lineCov"> 138100 : for (j=0; j&lt;4; j++)</span> +<span class="lineNum"> 388 </span> :<span class="lineCov"> 110480 : *ptr++ = (val &gt;&gt; 8*j) &amp; 0xff;</span> +<span class="lineNum"> 389 </span> : : } +<span class="lineNum"> 390 </span> :<span class="lineCov"> 6905 : }</span> +<span class="lineNum"> 391 </span> : : +<span class="lineNum"> 392 </span> : : static int idx[4][4] = { +<span class="lineNum"> 393 </span> : : { 0, 1, 2, 3 }, +<span class="lineNum"> 394 </span> : : { 1, 2, 3, 0 }, +<span class="lineNum"> 395 </span> : : { 2, 3, 0, 1 }, +<span class="lineNum"> 396 </span> : : { 3, 0, 1, 2 } }; +<a name="397"><span class="lineNum"> 397 </span> : : </a> +<span class="lineNum"> 398 </span> : : void +<span class="lineNum"> 399 </span> :<span class="lineCov"> 3827 : rijndael_encrypt(RIJNDAEL_context *ctx,</span> +<span class="lineNum"> 400 </span> : : const uint8_t *plaintext, +<span class="lineNum"> 401 </span> : : uint8_t *ciphertext) +<span class="lineNum"> 402 </span> : : { +<span class="lineNum"> 403 </span> : : int r, j; +<span class="lineNum"> 404 </span> : : uint32_t wtxt[4], t[4]; /* working ciphertext */ +<span class="lineNum"> 405 </span> : : uint32_t e; +<span class="lineNum"> 406 </span> : : +<span class="lineNum"> 407 </span> :<span class="lineCov"> 3827 : key_addition_8to32(plaintext, &amp;(ctx-&gt;keys[0]), wtxt);</span> +<span class="lineNum"> 408 </span> [<span class="branchCov" title="Branch 1 was taken 49751 times"> + </span><span class="branchCov" title="Branch 2 was taken 3827 times"> + </span>]:<span class="lineCov"> 53578 : for (r=1; r&lt;ctx-&gt;nrounds; r++) {</span> +<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 199004 times"> + </span><span class="branchCov" title="Branch 1 was taken 49751 times"> + </span>]:<span class="lineCov"> 248755 : for (j=0; j&lt;4; j++) {</span> +<span class="lineNum"> 410 </span> :<span class="lineCov"> 398008 : t[j] = dtbl[wtxt[j] &amp; 0xff] ^</span> +<span class="lineNum"> 411 </span> :<span class="lineCov"> 199004 : ROTRBYTE(dtbl[(wtxt[idx[1][j]] &gt;&gt; 8) &amp; 0xff]^</span> +<span class="lineNum"> 412 </span> : : ROTRBYTE(dtbl[(wtxt[idx[2][j]] &gt;&gt; 16) &amp; 0xff] ^ +<span class="lineNum"> 413 </span> : : ROTRBYTE(dtbl[(wtxt[idx[3][j]] &gt;&gt; 24) &amp; 0xff]))); +<span class="lineNum"> 414 </span> : : } +<span class="lineNum"> 415 </span> :<span class="lineCov"> 49751 : key_addition32(t, &amp;(ctx-&gt;keys[r*4]), wtxt);</span> +<span class="lineNum"> 416 </span> : : } +<span class="lineNum"> 417 </span> : : /* last round is special: there is no mixcolumn, so we can't use the big +<span class="lineNum"> 418 </span> : : tables. */ +<span class="lineNum"> 419 </span> [<span class="branchCov" title="Branch 0 was taken 15308 times"> + </span><span class="branchCov" title="Branch 1 was taken 3827 times"> + </span>]:<span class="lineCov"> 19135 : for (j=0; j&lt;4; j++) {</span> +<span class="lineNum"> 420 </span> :<span class="lineCov"> 15308 : e = wtxt[j] &amp; 0xff;</span> +<span class="lineNum"> 421 </span> :<span class="lineCov"> 15308 : e |= (wtxt[idx[1][j]]) &amp; (0xff &lt;&lt; 8 );</span> +<span class="lineNum"> 422 </span> :<span class="lineCov"> 15308 : e |= (wtxt[idx[2][j]]) &amp; (0xff &lt;&lt; 16);</span> +<span class="lineNum"> 423 </span> :<span class="lineCov"> 15308 : e |= (wtxt[idx[3][j]]) &amp; (0xffU &lt;&lt; 24);</span> +<span class="lineNum"> 424 </span> :<span class="lineCov"> 15308 : t[j] = e;</span> +<span class="lineNum"> 425 </span> : : } +<span class="lineNum"> 426 </span> [<span class="branchCov" title="Branch 0 was taken 15308 times"> + </span><span class="branchCov" title="Branch 1 was taken 3827 times"> + </span>]:<span class="lineCov"> 19135 : for (j=0; j&lt;4; j++)</span> +<span class="lineNum"> 427 </span> :<span class="lineCov"> 15308 : t[j] = SUBBYTE(t[j], sbox);</span> +<span class="lineNum"> 428 </span> :<span class="lineCov"> 3827 : key_addition32to8(t, &amp;(ctx-&gt;keys[4*ctx-&gt;nrounds]), ciphertext);</span> +<span class="lineNum"> 429 </span> :<span class="lineCov"> 3827 : }</span> +<span class="lineNum"> 430 </span> : : +<span class="lineNum"> 431 </span> : : static int iidx[4][4] = { +<span class="lineNum"> 432 </span> : : { 0, 1, 2, 3 }, +<span class="lineNum"> 433 </span> : : { 3, 0, 1, 2 }, +<span class="lineNum"> 434 </span> : : { 2, 3, 0, 1 }, +<span class="lineNum"> 435 </span> : : { 1, 2, 3, 0 } }; +<a name="436"><span class="lineNum"> 436 </span> : : </a> +<span class="lineNum"> 437 </span> : : void +<span class="lineNum"> 438 </span> :<span class="lineCov"> 3078 : rijndael_decrypt(RIJNDAEL_context *ctx,</span> +<span class="lineNum"> 439 </span> : : const uint8_t *ciphertext, +<span class="lineNum"> 440 </span> : : uint8_t *plaintext) +<span class="lineNum"> 441 </span> : : { +<span class="lineNum"> 442 </span> : : int r, j; +<span class="lineNum"> 443 </span> : : uint32_t wtxt[4], t[4]; /* working ciphertext */ +<span class="lineNum"> 444 </span> : : uint32_t e; +<span class="lineNum"> 445 </span> : : +<span class="lineNum"> 446 </span> :<span class="lineCov"> 3078 : key_addition_8to32(ciphertext, &amp;(ctx-&gt;ikeys[4*ctx-&gt;nrounds]), wtxt);</span> +<span class="lineNum"> 447 </span> [<span class="branchCov" title="Branch 0 was taken 40014 times"> + </span><span class="branchCov" title="Branch 1 was taken 3078 times"> + </span>]:<span class="lineCov"> 43092 : for (r=ctx-&gt;nrounds-1; r&gt; 0; r--) {</span> +<span class="lineNum"> 448 </span> [<span class="branchCov" title="Branch 0 was taken 160056 times"> + </span><span class="branchCov" title="Branch 1 was taken 40014 times"> + </span>]:<span class="lineCov"> 200070 : for (j=0; j&lt;4; j++) {</span> +<span class="lineNum"> 449 </span> :<span class="lineCov"> 320112 : t[j] = itbl[wtxt[j] &amp; 0xff] ^</span> +<span class="lineNum"> 450 </span> :<span class="lineCov"> 160056 : ROTRBYTE(itbl[(wtxt[iidx[1][j]] &gt;&gt; 8) &amp; 0xff]^</span> +<span class="lineNum"> 451 </span> : : ROTRBYTE(itbl[(wtxt[iidx[2][j]] &gt;&gt; 16) &amp; 0xff] ^ +<span class="lineNum"> 452 </span> : : ROTRBYTE(itbl[(wtxt[iidx[3][j]] &gt;&gt; 24) &amp; 0xff]))); +<span class="lineNum"> 453 </span> : : } +<span class="lineNum"> 454 </span> :<span class="lineCov"> 40014 : key_addition32(t, &amp;(ctx-&gt;ikeys[r*4]), wtxt);</span> +<span class="lineNum"> 455 </span> : : } +<span class="lineNum"> 456 </span> : : /* last round is special: there is no mixcolumn, so we can't use the big +<span class="lineNum"> 457 </span> : : tables. */ +<span class="lineNum"> 458 </span> [<span class="branchCov" title="Branch 0 was taken 12312 times"> + </span><span class="branchCov" title="Branch 1 was taken 3078 times"> + </span>]:<span class="lineCov"> 15390 : for (j=0; j&lt;4; j++) {</span> +<span class="lineNum"> 459 </span> :<span class="lineCov"> 12312 : e = wtxt[j] &amp; 0xff;</span> +<span class="lineNum"> 460 </span> :<span class="lineCov"> 12312 : e |= (wtxt[iidx[1][j]]) &amp; (0xff &lt;&lt; 8);</span> +<span class="lineNum"> 461 </span> :<span class="lineCov"> 12312 : e |= (wtxt[iidx[2][j]]) &amp; (0xff &lt;&lt; 16);</span> +<span class="lineNum"> 462 </span> :<span class="lineCov"> 12312 : e |= (wtxt[iidx[3][j]]) &amp; (0xffU &lt;&lt; 24);</span> +<span class="lineNum"> 463 </span> :<span class="lineCov"> 12312 : t[j] = e;</span> +<span class="lineNum"> 464 </span> : : } +<span class="lineNum"> 465 </span> [<span class="branchCov" title="Branch 0 was taken 12312 times"> + </span><span class="branchCov" title="Branch 1 was taken 3078 times"> + </span>]:<span class="lineCov"> 15390 : for (j=0; j&lt;4; j++)</span> +<span class="lineNum"> 466 </span> :<span class="lineCov"> 12312 : t[j] = SUBBYTE(t[j], isbox);</span> +<span class="lineNum"> 467 </span> :<span class="lineCov"> 3078 : key_addition32to8(t, &amp;(ctx-&gt;ikeys[0]), plaintext);</span> +<span class="lineNum"> 468 </span> :<span class="lineCov"> 3078 : }</span> +<a name="469"><span class="lineNum"> 469 </span> : : </a> +<span class="lineNum"> 470 </span> : : void +<span class="lineNum"> 471 </span> :<span class="lineCov"> 416 : block_encrypt(RIJNDAEL_context *ctx, uint8_t *input, int inputlen,</span> +<span class="lineNum"> 472 </span> : : uint8_t *output, uint8_t *iv) +<span class="lineNum"> 473 </span> : : { +<span class="lineNum"> 474 </span> : : int i, j, nblocks, carry_flg; +<span class="lineNum"> 475 </span> : : uint8_t block[RIJNDAEL_BLOCKSIZE], block2[RIJNDAEL_BLOCKSIZE];//, oldptxt; +<span class="lineNum"> 476 </span> : : +<span class="lineNum"> 477 </span> :<span class="lineCov"> 416 : nblocks = inputlen / RIJNDAEL_BLOCKSIZE;</span> +<span class="lineNum"> 478 </span> : : +<span class="lineNum"> 479 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 391 times"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchCov" title="Branch 3 was taken 2 times"> + </span> :<span class="lineCov"> 416 : switch (ctx-&gt;mode) {</span> +<span class="lineNum"> </span> <span class="branchCov" title="Branch 4 was taken 4 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] +<span class="lineNum"> 480 </span> : : case MODE_ECB: /* electronic code book */ +<span class="lineNum"> 481 </span> [<span class="branchCov" title="Branch 0 was taken 250 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 268 : for (i = 0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 482 </span> :<span class="lineCov"> 250 : rijndael_encrypt(ctx, &amp;input[RIJNDAEL_BLOCKSIZE*i],</span> +<span class="lineNum"> 483 </span> :<span class="lineCov"> 250 : &amp;output[RIJNDAEL_BLOCKSIZE*i]);</span> +<span class="lineNum"> 484 </span> : : } +<span class="lineNum"> 485 </span> : : break; +<span class="lineNum"> 486 </span> : : case MODE_CBC: /* Cipher block chaining */ +<span class="lineNum"> 487 </span> : : /* set initial value */ +<span class="lineNum"> 488 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); +<span class="lineNum"> 489 </span> [<span class="branchCov" title="Branch 0 was taken 3452 times"> + </span><span class="branchCov" title="Branch 1 was taken 391 times"> + </span>]:<span class="lineCov"> 3843 : for (i=0; i&lt; nblocks; i++) {</span> +<span class="lineNum"> 490 </span> [<span class="branchCov" title="Branch 0 was taken 55232 times"> + </span><span class="branchCov" title="Branch 1 was taken 3452 times"> + </span>]:<span class="lineCov"> 58684 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) </span> +<span class="lineNum"> 491 </span> :<span class="lineCov"> 55232 : block[j] ^= input[i*RIJNDAEL_BLOCKSIZE + j] &amp; 0xff;</span> +<span class="lineNum"> 492 </span> :<span class="lineCov"> 3452 : rijndael_encrypt(ctx, block, block);</span> +<span class="lineNum"> 493 </span> :<span class="lineCov"> 3452 : memcpy(&amp;output[RIJNDAEL_BLOCKSIZE*i], block, RIJNDAEL_BLOCKSIZE);</span> +<span class="lineNum"> 494 </span> : : } +<span class="lineNum"> 495 </span> : : break; +<span class="lineNum"> 496 </span> : : case MODE_CFB: /* 128-bit cipher feedback */ +<span class="lineNum"> 497 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); +<span class="lineNum"> 498 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 10 : for (i=0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 499 </span> :<span class="lineCov"> 9 : rijndael_encrypt(ctx, block, block);</span> +<span class="lineNum"> 500 </span> [<span class="branchCov" title="Branch 1 was taken 144 times"> + </span><span class="branchCov" title="Branch 2 was taken 9 times"> + </span>]:<span class="lineCov"> 153 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++)</span> +<span class="lineNum"> 501 </span> :<span class="lineCov"> 144 : block[j] ^= input[i*RIJNDAEL_BLOCKSIZE + j];</span> +<span class="lineNum"> 502 </span> :<span class="lineCov"> 9 : memcpy(&amp;output[RIJNDAEL_BLOCKSIZE*i], block, RIJNDAEL_BLOCKSIZE);</span> +<span class="lineNum"> 503 </span> : : } +<span class="lineNum"> 504 </span> : : break; +<span class="lineNum"> 505 </span> : : case MODE_OFB: /* 128-bit output feedback */ +<span class="lineNum"> 506 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); +<span class="lineNum"> 507 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 20 : for (i=0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 508 </span> :<span class="lineCov"> 18 : rijndael_encrypt(ctx, block, block);</span> +<span class="lineNum"> 509 </span> [<span class="branchCov" title="Branch 1 was taken 288 times"> + </span><span class="branchCov" title="Branch 2 was taken 18 times"> + </span>]:<span class="lineCov"> 306 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> +<span class="lineNum"> 510 </span> :<span class="lineCov"> 576 : output[RIJNDAEL_BLOCKSIZE*i + j] = block[j] ^</span> +<span class="lineNum"> 511 </span> :<span class="lineCov"> 288 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> +<span class="lineNum"> 512 </span> : : } +<span class="lineNum"> 513 </span> : : } +<span class="lineNum"> 514 </span> : : break; +<span class="lineNum"> 515 </span> : : case MODE_CTR: /* counter */ +<span class="lineNum"> 516 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); +<span class="lineNum"> 517 </span> [<span class="branchCov" title="Branch 0 was taken 46 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 50 : for (i=0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 518 </span> :<span class="lineCov"> 46 : rijndael_encrypt(ctx, block, block2);</span> +<span class="lineNum"> 519 </span> [<span class="branchCov" title="Branch 1 was taken 736 times"> + </span><span class="branchCov" title="Branch 2 was taken 46 times"> + </span>]:<span class="lineCov"> 782 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> +<span class="lineNum"> 520 </span> :<span class="lineCov"> 1472 : output[RIJNDAEL_BLOCKSIZE*i + j] = block2[j] ^</span> +<span class="lineNum"> 521 </span> :<span class="lineCov"> 736 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> +<span class="lineNum"> 522 </span> : : } +<span class="lineNum"> 523 </span> :<span class="lineCov"> 46 : block[RIJNDAEL_BLOCKSIZE-1]++;</span> +<span class="lineNum"> 524 </span> :<span class="lineCov"> 46 : carry_flg = block[RIJNDAEL_BLOCKSIZE-1] != 0 ? 0 : 1;</span> +<span class="lineNum"> 525 </span> [<span class="branchCov" title="Branch 0 was taken 46 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 46 : for (j=RIJNDAEL_BLOCKSIZE-2; j&gt;=0; j--) {</span> +<span class="lineNum"> 526 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 46 times"> + </span>]:<span class="lineCov"> 46 : if (carry_flg) {</span> +<span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : block[j]++;</span> +<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : carry_flg = block[j] != 0 ? 0 : 1;</span> +<span class="lineNum"> 529 </span> : : } else +<span class="lineNum"> 530 </span> : : break; +<span class="lineNum"> 531 </span> : : } +<span class="lineNum"> 532 </span> : : } +<span class="lineNum"> 533 </span> : : break; +<span class="lineNum"> 534 </span> : : default: +<span class="lineNum"> 535 </span> : : break; +<span class="lineNum"> 536 </span> : : } +<span class="lineNum"> 537 </span> :<span class="lineCov"> 416 : }</span> +<a name="538"><span class="lineNum"> 538 </span> : : </a> +<span class="lineNum"> 539 </span> : : void +<span class="lineNum"> 540 </span> :<span class="lineCov"> 387 : block_decrypt(RIJNDAEL_context *ctx, uint8_t *input, int inputlen,</span> +<span class="lineNum"> 541 </span> : : uint8_t *output, uint8_t *iv) +<span class="lineNum"> 542 </span> : : { +<span class="lineNum"> 543 </span> : : int i, j, nblocks, carry_flg; +<span class="lineNum"> 544 </span> : : uint8_t block[RIJNDAEL_BLOCKSIZE], block2[RIJNDAEL_BLOCKSIZE]; +<span class="lineNum"> 545 </span> : : +<span class="lineNum"> 546 </span> :<span class="lineCov"> 387 : nblocks = inputlen / RIJNDAEL_BLOCKSIZE;</span> +<span class="lineNum"> 547 </span> [<span class="branchCov" title="Branch 0 was taken 13 times"> + </span><span class="branchCov" title="Branch 1 was taken 368 times"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchCov" title="Branch 3 was taken 2 times"> + </span> :<span class="lineCov"> 387 : switch (ctx-&gt;mode) {</span> +<span class="lineNum"> </span> <span class="branchCov" title="Branch 4 was taken 3 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] +<span class="lineNum"> 548 </span> : : case MODE_ECB: +<span class="lineNum"> 549 </span> [<span class="branchCov" title="Branch 0 was taken 130 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>]:<span class="lineCov"> 143 : for (i = 0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 550 </span> :<span class="lineCov"> 130 : rijndael_decrypt(ctx, &amp;input[RIJNDAEL_BLOCKSIZE*i],</span> +<span class="lineNum"> 551 </span> :<span class="lineCov"> 130 : &amp;output[RIJNDAEL_BLOCKSIZE*i]);</span> +<span class="lineNum"> 552 </span> : : } +<span class="lineNum"> 553 </span> : : break; +<span class="lineNum"> 554 </span> : : case MODE_CBC: +<span class="lineNum"> 555 </span> : : /* first block */ +<span class="lineNum"> 556 </span> :<span class="lineCov"> 368 : rijndael_decrypt(ctx, input, block);</span> +<span class="lineNum"> 557 </span> : : /* XOR the block with the IV to get the output */ +<span class="lineNum"> 558 </span> [<span class="branchCov" title="Branch 1 was taken 5888 times"> + </span><span class="branchCov" title="Branch 2 was taken 368 times"> + </span>]:<span class="lineCov"> 6256 : for (i=0; i&lt;RIJNDAEL_BLOCKSIZE; i++)</span> +<span class="lineNum"> 559 </span> :<span class="lineCov"> 5888 : output[i] = block[i] ^ iv[i];</span> +<span class="lineNum"> 560 </span> [<span class="branchCov" title="Branch 0 was taken 2580 times"> + </span><span class="branchCov" title="Branch 1 was taken 368 times"> + </span>]:<span class="lineCov"> 2948 : for (i=1; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 561 </span> :<span class="lineCov"> 2580 : rijndael_decrypt(ctx, &amp;input[i*RIJNDAEL_BLOCKSIZE], block);</span> +<span class="lineNum"> 562 </span> [<span class="branchCov" title="Branch 1 was taken 41280 times"> + </span><span class="branchCov" title="Branch 2 was taken 2580 times"> + </span>]:<span class="lineCov"> 43860 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> +<span class="lineNum"> 563 </span> :<span class="lineCov"> 82560 : output[i*RIJNDAEL_BLOCKSIZE + j] = block[j] ^</span> +<span class="lineNum"> 564 </span> :<span class="lineCov"> 41280 : input[(i-1)*RIJNDAEL_BLOCKSIZE + j];</span> +<span class="lineNum"> 565 </span> : : } +<span class="lineNum"> 566 </span> : : } +<span class="lineNum"> 567 </span> : : break; +<span class="lineNum"> 568 </span> : : case MODE_CFB: /* 128-bit cipher feedback */ +<span class="lineNum"> 569 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); +<span class="lineNum"> 570 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 10 : for (i=0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 571 </span> :<span class="lineCov"> 9 : rijndael_encrypt(ctx, block, block); /* ENCRYPT is right! */</span> +<span class="lineNum"> 572 </span> [<span class="branchCov" title="Branch 1 was taken 144 times"> + </span><span class="branchCov" title="Branch 2 was taken 9 times"> + </span>]:<span class="lineCov"> 153 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> +<span class="lineNum"> 573 </span> :<span class="lineCov"> 288 : output[RIJNDAEL_BLOCKSIZE*i + j] = block[j] ^</span> +<span class="lineNum"> 574 </span> :<span class="lineCov"> 144 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> +<span class="lineNum"> 575 </span> : : } +<span class="lineNum"> 576 </span> :<span class="lineCov"> 9 : memcpy(block, &amp;input[RIJNDAEL_BLOCKSIZE*i], RIJNDAEL_BLOCKSIZE);</span> +<span class="lineNum"> 577 </span> : : } +<span class="lineNum"> 578 </span> : : break; +<span class="lineNum"> 579 </span> : : case MODE_OFB: /* 128-bit output feedback */ +<span class="lineNum"> 580 </span> : : /* this is exactly the same as encryption in OFB...in fact you can use +<span class="lineNum"> 581 </span> : : the encryption in OFB mode to decrypt! */ +<span class="lineNum"> 582 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); +<span class="lineNum"> 583 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 20 : for (i=0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 584 </span> :<span class="lineCov"> 18 : rijndael_encrypt(ctx, block, block);</span> +<span class="lineNum"> 585 </span> [<span class="branchCov" title="Branch 1 was taken 288 times"> + </span><span class="branchCov" title="Branch 2 was taken 18 times"> + </span>]:<span class="lineCov"> 306 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> +<span class="lineNum"> 586 </span> :<span class="lineCov"> 576 : output[RIJNDAEL_BLOCKSIZE*i + j] = block[j] ^</span> +<span class="lineNum"> 587 </span> :<span class="lineCov"> 288 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> +<span class="lineNum"> 588 </span> : : } +<span class="lineNum"> 589 </span> : : } +<span class="lineNum"> 590 </span> : : break; +<span class="lineNum"> 591 </span> : : case MODE_CTR: /* counter */ +<span class="lineNum"> 592 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); +<span class="lineNum"> 593 </span> [<span class="branchCov" title="Branch 0 was taken 25 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 28 : for (i=0; i&lt;nblocks; i++) {</span> +<span class="lineNum"> 594 </span> :<span class="lineCov"> 25 : rijndael_encrypt(ctx, block, block2);</span> +<span class="lineNum"> 595 </span> [<span class="branchCov" title="Branch 1 was taken 400 times"> + </span><span class="branchCov" title="Branch 2 was taken 25 times"> + </span>]:<span class="lineCov"> 425 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> +<span class="lineNum"> 596 </span> :<span class="lineCov"> 800 : output[RIJNDAEL_BLOCKSIZE*i + j] = block2[j] ^</span> +<span class="lineNum"> 597 </span> :<span class="lineCov"> 400 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> +<span class="lineNum"> 598 </span> : : } +<span class="lineNum"> 599 </span> :<span class="lineCov"> 25 : block[RIJNDAEL_BLOCKSIZE-1]++;</span> +<span class="lineNum"> 600 </span> :<span class="lineCov"> 25 : carry_flg = block[RIJNDAEL_BLOCKSIZE-1] != 0 ? 0 : 1;</span> +<span class="lineNum"> 601 </span> [<span class="branchCov" title="Branch 0 was taken 25 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 25 : for (j=RIJNDAEL_BLOCKSIZE-2; j&gt;=0; j--) {</span> +<span class="lineNum"> 602 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 25 times"> + </span>]:<span class="lineCov"> 25 : if (carry_flg) {</span> +<span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : block[j]++;</span> +<span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : carry_flg = block[j] != 0 ? 0 : 1;</span> +<span class="lineNum"> 605 </span> : : } else +<span class="lineNum"> 606 </span> : : break; +<span class="lineNum"> 607 </span> : : } +<span class="lineNum"> 608 </span> : : } +<span class="lineNum"> 609 </span> : : break; +<span class="lineNum"> 610 </span> : : default: +<span class="lineNum"> 611 </span> : : break; +<span class="lineNum"> 612 </span> : : } +<span class="lineNum"> 613 </span> :<span class="lineCov"> 387 : }</span> +<span class="lineNum"> 614 </span> : : +<span class="lineNum"> 615 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html new file mode 100644 index 00000000..cb03e415 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha1.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha1.c<span style="font-size: 80%;"> (<a href="sha1.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">97</td> + <td class="headerCovTableEntry">106</td> + <td class="headerCovTableEntryHi">91.5 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryMed">75.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="sha1.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#64">sha1_transform</a></td> + <td class="coverFnHi">1656</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#196">sha1_update</a></td> + <td class="coverFnHi">798</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#234">sha1_transform_and_copy</a></td> + <td class="coverFnHi">502</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#261">sha1_final</a></td> + <td class="coverFnHi">502</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#181">sha1_init</a></td> + <td class="coverFnHi">502</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html new file mode 100644 index 00000000..8a41247a --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha1.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha1.c<span style="font-size: 80%;"> (<a href="sha1.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">97</td> + <td class="headerCovTableEntry">106</td> + <td class="headerCovTableEntryHi">91.5 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryMed">75.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="sha1.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#261">sha1_final</a></td> + <td class="coverFnHi">502</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#181">sha1_init</a></td> + <td class="coverFnHi">502</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#64">sha1_transform</a></td> + <td class="coverFnHi">1656</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#234">sha1_transform_and_copy</a></td> + <td class="coverFnHi">502</td> + </tr> + <tr> + <td class="coverFn"><a href="sha1.c.gcov.html#196">sha1_update</a></td> + <td class="coverFnHi">798</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html new file mode 100644 index 00000000..37c55cc1 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html @@ -0,0 +1,376 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha1.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha1.c<span style="font-size: 80%;"> (source / <a href="sha1.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">97</td> + <td class="headerCovTableEntry">106</td> + <td class="headerCovTableEntryHi">91.5 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">18</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryMed">75.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: sha1.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Implementation of the SHA1 message-digest algorithm for +<span class="lineNum"> 7 </span> : : * libfwknop. +<span class="lineNum"> 8 </span> : : * +<span class="lineNum"> 9 </span> : : * NIST Secure Hash Algorithm +<span class="lineNum"> 10 </span> : : * Heavily modified by Uwe Hollerbach &lt;uh@alumni.caltech edu&gt; +<span class="lineNum"> 11 </span> : : * from Peter C. Gutmann's implementation as found in +<span class="lineNum"> 12 </span> : : * Applied Cryptography by Bruce Schneier +<span class="lineNum"> 13 </span> : : * Further modifications to include the &quot;UNRAVEL&quot; stuff, below +<span class="lineNum"> 14 </span> : : * +<span class="lineNum"> 15 </span> : : * This code is in the public domain +<span class="lineNum"> 16 </span> : : * +<span class="lineNum"> 17 </span> : : ***************************************************************************** +<span class="lineNum"> 18 </span> : : */ +<span class="lineNum"> 19 </span> : : #include &quot;sha1.h&quot; +<span class="lineNum"> 20 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 21 </span> : : +<span class="lineNum"> 22 </span> : : /* SHA f()-functions */ +<span class="lineNum"> 23 </span> : : #define f1(x,y,z) ((x &amp; y) | (~x &amp; z)) +<span class="lineNum"> 24 </span> : : #define f2(x,y,z) (x ^ y ^ z) +<span class="lineNum"> 25 </span> : : #define f3(x,y,z) ((x &amp; y) | (x &amp; z) | (y &amp; z)) +<span class="lineNum"> 26 </span> : : #define f4(x,y,z) (x ^ y ^ z) +<span class="lineNum"> 27 </span> : : +<span class="lineNum"> 28 </span> : : /* SHA constants */ +<span class="lineNum"> 29 </span> : : #define CONST1 0x5a827999L +<span class="lineNum"> 30 </span> : : #define CONST2 0x6ed9eba1L +<span class="lineNum"> 31 </span> : : #define CONST3 0x8f1bbcdcL +<span class="lineNum"> 32 </span> : : #define CONST4 0xca62c1d6L +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : /* truncate to 32 bits -- should be a null op on 32-bit machines */ +<span class="lineNum"> 35 </span> : : #define T32(x) ((x) &amp; 0xffffffffL) +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : /* 32-bit rotate */ +<span class="lineNum"> 38 </span> : : #define R32(x,n) T32(((x &lt;&lt; n) | (x &gt;&gt; (32 - n)))) +<span class="lineNum"> 39 </span> : : +<span class="lineNum"> 40 </span> : : /* the generic case, for when the overall rotation is not unraveled */ +<span class="lineNum"> 41 </span> : : #define FG(n) \ +<span class="lineNum"> 42 </span> : : T = T32(R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n); \ +<span class="lineNum"> 43 </span> : : E = D; D = C; C = R32(B,30); B = A; A = T +<span class="lineNum"> 44 </span> : : +<span class="lineNum"> 45 </span> : : /* specific cases, for when the overall rotation is unraveled */ +<span class="lineNum"> 46 </span> : : #define FA(n) \ +<span class="lineNum"> 47 </span> : : T = T32(R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n); B = R32(B,30) +<span class="lineNum"> 48 </span> : : +<span class="lineNum"> 49 </span> : : #define FB(n) \ +<span class="lineNum"> 50 </span> : : E = T32(R32(T,5) + f##n(A,B,C) + D + *WP++ + CONST##n); A = R32(A,30) +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> : : #define FC(n) \ +<span class="lineNum"> 53 </span> : : D = T32(R32(E,5) + f##n(T,A,B) + C + *WP++ + CONST##n); T = R32(T,30) +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : #define FD(n) \ +<span class="lineNum"> 56 </span> : : C = T32(R32(D,5) + f##n(E,T,A) + B + *WP++ + CONST##n); E = R32(E,30) +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> : : #define FE(n) \ +<span class="lineNum"> 59 </span> : : B = T32(R32(C,5) + f##n(D,E,T) + A + *WP++ + CONST##n); D = R32(D,30) +<span class="lineNum"> 60 </span> : : +<span class="lineNum"> 61 </span> : : #define FT(n) \ +<span class="lineNum"> 62 </span> : : A = T32(R32(B,5) + f##n(C,D,E) + T + *WP++ + CONST##n); C = R32(C,30) +<span class="lineNum"> 63 </span> : : +<a name="64"><span class="lineNum"> 64 </span> : : </a> +<span class="lineNum"> 65 </span> : : void +<span class="lineNum"> 66 </span> :<span class="lineCov"> 1656 : sha1_transform(SHA1_INFO *sha1_info)</span> +<span class="lineNum"> 67 </span> : : { +<span class="lineNum"> 68 </span> : : int i; +<span class="lineNum"> 69 </span> : : uint8_t *dp; +<span class="lineNum"> 70 </span> : : uint32_t T, A, B, C, D, E, W[80], *WP; +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> :<span class="lineCov"> 1656 : dp = sha1_info-&gt;data;</span> +<span class="lineNum"> 73 </span> : : +<span class="lineNum"> 74 </span> : : #undef SWAP_DONE +<span class="lineNum"> 75 </span> : : +<span class="lineNum"> 76 </span> : : #if BYTEORDER == 1234 +<span class="lineNum"> 77 </span> : : #define SWAP_DONE +<span class="lineNum"> 78 </span> [<span class="branchCov" title="Branch 0 was taken 26496 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 28152 : for (i = 0; i &lt; 16; ++i) {</span> +<span class="lineNum"> 79 </span> :<span class="lineCov"> 26496 : T = *((uint32_t *) dp);</span> +<span class="lineNum"> 80 </span> :<span class="lineCov"> 26496 : dp += 4;</span> +<span class="lineNum"> 81 </span> :<span class="lineCov"> 26496 : W[i] = </span> +<span class="lineNum"> 82 </span> :<span class="lineCov"> 52992 : ((T &lt;&lt; 24) &amp; 0xff000000) |</span> +<span class="lineNum"> 83 </span> :<span class="lineCov"> 52992 : ((T &lt;&lt; 8) &amp; 0x00ff0000) |</span> +<span class="lineNum"> 84 </span> :<span class="lineCov"> 52992 : ((T &gt;&gt; 8) &amp; 0x0000ff00) | ((T &gt;&gt; 24) &amp; 0x000000ff);</span> +<span class="lineNum"> 85 </span> : : } +<span class="lineNum"> 86 </span> : : #endif +<span class="lineNum"> 87 </span> : : +<span class="lineNum"> 88 </span> : : #if BYTEORDER == 4321 +<span class="lineNum"> 89 </span> : : #define SWAP_DONE +<span class="lineNum"> 90 </span> : : for (i = 0; i &lt; 16; ++i) { +<span class="lineNum"> 91 </span> : : T = *((uint32_t *) dp); +<span class="lineNum"> 92 </span> : : dp += 4; +<span class="lineNum"> 93 </span> : : W[i] = TRUNC32(T); +<span class="lineNum"> 94 </span> : : } +<span class="lineNum"> 95 </span> : : #endif +<span class="lineNum"> 96 </span> : : +<span class="lineNum"> 97 </span> : : #if BYTEORDER == 12345678 +<span class="lineNum"> 98 </span> : : #define SWAP_DONE +<span class="lineNum"> 99 </span> : : for (i = 0; i &lt; 16; i += 2) { +<span class="lineNum"> 100 </span> : : T = *((uint32_t *) dp); +<span class="lineNum"> 101 </span> : : dp += 8; +<span class="lineNum"> 102 </span> : : W[i] = ((T &lt;&lt; 24) &amp; 0xff000000) | ((T &lt;&lt; 8) &amp; 0x00ff0000) | +<span class="lineNum"> 103 </span> : : ((T &gt;&gt; 8) &amp; 0x0000ff00) | ((T &gt;&gt; 24) &amp; 0x000000ff); +<span class="lineNum"> 104 </span> : : T &gt;&gt;= 32; +<span class="lineNum"> 105 </span> : : W[i+1] = ((T &lt;&lt; 24) &amp; 0xff000000) | ((T &lt;&lt; 8) &amp; 0x00ff0000) | +<span class="lineNum"> 106 </span> : : ((T &gt;&gt; 8) &amp; 0x0000ff00) | ((T &gt;&gt; 24) &amp; 0x000000ff); +<span class="lineNum"> 107 </span> : : } +<span class="lineNum"> 108 </span> : : #endif +<span class="lineNum"> 109 </span> : : +<span class="lineNum"> 110 </span> : : #if BYTEORDER == 87654321 +<span class="lineNum"> 111 </span> : : #define SWAP_DONE +<span class="lineNum"> 112 </span> : : for (i = 0; i &lt; 16; i += 2) { +<span class="lineNum"> 113 </span> : : T = *((uint32_t *) dp); +<span class="lineNum"> 114 </span> : : dp += 8; +<span class="lineNum"> 115 </span> : : W[i] = TRUNC32(T &gt;&gt; 32); +<span class="lineNum"> 116 </span> : : W[i+1] = TRUNC32(T); +<span class="lineNum"> 117 </span> : : } +<span class="lineNum"> 118 </span> : : #endif +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> : : #ifndef SWAP_DONE +<span class="lineNum"> 121 </span> : : #define SWAP_DONE +<span class="lineNum"> 122 </span> : : for (i = 0; i &lt; 16; ++i) { +<span class="lineNum"> 123 </span> : : T = *((uint32_t *) dp); +<span class="lineNum"> 124 </span> : : dp += 4; +<span class="lineNum"> 125 </span> : : W[i] = TRUNC32(T); +<span class="lineNum"> 126 </span> : : } +<span class="lineNum"> 127 </span> : : #ifndef WIN32 +<span class="lineNum"> 128 </span> : : #warning Undetermined or unsupported Byte Order... We will try LITTLE_ENDIAN +<span class="lineNum"> 129 </span> : : #endif +<span class="lineNum"> 130 </span> : : #endif /* SWAP_DONE */ +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> [<span class="branchCov" title="Branch 0 was taken 105984 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 107640 : for (i = 16; i &lt; 80; ++i) {</span> +<span class="lineNum"> 133 </span> :<span class="lineCov"> 105984 : W[i] = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16];</span> +<span class="lineNum"> 134 </span> :<span class="lineCov"> 105984 : W[i] = R32(W[i], 1);</span> +<span class="lineNum"> 135 </span> : : } +<span class="lineNum"> 136 </span> :<span class="lineCov"> 1656 : A = sha1_info-&gt;digest[0];</span> +<span class="lineNum"> 137 </span> :<span class="lineCov"> 1656 : B = sha1_info-&gt;digest[1];</span> +<span class="lineNum"> 138 </span> :<span class="lineCov"> 1656 : C = sha1_info-&gt;digest[2];</span> +<span class="lineNum"> 139 </span> :<span class="lineCov"> 1656 : D = sha1_info-&gt;digest[3];</span> +<span class="lineNum"> 140 </span> :<span class="lineCov"> 1656 : E = sha1_info-&gt;digest[4];</span> +<span class="lineNum"> 141 </span> :<span class="lineCov"> 1656 : WP = W;</span> +<span class="lineNum"> 142 </span> : : #ifdef UNRAVEL +<span class="lineNum"> 143 </span> : : FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1); FC(1); FD(1); +<span class="lineNum"> 144 </span> : : FE(1); FT(1); FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1); +<span class="lineNum"> 145 </span> : : FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2); FE(2); FT(2); +<span class="lineNum"> 146 </span> : : FA(2); FB(2); FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2); +<span class="lineNum"> 147 </span> : : FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3); FA(3); FB(3); +<span class="lineNum"> 148 </span> : : FC(3); FD(3); FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3); +<span class="lineNum"> 149 </span> : : FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4); FC(4); FD(4); +<span class="lineNum"> 150 </span> : : FE(4); FT(4); FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4); +<span class="lineNum"> 151 </span> : : sha1_info-&gt;digest[0] = T32(sha1_info-&gt;digest[0] + E); +<span class="lineNum"> 152 </span> : : sha1_info-&gt;digest[1] = T32(sha1_info-&gt;digest[1] + T); +<span class="lineNum"> 153 </span> : : sha1_info-&gt;digest[2] = T32(sha1_info-&gt;digest[2] + A); +<span class="lineNum"> 154 </span> : : sha1_info-&gt;digest[3] = T32(sha1_info-&gt;digest[3] + B); +<span class="lineNum"> 155 </span> : : sha1_info-&gt;digest[4] = T32(sha1_info-&gt;digest[4] + C); +<span class="lineNum"> 156 </span> : : #else /* !UNRAVEL */ +<span class="lineNum"> 157 </span> : : #ifdef UNROLL_LOOPS +<span class="lineNum"> 158 </span> : : FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); +<span class="lineNum"> 159 </span> : : FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); +<span class="lineNum"> 160 </span> : : FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); +<span class="lineNum"> 161 </span> : : FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); +<span class="lineNum"> 162 </span> : : FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); +<span class="lineNum"> 163 </span> : : FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); +<span class="lineNum"> 164 </span> : : FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); +<span class="lineNum"> 165 </span> : : FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); +<span class="lineNum"> 166 </span> : : #else /* !UNROLL_LOOPS */ +<span class="lineNum"> 167 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 0; i &lt; 20; ++i) { FG(1); }</span> +<span class="lineNum"> 168 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 20; i &lt; 40; ++i) { FG(2); }</span> +<span class="lineNum"> 169 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 40; i &lt; 60; ++i) { FG(3); }</span> +<span class="lineNum"> 170 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 60; i &lt; 80; ++i) { FG(4); }</span> +<span class="lineNum"> 171 </span> : : #endif /* !UNROLL_LOOPS */ +<span class="lineNum"> 172 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[0] = T32(sha1_info-&gt;digest[0] + A);</span> +<span class="lineNum"> 173 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[1] = T32(sha1_info-&gt;digest[1] + B);</span> +<span class="lineNum"> 174 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[2] = T32(sha1_info-&gt;digest[2] + C);</span> +<span class="lineNum"> 175 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[3] = T32(sha1_info-&gt;digest[3] + D);</span> +<span class="lineNum"> 176 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[4] = T32(sha1_info-&gt;digest[4] + E);</span> +<span class="lineNum"> 177 </span> : : #endif /* !UNRAVEL */ +<span class="lineNum"> 178 </span> :<span class="lineCov"> 1656 : }</span> +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> : : /* initialize the SHA digest */ +<a name="181"><span class="lineNum"> 181 </span> : : </a> +<span class="lineNum"> 182 </span> : : void +<span class="lineNum"> 183 </span> :<span class="lineCov"> 502 : sha1_init(SHA1_INFO *sha1_info)</span> +<span class="lineNum"> 184 </span> : : { +<span class="lineNum"> 185 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[0] = 0x67452301L;</span> +<span class="lineNum"> 186 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[1] = 0xefcdab89L;</span> +<span class="lineNum"> 187 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[2] = 0x98badcfeL;</span> +<span class="lineNum"> 188 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[3] = 0x10325476L;</span> +<span class="lineNum"> 189 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[4] = 0xc3d2e1f0L;</span> +<span class="lineNum"> 190 </span> :<span class="lineCov"> 502 : sha1_info-&gt;count_lo = 0L;</span> +<span class="lineNum"> 191 </span> :<span class="lineCov"> 502 : sha1_info-&gt;count_hi = 0L;</span> +<span class="lineNum"> 192 </span> :<span class="lineCov"> 502 : sha1_info-&gt;local = 0;</span> +<span class="lineNum"> 193 </span> :<span class="lineCov"> 502 : }</span> +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> : : /* update the SHA digest */ +<a name="196"><span class="lineNum"> 196 </span> : : </a> +<span class="lineNum"> 197 </span> : : void +<span class="lineNum"> 198 </span> :<span class="lineCov"> 798 : sha1_update(SHA1_INFO *sha1_info, uint8_t *buffer, int count)</span> +<span class="lineNum"> 199 </span> : : { +<span class="lineNum"> 200 </span> : : int i; +<span class="lineNum"> 201 </span> : : uint32_t clo; +<span class="lineNum"> 202 </span> : : +<span class="lineNum"> 203 </span> :<span class="lineCov"> 798 : clo = T32(sha1_info-&gt;count_lo + ((uint32_t) count &lt;&lt; 3));</span> +<span class="lineNum"> 204 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 798 times"> + </span>]:<span class="lineCov"> 798 : if (clo &lt; sha1_info-&gt;count_lo) {</span> +<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : ++sha1_info-&gt;count_hi;</span> +<span class="lineNum"> 206 </span> : : } +<span class="lineNum"> 207 </span> :<span class="lineCov"> 798 : sha1_info-&gt;count_lo = clo;</span> +<span class="lineNum"> 208 </span> :<span class="lineCov"> 798 : sha1_info-&gt;count_hi += (uint32_t) count &gt;&gt; 29;</span> +<span class="lineNum"> 209 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 798 times"> + </span>]:<span class="lineCov"> 798 : if (sha1_info-&gt;local) {</span> +<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : i = SHA1_BLOCKSIZE - sha1_info-&gt;local;</span> +<span class="lineNum"> 211 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (i &gt; count) {</span> +<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : i = count;</span> +<span class="lineNum"> 213 </span> : : } +<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : memcpy(((uint8_t *) sha1_info-&gt;data) + sha1_info-&gt;local, buffer, i);</span> +<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : count -= i;</span> +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : buffer += i;</span> +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : sha1_info-&gt;local += i;</span> +<span class="lineNum"> 218 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sha1_info-&gt;local == SHA1_BLOCKSIZE) {</span> +<span class="lineNum"> 219 </span> :<span class="lineCov"> 798 : sha1_transform(sha1_info);</span> +<span class="lineNum"> 220 </span> : : } else { +<span class="lineNum"> 221 </span> :<span class="lineCov"> 798 : return;</span> +<span class="lineNum"> 222 </span> : : } +<span class="lineNum"> 223 </span> : : } +<span class="lineNum"> 224 </span> [<span class="branchCov" title="Branch 0 was taken 1124 times"> + </span><span class="branchCov" title="Branch 1 was taken 798 times"> + </span>]:<span class="lineCov"> 1922 : while (count &gt;= SHA1_BLOCKSIZE) {</span> +<span class="lineNum"> 225 </span> :<span class="lineCov"> 1124 : memcpy(sha1_info-&gt;data, buffer, SHA1_BLOCKSIZE);</span> +<span class="lineNum"> 226 </span> :<span class="lineCov"> 1124 : buffer += SHA1_BLOCKSIZE;</span> +<span class="lineNum"> 227 </span> :<span class="lineCov"> 1124 : count -= SHA1_BLOCKSIZE;</span> +<span class="lineNum"> 228 </span> :<span class="lineCov"> 1124 : sha1_transform(sha1_info);</span> +<span class="lineNum"> 229 </span> : : } +<span class="lineNum"> 230 </span> :<span class="lineCov"> 798 : memcpy(sha1_info-&gt;data, buffer, count);</span> +<span class="lineNum"> 231 </span> :<span class="lineCov"> 798 : sha1_info-&gt;local = count;</span> +<span class="lineNum"> 232 </span> : : } +<span class="lineNum"> 233 </span> : : +<a name="234"><span class="lineNum"> 234 </span> : : </a> +<span class="lineNum"> 235 </span> : : void +<span class="lineNum"> 236 </span> :<span class="lineCov"> 502 : sha1_transform_and_copy(unsigned char digest[20], SHA1_INFO *sha1_info)</span> +<span class="lineNum"> 237 </span> : : { +<span class="lineNum"> 238 </span> :<span class="lineCov"> 502 : sha1_transform(sha1_info);</span> +<span class="lineNum"> 239 </span> :<span class="lineCov"> 502 : digest[ 0] = (unsigned char) ((sha1_info-&gt;digest[0] &gt;&gt; 24) &amp; 0xff);</span> +<span class="lineNum"> 240 </span> :<span class="lineCov"> 502 : digest[ 1] = (unsigned char) ((sha1_info-&gt;digest[0] &gt;&gt; 16) &amp; 0xff);</span> +<span class="lineNum"> 241 </span> :<span class="lineCov"> 502 : digest[ 2] = (unsigned char) ((sha1_info-&gt;digest[0] &gt;&gt; 8) &amp; 0xff);</span> +<span class="lineNum"> 242 </span> :<span class="lineCov"> 502 : digest[ 3] = (unsigned char) ((sha1_info-&gt;digest[0] ) &amp; 0xff);</span> +<span class="lineNum"> 243 </span> :<span class="lineCov"> 502 : digest[ 4] = (unsigned char) ((sha1_info-&gt;digest[1] &gt;&gt; 24) &amp; 0xff);</span> +<span class="lineNum"> 244 </span> :<span class="lineCov"> 502 : digest[ 5] = (unsigned char) ((sha1_info-&gt;digest[1] &gt;&gt; 16) &amp; 0xff);</span> +<span class="lineNum"> 245 </span> :<span class="lineCov"> 502 : digest[ 6] = (unsigned char) ((sha1_info-&gt;digest[1] &gt;&gt; 8) &amp; 0xff);</span> +<span class="lineNum"> 246 </span> :<span class="lineCov"> 502 : digest[ 7] = (unsigned char) ((sha1_info-&gt;digest[1] ) &amp; 0xff);</span> +<span class="lineNum"> 247 </span> :<span class="lineCov"> 502 : digest[ 8] = (unsigned char) ((sha1_info-&gt;digest[2] &gt;&gt; 24) &amp; 0xff);</span> +<span class="lineNum"> 248 </span> :<span class="lineCov"> 502 : digest[ 9] = (unsigned char) ((sha1_info-&gt;digest[2] &gt;&gt; 16) &amp; 0xff);</span> +<span class="lineNum"> 249 </span> :<span class="lineCov"> 502 : digest[10] = (unsigned char) ((sha1_info-&gt;digest[2] &gt;&gt; 8) &amp; 0xff);</span> +<span class="lineNum"> 250 </span> :<span class="lineCov"> 502 : digest[11] = (unsigned char) ((sha1_info-&gt;digest[2] ) &amp; 0xff);</span> +<span class="lineNum"> 251 </span> :<span class="lineCov"> 502 : digest[12] = (unsigned char) ((sha1_info-&gt;digest[3] &gt;&gt; 24) &amp; 0xff);</span> +<span class="lineNum"> 252 </span> :<span class="lineCov"> 502 : digest[13] = (unsigned char) ((sha1_info-&gt;digest[3] &gt;&gt; 16) &amp; 0xff);</span> +<span class="lineNum"> 253 </span> :<span class="lineCov"> 502 : digest[14] = (unsigned char) ((sha1_info-&gt;digest[3] &gt;&gt; 8) &amp; 0xff);</span> +<span class="lineNum"> 254 </span> :<span class="lineCov"> 502 : digest[15] = (unsigned char) ((sha1_info-&gt;digest[3] ) &amp; 0xff);</span> +<span class="lineNum"> 255 </span> :<span class="lineCov"> 502 : digest[16] = (unsigned char) ((sha1_info-&gt;digest[4] &gt;&gt; 24) &amp; 0xff);</span> +<span class="lineNum"> 256 </span> :<span class="lineCov"> 502 : digest[17] = (unsigned char) ((sha1_info-&gt;digest[4] &gt;&gt; 16) &amp; 0xff);</span> +<span class="lineNum"> 257 </span> :<span class="lineCov"> 502 : digest[18] = (unsigned char) ((sha1_info-&gt;digest[4] &gt;&gt; 8) &amp; 0xff);</span> +<span class="lineNum"> 258 </span> :<span class="lineCov"> 502 : digest[19] = (unsigned char) ((sha1_info-&gt;digest[4] ) &amp; 0xff);</span> +<span class="lineNum"> 259 </span> :<span class="lineCov"> 502 : }</span> +<span class="lineNum"> 260 </span> : : +<a name="261"><span class="lineNum"> 261 </span> : : /* finish computing the SHA digest */</a> +<span class="lineNum"> 262 </span> : : void +<span class="lineNum"> 263 </span> :<span class="lineCov"> 502 : sha1_final(uint8_t digest[20], SHA1_INFO *sha1_info)</span> +<span class="lineNum"> 264 </span> : : { +<span class="lineNum"> 265 </span> : : int count; +<span class="lineNum"> 266 </span> : : uint32_t lo_bit_count, hi_bit_count; +<span class="lineNum"> 267 </span> : : +<span class="lineNum"> 268 </span> :<span class="lineCov"> 502 : lo_bit_count = sha1_info-&gt;count_lo;</span> +<span class="lineNum"> 269 </span> :<span class="lineCov"> 502 : hi_bit_count = sha1_info-&gt;count_hi;</span> +<span class="lineNum"> 270 </span> :<span class="lineCov"> 502 : count = (int) ((lo_bit_count &gt;&gt; 3) &amp; 0x3f);</span> +<span class="lineNum"> 271 </span> :<span class="lineCov"> 502 : ((uint8_t *) sha1_info-&gt;data)[count++] = 0x80;</span> +<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 0 was taken 30 times"> + </span><span class="branchCov" title="Branch 1 was taken 472 times"> + </span>]:<span class="lineCov"> 502 : if (count &gt; SHA1_BLOCKSIZE - 8) {</span> +<span class="lineNum"> 273 </span> :<span class="lineCov"> 30 : memset(((uint8_t *) sha1_info-&gt;data) + count, 0, SHA1_BLOCKSIZE - count);</span> +<span class="lineNum"> 274 </span> :<span class="lineCov"> 30 : sha1_transform(sha1_info);</span> +<span class="lineNum"> 275 </span> :<span class="lineCov"> 30 : memset((uint8_t *) sha1_info-&gt;data, 0, SHA1_BLOCKSIZE - 8);</span> +<span class="lineNum"> 276 </span> : : } else { +<span class="lineNum"> 277 </span> :<span class="lineCov"> 472 : memset(((uint8_t *) sha1_info-&gt;data) + count, 0,</span> +<span class="lineNum"> 278 </span> :<span class="lineCov"> 472 : SHA1_BLOCKSIZE - 8 - count);</span> +<span class="lineNum"> 279 </span> : : } +<span class="lineNum"> 280 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[56] = (uint8_t)((hi_bit_count &gt;&gt; 24) &amp; 0xff);</span> +<span class="lineNum"> 281 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[57] = (uint8_t)((hi_bit_count &gt;&gt; 16) &amp; 0xff);</span> +<span class="lineNum"> 282 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[58] = (uint8_t)((hi_bit_count &gt;&gt; 8) &amp; 0xff);</span> +<span class="lineNum"> 283 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[59] = (uint8_t)((hi_bit_count &gt;&gt; 0) &amp; 0xff);</span> +<span class="lineNum"> 284 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[60] = (uint8_t)((lo_bit_count &gt;&gt; 24) &amp; 0xff);</span> +<span class="lineNum"> 285 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[61] = (uint8_t)((lo_bit_count &gt;&gt; 16) &amp; 0xff);</span> +<span class="lineNum"> 286 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[62] = (uint8_t)((lo_bit_count &gt;&gt; 8) &amp; 0xff);</span> +<span class="lineNum"> 287 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[63] = (uint8_t)((lo_bit_count &gt;&gt; 0) &amp; 0xff);</span> +<span class="lineNum"> 288 </span> :<span class="lineCov"> 502 : sha1_transform_and_copy(digest, sha1_info);</span> +<span class="lineNum"> 289 </span> :<span class="lineCov"> 502 : }</span> +<span class="lineNum"> 290 </span> : : +<span class="lineNum"> 291 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html new file mode 100644 index 00000000..6fb5ce91 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha2.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha2.c<span style="font-size: 80%;"> (<a href="sha2.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">94</td> + <td class="headerCovTableEntry">228</td> + <td class="headerCovTableEntryLo">41.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">22</td> + <td class="headerCovTableEntry">76</td> + <td class="headerCovTableEntryLo">28.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="sha2.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#452">SHA256_Transform</a></td> + <td class="coverFnHi">5490</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#532">SHA256_Update</a></td> + <td class="coverFnHi">3023</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#580">SHA256_Final</a></td> + <td class="coverFnHi">1935</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#348">SHA256_Init</a></td> + <td class="coverFnHi">1935</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#955">SHA384_Final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#942">SHA384_Init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#644">SHA512_Init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#870">SHA512_Last</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#911">SHA512_Final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#744">SHA512_Transform</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#822">SHA512_Update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#951">SHA384_Update</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html new file mode 100644 index 00000000..9951c822 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html @@ -0,0 +1,129 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha2.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha2.c<span style="font-size: 80%;"> (<a href="sha2.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">94</td> + <td class="headerCovTableEntry">228</td> + <td class="headerCovTableEntryLo">41.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">22</td> + <td class="headerCovTableEntry">76</td> + <td class="headerCovTableEntryLo">28.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="sha2.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#580">SHA256_Final</a></td> + <td class="coverFnHi">1935</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#348">SHA256_Init</a></td> + <td class="coverFnHi">1935</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#452">SHA256_Transform</a></td> + <td class="coverFnHi">5490</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#532">SHA256_Update</a></td> + <td class="coverFnHi">3023</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#955">SHA384_Final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#942">SHA384_Init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#951">SHA384_Update</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#911">SHA512_Final</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#644">SHA512_Init</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#870">SHA512_Last</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#744">SHA512_Transform</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sha2.c.gcov.html#822">SHA512_Update</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html new file mode 100644 index 00000000..075a91b7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html @@ -0,0 +1,1069 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha2.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha2.c<span style="font-size: 80%;"> (source / <a href="sha2.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">94</td> + <td class="headerCovTableEntry">228</td> + <td class="headerCovTableEntryLo">41.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">22</td> + <td class="headerCovTableEntry">76</td> + <td class="headerCovTableEntryLo">28.9 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: sha2.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: An implementation of the SHA 26/384/512 digests. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * Copyright (c) 2000-2001, Aaron D. Gifford +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * All rights reserved. +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * Redistribution and use in source and binary forms, with or without +<span class="lineNum"> 15 </span> : : * modification, are permitted provided that the following conditions +<span class="lineNum"> 16 </span> : : * are met: +<span class="lineNum"> 17 </span> : : * 1. Redistributions of source code must retain the above copyright +<span class="lineNum"> 18 </span> : : * notice, this list of conditions and the following disclaimer. +<span class="lineNum"> 19 </span> : : * 2. Redistributions in binary form must reproduce the above copyright +<span class="lineNum"> 20 </span> : : * notice, this list of conditions and the following disclaimer in the +<span class="lineNum"> 21 </span> : : * documentation and/or other materials provided with the distribution. +<span class="lineNum"> 22 </span> : : * 3. Neither the name of the copyright holder nor the names of contributors +<span class="lineNum"> 23 </span> : : * may be used to endorse or promote products derived from this software +<span class="lineNum"> 24 </span> : : * without specific prior written permission. +<span class="lineNum"> 25 </span> : : * +<span class="lineNum"> 26 </span> : : * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND +<span class="lineNum"> 27 </span> : : * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +<span class="lineNum"> 28 </span> : : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +<span class="lineNum"> 29 </span> : : * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE +<span class="lineNum"> 30 </span> : : * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +<span class="lineNum"> 31 </span> : : * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +<span class="lineNum"> 32 </span> : : * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +<span class="lineNum"> 33 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +<span class="lineNum"> 34 </span> : : * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +<span class="lineNum"> 35 </span> : : * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +<span class="lineNum"> 36 </span> : : * SUCH DAMAGE. +<span class="lineNum"> 37 </span> : : * +<span class="lineNum"> 38 </span> : : ***************************************************************************** +<span class="lineNum"> 39 </span> : : */ +<span class="lineNum"> 40 </span> : : #include &lt;string.h&gt; /* memcpy()/memset() or bcopy()/bzero() */ +<span class="lineNum"> 41 </span> : : #include &lt;assert.h&gt; /* assert() */ +<span class="lineNum"> 42 </span> : : #include &quot;sha2.h&quot; +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : #if HAVE_SYS_BYTEORDER_H +<span class="lineNum"> 45 </span> : : #include &lt;sys/byteorder.h&gt; +<span class="lineNum"> 46 </span> : : #endif +<span class="lineNum"> 47 </span> : : +<span class="lineNum"> 48 </span> : : /* +<span class="lineNum"> 49 </span> : : * ASSERT NOTE: +<span class="lineNum"> 50 </span> : : * Some sanity checking code is included using assert(). On my FreeBSD +<span class="lineNum"> 51 </span> : : * system, this additional code can be removed by compiling with NDEBUG +<span class="lineNum"> 52 </span> : : * defined. Check your own systems manpage on assert() to see how to +<span class="lineNum"> 53 </span> : : * compile WITHOUT the sanity checking code on your system. +<span class="lineNum"> 54 </span> : : * +<span class="lineNum"> 55 </span> : : * UNROLLED TRANSFORM LOOP NOTE: +<span class="lineNum"> 56 </span> : : * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform +<span class="lineNum"> 57 </span> : : * loop version for the hash transform rounds (defined using macros +<span class="lineNum"> 58 </span> : : * later in this file). Either define on the command line, for example: +<span class="lineNum"> 59 </span> : : * +<span class="lineNum"> 60 </span> : : * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c +<span class="lineNum"> 61 </span> : : * +<span class="lineNum"> 62 </span> : : * or define below: +<span class="lineNum"> 63 </span> : : * +<span class="lineNum"> 64 </span> : : * #define SHA2_UNROLL_TRANSFORM +<span class="lineNum"> 65 </span> : : * +<span class="lineNum"> 66 </span> : : */ +<span class="lineNum"> 67 </span> : : +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> : : /*** SHA-256/384/512 Machine Architecture Definitions *****************/ +<span class="lineNum"> 70 </span> : : /* +<span class="lineNum"> 71 </span> : : * BYTE_ORDER NOTE: +<span class="lineNum"> 72 </span> : : * +<span class="lineNum"> 73 </span> : : * Please make sure that your system defines BYTE_ORDER. If your +<span class="lineNum"> 74 </span> : : * architecture is little-endian, make sure it also defines +<span class="lineNum"> 75 </span> : : * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are +<span class="lineNum"> 76 </span> : : * equivilent. +<span class="lineNum"> 77 </span> : : * +<span class="lineNum"> 78 </span> : : * If your system does not define the above, then you can do so by +<span class="lineNum"> 79 </span> : : * hand like this: +<span class="lineNum"> 80 </span> : : * +<span class="lineNum"> 81 </span> : : * #define LITTLE_ENDIAN 1234 +<span class="lineNum"> 82 </span> : : * #define BIG_ENDIAN 4321 +<span class="lineNum"> 83 </span> : : * +<span class="lineNum"> 84 </span> : : * And for little-endian machines, add: +<span class="lineNum"> 85 </span> : : * +<span class="lineNum"> 86 </span> : : * #define BYTE_ORDER LITTLE_ENDIAN +<span class="lineNum"> 87 </span> : : * +<span class="lineNum"> 88 </span> : : * Or for big-endian machines: +<span class="lineNum"> 89 </span> : : * +<span class="lineNum"> 90 </span> : : * #define BYTE_ORDER BIG_ENDIAN +<span class="lineNum"> 91 </span> : : * +<span class="lineNum"> 92 </span> : : * The FreeBSD machine this was written on defines BYTE_ORDER +<span class="lineNum"> 93 </span> : : * appropriately by including &lt;sys/types.h&gt; (which in turn includes +<span class="lineNum"> 94 </span> : : * &lt;machine/endian.h&gt; where the appropriate definitions are actually +<span class="lineNum"> 95 </span> : : * made). +<span class="lineNum"> 96 </span> : : */ +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : #ifndef BYTE_ORDER +<span class="lineNum"> 99 </span> : : #ifdef WIN32 +<span class="lineNum"> 100 </span> : : #define BYTE_ORDER BIG_ENDIAN +<span class="lineNum"> 101 </span> : : #elif defined(_BIG_ENDIAN) +<span class="lineNum"> 102 </span> : : #define BYTE_ORDER BIG_ENDIAN +<span class="lineNum"> 103 </span> : : #elif defined(_LITTLE_ENDIAN) +<span class="lineNum"> 104 </span> : : #define BYTE_ORDER LITTLE_ENDIAN +<span class="lineNum"> 105 </span> : : #endif +<span class="lineNum"> 106 </span> : : #endif +<span class="lineNum"> 107 </span> : : +<span class="lineNum"> 108 </span> : : #if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN &amp;&amp; BYTE_ORDER != BIG_ENDIAN) +<span class="lineNum"> 109 </span> : : #error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN +<span class="lineNum"> 110 </span> : : #endif +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : /* +<span class="lineNum"> 113 </span> : : * Define the followingsha2_* types to types of the correct length on +<span class="lineNum"> 114 </span> : : * the native archtecture. Most BSD systems and Linux define u_intXX_t +<span class="lineNum"> 115 </span> : : * types. Machines with very recent ANSI C headers, can use the +<span class="lineNum"> 116 </span> : : * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H +<span class="lineNum"> 117 </span> : : * during compile or in the sha.h header file. +<span class="lineNum"> 118 </span> : : * +<span class="lineNum"> 119 </span> : : * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t +<span class="lineNum"> 120 </span> : : * will need to define these three typedefs below (and the appropriate +<span class="lineNum"> 121 </span> : : * ones in sha.h too) by hand according to their system architecture. +<span class="lineNum"> 122 </span> : : * +<span class="lineNum"> 123 </span> : : * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t +<span class="lineNum"> 124 </span> : : * types and pointing out recent ANSI C support for uintXX_t in inttypes.h. +<span class="lineNum"> 125 </span> : : */ +<span class="lineNum"> 126 </span> : : #ifdef SHA2_USE_INTTYPES_H +<span class="lineNum"> 127 </span> : : +<span class="lineNum"> 128 </span> : : typedef uint8_t sha2_byte; /* Exactly 1 byte */ +<span class="lineNum"> 129 </span> : : typedef uint32_t sha2_word32; /* Exactly 4 bytes */ +<span class="lineNum"> 130 </span> : : typedef uint64_t sha2_word64; /* Exactly 8 bytes */ +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> : : #else /* SHA2_USE_INTTYPES_H */ +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> : : typedef u_int8_t sha2_byte; /* Exactly 1 byte */ +<span class="lineNum"> 135 </span> : : typedef u_int32_t sha2_word32; /* Exactly 4 bytes */ +<span class="lineNum"> 136 </span> : : typedef u_int64_t sha2_word64; /* Exactly 8 bytes */ +<span class="lineNum"> 137 </span> : : +<span class="lineNum"> 138 </span> : : #endif /* SHA2_USE_INTTYPES_H */ +<span class="lineNum"> 139 </span> : : +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> : : /*** SHA-256/384/512 Various Length Definitions ***********************/ +<span class="lineNum"> 142 </span> : : /* NOTE: Most of these are in sha2.h */ +<span class="lineNum"> 143 </span> : : #define SHA256_SHORT_BLOCK_LEN (SHA256_BLOCK_LEN - 8) +<span class="lineNum"> 144 </span> : : #define SHA384_SHORT_BLOCK_LEN (SHA384_BLOCK_LEN - 16) +<span class="lineNum"> 145 </span> : : #define SHA512_SHORT_BLOCK_LEN (SHA512_BLOCK_LEN - 16) +<span class="lineNum"> 146 </span> : : +<span class="lineNum"> 147 </span> : : +<span class="lineNum"> 148 </span> : : /*** ENDIAN REVERSAL MACROS *******************************************/ +<span class="lineNum"> 149 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 150 </span> : : #define REVERSE32(w,x) { \ +<span class="lineNum"> 151 </span> : : sha2_word32 tmp = (w); \ +<span class="lineNum"> 152 </span> : : tmp = (tmp &gt;&gt; 16) | (tmp &lt;&lt; 16); \ +<span class="lineNum"> 153 </span> : : (x) = ((tmp &amp; 0xff00ff00UL) &gt;&gt; 8) | ((tmp &amp; 0x00ff00ffUL) &lt;&lt; 8); \ +<span class="lineNum"> 154 </span> : : } +<span class="lineNum"> 155 </span> : : #define REVERSE64(w,x) { \ +<span class="lineNum"> 156 </span> : : sha2_word64 tmp = (w); \ +<span class="lineNum"> 157 </span> : : tmp = (tmp &gt;&gt; 32) | (tmp &lt;&lt; 32); \ +<span class="lineNum"> 158 </span> : : tmp = ((tmp &amp; 0xff00ff00ff00ff00ULL) &gt;&gt; 8) | \ +<span class="lineNum"> 159 </span> : : ((tmp &amp; 0x00ff00ff00ff00ffULL) &lt;&lt; 8); \ +<span class="lineNum"> 160 </span> : : (x) = ((tmp &amp; 0xffff0000ffff0000ULL) &gt;&gt; 16) | \ +<span class="lineNum"> 161 </span> : : ((tmp &amp; 0x0000ffff0000ffffULL) &lt;&lt; 16); \ +<span class="lineNum"> 162 </span> : : } +<span class="lineNum"> 163 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 164 </span> : : +<span class="lineNum"> 165 </span> : : /* +<span class="lineNum"> 166 </span> : : * Macro for incrementally adding the unsigned 64-bit integer n to the +<span class="lineNum"> 167 </span> : : * unsigned 128-bit integer (represented using a two-element array of +<span class="lineNum"> 168 </span> : : * 64-bit words): +<span class="lineNum"> 169 </span> : : */ +<span class="lineNum"> 170 </span> : : #define ADDINC128(w,n) { \ +<span class="lineNum"> 171 </span> : : (w)[0] += (sha2_word64)(n); \ +<span class="lineNum"> 172 </span> : : if ((w)[0] &lt; (n)) { \ +<span class="lineNum"> 173 </span> : : (w)[1]++; \ +<span class="lineNum"> 174 </span> : : } \ +<span class="lineNum"> 175 </span> : : } +<span class="lineNum"> 176 </span> : : +<span class="lineNum"> 177 </span> : : /* +<span class="lineNum"> 178 </span> : : * Macros for copying blocks of memory and for zeroing out ranges +<span class="lineNum"> 179 </span> : : * of memory. Using these macros makes it easy to switch from +<span class="lineNum"> 180 </span> : : * using memset()/memcpy() and using bzero()/bcopy(). +<span class="lineNum"> 181 </span> : : * +<span class="lineNum"> 182 </span> : : * Please define either SHA2_USE_MEMSET_MEMCPY or define +<span class="lineNum"> 183 </span> : : * SHA2_USE_BZERO_BCOPY depending on which function set you +<span class="lineNum"> 184 </span> : : * choose to use: +<span class="lineNum"> 185 </span> : : */ +<span class="lineNum"> 186 </span> : : #if !defined(SHA2_USE_MEMSET_MEMCPY) &amp;&amp; !defined(SHA2_USE_BZERO_BCOPY) +<span class="lineNum"> 187 </span> : : /* Default to memset()/memcpy() if no option is specified */ +<span class="lineNum"> 188 </span> : : #define SHA2_USE_MEMSET_MEMCPY 1 +<span class="lineNum"> 189 </span> : : #endif +<span class="lineNum"> 190 </span> : : #if defined(SHA2_USE_MEMSET_MEMCPY) &amp;&amp; defined(SHA2_USE_BZERO_BCOPY) +<span class="lineNum"> 191 </span> : : /* Abort with an error if BOTH options are defined */ +<span class="lineNum"> 192 </span> : : #error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both! +<span class="lineNum"> 193 </span> : : #endif +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> : : #ifdef SHA2_USE_MEMSET_MEMCPY +<span class="lineNum"> 196 </span> : : #define MEMSET_BZERO(p,l) memset((p), 0, (l)) +<span class="lineNum"> 197 </span> : : #define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l)) +<span class="lineNum"> 198 </span> : : #endif +<span class="lineNum"> 199 </span> : : #ifdef SHA2_USE_BZERO_BCOPY +<span class="lineNum"> 200 </span> : : #define MEMSET_BZERO(p,l) bzero((p), (l)) +<span class="lineNum"> 201 </span> : : #define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l)) +<span class="lineNum"> 202 </span> : : #endif +<span class="lineNum"> 203 </span> : : +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> : : /*** THE SIX LOGICAL FUNCTIONS ****************************************/ +<span class="lineNum"> 206 </span> : : /* +<span class="lineNum"> 207 </span> : : * Bit shifting and rotation (used by the six SHA-XYZ logical functions: +<span class="lineNum"> 208 </span> : : * +<span class="lineNum"> 209 </span> : : * NOTE: The naming of R and S appears backwards here (R is a SHIFT and +<span class="lineNum"> 210 </span> : : * S is a ROTATION) because the SHA-256/384/512 description document +<span class="lineNum"> 211 </span> : : * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this +<span class="lineNum"> 212 </span> : : * same &quot;backwards&quot; definition. +<span class="lineNum"> 213 </span> : : */ +<span class="lineNum"> 214 </span> : : /* Shift-right (used in SHA-256, SHA-384, and SHA-512): */ +<span class="lineNum"> 215 </span> : : #define R(b,x) ((x) &gt;&gt; (b)) +<span class="lineNum"> 216 </span> : : /* 32-bit Rotate-right (used in SHA-256): */ +<span class="lineNum"> 217 </span> : : #define S32(b,x) (((x) &gt;&gt; (b)) | ((x) &lt;&lt; (32 - (b)))) +<span class="lineNum"> 218 </span> : : /* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ +<span class="lineNum"> 219 </span> : : #define S64(b,x) (((x) &gt;&gt; (b)) | ((x) &lt;&lt; (64 - (b)))) +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> : : /* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */ +<span class="lineNum"> 222 </span> : : #define Ch(x,y,z) (((x) &amp; (y)) ^ ((~(x)) &amp; (z))) +<span class="lineNum"> 223 </span> : : #define Maj(x,y,z) (((x) &amp; (y)) ^ ((x) &amp; (z)) ^ ((y) &amp; (z))) +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> : : /* Four of six logical functions used in SHA-256: */ +<span class="lineNum"> 226 </span> : : #define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) +<span class="lineNum"> 227 </span> : : #define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) +<span class="lineNum"> 228 </span> : : #define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) +<span class="lineNum"> 229 </span> : : #define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> : : /* Four of six logical functions used in SHA-384 and SHA-512: */ +<span class="lineNum"> 232 </span> : : #define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) +<span class="lineNum"> 233 </span> : : #define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) +<span class="lineNum"> 234 </span> : : #define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) +<span class="lineNum"> 235 </span> : : #define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) +<span class="lineNum"> 236 </span> : : +<span class="lineNum"> 237 </span> : : /*** INTERNAL FUNCTION PROTOTYPES *************************************/ +<span class="lineNum"> 238 </span> : : /* NOTE: These should not be accessed directly from outside this +<span class="lineNum"> 239 </span> : : * library -- they are intended for private internal visibility/use +<span class="lineNum"> 240 </span> : : * only. +<span class="lineNum"> 241 </span> : : */ +<span class="lineNum"> 242 </span> : : void SHA512_Last(SHA512_CTX*); +<span class="lineNum"> 243 </span> : : void SHA256_Transform(SHA256_CTX*, const sha2_word32*); +<span class="lineNum"> 244 </span> : : void SHA512_Transform(SHA512_CTX*, const sha2_word64*); +<span class="lineNum"> 245 </span> : : +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> : : /*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ +<span class="lineNum"> 248 </span> : : /* Hash constant words K for SHA-256: */ +<span class="lineNum"> 249 </span> : : const static sha2_word32 K256[64] = { +<span class="lineNum"> 250 </span> : : 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, +<span class="lineNum"> 251 </span> : : 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, +<span class="lineNum"> 252 </span> : : 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, +<span class="lineNum"> 253 </span> : : 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, +<span class="lineNum"> 254 </span> : : 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, +<span class="lineNum"> 255 </span> : : 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, +<span class="lineNum"> 256 </span> : : 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, +<span class="lineNum"> 257 </span> : : 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, +<span class="lineNum"> 258 </span> : : 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, +<span class="lineNum"> 259 </span> : : 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, +<span class="lineNum"> 260 </span> : : 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, +<span class="lineNum"> 261 </span> : : 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, +<span class="lineNum"> 262 </span> : : 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, +<span class="lineNum"> 263 </span> : : 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, +<span class="lineNum"> 264 </span> : : 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, +<span class="lineNum"> 265 </span> : : 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL +<span class="lineNum"> 266 </span> : : }; +<span class="lineNum"> 267 </span> : : +<span class="lineNum"> 268 </span> : : /* Initial hash value H for SHA-256: */ +<span class="lineNum"> 269 </span> : : const static sha2_word32 sha256_initial_hash_value[8] = { +<span class="lineNum"> 270 </span> : : 0x6a09e667UL, +<span class="lineNum"> 271 </span> : : 0xbb67ae85UL, +<span class="lineNum"> 272 </span> : : 0x3c6ef372UL, +<span class="lineNum"> 273 </span> : : 0xa54ff53aUL, +<span class="lineNum"> 274 </span> : : 0x510e527fUL, +<span class="lineNum"> 275 </span> : : 0x9b05688cUL, +<span class="lineNum"> 276 </span> : : 0x1f83d9abUL, +<span class="lineNum"> 277 </span> : : 0x5be0cd19UL +<span class="lineNum"> 278 </span> : : }; +<span class="lineNum"> 279 </span> : : +<span class="lineNum"> 280 </span> : : /* Hash constant words K for SHA-384 and SHA-512: */ +<span class="lineNum"> 281 </span> : : const static sha2_word64 K512[80] = { +<span class="lineNum"> 282 </span> : : 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, +<span class="lineNum"> 283 </span> : : 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, +<span class="lineNum"> 284 </span> : : 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, +<span class="lineNum"> 285 </span> : : 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, +<span class="lineNum"> 286 </span> : : 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, +<span class="lineNum"> 287 </span> : : 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, +<span class="lineNum"> 288 </span> : : 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, +<span class="lineNum"> 289 </span> : : 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, +<span class="lineNum"> 290 </span> : : 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, +<span class="lineNum"> 291 </span> : : 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, +<span class="lineNum"> 292 </span> : : 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, +<span class="lineNum"> 293 </span> : : 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, +<span class="lineNum"> 294 </span> : : 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, +<span class="lineNum"> 295 </span> : : 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, +<span class="lineNum"> 296 </span> : : 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, +<span class="lineNum"> 297 </span> : : 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, +<span class="lineNum"> 298 </span> : : 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, +<span class="lineNum"> 299 </span> : : 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, +<span class="lineNum"> 300 </span> : : 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, +<span class="lineNum"> 301 </span> : : 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, +<span class="lineNum"> 302 </span> : : 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, +<span class="lineNum"> 303 </span> : : 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, +<span class="lineNum"> 304 </span> : : 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, +<span class="lineNum"> 305 </span> : : 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, +<span class="lineNum"> 306 </span> : : 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, +<span class="lineNum"> 307 </span> : : 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, +<span class="lineNum"> 308 </span> : : 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, +<span class="lineNum"> 309 </span> : : 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, +<span class="lineNum"> 310 </span> : : 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, +<span class="lineNum"> 311 </span> : : 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, +<span class="lineNum"> 312 </span> : : 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, +<span class="lineNum"> 313 </span> : : 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, +<span class="lineNum"> 314 </span> : : 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, +<span class="lineNum"> 315 </span> : : 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, +<span class="lineNum"> 316 </span> : : 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, +<span class="lineNum"> 317 </span> : : 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, +<span class="lineNum"> 318 </span> : : 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, +<span class="lineNum"> 319 </span> : : 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, +<span class="lineNum"> 320 </span> : : 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, +<span class="lineNum"> 321 </span> : : 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL +<span class="lineNum"> 322 </span> : : }; +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> : : /* Initial hash value H for SHA-384 */ +<span class="lineNum"> 325 </span> : : const static sha2_word64 sha384_initial_hash_value[8] = { +<span class="lineNum"> 326 </span> : : 0xcbbb9d5dc1059ed8ULL, +<span class="lineNum"> 327 </span> : : 0x629a292a367cd507ULL, +<span class="lineNum"> 328 </span> : : 0x9159015a3070dd17ULL, +<span class="lineNum"> 329 </span> : : 0x152fecd8f70e5939ULL, +<span class="lineNum"> 330 </span> : : 0x67332667ffc00b31ULL, +<span class="lineNum"> 331 </span> : : 0x8eb44a8768581511ULL, +<span class="lineNum"> 332 </span> : : 0xdb0c2e0d64f98fa7ULL, +<span class="lineNum"> 333 </span> : : 0x47b5481dbefa4fa4ULL +<span class="lineNum"> 334 </span> : : }; +<span class="lineNum"> 335 </span> : : +<span class="lineNum"> 336 </span> : : /* Initial hash value H for SHA-512 */ +<span class="lineNum"> 337 </span> : : const static sha2_word64 sha512_initial_hash_value[8] = { +<span class="lineNum"> 338 </span> : : 0x6a09e667f3bcc908ULL, +<span class="lineNum"> 339 </span> : : 0xbb67ae8584caa73bULL, +<span class="lineNum"> 340 </span> : : 0x3c6ef372fe94f82bULL, +<span class="lineNum"> 341 </span> : : 0xa54ff53a5f1d36f1ULL, +<span class="lineNum"> 342 </span> : : 0x510e527fade682d1ULL, +<span class="lineNum"> 343 </span> : : 0x9b05688c2b3e6c1fULL, +<span class="lineNum"> 344 </span> : : 0x1f83d9abfb41bd6bULL, +<span class="lineNum"> 345 </span> : : 0x5be0cd19137e2179ULL +<span class="lineNum"> 346 </span> : : }; +<span class="lineNum"> 347 </span> : : +<a name="348"><span class="lineNum"> 348 </span> : : </a> +<span class="lineNum"> 349 </span> : : /*** SHA-256: *********************************************************/ +<span class="lineNum"> 350 </span> :<span class="lineCov"> 1935 : void SHA256_Init(SHA256_CTX* context) {</span> +<span class="lineNum"> 351 </span> [<span class="branchCov" title="Branch 0 was taken 1935 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1935 : if (context == (SHA256_CTX*)0) {</span> +<span class="lineNum"> 352 </span> :<span class="lineCov"> 1935 : return;</span> +<span class="lineNum"> 353 </span> : : } +<span class="lineNum"> 354 </span> :<span class="lineCov"> 1935 : MEMCPY_BCOPY(context-&gt;state, sha256_initial_hash_value, SHA256_DIGEST_LEN);</span> +<span class="lineNum"> 355 </span> :<span class="lineCov"> 1935 : MEMSET_BZERO(context-&gt;buffer, SHA256_BLOCK_LEN);</span> +<span class="lineNum"> 356 </span> :<span class="lineCov"> 1935 : context-&gt;bitcount = 0;</span> +<span class="lineNum"> 357 </span> : : } +<span class="lineNum"> 358 </span> : : +<span class="lineNum"> 359 </span> : : #ifdef SHA2_UNROLL_TRANSFORM +<span class="lineNum"> 360 </span> : : +<span class="lineNum"> 361 </span> : : /* Unrolled SHA-256 round macros: */ +<span class="lineNum"> 362 </span> : : +<span class="lineNum"> 363 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 364 </span> : : +<span class="lineNum"> 365 </span> : : #define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ +<span class="lineNum"> 366 </span> : : REVERSE32(*data++, W256[j]); \ +<span class="lineNum"> 367 </span> : : T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ +<span class="lineNum"> 368 </span> : : K256[j] + W256[j]; \ +<span class="lineNum"> 369 </span> : : (d) += T1; \ +<span class="lineNum"> 370 </span> : : (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ +<span class="lineNum"> 371 </span> : : j++ +<span class="lineNum"> 372 </span> : : +<span class="lineNum"> 373 </span> : : +<span class="lineNum"> 374 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 375 </span> : : +<span class="lineNum"> 376 </span> : : #define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ +<span class="lineNum"> 377 </span> : : T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ +<span class="lineNum"> 378 </span> : : K256[j] + (W256[j] = *data++); \ +<span class="lineNum"> 379 </span> : : (d) += T1; \ +<span class="lineNum"> 380 </span> : : (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ +<span class="lineNum"> 381 </span> : : j++ +<span class="lineNum"> 382 </span> : : +<span class="lineNum"> 383 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 384 </span> : : +<span class="lineNum"> 385 </span> : : #define ROUND256(a,b,c,d,e,f,g,h) \ +<span class="lineNum"> 386 </span> : : s0 = W256[(j+1)&amp;0x0f]; \ +<span class="lineNum"> 387 </span> : : s0 = sigma0_256(s0); \ +<span class="lineNum"> 388 </span> : : s1 = W256[(j+14)&amp;0x0f]; \ +<span class="lineNum"> 389 </span> : : s1 = sigma1_256(s1); \ +<span class="lineNum"> 390 </span> : : T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \ +<span class="lineNum"> 391 </span> : : (W256[j&amp;0x0f] += s1 + W256[(j+9)&amp;0x0f] + s0); \ +<span class="lineNum"> 392 </span> : : (d) += T1; \ +<span class="lineNum"> 393 </span> : : (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ +<span class="lineNum"> 394 </span> : : j++ +<span class="lineNum"> 395 </span> : : +<span class="lineNum"> 396 </span> : : void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { +<span class="lineNum"> 397 </span> : : sha2_word32 a, b, c, d, e, f, g, h, s0, s1; +<span class="lineNum"> 398 </span> : : sha2_word32 T1, *W256; +<span class="lineNum"> 399 </span> : : int j; +<span class="lineNum"> 400 </span> : : +<span class="lineNum"> 401 </span> : : W256 = (sha2_word32*)context-&gt;buffer; +<span class="lineNum"> 402 </span> : : +<span class="lineNum"> 403 </span> : : /* Initialize registers with the prev. intermediate value */ +<span class="lineNum"> 404 </span> : : a = context-&gt;state[0]; +<span class="lineNum"> 405 </span> : : b = context-&gt;state[1]; +<span class="lineNum"> 406 </span> : : c = context-&gt;state[2]; +<span class="lineNum"> 407 </span> : : d = context-&gt;state[3]; +<span class="lineNum"> 408 </span> : : e = context-&gt;state[4]; +<span class="lineNum"> 409 </span> : : f = context-&gt;state[5]; +<span class="lineNum"> 410 </span> : : g = context-&gt;state[6]; +<span class="lineNum"> 411 </span> : : h = context-&gt;state[7]; +<span class="lineNum"> 412 </span> : : +<span class="lineNum"> 413 </span> : : j = 0; +<span class="lineNum"> 414 </span> : : do { +<span class="lineNum"> 415 </span> : : /* Rounds 0 to 15 (unrolled): */ +<span class="lineNum"> 416 </span> : : ROUND256_0_TO_15(a,b,c,d,e,f,g,h); +<span class="lineNum"> 417 </span> : : ROUND256_0_TO_15(h,a,b,c,d,e,f,g); +<span class="lineNum"> 418 </span> : : ROUND256_0_TO_15(g,h,a,b,c,d,e,f); +<span class="lineNum"> 419 </span> : : ROUND256_0_TO_15(f,g,h,a,b,c,d,e); +<span class="lineNum"> 420 </span> : : ROUND256_0_TO_15(e,f,g,h,a,b,c,d); +<span class="lineNum"> 421 </span> : : ROUND256_0_TO_15(d,e,f,g,h,a,b,c); +<span class="lineNum"> 422 </span> : : ROUND256_0_TO_15(c,d,e,f,g,h,a,b); +<span class="lineNum"> 423 </span> : : ROUND256_0_TO_15(b,c,d,e,f,g,h,a); +<span class="lineNum"> 424 </span> : : } while (j &lt; 16); +<span class="lineNum"> 425 </span> : : +<span class="lineNum"> 426 </span> : : /* Now for the remaining rounds to 64: */ +<span class="lineNum"> 427 </span> : : do { +<span class="lineNum"> 428 </span> : : ROUND256(a,b,c,d,e,f,g,h); +<span class="lineNum"> 429 </span> : : ROUND256(h,a,b,c,d,e,f,g); +<span class="lineNum"> 430 </span> : : ROUND256(g,h,a,b,c,d,e,f); +<span class="lineNum"> 431 </span> : : ROUND256(f,g,h,a,b,c,d,e); +<span class="lineNum"> 432 </span> : : ROUND256(e,f,g,h,a,b,c,d); +<span class="lineNum"> 433 </span> : : ROUND256(d,e,f,g,h,a,b,c); +<span class="lineNum"> 434 </span> : : ROUND256(c,d,e,f,g,h,a,b); +<span class="lineNum"> 435 </span> : : ROUND256(b,c,d,e,f,g,h,a); +<span class="lineNum"> 436 </span> : : } while (j &lt; 64); +<span class="lineNum"> 437 </span> : : +<span class="lineNum"> 438 </span> : : /* Compute the current intermediate hash value */ +<span class="lineNum"> 439 </span> : : context-&gt;state[0] += a; +<span class="lineNum"> 440 </span> : : context-&gt;state[1] += b; +<span class="lineNum"> 441 </span> : : context-&gt;state[2] += c; +<span class="lineNum"> 442 </span> : : context-&gt;state[3] += d; +<span class="lineNum"> 443 </span> : : context-&gt;state[4] += e; +<span class="lineNum"> 444 </span> : : context-&gt;state[5] += f; +<span class="lineNum"> 445 </span> : : context-&gt;state[6] += g; +<span class="lineNum"> 446 </span> : : context-&gt;state[7] += h; +<span class="lineNum"> 447 </span> : : +<span class="lineNum"> 448 </span> : : /* Clean up */ +<span class="lineNum"> 449 </span> : : a = b = c = d = e = f = g = h = T1 = 0; +<span class="lineNum"> 450 </span> : : } +<span class="lineNum"> 451 </span> : : +<a name="452"><span class="lineNum"> 452 </span> : : #else /* SHA2_UNROLL_TRANSFORM */</a> +<span class="lineNum"> 453 </span> : : +<span class="lineNum"> 454 </span> :<span class="lineCov"> 5490 : void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {</span> +<span class="lineNum"> 455 </span> : : sha2_word32 a, b, c, d, e, f, g, h, s0, s1; +<span class="lineNum"> 456 </span> : : sha2_word32 T1, T2, *W256; +<span class="lineNum"> 457 </span> : : int j; +<span class="lineNum"> 458 </span> : : +<span class="lineNum"> 459 </span> :<span class="lineCov"> 5490 : W256 = (sha2_word32*)context-&gt;buffer;</span> +<span class="lineNum"> 460 </span> : : +<span class="lineNum"> 461 </span> : : /* Initialize registers with the prev. intermediate value */ +<span class="lineNum"> 462 </span> :<span class="lineCov"> 5490 : a = context-&gt;state[0];</span> +<span class="lineNum"> 463 </span> :<span class="lineCov"> 5490 : b = context-&gt;state[1];</span> +<span class="lineNum"> 464 </span> :<span class="lineCov"> 5490 : c = context-&gt;state[2];</span> +<span class="lineNum"> 465 </span> :<span class="lineCov"> 5490 : d = context-&gt;state[3];</span> +<span class="lineNum"> 466 </span> :<span class="lineCov"> 5490 : e = context-&gt;state[4];</span> +<span class="lineNum"> 467 </span> :<span class="lineCov"> 5490 : f = context-&gt;state[5];</span> +<span class="lineNum"> 468 </span> :<span class="lineCov"> 5490 : g = context-&gt;state[6];</span> +<span class="lineNum"> 469 </span> :<span class="lineCov"> 5490 : h = context-&gt;state[7];</span> +<span class="lineNum"> 470 </span> : : +<span class="lineNum"> 471 </span> :<span class="lineCov"> 5490 : j = 0;</span> +<span class="lineNum"> 472 </span> : : do { +<span class="lineNum"> 473 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 474 </span> : : /* Copy data while converting to host byte order */ +<span class="lineNum"> 475 </span> :<span class="lineCov"> 87840 : REVERSE32(*data++,W256[j]);</span> +<span class="lineNum"> 476 </span> : : /* Apply the SHA-256 compression function to update a..h */ +<span class="lineNum"> 477 </span> :<span class="lineCov"> 87840 : T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];</span> +<span class="lineNum"> 478 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 479 </span> : : /* Apply the SHA-256 compression function to update a..h with copy */ +<span class="lineNum"> 480 </span> : : T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++); +<span class="lineNum"> 481 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 482 </span> :<span class="lineCov"> 87840 : T2 = Sigma0_256(a) + Maj(a, b, c);</span> +<span class="lineNum"> 483 </span> :<span class="lineCov"> 87840 : h = g;</span> +<span class="lineNum"> 484 </span> :<span class="lineCov"> 87840 : g = f;</span> +<span class="lineNum"> 485 </span> :<span class="lineCov"> 87840 : f = e;</span> +<span class="lineNum"> 486 </span> :<span class="lineCov"> 87840 : e = d + T1;</span> +<span class="lineNum"> 487 </span> :<span class="lineCov"> 87840 : d = c;</span> +<span class="lineNum"> 488 </span> :<span class="lineCov"> 87840 : c = b;</span> +<span class="lineNum"> 489 </span> :<span class="lineCov"> 87840 : b = a;</span> +<span class="lineNum"> 490 </span> :<span class="lineCov"> 87840 : a = T1 + T2;</span> +<span class="lineNum"> 491 </span> : : +<span class="lineNum"> 492 </span> :<span class="lineCov"> 87840 : j++;</span> +<span class="lineNum"> 493 </span> [<span class="branchCov" title="Branch 0 was taken 82350 times"> + </span><span class="branchCov" title="Branch 1 was taken 5490 times"> + </span>]:<span class="lineCov"> 87840 : } while (j &lt; 16);</span> +<span class="lineNum"> 494 </span> : : +<span class="lineNum"> 495 </span> : : do { +<span class="lineNum"> 496 </span> : : /* Part of the message block expansion: */ +<span class="lineNum"> 497 </span> :<span class="lineCov"> 263520 : s0 = W256[(j+1)&amp;0x0f];</span> +<span class="lineNum"> 498 </span> :<span class="lineCov"> 263520 : s0 = sigma0_256(s0);</span> +<span class="lineNum"> 499 </span> :<span class="lineCov"> 263520 : s1 = W256[(j+14)&amp;0x0f]; </span> +<span class="lineNum"> 500 </span> :<span class="lineCov"> 263520 : s1 = sigma1_256(s1);</span> +<span class="lineNum"> 501 </span> : : +<span class="lineNum"> 502 </span> : : /* Apply the SHA-256 compression function to update a..h */ +<span class="lineNum"> 503 </span> :<span class="lineCov"> 527040 : T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + </span> +<span class="lineNum"> 504 </span> :<span class="lineCov"> 263520 : (W256[j&amp;0x0f] += s1 + W256[(j+9)&amp;0x0f] + s0);</span> +<span class="lineNum"> 505 </span> :<span class="lineCov"> 263520 : T2 = Sigma0_256(a) + Maj(a, b, c);</span> +<span class="lineNum"> 506 </span> :<span class="lineCov"> 263520 : h = g;</span> +<span class="lineNum"> 507 </span> :<span class="lineCov"> 263520 : g = f;</span> +<span class="lineNum"> 508 </span> :<span class="lineCov"> 263520 : f = e;</span> +<span class="lineNum"> 509 </span> :<span class="lineCov"> 263520 : e = d + T1;</span> +<span class="lineNum"> 510 </span> :<span class="lineCov"> 263520 : d = c;</span> +<span class="lineNum"> 511 </span> :<span class="lineCov"> 263520 : c = b;</span> +<span class="lineNum"> 512 </span> :<span class="lineCov"> 263520 : b = a;</span> +<span class="lineNum"> 513 </span> :<span class="lineCov"> 263520 : a = T1 + T2;</span> +<span class="lineNum"> 514 </span> : : +<span class="lineNum"> 515 </span> :<span class="lineCov"> 263520 : j++;</span> +<span class="lineNum"> 516 </span> [<span class="branchCov" title="Branch 0 was taken 258030 times"> + </span><span class="branchCov" title="Branch 1 was taken 5490 times"> + </span>]:<span class="lineCov"> 263520 : } while (j &lt; 64);</span> +<span class="lineNum"> 517 </span> : : +<span class="lineNum"> 518 </span> : : /* Compute the current intermediate hash value */ +<span class="lineNum"> 519 </span> :<span class="lineCov"> 5490 : context-&gt;state[0] += a;</span> +<span class="lineNum"> 520 </span> :<span class="lineCov"> 5490 : context-&gt;state[1] += b;</span> +<span class="lineNum"> 521 </span> :<span class="lineCov"> 5490 : context-&gt;state[2] += c;</span> +<span class="lineNum"> 522 </span> :<span class="lineCov"> 5490 : context-&gt;state[3] += d;</span> +<span class="lineNum"> 523 </span> :<span class="lineCov"> 5490 : context-&gt;state[4] += e;</span> +<span class="lineNum"> 524 </span> :<span class="lineCov"> 5490 : context-&gt;state[5] += f;</span> +<span class="lineNum"> 525 </span> :<span class="lineCov"> 5490 : context-&gt;state[6] += g;</span> +<span class="lineNum"> 526 </span> :<span class="lineCov"> 5490 : context-&gt;state[7] += h;</span> +<span class="lineNum"> 527 </span> : : +<span class="lineNum"> 528 </span> : : /* Clean up */ +<span class="lineNum"> 529 </span> :<span class="lineCov"> 5490 : a = b = c = d = e = f = g = h = T1 = T2 = 0;</span> +<span class="lineNum"> 530 </span> :<span class="lineCov"> 5490 : }</span> +<span class="lineNum"> 531 </span> : : +<a name="532"><span class="lineNum"> 532 </span> : : #endif /* SHA2_UNROLL_TRANSFORM */</a> +<span class="lineNum"> 533 </span> : : +<span class="lineNum"> 534 </span> :<span class="lineCov"> 3023 : void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) {</span> +<span class="lineNum"> 535 </span> : : unsigned int freespace, usedspace; +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> [<span class="branchCov" title="Branch 0 was taken 3023 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 3023 : if (len == 0) {</span> +<span class="lineNum"> 538 </span> : : /* Calling with no data is valid - we do nothing */ +<span class="lineNum"> 539 </span> : : return; +<span class="lineNum"> 540 </span> : : } +<span class="lineNum"> 541 </span> : : +<span class="lineNum"> 542 </span> : : /* Sanity check: */ +<span class="lineNum"> 543 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3023 times"> + </span>]:<span class="lineCov"> 3023 : assert(context != (SHA256_CTX*)0 &amp;&amp; data != (sha2_byte*)0);</span> +<span class="lineNum"> 544 </span> : : +<span class="lineNum"> 545 </span> :<span class="lineCov"> 3023 : usedspace = (context-&gt;bitcount &gt;&gt; 3) % SHA256_BLOCK_LEN;</span> +<span class="lineNum"> 546 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3023 times"> + </span>]:<span class="lineCov"> 3023 : if (usedspace &gt; 0) {</span> +<span class="lineNum"> 547 </span> : : /* Calculate how much free space is available in the buffer */ +<span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : freespace = SHA256_BLOCK_LEN - usedspace;</span> +<span class="lineNum"> 549 </span> : : +<span class="lineNum"> 550 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &gt;= freespace) {</span> +<span class="lineNum"> 551 </span> : : /* Fill the buffer completely and process it */ +<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, freespace);</span> +<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount += freespace &lt;&lt; 3;</span> +<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : len -= freespace;</span> +<span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : data += freespace;</span> +<span class="lineNum"> 556 </span> :<span class="lineCov"> 3023 : SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</span> +<span class="lineNum"> 557 </span> : : } else { +<span class="lineNum"> 558 </span> : : /* The buffer is not yet full */ +<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, len);</span> +<span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount += len &lt;&lt; 3;</span> +<span class="lineNum"> 561 </span> : : /* Clean up: */ +<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : usedspace = freespace = 0;</span> +<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 564 </span> : : } +<span class="lineNum"> 565 </span> : : } +<span class="lineNum"> 566 </span> [<span class="branchCov" title="Branch 0 was taken 3358 times"> + </span><span class="branchCov" title="Branch 1 was taken 3023 times"> + </span>]:<span class="lineCov"> 6381 : while (len &gt;= SHA256_BLOCK_LEN) {</span> +<span class="lineNum"> 567 </span> : : /* Process as many complete blocks as we can */ +<span class="lineNum"> 568 </span> :<span class="lineCov"> 3358 : SHA256_Transform(context, (sha2_word32*)data);</span> +<span class="lineNum"> 569 </span> :<span class="lineCov"> 3358 : context-&gt;bitcount += SHA256_BLOCK_LEN &lt;&lt; 3;</span> +<span class="lineNum"> 570 </span> :<span class="lineCov"> 3358 : len -= SHA256_BLOCK_LEN;</span> +<span class="lineNum"> 571 </span> :<span class="lineCov"> 3358 : data += SHA256_BLOCK_LEN;</span> +<span class="lineNum"> 572 </span> : : } +<span class="lineNum"> 573 </span> [<span class="branchCov" title="Branch 0 was taken 1835 times"> + </span><span class="branchCov" title="Branch 1 was taken 1188 times"> + </span>]:<span class="lineCov"> 3023 : if (len &gt; 0) {</span> +<span class="lineNum"> 574 </span> : : /* There's left-overs, so save 'em */ +<span class="lineNum"> 575 </span> :<span class="lineCov"> 1835 : MEMCPY_BCOPY(context-&gt;buffer, data, len);</span> +<span class="lineNum"> 576 </span> :<span class="lineCov"> 1835 : context-&gt;bitcount += len &lt;&lt; 3;</span> +<span class="lineNum"> 577 </span> : : } +<span class="lineNum"> 578 </span> : : /* Clean up: */ +<span class="lineNum"> 579 </span> : : usedspace = freespace = 0; +<a name="580"><span class="lineNum"> 580 </span> : : }</a> +<span class="lineNum"> 581 </span> : : +<span class="lineNum"> 582 </span> :<span class="lineCov"> 1935 : void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {</span> +<span class="lineNum"> 583 </span> :<span class="lineCov"> 1935 : sha2_word32 *d = (sha2_word32*)digest;</span> +<span class="lineNum"> 584 </span> : : unsigned int usedspace; +<span class="lineNum"> 585 </span> : : +<span class="lineNum"> 586 </span> : : /* Sanity check: */ +<span class="lineNum"> 587 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1935 times"> + </span>]:<span class="lineCov"> 1935 : assert(context != (SHA256_CTX*)0);</span> +<span class="lineNum"> 588 </span> : : +<span class="lineNum"> 589 </span> : : /* If no digest buffer is passed, we don't bother doing this: */ +<span class="lineNum"> 590 </span> [<span class="branchCov" title="Branch 0 was taken 1935 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1935 : if (digest != (sha2_byte*)0) {</span> +<span class="lineNum"> 591 </span> :<span class="lineCov"> 1935 : usedspace = (context-&gt;bitcount &gt;&gt; 3) % SHA256_BLOCK_LEN;</span> +<span class="lineNum"> 592 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 593 </span> : : /* Convert FROM host byte order */ +<span class="lineNum"> 594 </span> :<span class="lineCov"> 1935 : REVERSE64(context-&gt;bitcount,context-&gt;bitcount);</span> +<span class="lineNum"> 595 </span> : : #endif +<span class="lineNum"> 596 </span> [<span class="branchCov" title="Branch 0 was taken 1835 times"> + </span><span class="branchCov" title="Branch 1 was taken 100 times"> + </span>]:<span class="lineCov"> 1935 : if (usedspace &gt; 0) {</span> +<span class="lineNum"> 597 </span> : : /* Begin padding with a 1 bit: */ +<span class="lineNum"> 598 </span> :<span class="lineCov"> 1835 : context-&gt;buffer[usedspace++] = 0x80;</span> +<span class="lineNum"> 599 </span> : : +<span class="lineNum"> 600 </span> [<span class="branchCov" title="Branch 0 was taken 1638 times"> + </span><span class="branchCov" title="Branch 1 was taken 197 times"> + </span>]:<span class="lineCov"> 1835 : if (usedspace &lt;= SHA256_SHORT_BLOCK_LEN) {</span> +<span class="lineNum"> 601 </span> : : /* Set-up for the last transform: */ +<span class="lineNum"> 602 </span> :<span class="lineCov"> 1638 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA256_SHORT_BLOCK_LEN - usedspace);</span> +<span class="lineNum"> 603 </span> : : } else { +<span class="lineNum"> 604 </span> [<span class="branchCov" title="Branch 0 was taken 190 times"> + </span><span class="branchCov" title="Branch 1 was taken 7 times"> + </span>]:<span class="lineCov"> 197 : if (usedspace &lt; SHA256_BLOCK_LEN) {</span> +<span class="lineNum"> 605 </span> :<span class="lineCov"> 190 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA256_BLOCK_LEN - usedspace);</span> +<span class="lineNum"> 606 </span> : : } +<span class="lineNum"> 607 </span> : : /* Do second-to-last transform: */ +<span class="lineNum"> 608 </span> :<span class="lineCov"> 197 : SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</span> +<span class="lineNum"> 609 </span> : : +<span class="lineNum"> 610 </span> : : /* And set-up for the last transform: */ +<span class="lineNum"> 611 </span> :<span class="lineCov"> 197 : MEMSET_BZERO(context-&gt;buffer, SHA256_SHORT_BLOCK_LEN);</span> +<span class="lineNum"> 612 </span> : : } +<span class="lineNum"> 613 </span> : : } else { +<span class="lineNum"> 614 </span> : : /* Set-up for the last transform: */ +<span class="lineNum"> 615 </span> :<span class="lineCov"> 100 : MEMSET_BZERO(context-&gt;buffer, SHA256_SHORT_BLOCK_LEN);</span> +<span class="lineNum"> 616 </span> : : +<span class="lineNum"> 617 </span> : : /* Begin padding with a 1 bit: */ +<span class="lineNum"> 618 </span> :<span class="lineCov"> 100 : *context-&gt;buffer = 0x80;</span> +<span class="lineNum"> 619 </span> : : } +<span class="lineNum"> 620 </span> : : /* Set the bit count: */ +<span class="lineNum"> 621 </span> :<span class="lineCov"> 1935 : memcpy(&amp;(context-&gt;buffer[SHA256_SHORT_BLOCK_LEN]), &amp;(context-&gt;bitcount), sizeof(sha2_word64));</span> +<span class="lineNum"> 622 </span> : : +<span class="lineNum"> 623 </span> : : /* Final transform: */ +<span class="lineNum"> 624 </span> :<span class="lineCov"> 1935 : SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</span> +<span class="lineNum"> 625 </span> : : +<span class="lineNum"> 626 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 627 </span> : : { +<span class="lineNum"> 628 </span> : : /* Convert TO host byte order */ +<span class="lineNum"> 629 </span> : : int j; +<span class="lineNum"> 630 </span> [<span class="branchCov" title="Branch 1 was taken 15480 times"> + </span><span class="branchCov" title="Branch 2 was taken 1935 times"> + </span>]:<span class="lineCov"> 17415 : for (j = 0; j &lt; 8; j++) {</span> +<span class="lineNum"> 631 </span> :<span class="lineCov"> 15480 : REVERSE32(context-&gt;state[j],context-&gt;state[j]);</span> +<span class="lineNum"> 632 </span> :<span class="lineCov"> 15480 : *d++ = context-&gt;state[j];</span> +<span class="lineNum"> 633 </span> : : } +<span class="lineNum"> 634 </span> : : } +<span class="lineNum"> 635 </span> : : #else +<span class="lineNum"> 636 </span> : : MEMCPY_BCOPY(d, context-&gt;state, SHA256_DIGEST_LEN); +<span class="lineNum"> 637 </span> : : #endif +<span class="lineNum"> 638 </span> : : } +<span class="lineNum"> 639 </span> : : +<span class="lineNum"> 640 </span> : : /* Clean up state data: */ +<span class="lineNum"> 641 </span> : : MEMSET_BZERO(context, sizeof(*context)); +<span class="lineNum"> 642 </span> :<span class="lineCov"> 1935 : usedspace = 0;</span> +<span class="lineNum"> 643 </span> :<span class="lineCov"> 1935 : }</span> +<a name="644"><span class="lineNum"> 644 </span> : : </a> +<span class="lineNum"> 645 </span> : : /*** SHA-512: *********************************************************/ +<span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : void SHA512_Init(SHA512_CTX* context) {</span> +<span class="lineNum"> 647 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (context == (SHA512_CTX*)0) {</span> +<span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 649 </span> : : } +<span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(context-&gt;state, sha512_initial_hash_value, SHA512_DIGEST_LEN);</span> +<span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA512_BLOCK_LEN);</span> +<span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount[0] = context-&gt;bitcount[1] = 0;</span> +<span class="lineNum"> 653 </span> : : } +<span class="lineNum"> 654 </span> : : +<span class="lineNum"> 655 </span> : : #ifdef SHA2_UNROLL_TRANSFORM +<span class="lineNum"> 656 </span> : : +<span class="lineNum"> 657 </span> : : /* Unrolled SHA-512 round macros: */ +<span class="lineNum"> 658 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 659 </span> : : +<span class="lineNum"> 660 </span> : : #define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ +<span class="lineNum"> 661 </span> : : REVERSE64(*data++, W512[j]); \ +<span class="lineNum"> 662 </span> : : T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ +<span class="lineNum"> 663 </span> : : K512[j] + W512[j]; \ +<span class="lineNum"> 664 </span> : : (d) += T1, \ +<span class="lineNum"> 665 </span> : : (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \ +<span class="lineNum"> 666 </span> : : j++ +<span class="lineNum"> 667 </span> : : +<span class="lineNum"> 668 </span> : : +<span class="lineNum"> 669 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 670 </span> : : +<span class="lineNum"> 671 </span> : : #define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ +<span class="lineNum"> 672 </span> : : T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ +<span class="lineNum"> 673 </span> : : K512[j] + (W512[j] = *data++); \ +<span class="lineNum"> 674 </span> : : (d) += T1; \ +<span class="lineNum"> 675 </span> : : (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ +<span class="lineNum"> 676 </span> : : j++ +<span class="lineNum"> 677 </span> : : +<span class="lineNum"> 678 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 679 </span> : : +<span class="lineNum"> 680 </span> : : #define ROUND512(a,b,c,d,e,f,g,h) \ +<span class="lineNum"> 681 </span> : : s0 = W512[(j+1)&amp;0x0f]; \ +<span class="lineNum"> 682 </span> : : s0 = sigma0_512(s0); \ +<span class="lineNum"> 683 </span> : : s1 = W512[(j+14)&amp;0x0f]; \ +<span class="lineNum"> 684 </span> : : s1 = sigma1_512(s1); \ +<span class="lineNum"> 685 </span> : : T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \ +<span class="lineNum"> 686 </span> : : (W512[j&amp;0x0f] += s1 + W512[(j+9)&amp;0x0f] + s0); \ +<span class="lineNum"> 687 </span> : : (d) += T1; \ +<span class="lineNum"> 688 </span> : : (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ +<span class="lineNum"> 689 </span> : : j++ +<span class="lineNum"> 690 </span> : : +<span class="lineNum"> 691 </span> : : void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { +<span class="lineNum"> 692 </span> : : sha2_word64 a, b, c, d, e, f, g, h, s0, s1; +<span class="lineNum"> 693 </span> : : sha2_word64 T1, *W512 = (sha2_word64*)context-&gt;buffer; +<span class="lineNum"> 694 </span> : : int j; +<span class="lineNum"> 695 </span> : : +<span class="lineNum"> 696 </span> : : /* Initialize registers with the prev. intermediate value */ +<span class="lineNum"> 697 </span> : : a = context-&gt;state[0]; +<span class="lineNum"> 698 </span> : : b = context-&gt;state[1]; +<span class="lineNum"> 699 </span> : : c = context-&gt;state[2]; +<span class="lineNum"> 700 </span> : : d = context-&gt;state[3]; +<span class="lineNum"> 701 </span> : : e = context-&gt;state[4]; +<span class="lineNum"> 702 </span> : : f = context-&gt;state[5]; +<span class="lineNum"> 703 </span> : : g = context-&gt;state[6]; +<span class="lineNum"> 704 </span> : : h = context-&gt;state[7]; +<span class="lineNum"> 705 </span> : : +<span class="lineNum"> 706 </span> : : j = 0; +<span class="lineNum"> 707 </span> : : do { +<span class="lineNum"> 708 </span> : : ROUND512_0_TO_15(a,b,c,d,e,f,g,h); +<span class="lineNum"> 709 </span> : : ROUND512_0_TO_15(h,a,b,c,d,e,f,g); +<span class="lineNum"> 710 </span> : : ROUND512_0_TO_15(g,h,a,b,c,d,e,f); +<span class="lineNum"> 711 </span> : : ROUND512_0_TO_15(f,g,h,a,b,c,d,e); +<span class="lineNum"> 712 </span> : : ROUND512_0_TO_15(e,f,g,h,a,b,c,d); +<span class="lineNum"> 713 </span> : : ROUND512_0_TO_15(d,e,f,g,h,a,b,c); +<span class="lineNum"> 714 </span> : : ROUND512_0_TO_15(c,d,e,f,g,h,a,b); +<span class="lineNum"> 715 </span> : : ROUND512_0_TO_15(b,c,d,e,f,g,h,a); +<span class="lineNum"> 716 </span> : : } while (j &lt; 16); +<span class="lineNum"> 717 </span> : : +<span class="lineNum"> 718 </span> : : /* Now for the remaining rounds up to 79: */ +<span class="lineNum"> 719 </span> : : do { +<span class="lineNum"> 720 </span> : : ROUND512(a,b,c,d,e,f,g,h); +<span class="lineNum"> 721 </span> : : ROUND512(h,a,b,c,d,e,f,g); +<span class="lineNum"> 722 </span> : : ROUND512(g,h,a,b,c,d,e,f); +<span class="lineNum"> 723 </span> : : ROUND512(f,g,h,a,b,c,d,e); +<span class="lineNum"> 724 </span> : : ROUND512(e,f,g,h,a,b,c,d); +<span class="lineNum"> 725 </span> : : ROUND512(d,e,f,g,h,a,b,c); +<span class="lineNum"> 726 </span> : : ROUND512(c,d,e,f,g,h,a,b); +<span class="lineNum"> 727 </span> : : ROUND512(b,c,d,e,f,g,h,a); +<span class="lineNum"> 728 </span> : : } while (j &lt; 80); +<span class="lineNum"> 729 </span> : : +<span class="lineNum"> 730 </span> : : /* Compute the current intermediate hash value */ +<span class="lineNum"> 731 </span> : : context-&gt;state[0] += a; +<span class="lineNum"> 732 </span> : : context-&gt;state[1] += b; +<span class="lineNum"> 733 </span> : : context-&gt;state[2] += c; +<span class="lineNum"> 734 </span> : : context-&gt;state[3] += d; +<span class="lineNum"> 735 </span> : : context-&gt;state[4] += e; +<span class="lineNum"> 736 </span> : : context-&gt;state[5] += f; +<span class="lineNum"> 737 </span> : : context-&gt;state[6] += g; +<span class="lineNum"> 738 </span> : : context-&gt;state[7] += h; +<span class="lineNum"> 739 </span> : : +<span class="lineNum"> 740 </span> : : /* Clean up */ +<span class="lineNum"> 741 </span> : : a = b = c = d = e = f = g = h = T1 = 0; +<span class="lineNum"> 742 </span> : : } +<span class="lineNum"> 743 </span> : : +<a name="744"><span class="lineNum"> 744 </span> : : #else /* SHA2_UNROLL_TRANSFORM */</a> +<span class="lineNum"> 745 </span> : : +<span class="lineNum"> 746 </span> :<span class="lineNoCov"> 0 : void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {</span> +<span class="lineNum"> 747 </span> : : sha2_word64 a, b, c, d, e, f, g, h, s0, s1; +<span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : sha2_word64 T1, T2, *W512 = (sha2_word64*)context-&gt;buffer;</span> +<span class="lineNum"> 749 </span> : : int j; +<span class="lineNum"> 750 </span> : : +<span class="lineNum"> 751 </span> : : /* Initialize registers with the prev. intermediate value */ +<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : a = context-&gt;state[0];</span> +<span class="lineNum"> 753 </span> :<span class="lineNoCov"> 0 : b = context-&gt;state[1];</span> +<span class="lineNum"> 754 </span> :<span class="lineNoCov"> 0 : c = context-&gt;state[2];</span> +<span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : d = context-&gt;state[3];</span> +<span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : e = context-&gt;state[4];</span> +<span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : f = context-&gt;state[5];</span> +<span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : g = context-&gt;state[6];</span> +<span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : h = context-&gt;state[7];</span> +<span class="lineNum"> 760 </span> : : +<span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : j = 0;</span> +<span class="lineNum"> 762 </span> : : do { +<span class="lineNum"> 763 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 764 </span> : : /* Convert TO host byte order */ +<span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : REVERSE64(*data++, W512[j]);</span> +<span class="lineNum"> 766 </span> : : /* Apply the SHA-512 compression function to update a..h */ +<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];</span> +<span class="lineNum"> 768 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 769 </span> : : /* Apply the SHA-512 compression function to update a..h with copy */ +<span class="lineNum"> 770 </span> : : T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++); +<span class="lineNum"> 771 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ +<span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : T2 = Sigma0_512(a) + Maj(a, b, c);</span> +<span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : h = g;</span> +<span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : g = f;</span> +<span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : f = e;</span> +<span class="lineNum"> 776 </span> :<span class="lineNoCov"> 0 : e = d + T1;</span> +<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : d = c;</span> +<span class="lineNum"> 778 </span> :<span class="lineNoCov"> 0 : c = b;</span> +<span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : b = a;</span> +<span class="lineNum"> 780 </span> :<span class="lineNoCov"> 0 : a = T1 + T2;</span> +<span class="lineNum"> 781 </span> : : +<span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : j++;</span> +<span class="lineNum"> 783 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while (j &lt; 16);</span> +<span class="lineNum"> 784 </span> : : +<span class="lineNum"> 785 </span> : : do { +<span class="lineNum"> 786 </span> : : /* Part of the message block expansion: */ +<span class="lineNum"> 787 </span> :<span class="lineNoCov"> 0 : s0 = W512[(j+1)&amp;0x0f];</span> +<span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : s0 = sigma0_512(s0);</span> +<span class="lineNum"> 789 </span> :<span class="lineNoCov"> 0 : s1 = W512[(j+14)&amp;0x0f];</span> +<span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : s1 = sigma1_512(s1);</span> +<span class="lineNum"> 791 </span> : : +<span class="lineNum"> 792 </span> : : /* Apply the SHA-512 compression function to update a..h */ +<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +</span> +<span class="lineNum"> 794 </span> :<span class="lineNoCov"> 0 : (W512[j&amp;0x0f] += s1 + W512[(j+9)&amp;0x0f] + s0);</span> +<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : T2 = Sigma0_512(a) + Maj(a, b, c);</span> +<span class="lineNum"> 796 </span> :<span class="lineNoCov"> 0 : h = g;</span> +<span class="lineNum"> 797 </span> :<span class="lineNoCov"> 0 : g = f;</span> +<span class="lineNum"> 798 </span> :<span class="lineNoCov"> 0 : f = e;</span> +<span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : e = d + T1;</span> +<span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : d = c;</span> +<span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : c = b;</span> +<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : b = a;</span> +<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : a = T1 + T2;</span> +<span class="lineNum"> 804 </span> : : +<span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : j++;</span> +<span class="lineNum"> 806 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while (j &lt; 80);</span> +<span class="lineNum"> 807 </span> : : +<span class="lineNum"> 808 </span> : : /* Compute the current intermediate hash value */ +<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : context-&gt;state[0] += a;</span> +<span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : context-&gt;state[1] += b;</span> +<span class="lineNum"> 811 </span> :<span class="lineNoCov"> 0 : context-&gt;state[2] += c;</span> +<span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : context-&gt;state[3] += d;</span> +<span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : context-&gt;state[4] += e;</span> +<span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : context-&gt;state[5] += f;</span> +<span class="lineNum"> 815 </span> :<span class="lineNoCov"> 0 : context-&gt;state[6] += g;</span> +<span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : context-&gt;state[7] += h;</span> +<span class="lineNum"> 817 </span> : : +<span class="lineNum"> 818 </span> : : /* Clean up */ +<span class="lineNum"> 819 </span> :<span class="lineNoCov"> 0 : a = b = c = d = e = f = g = h = T1 = T2 = 0;</span> +<span class="lineNum"> 820 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 821 </span> : : +<a name="822"><span class="lineNum"> 822 </span> : : #endif /* SHA2_UNROLL_TRANSFORM */</a> +<span class="lineNum"> 823 </span> : : +<span class="lineNum"> 824 </span> :<span class="lineNoCov"> 0 : void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {</span> +<span class="lineNum"> 825 </span> : : unsigned int freespace, usedspace; +<span class="lineNum"> 826 </span> : : +<span class="lineNum"> 827 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len == 0) {</span> +<span class="lineNum"> 828 </span> : : /* Calling with no data is valid - we do nothing */ +<span class="lineNum"> 829 </span> : : return; +<span class="lineNum"> 830 </span> : : } +<span class="lineNum"> 831 </span> : : +<span class="lineNum"> 832 </span> : : /* Sanity check: */ +<span class="lineNum"> 833 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : assert(context != (SHA512_CTX*)0 &amp;&amp; data != (sha2_byte*)0);</span> +<span class="lineNum"> 834 </span> : : +<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : usedspace = (context-&gt;bitcount[0] &gt;&gt; 3) % SHA512_BLOCK_LEN;</span> +<span class="lineNum"> 836 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &gt; 0) {</span> +<span class="lineNum"> 837 </span> : : /* Calculate how much free space is available in the buffer */ +<span class="lineNum"> 838 </span> :<span class="lineNoCov"> 0 : freespace = SHA512_BLOCK_LEN - usedspace;</span> +<span class="lineNum"> 839 </span> : : +<span class="lineNum"> 840 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &gt;= freespace) {</span> +<span class="lineNum"> 841 </span> : : /* Fill the buffer completely and process it */ +<span class="lineNum"> 842 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, freespace);</span> +<span class="lineNum"> 843 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, freespace &lt;&lt; 3);</span> +<span class="lineNum"> 844 </span> :<span class="lineNoCov"> 0 : len -= freespace;</span> +<span class="lineNum"> 845 </span> :<span class="lineNoCov"> 0 : data += freespace;</span> +<span class="lineNum"> 846 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)context-&gt;buffer);</span> +<span class="lineNum"> 847 </span> : : } else { +<span class="lineNum"> 848 </span> : : /* The buffer is not yet full */ +<span class="lineNum"> 849 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, len);</span> +<span class="lineNum"> 850 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, len &lt;&lt; 3);</span> +<span class="lineNum"> 851 </span> : : /* Clean up: */ +<span class="lineNum"> 852 </span> : : usedspace = freespace = 0; +<span class="lineNum"> 853 </span> : : return; +<span class="lineNum"> 854 </span> : : } +<span class="lineNum"> 855 </span> : : } +<span class="lineNum"> 856 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (len &gt;= SHA512_BLOCK_LEN) {</span> +<span class="lineNum"> 857 </span> : : /* Process as many complete blocks as we can */ +<span class="lineNum"> 858 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)data);</span> +<span class="lineNum"> 859 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, SHA512_BLOCK_LEN &lt;&lt; 3);</span> +<span class="lineNum"> 860 </span> :<span class="lineNoCov"> 0 : len -= SHA512_BLOCK_LEN;</span> +<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : data += SHA512_BLOCK_LEN;</span> +<span class="lineNum"> 862 </span> : : } +<span class="lineNum"> 863 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &gt; 0) {</span> +<span class="lineNum"> 864 </span> : : /* There's left-overs, so save 'em */ +<span class="lineNum"> 865 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(context-&gt;buffer, data, len);</span> +<span class="lineNum"> 866 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, len &lt;&lt; 3);</span> +<span class="lineNum"> 867 </span> : : } +<span class="lineNum"> 868 </span> : : /* Clean up: */ +<span class="lineNum"> 869 </span> : : usedspace = freespace = 0; +<a name="870"><span class="lineNum"> 870 </span> : : }</a> +<span class="lineNum"> 871 </span> : : +<span class="lineNum"> 872 </span> :<span class="lineNoCov"> 0 : void SHA512_Last(SHA512_CTX* context) {</span> +<span class="lineNum"> 873 </span> : : unsigned int usedspace; +<span class="lineNum"> 874 </span> : : +<span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : usedspace = (context-&gt;bitcount[0] &gt;&gt; 3) % SHA512_BLOCK_LEN;</span> +<span class="lineNum"> 876 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 877 </span> : : /* Convert FROM host byte order */ +<span class="lineNum"> 878 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;bitcount[0],context-&gt;bitcount[0]);</span> +<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;bitcount[1],context-&gt;bitcount[1]);</span> +<span class="lineNum"> 880 </span> : : #endif +<span class="lineNum"> 881 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &gt; 0) {</span> +<span class="lineNum"> 882 </span> : : /* Begin padding with a 1 bit: */ +<span class="lineNum"> 883 </span> :<span class="lineNoCov"> 0 : context-&gt;buffer[usedspace++] = 0x80;</span> +<span class="lineNum"> 884 </span> : : +<span class="lineNum"> 885 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &lt;= SHA512_SHORT_BLOCK_LEN) {</span> +<span class="lineNum"> 886 </span> : : /* Set-up for the last transform: */ +<span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA512_SHORT_BLOCK_LEN - usedspace);</span> +<span class="lineNum"> 888 </span> : : } else { +<span class="lineNum"> 889 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &lt; SHA512_BLOCK_LEN) {</span> +<span class="lineNum"> 890 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA512_BLOCK_LEN - usedspace);</span> +<span class="lineNum"> 891 </span> : : } +<span class="lineNum"> 892 </span> : : /* Do second-to-last transform: */ +<span class="lineNum"> 893 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)context-&gt;buffer);</span> +<span class="lineNum"> 894 </span> : : +<span class="lineNum"> 895 </span> : : /* And set-up for the last transform: */ +<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA512_BLOCK_LEN - 2);</span> +<span class="lineNum"> 897 </span> : : } +<span class="lineNum"> 898 </span> : : } else { +<span class="lineNum"> 899 </span> : : /* Prepare for final transform: */ +<span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA512_SHORT_BLOCK_LEN);</span> +<span class="lineNum"> 901 </span> : : +<span class="lineNum"> 902 </span> : : /* Begin padding with a 1 bit: */ +<span class="lineNum"> 903 </span> :<span class="lineNoCov"> 0 : *context-&gt;buffer = 0x80;</span> +<span class="lineNum"> 904 </span> : : } +<span class="lineNum"> 905 </span> : : /* Store the length of input data (in bits): */ +<span class="lineNum"> 906 </span> :<span class="lineNoCov"> 0 : memcpy(&amp;(context-&gt;buffer[SHA512_SHORT_BLOCK_LEN]), &amp;(context-&gt;bitcount[1]), sizeof(sha2_word64));</span> +<span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : memcpy(&amp;(context-&gt;buffer[SHA512_SHORT_BLOCK_LEN+8]), &amp;(context-&gt;bitcount[0]), sizeof(sha2_word64));</span> +<span class="lineNum"> 908 </span> : : +<span class="lineNum"> 909 </span> : : /* Final transform: */ +<span class="lineNum"> 910 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)context-&gt;buffer);</span> +<a name="911"><span class="lineNum"> 911 </span> :<span class="lineNoCov"> 0 : }</span></a> +<span class="lineNum"> 912 </span> : : +<span class="lineNum"> 913 </span> :<span class="lineNoCov"> 0 : void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {</span> +<span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : sha2_word64 *d = (sha2_word64*)digest;</span> +<span class="lineNum"> 915 </span> : : +<span class="lineNum"> 916 </span> : : /* Sanity check: */ +<span class="lineNum"> 917 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : assert(context != (SHA512_CTX*)0);</span> +<span class="lineNum"> 918 </span> : : +<span class="lineNum"> 919 </span> : : /* If no digest buffer is passed, we don't bother doing this: */ +<span class="lineNum"> 920 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (digest != (sha2_byte*)0) {</span> +<span class="lineNum"> 921 </span> :<span class="lineNoCov"> 0 : SHA512_Last(context);</span> +<span class="lineNum"> 922 </span> : : +<span class="lineNum"> 923 </span> : : /* Save the hash data for output: */ +<span class="lineNum"> 924 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 925 </span> : : { +<span class="lineNum"> 926 </span> : : /* Convert TO host byte order */ +<span class="lineNum"> 927 </span> : : int j; +<span class="lineNum"> 928 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (j = 0; j &lt; 8; j++) {</span> +<span class="lineNum"> 929 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;state[j],context-&gt;state[j]);</span> +<span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : *d++ = context-&gt;state[j];</span> +<span class="lineNum"> 931 </span> : : } +<span class="lineNum"> 932 </span> : : } +<span class="lineNum"> 933 </span> : : #else +<span class="lineNum"> 934 </span> : : MEMCPY_BCOPY(d, context-&gt;state, SHA512_DIGEST_LEN); +<span class="lineNum"> 935 </span> : : #endif +<span class="lineNum"> 936 </span> : : } +<span class="lineNum"> 937 </span> : : +<span class="lineNum"> 938 </span> : : /* Zero out state data */ +<span class="lineNum"> 939 </span> : : MEMSET_BZERO(context, sizeof(*context)); +<span class="lineNum"> 940 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 941 </span> : : +<a name="942"><span class="lineNum"> 942 </span> : : </a> +<span class="lineNum"> 943 </span> : : /*** SHA-384: *********************************************************/ +<span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : void SHA384_Init(SHA384_CTX* context) {</span> +<span class="lineNum"> 945 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (context == (SHA384_CTX*)0) {</span> +<span class="lineNum"> 946 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 947 </span> : : } +<span class="lineNum"> 948 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(context-&gt;state, sha384_initial_hash_value, SHA512_DIGEST_LEN);</span> +<span class="lineNum"> 949 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA384_BLOCK_LEN);</span> +<span class="lineNum"> 950 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount[0] = context-&gt;bitcount[1] = 0;</span> +<a name="951"><span class="lineNum"> 951 </span> : : }</a> +<span class="lineNum"> 952 </span> : : +<span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {</span> +<span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : SHA512_Update((SHA512_CTX*)context, data, len);</span> +<a name="955"><span class="lineNum"> 955 </span> :<span class="lineNoCov"> 0 : }</span></a> +<span class="lineNum"> 956 </span> : : +<span class="lineNum"> 957 </span> :<span class="lineNoCov"> 0 : void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {</span> +<span class="lineNum"> 958 </span> :<span class="lineNoCov"> 0 : sha2_word64 *d = (sha2_word64*)digest;</span> +<span class="lineNum"> 959 </span> : : +<span class="lineNum"> 960 </span> : : /* Sanity check: */ +<span class="lineNum"> 961 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : assert(context != (SHA384_CTX*)0);</span> +<span class="lineNum"> 962 </span> : : +<span class="lineNum"> 963 </span> : : /* If no digest buffer is passed, we don't bother doing this: */ +<span class="lineNum"> 964 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (digest != (sha2_byte*)0) {</span> +<span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : SHA512_Last((SHA512_CTX*)context);</span> +<span class="lineNum"> 966 </span> : : +<span class="lineNum"> 967 </span> : : /* Save the hash data for output: */ +<span class="lineNum"> 968 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN +<span class="lineNum"> 969 </span> : : { +<span class="lineNum"> 970 </span> : : /* Convert TO host byte order */ +<span class="lineNum"> 971 </span> : : int j; +<span class="lineNum"> 972 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (j = 0; j &lt; 6; j++) {</span> +<span class="lineNum"> 973 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;state[j],context-&gt;state[j]);</span> +<span class="lineNum"> 974 </span> :<span class="lineNoCov"> 0 : *d++ = context-&gt;state[j];</span> +<span class="lineNum"> 975 </span> : : } +<span class="lineNum"> 976 </span> : : } +<span class="lineNum"> 977 </span> : : #else +<span class="lineNum"> 978 </span> : : MEMCPY_BCOPY(d, context-&gt;state, SHA384_DIGEST_LEN); +<span class="lineNum"> 979 </span> : : #endif +<span class="lineNum"> 980 </span> : : } +<span class="lineNum"> 981 </span> : : +<span class="lineNum"> 982 </span> : : /* Zero out state data */ +<span class="lineNum"> 983 </span> : : MEMSET_BZERO(context, sizeof(*context)); +<span class="lineNum"> 984 </span> :<span class="lineNoCov"> 0 : }</span> +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html new file mode 100644 index 00000000..1c417c41 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcat.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcat.c<span style="font-size: 80%;"> (<a href="strlcat.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">17</td> + <td class="headerCovTableEntryHi">94.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryMed">80.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="strlcat.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="strlcat.c.gcov.html#44">strlcat</a></td> + <td class="coverFnHi">23937</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html new file mode 100644 index 00000000..d5f56a4b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcat.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcat.c<span style="font-size: 80%;"> (<a href="strlcat.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">17</td> + <td class="headerCovTableEntryHi">94.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryMed">80.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="strlcat.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="strlcat.c.gcov.html#44">strlcat</a></td> + <td class="coverFnHi">23937</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html new file mode 100644 index 00000000..7d4e42d1 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html @@ -0,0 +1,159 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcat.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcat.c<span style="font-size: 80%;"> (source / <a href="strlcat.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">16</td> + <td class="headerCovTableEntry">17</td> + <td class="headerCovTableEntryHi">94.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntryMed">80.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: strlcat.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Safer string concat routine. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Copyright (c) 1998 Todd C. Miller &lt;Todd.Miller@courtesan.com&gt; +<span class="lineNum"> 9 </span> : : * All rights reserved. +<span class="lineNum"> 10 </span> : : * +<span class="lineNum"> 11 </span> : : * Redistribution and use in source and binary forms, with or without +<span class="lineNum"> 12 </span> : : * modification, are permitted provided that the following conditions +<span class="lineNum"> 13 </span> : : * are met: +<span class="lineNum"> 14 </span> : : * 1. Redistributions of source code must retain the above copyright +<span class="lineNum"> 15 </span> : : * notice, this list of conditions and the following disclaimer. +<span class="lineNum"> 16 </span> : : * 2. Redistributions in binary form must reproduce the above copyright +<span class="lineNum"> 17 </span> : : * notice, this list of conditions and the following disclaimer in the +<span class="lineNum"> 18 </span> : : * documentation and/or other materials provided with the distribution. +<span class="lineNum"> 19 </span> : : * 3. The name of the author may not be used to endorse or promote products +<span class="lineNum"> 20 </span> : : * derived from this software without specific prior written permission. +<span class="lineNum"> 21 </span> : : * +<span class="lineNum"> 22 </span> : : * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +<span class="lineNum"> 23 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +<span class="lineNum"> 24 </span> : : * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +<span class="lineNum"> 25 </span> : : * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +<span class="lineNum"> 26 </span> : : * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +<span class="lineNum"> 27 </span> : : * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +<span class="lineNum"> 28 </span> : : * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +<span class="lineNum"> 29 </span> : : * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +<span class="lineNum"> 30 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +<span class="lineNum"> 31 </span> : : * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +<span class="lineNum"> 32 </span> : : * +<span class="lineNum"> 33 </span> : : ***************************************************************************** +<span class="lineNum"> 34 </span> : : */ +<span class="lineNum"> 35 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : #if !HAVE_STRLCAT +<span class="lineNum"> 38 </span> : : /* +<span class="lineNum"> 39 </span> : : * Appends src to string dst of size siz (unlike strncat, siz is the +<span class="lineNum"> 40 </span> : : * full size of dst, not space left). At most siz-1 characters +<span class="lineNum"> 41 </span> : : * will be copied. Always NUL terminates (unless siz &lt;= strlen(dst)). +<span class="lineNum"> 42 </span> : : * Returns strlen(src) + MIN(siz, strlen(initial dst)). +<span class="lineNum"> 43 </span> : : * If retval &gt;= siz, truncation occurred. +<a name="44"><span class="lineNum"> 44 </span> : : */</a> +<span class="lineNum"> 45 </span> : : size_t +<span class="lineNum"> 46 </span> :<span class="lineCov"> 23937 : strlcat(char *dst, const char *src, size_t siz)</span> +<span class="lineNum"> 47 </span> : : { +<span class="lineNum"> 48 </span> :<span class="lineCov"> 23937 : register char *d = dst;</span> +<span class="lineNum"> 49 </span> :<span class="lineCov"> 23937 : register const char *s = src;</span> +<span class="lineNum"> 50 </span> :<span class="lineCov"> 23937 : register size_t n = siz;</span> +<span class="lineNum"> 51 </span> : : size_t dlen; +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> : : /* Find the end of dst and adjust bytes left but don't go past end */ +<span class="lineNum"> 54 </span>[<span class="branchCov" title="Branch 0 was taken 2608223 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 2584286 times"> + </span><span class="branchCov" title="Branch 3 was taken 23937 times"> + </span>]:<span class="lineCov"> 2608223 : while (n-- != 0 &amp;&amp; *d != '\0')</span> +<span class="lineNum"> 55 </span> :<span class="lineCov"> 2584286 : d++;</span> +<span class="lineNum"> 56 </span> :<span class="lineCov"> 23937 : dlen = d - dst;</span> +<span class="lineNum"> 57 </span> :<span class="lineCov"> 23937 : n = siz - dlen;</span> +<span class="lineNum"> 58 </span> : : +<span class="lineNum"> 59 </span> [<span class="branchCov" title="Branch 0 was taken 23937 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 23937 : if (n == 0)</span> +<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return(dlen + strlen(s));</span> +<span class="lineNum"> 61 </span> [<span class="branchCov" title="Branch 0 was taken 344770 times"> + </span><span class="branchCov" title="Branch 1 was taken 23937 times"> + </span>]:<span class="lineCov"> 368707 : while (*s != '\0') {</span> +<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 283698 times"> + </span><span class="branchCov" title="Branch 1 was taken 61072 times"> + </span>]:<span class="lineCov"> 344770 : if (n != 1) {</span> +<span class="lineNum"> 63 </span> :<span class="lineCov"> 283698 : *d++ = *s;</span> +<span class="lineNum"> 64 </span> :<span class="lineCov"> 283698 : n--;</span> +<span class="lineNum"> 65 </span> : : } +<span class="lineNum"> 66 </span> :<span class="lineCov"> 344770 : s++;</span> +<span class="lineNum"> 67 </span> : : } +<span class="lineNum"> 68 </span> :<span class="lineCov"> 23937 : *d = '\0';</span> +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> :<span class="lineCov"> 23937 : return(dlen + (s - src)); /* count does not include NUL */</span> +<span class="lineNum"> 71 </span> : : } +<span class="lineNum"> 72 </span> : : #endif +<span class="lineNum"> 73 </span> : : +<span class="lineNum"> 74 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html new file mode 100644 index 00000000..1a22bc7d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcpy.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcpy.c<span style="font-size: 80%;"> (<a href="strlcpy.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntryMed">85.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="strlcpy.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="strlcpy.c.gcov.html#42">strlcpy</a></td> + <td class="coverFnHi">544327</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html new file mode 100644 index 00000000..56c2a3b6 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcpy.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcpy.c<span style="font-size: 80%;"> (<a href="strlcpy.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntryMed">85.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="strlcpy.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="strlcpy.c.gcov.html#42">strlcpy</a></td> + <td class="coverFnHi">544327</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html new file mode 100644 index 00000000..79734ddb --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html @@ -0,0 +1,155 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcpy.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcpy.c<span style="font-size: 80%;"> (source / <a href="strlcpy.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntryMed">85.7 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: strlcpy.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Safer string copy routine. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Copyright (c) 1998 Todd C. Miller &lt;Todd.Miller@courtesan.com&gt; +<span class="lineNum"> 9 </span> : : * All rights reserved. +<span class="lineNum"> 10 </span> : : * +<span class="lineNum"> 11 </span> : : * Redistribution and use in source and binary forms, with or without +<span class="lineNum"> 12 </span> : : * modification, are permitted provided that the following conditions +<span class="lineNum"> 13 </span> : : * are met: +<span class="lineNum"> 14 </span> : : * 1. Redistributions of source code must retain the above copyright +<span class="lineNum"> 15 </span> : : * notice, this list of conditions and the following disclaimer. +<span class="lineNum"> 16 </span> : : * 2. Redistributions in binary form must reproduce the above copyright +<span class="lineNum"> 17 </span> : : * notice, this list of conditions and the following disclaimer in the +<span class="lineNum"> 18 </span> : : * documentation and/or other materials provided with the distribution. +<span class="lineNum"> 19 </span> : : * 3. The name of the author may not be used to endorse or promote products +<span class="lineNum"> 20 </span> : : * derived from this software without specific prior written permission. +<span class="lineNum"> 21 </span> : : * +<span class="lineNum"> 22 </span> : : * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, +<span class="lineNum"> 23 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY +<span class="lineNum"> 24 </span> : : * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +<span class="lineNum"> 25 </span> : : * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +<span class="lineNum"> 26 </span> : : * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +<span class="lineNum"> 27 </span> : : * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; +<span class="lineNum"> 28 </span> : : * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +<span class="lineNum"> 29 </span> : : * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +<span class="lineNum"> 30 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF +<span class="lineNum"> 31 </span> : : * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +<span class="lineNum"> 32 </span> : : * +<span class="lineNum"> 33 </span> : : ***************************************************************************** +<span class="lineNum"> 34 </span> : : */ +<span class="lineNum"> 35 </span> : : #include &quot;fko_common.h&quot; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : #if !HAVE_STRLCPY +<span class="lineNum"> 38 </span> : : /* +<span class="lineNum"> 39 </span> : : * Copy src to string dst of size siz. At most siz-1 characters +<span class="lineNum"> 40 </span> : : * will be copied. Always NUL terminates (unless siz == 0). +<span class="lineNum"> 41 </span> : : * Returns strlen(src); if retval &gt;= siz, truncation occurred. +<a name="42"><span class="lineNum"> 42 </span> : : */</a> +<span class="lineNum"> 43 </span> : : size_t +<span class="lineNum"> 44 </span> :<span class="lineCov"> 544327 : strlcpy(char *dst, const char *src, size_t siz)</span> +<span class="lineNum"> 45 </span> : : { +<span class="lineNum"> 46 </span> :<span class="lineCov"> 544327 : register char *d = dst;</span> +<span class="lineNum"> 47 </span> :<span class="lineCov"> 544327 : register const char *s = src;</span> +<span class="lineNum"> 48 </span> :<span class="lineCov"> 544327 : register size_t n = siz;</span> +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : /* Copy as many bytes as will fit */ +<span class="lineNum"> 51 </span>[<span class="branchCov" title="Branch 0 was taken 544327 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 544271 times"> + </span><span class="branchCov" title="Branch 3 was taken 56 times"> + </span>]:<span class="lineCov"> 544327 : if (n != 0 &amp;&amp; --n != 0) {</span> +<span class="lineNum"> 52 </span> : : do { +<span class="lineNum"> 53 </span> [<span class="branchCov" title="Branch 0 was taken 11608731 times"> + </span><span class="branchCov" title="Branch 1 was taken 446611 times"> + </span>]:<span class="lineCov"> 12055342 : if ((*d++ = *s++) == 0)</span> +<span class="lineNum"> 54 </span> : : break; +<span class="lineNum"> 55 </span> [<span class="branchCov" title="Branch 0 was taken 11511071 times"> + </span><span class="branchCov" title="Branch 1 was taken 97660 times"> + </span>]:<span class="lineCov"> 11608731 : } while (--n != 0);</span> +<span class="lineNum"> 56 </span> : : } +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> : : /* Not enough room in dst, add NUL and traverse rest of src */ +<span class="lineNum"> 59 </span> [<span class="branchCov" title="Branch 0 was taken 97716 times"> + </span><span class="branchCov" title="Branch 1 was taken 446611 times"> + </span>]:<span class="lineCov"> 544327 : if (n == 0) {</span> +<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 97716 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 97716 : if (siz != 0)</span> +<span class="lineNum"> 61 </span> :<span class="lineCov"> 97716 : *d = '\0'; /* NUL-terminate dst */</span> +<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 137453 times"> + </span><span class="branchCov" title="Branch 1 was taken 97716 times"> + </span>]:<span class="lineCov"> 235169 : while (*s++)</span> +<span class="lineNum"> 63 </span> : : ; +<span class="lineNum"> 64 </span> : : } +<span class="lineNum"> 65 </span> : : +<span class="lineNum"> 66 </span> :<span class="lineCov"> 544327 : return(s - src - 1); /* count does not include NUL */</span> +<span class="lineNum"> 67 </span> : : } +<span class="lineNum"> 68 </span> : : #endif +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/ruby.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..991b6d4ec9e78be165e3ef757eed1aada287364d GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^FceV#7`HfI^%F z9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstUx|nfKQ0)e^Y%R^MdiLxj>4`)5S5Q b;#P73kj=!v_*DHKNFRfztDnm{r-UW|iOwIS literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html new file mode 100644 index 00000000..8938f514 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html @@ -0,0 +1,201 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/access.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - access.c<span style="font-size: 80%;"> (<a href="access.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">409</td> + <td class="headerCovTableEntry">755</td> + <td class="headerCovTableEntryLo">54.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">66.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">295</td> + <td class="headerCovTableEntry">602</td> + <td class="headerCovTableEntryLo">49.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="access.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#56">add_acc_string</a></td> + <td class="coverFnHi">58685</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#105">add_acc_bool</a></td> + <td class="coverFnHi">30897</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#730">zero_buf_wrapper</a></td> + <td class="coverFnHi">24742</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#955">acc_stanza_add</a></td> + <td class="coverFnHi">23117</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#683">free_acc_int_list</a></td> + <td class="coverFnHi">23117</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#747">free_acc_stanza_data</a></td> + <td class="coverFnHi">23117</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1078">acc_data_is_valid.isra.4</a></td> + <td class="coverFnHi">22878</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#235">add_int_ent</a></td> + <td class="coverFnHi">18846</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#397">expand_acc_int_list</a></td> + <td class="coverFnHi">17811</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#916">free_acc_stanzas</a></td> + <td class="coverFnHi">2609</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#699">free_acc_port_list</a></td> + <td class="coverFnHi">1761</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#941">acc_stanza_init</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1183">parse_access_file</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#113">add_acc_expire_time.isra.0</a></td> + <td class="coverFnHi">745</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#841">expand_acc_ent_lists</a></td> + <td class="coverFnHi">485</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#992">set_acc_defaults</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1926">dump_access_list</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#590">expand_acc_port_list</a></td> + <td class="coverFnHi">83</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#495">add_port_list_ent</a></td> + <td class="coverFnHi">80</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#443">parse_proto_and_port</a></td> + <td class="coverFnHi">80</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#542">add_string_list_ent</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#715">free_acc_string_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#206">add_acc_force_snat.isra.3</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1776">compare_addr_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1834">acc_check_port_access</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#148">add_acc_expire_time_epoch.isra.1</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1801">compare_port_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#637">expand_acc_string_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#80">add_acc_b64_string</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#173">add_acc_force_nat.isra.2</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html new file mode 100644 index 00000000..4383a544 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html @@ -0,0 +1,201 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/access.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - access.c<span style="font-size: 80%;"> (<a href="access.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">409</td> + <td class="headerCovTableEntry">755</td> + <td class="headerCovTableEntryLo">54.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">66.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">295</td> + <td class="headerCovTableEntry">602</td> + <td class="headerCovTableEntryLo">49.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="access.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1834">acc_check_port_access</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1078">acc_data_is_valid.isra.4</a></td> + <td class="coverFnHi">22878</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#955">acc_stanza_add</a></td> + <td class="coverFnHi">23117</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#941">acc_stanza_init</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#80">add_acc_b64_string</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#105">add_acc_bool</a></td> + <td class="coverFnHi">30897</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#113">add_acc_expire_time.isra.0</a></td> + <td class="coverFnHi">745</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#148">add_acc_expire_time_epoch.isra.1</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#173">add_acc_force_nat.isra.2</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#206">add_acc_force_snat.isra.3</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#56">add_acc_string</a></td> + <td class="coverFnHi">58685</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#235">add_int_ent</a></td> + <td class="coverFnHi">18846</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#495">add_port_list_ent</a></td> + <td class="coverFnHi">80</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#542">add_string_list_ent</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1776">compare_addr_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1801">compare_port_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1926">dump_access_list</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#841">expand_acc_ent_lists</a></td> + <td class="coverFnHi">485</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#397">expand_acc_int_list</a></td> + <td class="coverFnHi">17811</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#590">expand_acc_port_list</a></td> + <td class="coverFnHi">83</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#637">expand_acc_string_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#683">free_acc_int_list</a></td> + <td class="coverFnHi">23117</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#699">free_acc_port_list</a></td> + <td class="coverFnHi">1761</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#747">free_acc_stanza_data</a></td> + <td class="coverFnHi">23117</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#916">free_acc_stanzas</a></td> + <td class="coverFnHi">2609</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#715">free_acc_string_list</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#1183">parse_access_file</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#443">parse_proto_and_port</a></td> + <td class="coverFnHi">80</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#992">set_acc_defaults</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="access.c.gcov.html#730">zero_buf_wrapper</a></td> + <td class="coverFnHi">24742</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html new file mode 100644 index 00000000..de8ad293 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html @@ -0,0 +1,2153 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/access.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - access.c<span style="font-size: 80%;"> (source / <a href="access.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">409</td> + <td class="headerCovTableEntry">755</td> + <td class="headerCovTableEntryLo">54.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">20</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">66.7 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">295</td> + <td class="headerCovTableEntry">602</td> + <td class="headerCovTableEntryLo">49.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ****************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: access.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Access.conf file processing for fwknop server. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ****************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &lt;sys/stat.h&gt; +<span class="lineNum"> 32 </span> : : +<span class="lineNum"> 33 </span> : : #if HAVE_SYS_SOCKET_H +<span class="lineNum"> 34 </span> : : #include &lt;sys/socket.h&gt; +<span class="lineNum"> 35 </span> : : #endif +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 38 </span> : : #include &lt;arpa/inet.h&gt; +<span class="lineNum"> 39 </span> : : #include &quot;pwd.h&quot; +<span class="lineNum"> 40 </span> : : #include &quot;access.h&quot; +<span class="lineNum"> 41 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 42 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : #define FATAL_ERR -1 +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : #ifndef SUCCESS +<span class="lineNum"> 47 </span> : : #define SUCCESS 1 +<span class="lineNum"> 48 </span> : : #endif +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : #ifdef HAVE_C_UNIT_TESTS +<span class="lineNum"> 51 </span> : : #include &quot;cunit_common.h&quot; +<span class="lineNum"> 52 </span> : : DECLARE_TEST_SUITE(access, &quot;Access test suite&quot;); +<span class="lineNum"> 53 </span> : : #endif +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : /* Add an access string entry +<a name="56"><span class="lineNum"> 56 </span> : : */</a> +<span class="lineNum"> 57 </span> : : static int +<span class="lineNum"> 58 </span> :<span class="lineCov"> 58685 : add_acc_string(char **var, const char *val)</span> +<span class="lineNum"> 59 </span> : : { +<span class="lineNum"> 60 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 58685 times"> + </span>]:<span class="lineCov"> 58685 : if(var == NULL)</span> +<span class="lineNum"> 61 </span> : : { +<span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] add_acc_string() called with NULL variable&quot;);</span> +<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> +<span class="lineNum"> 64 </span> : : } +<span class="lineNum"> 65 </span> : : +<span class="lineNum"> 66 </span> [<span class="branchCov" title="Branch 0 was taken 8674 times"> + </span><span class="branchCov" title="Branch 1 was taken 50011 times"> + </span>]:<span class="lineCov"> 58685 : if(*var != NULL)</span> +<span class="lineNum"> 67 </span> :<span class="lineCov"> 8674 : free(*var);</span> +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 58685 times"> + </span>]:<span class="lineCov"> 58685 : if((*var = strdup(val)) == NULL)</span> +<span class="lineNum"> 70 </span> : : { +<span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 72 </span> : : &quot;[*] Fatal memory allocation error adding access list entry: %s&quot;, *var +<span class="lineNum"> 73 </span> : : ); +<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> +<span class="lineNum"> 75 </span> : : } +<span class="lineNum"> 76 </span> : : return SUCCESS; +<span class="lineNum"> 77 </span> : : } +<span class="lineNum"> 78 </span> : : +<span class="lineNum"> 79 </span> : : /* Decode base64 encoded string into access entry +<a name="80"><span class="lineNum"> 80 </span> : : */</a> +<span class="lineNum"> 81 </span> : : static int +<span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : add_acc_b64_string(char **var, int *len, const char *val)</span> +<span class="lineNum"> 83 </span> : : { +<span class="lineNum"> 84 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((*var = strdup(val)) == NULL)</span> +<span class="lineNum"> 85 </span> : : { +<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 87 </span> : : &quot;[*] Fatal memory allocation error adding access list entry: %s&quot;, *var +<span class="lineNum"> 88 </span> : : ); +<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> +<span class="lineNum"> 90 </span> : : } +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : memset(*var, 0x0, strlen(val));</span> +<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : *len = fko_base64_decode(val, (unsigned char *) *var);</span> +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*len &lt; 0)</span> +<span class="lineNum"> 95 </span> : : { +<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 97 </span> : : &quot;[*] base64 decoding returned error for: %s&quot;, *var +<span class="lineNum"> 98 </span> : : ); +<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> +<span class="lineNum"> 100 </span> : : } +<span class="lineNum"> 101 </span> : : return SUCCESS; +<span class="lineNum"> 102 </span> : : } +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> : : /* Add an access bool entry (unsigned char of 1 or 0) +<a name="105"><span class="lineNum"> 105 </span> : : */</a> +<span class="lineNum"> 106 </span> : : static unsigned char +<span class="lineNum"> 107 </span> :<span class="lineCov"> 30897 : add_acc_bool(unsigned char *var, const char *val)</span> +<span class="lineNum"> 108 </span> : : { +<span class="lineNum"> 109 </span> :<span class="lineCov"> 30897 : return(*var = (strncasecmp(val, &quot;Y&quot;, 1) == 0) ? 1 : 0);</span> +<span class="lineNum"> 110 </span> : : } +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : /* Add expiration time - convert date to epoch seconds +<a name="113"><span class="lineNum"> 113 </span> : : */</a> +<span class="lineNum"> 114 </span> : : static int +<span class="lineNum"> 115 </span> :<span class="lineCov"> 1490 : add_acc_expire_time(fko_srv_options_t *opts, time_t *access_expire_time, const char *val)</span> +<span class="lineNum"> 116 </span> : : { +<span class="lineNum"> 117 </span> : : struct tm tm; +<span class="lineNum"> 118 </span> : : +<span class="lineNum"> 119 </span> : : memset(&amp;tm, 0, sizeof(struct tm)); +<span class="lineNum"> 120 </span> : : +<span class="lineNum"> 121 </span> [<span class="branchCov" title="Branch 0 was taken 10 times"> + </span><span class="branchCov" title="Branch 1 was taken 735 times"> + </span>]:<span class="lineCov"> 745 : if (sscanf(val, &quot;%2d/%2d/%4d&quot;, &amp;tm.tm_mon, &amp;tm.tm_mday, &amp;tm.tm_year) != 3)</span> +<span class="lineNum"> 122 </span> : : { +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> :<span class="lineCov"> 10 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 125 </span> : : &quot;[*] Fatal: invalid date value '%s' (need MM/DD/YYYY) for access stanza expiration time&quot;, +<span class="lineNum"> 126 </span> : : val +<span class="lineNum"> 127 </span> : : ); +<span class="lineNum"> 128 </span> : : return FATAL_ERR; +<span class="lineNum"> 129 </span> : : } +<span class="lineNum"> 130 </span> : : +<span class="lineNum"> 131 </span> [<span class="branchCov" title="Branch 0 was taken 604 times"> + </span><span class="branchCov" title="Branch 1 was taken 131 times"> + </span>]:<span class="lineCov"> 735 : if(tm.tm_mon &gt; 0)</span> +<span class="lineNum"> 132 </span> :<span class="lineCov"> 604 : tm.tm_mon -= 1; /* 0-11 */</span> +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> : : /* number of years since 1900 +<span class="lineNum"> 135 </span> : : */ +<span class="lineNum"> 136 </span> [<span class="branchCov" title="Branch 0 was taken 300 times"> + </span><span class="branchCov" title="Branch 1 was taken 435 times"> + </span>]:<span class="lineCov"> 735 : if(tm.tm_year &gt; 1900)</span> +<span class="lineNum"> 137 </span> :<span class="lineCov"> 300 : tm.tm_year -= 1900;</span> +<span class="lineNum"> 138 </span> : : else +<span class="lineNum"> 139 </span> [<span class="branchCov" title="Branch 0 was taken 344 times"> + </span><span class="branchCov" title="Branch 1 was taken 91 times"> + </span>]:<span class="lineCov"> 435 : if(tm.tm_year &lt; 100)</span> +<span class="lineNum"> 140 </span> :<span class="lineCov"> 344 : tm.tm_year += 100;</span> +<span class="lineNum"> 141 </span> : : +<span class="lineNum"> 142 </span> :<span class="lineCov"> 735 : *access_expire_time = mktime(&amp;tm);</span> +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> : : return 1; +<span class="lineNum"> 145 </span> : : } +<span class="lineNum"> 146 </span> : : +<span class="lineNum"> 147 </span> : : /* Add expiration time via epoch seconds defined in access.conf +<a name="148"><span class="lineNum"> 148 </span> : : */</a> +<span class="lineNum"> 149 </span> : : static int +<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : add_acc_expire_time_epoch(fko_srv_options_t *opts, time_t *access_expire_time, const char *val)</span> +<span class="lineNum"> 151 </span> : : { +<span class="lineNum"> 152 </span> : : char *endptr; +<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : unsigned long expire_time = 0;</span> +<span class="lineNum"> 154 </span> : : +<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : errno = 0;</span> +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : expire_time = (time_t) strtoul(val, &amp;endptr, 10);</span> +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (errno == ERANGE || (errno != 0 &amp;&amp; expire_time == 0))</span> +<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] +<span class="lineNum"> 160 </span> : : { +<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 162 </span> : : &quot;[*] Fatal: invalid epoch seconds value '%s' for access stanza expiration time&quot;, +<span class="lineNum"> 163 </span> : : val +<span class="lineNum"> 164 </span> : : ); +<span class="lineNum"> 165 </span> : : return FATAL_ERR; +<span class="lineNum"> 166 </span> : : } +<span class="lineNum"> 167 </span> : : +<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : *access_expire_time = (time_t) expire_time;</span> +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> : : return 1; +<span class="lineNum"> 171 </span> : : } +<span class="lineNum"> 172 </span> : : +<a name="173"><span class="lineNum"> 173 </span> : : #if defined(FIREWALL_FIREWALLD) || defined(FIREWALL_IPTABLES)</a> +<span class="lineNum"> 174 </span> : : static int +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : add_acc_force_nat(fko_srv_options_t *opts, acc_stanza_t *curr_acc, const char *val)</span> +<span class="lineNum"> 176 </span> : : { +<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : char ip_str[MAX_IPV4_STR_LEN] = {0};</span> +<span class="lineNum"> 178 </span> : : +<span class="lineNum"> 179 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sscanf(val, &quot;%15s %5u&quot;, ip_str, &amp;curr_acc-&gt;force_nat_port) != 2)</span> +<span class="lineNum"> 180 </span> : : { +<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 182 </span> : : &quot;[*] Fatal: invalid FORCE_NAT arg '%s', need &lt;IP&gt; &lt;PORT&gt;&quot;, +<span class="lineNum"> 183 </span> : : val +<span class="lineNum"> 184 </span> : : ); +<span class="lineNum"> 185 </span> : : return FATAL_ERR; +<span class="lineNum"> 186 </span> : : } +<span class="lineNum"> 187 </span> : : +<span class="lineNum"> 188 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (curr_acc-&gt;force_nat_port &gt; MAX_PORT)</span> +<span class="lineNum"> 189 </span> : : { +<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 191 </span> : : &quot;[*] Fatal: invalid FORCE_NAT port '%d'&quot;, curr_acc-&gt;force_nat_port); +<span class="lineNum"> 192 </span> : : return FATAL_ERR; +<span class="lineNum"> 193 </span> : : } +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(ip_str))</span> +<span class="lineNum"> 196 </span> : : { +<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 198 </span> : : &quot;[*] Fatal: invalid FORCE_NAT IP '%s'&quot;, ip_str); +<span class="lineNum"> 199 </span> : : return FATAL_ERR; +<span class="lineNum"> 200 </span> : : } +<span class="lineNum"> 201 </span> : : +<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;force_nat = 1;</span> +<span class="lineNum"> 203 </span> : : +<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : return add_acc_string(&amp;(curr_acc-&gt;force_nat_ip), ip_str);</span> +<span class="lineNum"> 205 </span> : : } +<a name="206"><span class="lineNum"> 206 </span> : : </a> +<span class="lineNum"> 207 </span> : : static int +<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : add_acc_force_snat(fko_srv_options_t *opts, acc_stanza_t *curr_acc, const char *val)</span> +<span class="lineNum"> 209 </span> : : { +<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : char ip_str[MAX_IPV4_STR_LEN] = {0};</span> +<span class="lineNum"> 211 </span> : : +<span class="lineNum"> 212 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sscanf(val, &quot;%15s&quot;, ip_str) != 1)</span> +<span class="lineNum"> 213 </span> : : { +<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 215 </span> : : &quot;[*] Fatal: invalid FORCE_SNAT arg '%s', need &lt;IP&gt;&quot;, val); +<span class="lineNum"> 216 </span> : : return FATAL_ERR; +<span class="lineNum"> 217 </span> : : } +<span class="lineNum"> 218 </span> : : +<span class="lineNum"> 219 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(ip_str))</span> +<span class="lineNum"> 220 </span> : : { +<span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 222 </span> : : &quot;[*] Fatal: invalid FORCE_SNAT IP '%s'&quot;, ip_str); +<span class="lineNum"> 223 </span> : : return FATAL_ERR; +<span class="lineNum"> 224 </span> : : } +<span class="lineNum"> 225 </span> : : +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;force_snat = 1;</span> +<span class="lineNum"> 227 </span> : : +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : return add_acc_string(&amp;(curr_acc-&gt;force_snat_ip), ip_str);</span> +<span class="lineNum"> 229 </span> : : } +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> : : #endif +<span class="lineNum"> 232 </span> : : +<span class="lineNum"> 233 </span> : : /* Take an IP or Subnet/Mask and convert it to mask for later +<span class="lineNum"> 234 </span> : : * comparisons of incoming source IPs against this mask. +<a name="235"><span class="lineNum"> 235 </span> : : */</a> +<span class="lineNum"> 236 </span> : : static int +<span class="lineNum"> 237 </span> :<span class="lineCov"> 18846 : add_int_ent(acc_int_list_t **ilist, const char *ip)</span> +<span class="lineNum"> 238 </span> : : { +<span class="lineNum"> 239 </span> : : char *ndx; +<span class="lineNum"> 240 </span> :<span class="lineCov"> 18846 : char ip_str[MAX_IPV4_STR_LEN] = {0};</span> +<span class="lineNum"> 241 </span> :<span class="lineCov"> 18846 : char ip_mask_str[MAX_IPV4_STR_LEN] = {0};</span> +<span class="lineNum"> 242 </span> : : uint32_t mask; +<span class="lineNum"> 243 </span> :<span class="lineCov"> 18846 : int is_err, mask_len = 0, need_shift = 1;</span> +<span class="lineNum"> 244 </span> : : +<span class="lineNum"> 245 </span> : : struct in_addr in; +<span class="lineNum"> 246 </span> : : struct in_addr mask_in; +<span class="lineNum"> 247 </span> : : +<span class="lineNum"> 248 </span> : : acc_int_list_t *last_sle, *new_sle, *tmp_sle; +<span class="lineNum"> 249 </span> : : +<span class="lineNum"> 250 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 18846 times"> + </span>]:<span class="lineCov"> 18846 : if((new_sle = calloc(1, sizeof(acc_int_list_t))) == NULL)</span> +<span class="lineNum"> 251 </span> : : { +<span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 253 </span> : : &quot;[*] Fatal memory allocation error adding stanza source_list entry&quot; +<span class="lineNum"> 254 </span> : : ); +<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 256 </span> : : } +<span class="lineNum"> 257 </span> : : +<span class="lineNum"> 258 </span> : : /* Convert the IP data into the appropriate IP + (optional) mask +<span class="lineNum"> 259 </span> : : */ +<span class="lineNum"> 260 </span> [<span class="branchCov" title="Branch 0 was taken 451 times"> + </span><span class="branchCov" title="Branch 1 was taken 18395 times"> + </span>]:<span class="lineCov"> 18846 : if(strcasecmp(ip, &quot;ANY&quot;) == 0)</span> +<span class="lineNum"> 261 </span> : : { +<span class="lineNum"> 262 </span> :<span class="lineCov"> 451 : new_sle-&gt;maddr = 0x0;</span> +<span class="lineNum"> 263 </span> :<span class="lineCov"> 451 : new_sle-&gt;mask = 0x0;</span> +<span class="lineNum"> 264 </span> : : } +<span class="lineNum"> 265 </span> : : else +<span class="lineNum"> 266 </span> : : { +<span class="lineNum"> 267 </span> : : /* See if we have a subnet component. If so pull out the IP and +<span class="lineNum"> 268 </span> : : * mask values, then create the final mask value. +<span class="lineNum"> 269 </span> : : */ +<span class="lineNum"> 270 </span> [<span class="branchCov" title="Branch 0 was taken 1616 times"> + </span><span class="branchCov" title="Branch 1 was taken 16779 times"> + </span>]:<span class="lineCov"> 18395 : if((ndx = strchr(ip, '/')) != NULL)</span> +<span class="lineNum"> 271 </span> : : { +<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 1615 times"> + </span>]:<span class="lineCov"> 1616 : if(((ndx-ip)) &gt;= MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 273 </span> : : { +<span class="lineNum"> 274 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR, &quot;[*] Error parsing string to IP&quot;);</span> +<span class="lineNum"> 275 </span> :<span class="lineCov"> 1 : free(new_sle);</span> +<span class="lineNum"> 276 </span> :<span class="lineCov"> 1 : new_sle = NULL;</span> +<span class="lineNum"> 277 </span> :<span class="lineCov"> 1 : return 0;</span> +<span class="lineNum"> 278 </span> : : } +<span class="lineNum"> 279 </span> : : +<span class="lineNum"> 280 </span> :<span class="lineCov"> 1615 : mask_len = strlen(ip) - (ndx-ip+1);</span> +<span class="lineNum"> 281 </span> : : +<span class="lineNum"> 282 </span> [<span class="branchCov" title="Branch 0 was taken 1505 times"> + </span><span class="branchCov" title="Branch 1 was taken 110 times"> + </span>]:<span class="lineCov"> 1615 : if(mask_len &gt; 2)</span> +<span class="lineNum"> 283 </span> : : { +<span class="lineNum"> 284 </span> [<span class="branchCov" title="Branch 0 was taken 1499 times"> + </span><span class="branchCov" title="Branch 1 was taken 6 times"> + </span>]:<span class="lineCov"> 1505 : if(mask_len &gt;= MIN_IPV4_STR_LEN &amp;&amp; mask_len &lt; MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 285 </span> : : { +<span class="lineNum"> 286 </span> : : /* IP formatted mask +<span class="lineNum"> 287 </span> : : */ +<span class="lineNum"> 288 </span> :<span class="lineCov"> 1499 : strlcpy(ip_mask_str, (ip + (ndx-ip) + 1), mask_len+1);</span> +<span class="lineNum"> 289 </span> [<span class="branchCov" title="Branch 1 was taken 3 times"> + </span><span class="branchCov" title="Branch 2 was taken 1496 times"> + </span>]:<span class="lineCov"> 1499 : if(inet_aton(ip_mask_str, &amp;mask_in) == 0)</span> +<span class="lineNum"> 290 </span> : : { +<span class="lineNum"> 291 </span> :<span class="lineCov"> 3 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 292 </span> : : &quot;[*] Fatal error parsing IP mask to int for: %s&quot;, ip_mask_str +<span class="lineNum"> 293 </span> : : ); +<span class="lineNum"> 294 </span> :<span class="lineCov"> 3 : free(new_sle);</span> +<span class="lineNum"> 295 </span> :<span class="lineCov"> 3 : new_sle = NULL;</span> +<span class="lineNum"> 296 </span> :<span class="lineCov"> 3 : return 0;</span> +<span class="lineNum"> 297 </span> : : } +<span class="lineNum"> 298 </span> :<span class="lineCov"> 1496 : mask = ntohl(mask_in.s_addr);</span> +<span class="lineNum"> 299 </span> :<span class="lineCov"> 1496 : need_shift = 0;</span> +<span class="lineNum"> 300 </span> : : } +<span class="lineNum"> 301 </span> : : else +<span class="lineNum"> 302 </span> : : { +<span class="lineNum"> 303 </span> :<span class="lineCov"> 6 : log_msg(LOG_ERR, &quot;[*] Invalid IP mask str '%s'.&quot;, ndx+1);</span> +<span class="lineNum"> 304 </span> :<span class="lineCov"> 6 : free(new_sle);</span> +<span class="lineNum"> 305 </span> :<span class="lineCov"> 6 : new_sle = NULL;</span> +<span class="lineNum"> 306 </span> :<span class="lineCov"> 6 : return 0;</span> +<span class="lineNum"> 307 </span> : : } +<span class="lineNum"> 308 </span> : : } +<span class="lineNum"> 309 </span> : : else +<span class="lineNum"> 310 </span> : : { +<span class="lineNum"> 311 </span> [<span class="branchCov" title="Branch 0 was taken 109 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 110 : if(mask_len &gt; 0)</span> +<span class="lineNum"> 312 </span> : : { +<span class="lineNum"> 313 </span> : : /* CIDR mask +<span class="lineNum"> 314 </span> : : */ +<span class="lineNum"> 315 </span> :<span class="lineCov"> 109 : mask = strtol_wrapper(ndx+1, 1, 32, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 316 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 105 times"> + </span>]:<span class="lineCov"> 109 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 317 </span> : : { +<span class="lineNum"> 318 </span> :<span class="lineCov"> 4 : log_msg(LOG_ERR, &quot;[*] Invalid IP mask str '%s'.&quot;, ndx+1);</span> +<span class="lineNum"> 319 </span> :<span class="lineCov"> 4 : free(new_sle);</span> +<span class="lineNum"> 320 </span> :<span class="lineCov"> 4 : new_sle = NULL;</span> +<span class="lineNum"> 321 </span> :<span class="lineCov"> 4 : return 0;</span> +<span class="lineNum"> 322 </span> : : } +<span class="lineNum"> 323 </span> : : } +<span class="lineNum"> 324 </span> : : else +<span class="lineNum"> 325 </span> : : { +<span class="lineNum"> 326 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR, &quot;[*] Missing mask value.&quot;);</span> +<span class="lineNum"> 327 </span> :<span class="lineCov"> 1 : free(new_sle);</span> +<span class="lineNum"> 328 </span> :<span class="lineCov"> 1 : new_sle = NULL;</span> +<span class="lineNum"> 329 </span> :<span class="lineCov"> 1 : return 0;</span> +<span class="lineNum"> 330 </span> : : } +<span class="lineNum"> 331 </span> : : } +<span class="lineNum"> 332 </span> : : +<span class="lineNum"> 333 </span> :<span class="lineCov"> 1601 : strlcpy(ip_str, ip, (ndx-ip)+1);</span> +<span class="lineNum"> 334 </span> : : } +<span class="lineNum"> 335 </span> : : else +<span class="lineNum"> 336 </span> : : { +<span class="lineNum"> 337 </span> :<span class="lineCov"> 16779 : mask = 32;</span> +<span class="lineNum"> 338 </span> [<span class="branchCov" title="Branch 1 was taken 12 times"> + </span><span class="branchCov" title="Branch 2 was taken 16767 times"> + </span>]:<span class="lineCov"> 16779 : if(strnlen(ip, MAX_IPV4_STR_LEN+1) &gt;= MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 339 </span> : : { +<span class="lineNum"> 340 </span> :<span class="lineCov"> 12 : log_msg(LOG_ERR, &quot;[*] Error parsing string to IP&quot;);</span> +<span class="lineNum"> 341 </span> :<span class="lineCov"> 12 : free(new_sle);</span> +<span class="lineNum"> 342 </span> :<span class="lineCov"> 12 : new_sle = NULL;</span> +<span class="lineNum"> 343 </span> :<span class="lineCov"> 12 : return 0;</span> +<span class="lineNum"> 344 </span> : : } +<span class="lineNum"> 345 </span> :<span class="lineCov"> 16767 : strlcpy(ip_str, ip, sizeof(ip_str));</span> +<span class="lineNum"> 346 </span> : : } +<span class="lineNum"> 347 </span> : : +<span class="lineNum"> 348 </span> [<span class="branchCov" title="Branch 1 was taken 121 times"> + </span><span class="branchCov" title="Branch 2 was taken 18247 times"> + </span>]:<span class="lineCov"> 18368 : if(inet_aton(ip_str, &amp;in) == 0)</span> +<span class="lineNum"> 349 </span> : : { +<span class="lineNum"> 350 </span> :<span class="lineCov"> 121 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 351 </span> : : &quot;[*] Fatal error parsing IP to int for: %s&quot;, ip_str +<span class="lineNum"> 352 </span> : : ); +<span class="lineNum"> 353 </span> : : +<span class="lineNum"> 354 </span> :<span class="lineCov"> 121 : free(new_sle);</span> +<span class="lineNum"> 355 </span> :<span class="lineCov"> 121 : new_sle = NULL;</span> +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> :<span class="lineCov"> 121 : return 0;</span> +<span class="lineNum"> 358 </span> : : } +<span class="lineNum"> 359 </span> : : +<span class="lineNum"> 360 </span> : : /* Store our mask converted from CIDR to a 32-bit value. +<span class="lineNum"> 361 </span> : : */ +<span class="lineNum"> 362 </span> [<span class="branchCov" title="Branch 0 was taken 16651 times"> + </span><span class="branchCov" title="Branch 1 was taken 1596 times"> + </span>]:<span class="lineCov"> 18247 : if(mask == 32)</span> +<span class="lineNum"> 363 </span> :<span class="lineCov"> 16651 : new_sle-&gt;mask = 0xFFFFFFFF;</span> +<span class="lineNum"> 364 </span>[<span class="branchCov" title="Branch 0 was taken 104 times"> + </span><span class="branchCov" title="Branch 1 was taken 1492 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 104 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1596 : else if(need_shift &amp;&amp; (mask &gt; 0 &amp;&amp; mask &lt; 32))</span> +<span class="lineNum"> 365 </span> :<span class="lineCov"> 104 : new_sle-&gt;mask = (0xFFFFFFFF &lt;&lt; (32 - mask));</span> +<span class="lineNum"> 366 </span> : : else +<span class="lineNum"> 367 </span> :<span class="lineCov"> 1492 : new_sle-&gt;mask = mask;</span> +<span class="lineNum"> 368 </span> : : +<span class="lineNum"> 369 </span> : : /* Store our masked address for comparisons with future incoming +<span class="lineNum"> 370 </span> : : * packets. +<span class="lineNum"> 371 </span> : : */ +<span class="lineNum"> 372 </span> :<span class="lineCov"> 18247 : new_sle-&gt;maddr = ntohl(in.s_addr) &amp; new_sle-&gt;mask;</span> +<span class="lineNum"> 373 </span> : : } +<span class="lineNum"> 374 </span> : : +<span class="lineNum"> 375 </span> : : /* If this is not the first entry, we walk our pointer to the +<span class="lineNum"> 376 </span> : : * end of the list. +<span class="lineNum"> 377 </span> : : */ +<span class="lineNum"> 378 </span> [<span class="branchCov" title="Branch 0 was taken 17718 times"> + </span><span class="branchCov" title="Branch 1 was taken 980 times"> + </span>]:<span class="lineCov"> 18698 : if(*ilist == NULL)</span> +<span class="lineNum"> 379 </span> : : { +<span class="lineNum"> 380 </span> :<span class="lineCov"> 18698 : *ilist = new_sle;</span> +<span class="lineNum"> 381 </span> : : } +<span class="lineNum"> 382 </span> : : else +<span class="lineNum"> 383 </span> : : { +<span class="lineNum"> 384 </span> : : tmp_sle = *ilist; +<span class="lineNum"> 385 </span> : : +<span class="lineNum"> 386 </span> : : do { +<span class="lineNum"> 387 </span> :<span class="lineCov"> 2784 : last_sle = tmp_sle;</span> +<span class="lineNum"> 388 </span> [<span class="branchCov" title="Branch 0 was taken 1804 times"> + </span><span class="branchCov" title="Branch 1 was taken 980 times"> + </span>]:<span class="lineCov"> 2784 : } while((tmp_sle = tmp_sle-&gt;next));</span> +<span class="lineNum"> 389 </span> : : +<span class="lineNum"> 390 </span> :<span class="lineCov"> 980 : last_sle-&gt;next = new_sle;</span> +<span class="lineNum"> 391 </span> : : } +<span class="lineNum"> 392 </span> : : +<span class="lineNum"> 393 </span> : : return 1; +<span class="lineNum"> 394 </span> : : } +<span class="lineNum"> 395 </span> : : +<span class="lineNum"> 396 </span> : : /* Expand the access SOURCE string to a list of masks. +<a name="397"><span class="lineNum"> 397 </span> : : */</a> +<span class="lineNum"> 398 </span> : : static int +<span class="lineNum"> 399 </span> :<span class="lineCov"> 17811 : expand_acc_int_list(acc_int_list_t **ilist, char *ip)</span> +<span class="lineNum"> 400 </span> : : { +<span class="lineNum"> 401 </span> : : char *ndx, *start; +<span class="lineNum"> 402 </span> :<span class="lineCov"> 17811 : char buf[ACCESS_BUF_LEN] = {0};</span> +<span class="lineNum"> 403 </span> :<span class="lineCov"> 17811 : int res = 1;</span> +<span class="lineNum"> 404 </span> : : +<span class="lineNum"> 405 </span> :<span class="lineCov"> 17811 : start = ip;</span> +<span class="lineNum"> 406 </span> : : +<span class="lineNum"> 407 </span> [<span class="branchCov" title="Branch 0 was taken 190955 times"> + </span><span class="branchCov" title="Branch 1 was taken 17798 times"> + </span>]:<span class="lineCov"> 208753 : for(ndx = start; *ndx; ndx++)</span> +<span class="lineNum"> 408 </span> : : { +<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 1053 times"> + </span><span class="branchCov" title="Branch 1 was taken 189902 times"> + </span>]:<span class="lineCov"> 190955 : if(*ndx == ',')</span> +<span class="lineNum"> 410 </span> : : { +<span class="lineNum"> 411 </span> : : /* Skip over any leading whitespace. +<span class="lineNum"> 412 </span> : : */ +<span class="lineNum"> 413 </span> [<span class="branchCov" title="Branch 1 was taken 4118 times"> + </span><span class="branchCov" title="Branch 2 was taken 1053 times"> + </span>]:<span class="lineCov"> 5171 : while(isspace(*start))</span> +<span class="lineNum"> 414 </span> :<span class="lineCov"> 4118 : start++;</span> +<span class="lineNum"> 415 </span> : : +<span class="lineNum"> 416 </span> [<span class="branchCov" title="Branch 0 was taken 1052 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1053 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> +<span class="lineNum"> 417 </span> : : return 0; +<span class="lineNum"> 418 </span> : : +<span class="lineNum"> 419 </span> :<span class="lineCov"> 1052 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 420 </span> : : +<span class="lineNum"> 421 </span> :<span class="lineCov"> 1052 : res = add_int_ent(ilist, buf);</span> +<span class="lineNum"> 422 </span> [<span class="branchCov" title="Branch 0 was taken 12 times"> + </span><span class="branchCov" title="Branch 1 was taken 1040 times"> + </span>]:<span class="lineCov"> 1052 : if(res == 0)</span> +<span class="lineNum"> 423 </span> :<span class="lineCov"> 12 : return res;</span> +<span class="lineNum"> 424 </span> : : +<span class="lineNum"> 425 </span> :<span class="lineCov"> 1040 : start = ndx+1;</span> +<span class="lineNum"> 426 </span> : : } +<span class="lineNum"> 427 </span> : : } +<span class="lineNum"> 428 </span> : : +<span class="lineNum"> 429 </span> : : /* Skip over any leading whitespace (once again for the last in the list). +<span class="lineNum"> 430 </span> : : */ +<span class="lineNum"> 431 </span> [<span class="branchCov" title="Branch 1 was taken 201 times"> + </span><span class="branchCov" title="Branch 2 was taken 17798 times"> + </span>]:<span class="lineCov"> 17999 : while(isspace(*start))</span> +<span class="lineNum"> 432 </span> :<span class="lineCov"> 201 : start++;</span> +<span class="lineNum"> 433 </span> : : +<span class="lineNum"> 434 </span> [<span class="branchCov" title="Branch 0 was taken 17794 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 17798 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> +<span class="lineNum"> 435 </span> : : return 0; +<span class="lineNum"> 436 </span> : : +<span class="lineNum"> 437 </span> :<span class="lineCov"> 17794 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 438 </span> : : +<span class="lineNum"> 439 </span> :<span class="lineCov"> 17794 : res = add_int_ent(ilist, buf);</span> +<span class="lineNum"> 440 </span> : : +<span class="lineNum"> 441 </span> :<span class="lineCov"> 17794 : return res;</span> +<span class="lineNum"> 442 </span> : : } +<a name="443"><span class="lineNum"> 443 </span> : : </a> +<span class="lineNum"> 444 </span> : : static int +<span class="lineNum"> 445 </span> :<span class="lineCov"> 80 : parse_proto_and_port(char *pstr, int *proto, int *port)</span> +<span class="lineNum"> 446 </span> : : { +<span class="lineNum"> 447 </span> : : char *ndx; +<span class="lineNum"> 448 </span> :<span class="lineCov"> 80 : char proto_str[ACCESS_BUF_LEN] = {0};</span> +<span class="lineNum"> 449 </span> : : int is_err; +<span class="lineNum"> 450 </span> : : +<span class="lineNum"> 451 </span> : : /* Parse the string into its components. +<span class="lineNum"> 452 </span> : : */ +<span class="lineNum"> 453 </span> [<span class="branchCov" title="Branch 0 was taken 36 times"> + </span><span class="branchCov" title="Branch 1 was taken 44 times"> + </span>]:<span class="lineCov"> 80 : if((ndx = strchr(pstr, '/')) == NULL)</span> +<span class="lineNum"> 454 </span> : : { +<span class="lineNum"> 455 </span> :<span class="lineCov"> 36 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 456 </span> : : &quot;[*] Parse error on access port entry: %s&quot;, pstr); +<span class="lineNum"> 457 </span> : : +<span class="lineNum"> 458 </span> :<span class="lineCov"> 36 : return(-1);</span> +<span class="lineNum"> 459 </span> : : } +<span class="lineNum"> 460 </span> : : +<span class="lineNum"> 461 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 44 times"> + </span>]:<span class="lineCov"> 44 : if(((ndx - pstr)+1) &gt;= ACCESS_BUF_LEN)</span> +<span class="lineNum"> 462 </span> : : { +<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 464 </span> : : &quot;[*] Parse error on access port entry: %s&quot;, pstr); +<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 466 </span> : : } +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> :<span class="lineCov"> 44 : strlcpy(proto_str, pstr, (ndx - pstr)+1);</span> +<span class="lineNum"> 469 </span> : : +<span class="lineNum"> 470 </span> :<span class="lineCov"> 44 : *port = strtol_wrapper(ndx+1, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 471 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 43 times"> + </span>]:<span class="lineCov"> 44 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 472 </span> : : { +<span class="lineNum"> 473 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 474 </span> : : &quot;[*] Invalid port '%s' in access request, must be in [%d,%d]&quot;, +<span class="lineNum"> 475 </span> : : pstr, 0, MAX_PORT); +<span class="lineNum"> 476 </span> :<span class="lineCov"> 1 : return(-1);</span> +<span class="lineNum"> 477 </span> : : } +<span class="lineNum"> 478 </span> : : +<span class="lineNum"> 479 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 43 times"> + </span>]:<span class="lineCov"> 43 : if(strcasecmp(proto_str, &quot;tcp&quot;) == 0)</span> +<span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : *proto = PROTO_TCP;</span> +<span class="lineNum"> 481 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 43 times"> + </span>]:<span class="lineCov"> 43 : else if(strcasecmp(proto_str, &quot;udp&quot;) == 0)</span> +<span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : *proto = PROTO_UDP;</span> +<span class="lineNum"> 483 </span> : : else +<span class="lineNum"> 484 </span> : : { +<span class="lineNum"> 485 </span> :<span class="lineCov"> 43 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 486 </span> : : &quot;[*] Invalid protocol in access port entry: %s&quot;, pstr); +<span class="lineNum"> 487 </span> :<span class="lineCov"> 43 : return(-1);</span> +<span class="lineNum"> 488 </span> : : } +<span class="lineNum"> 489 </span> : : +<span class="lineNum"> 490 </span> : : return(0); +<span class="lineNum"> 491 </span> : : } +<span class="lineNum"> 492 </span> : : +<span class="lineNum"> 493 </span> : : /* Take a proto/port string and convert it to appropriate integer values +<span class="lineNum"> 494 </span> : : * for comparisons of incoming SPA requests. +<a name="495"><span class="lineNum"> 495 </span> : : */</a> +<span class="lineNum"> 496 </span> : : static int +<span class="lineNum"> 497 </span> :<span class="lineCov"> 80 : add_port_list_ent(acc_port_list_t **plist, char *port_str)</span> +<span class="lineNum"> 498 </span> : : { +<span class="lineNum"> 499 </span> : : int proto_int, port; +<span class="lineNum"> 500 </span> : : +<span class="lineNum"> 501 </span> : : acc_port_list_t *last_plist, *new_plist, *tmp_plist; +<span class="lineNum"> 502 </span> : : +<span class="lineNum"> 503 </span> : : /* Parse the string into its components and continue only if there +<span class="lineNum"> 504 </span> : : * are no problems with the incoming string. +<span class="lineNum"> 505 </span> : : */ +<span class="lineNum"> 506 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 80 times"> + </span>]:<span class="lineCov"> 80 : if(parse_proto_and_port(port_str, &amp;proto_int, &amp;port) != 0)</span> +<span class="lineNum"> 507 </span> : : return 0; +<span class="lineNum"> 508 </span> : : +<span class="lineNum"> 509 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((new_plist = calloc(1, sizeof(acc_port_list_t))) == NULL)</span> +<span class="lineNum"> 510 </span> : : { +<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 512 </span> : : &quot;[*] Fatal memory allocation error adding stanza port_list entry&quot; +<span class="lineNum"> 513 </span> : : ); +<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> +<span class="lineNum"> 515 </span> : : } +<span class="lineNum"> 516 </span> : : +<span class="lineNum"> 517 </span> : : /* If this is not the first entry, we walk our pointer to the +<span class="lineNum"> 518 </span> : : * end of the list. +<span class="lineNum"> 519 </span> : : */ +<span class="lineNum"> 520 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*plist == NULL)</span> +<span class="lineNum"> 521 </span> : : { +<span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : *plist = new_plist;</span> +<span class="lineNum"> 523 </span> : : } +<span class="lineNum"> 524 </span> : : else +<span class="lineNum"> 525 </span> : : { +<span class="lineNum"> 526 </span> : : tmp_plist = *plist; +<span class="lineNum"> 527 </span> : : +<span class="lineNum"> 528 </span> : : do { +<span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : last_plist = tmp_plist;</span> +<span class="lineNum"> 530 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while((tmp_plist = tmp_plist-&gt;next));</span> +<span class="lineNum"> 531 </span> : : +<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : last_plist-&gt;next = new_plist;</span> +<span class="lineNum"> 533 </span> : : } +<span class="lineNum"> 534 </span> : : +<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : new_plist-&gt;proto = proto_int;</span> +<span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : new_plist-&gt;port = port;</span> +<span class="lineNum"> 537 </span> : : +<span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : return 1;</span> +<span class="lineNum"> 539 </span> : : } +<span class="lineNum"> 540 </span> : : +<span class="lineNum"> 541 </span> : : /* Add a string list entry to the given acc_string_list. +<a name="542"><span class="lineNum"> 542 </span> : : */</a> +<span class="lineNum"> 543 </span> : : static int +<span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : add_string_list_ent(acc_string_list_t **stlist, const char *str_str)</span> +<span class="lineNum"> 545 </span> : : { +<span class="lineNum"> 546 </span> : : acc_string_list_t *last_stlist, *new_stlist, *tmp_stlist; +<span class="lineNum"> 547 </span> : : +<span class="lineNum"> 548 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((new_stlist = calloc(1, sizeof(acc_string_list_t))) == NULL)</span> +<span class="lineNum"> 549 </span> : : { +<span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 551 </span> : : &quot;[*] Fatal memory allocation error creating string list entry&quot; +<span class="lineNum"> 552 </span> : : ); +<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> +<span class="lineNum"> 554 </span> : : } +<span class="lineNum"> 555 </span> : : +<span class="lineNum"> 556 </span> : : /* If this is not the first entry, we walk our pointer to the +<span class="lineNum"> 557 </span> : : * end of the list. +<span class="lineNum"> 558 </span> : : */ +<span class="lineNum"> 559 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*stlist == NULL)</span> +<span class="lineNum"> 560 </span> : : { +<span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : *stlist = new_stlist;</span> +<span class="lineNum"> 562 </span> : : } +<span class="lineNum"> 563 </span> : : else +<span class="lineNum"> 564 </span> : : { +<span class="lineNum"> 565 </span> : : tmp_stlist = *stlist; +<span class="lineNum"> 566 </span> : : +<span class="lineNum"> 567 </span> : : do { +<span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : last_stlist = tmp_stlist;</span> +<span class="lineNum"> 569 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while((tmp_stlist = tmp_stlist-&gt;next));</span> +<span class="lineNum"> 570 </span> : : +<span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : last_stlist-&gt;next = new_stlist;</span> +<span class="lineNum"> 572 </span> : : } +<span class="lineNum"> 573 </span> : : +<span class="lineNum"> 574 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(new_stlist-&gt;str != NULL)</span> +<span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : free(new_stlist-&gt;str);</span> +<span class="lineNum"> 576 </span> : : +<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : new_stlist-&gt;str = strdup(str_str);</span> +<span class="lineNum"> 578 </span> : : +<span class="lineNum"> 579 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(new_stlist-&gt;str == NULL)</span> +<span class="lineNum"> 580 </span> : : { +<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 582 </span> : : &quot;[*] Fatal memory allocation error adding string list entry item&quot; +<span class="lineNum"> 583 </span> : : ); +<span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> +<span class="lineNum"> 585 </span> : : } +<span class="lineNum"> 586 </span> : : return SUCCESS; +<span class="lineNum"> 587 </span> : : } +<span class="lineNum"> 588 </span> : : +<span class="lineNum"> 589 </span> : : /* Expand a proto/port access string to a list of access proto-port struct. +<a name="590"><span class="lineNum"> 590 </span> : : */</a> +<span class="lineNum"> 591 </span> : : int +<span class="lineNum"> 592 </span> :<span class="lineCov"> 83 : expand_acc_port_list(acc_port_list_t **plist, char *plist_str)</span> +<span class="lineNum"> 593 </span> : : { +<span class="lineNum"> 594 </span> : : char *ndx, *start; +<span class="lineNum"> 595 </span> :<span class="lineCov"> 83 : char buf[ACCESS_BUF_LEN] = {0};</span> +<span class="lineNum"> 596 </span> : : +<span class="lineNum"> 597 </span> :<span class="lineCov"> 83 : start = plist_str;</span> +<span class="lineNum"> 598 </span> : : +<span class="lineNum"> 599 </span> [<span class="branchCov" title="Branch 0 was taken 547 times"> + </span><span class="branchCov" title="Branch 1 was taken 81 times"> + </span>]:<span class="lineCov"> 628 : for(ndx = start; *ndx != '\0'; ndx++)</span> +<span class="lineNum"> 600 </span> : : { +<span class="lineNum"> 601 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 545 times"> + </span>]:<span class="lineCov"> 547 : if(*ndx == ',')</span> +<span class="lineNum"> 602 </span> : : { +<span class="lineNum"> 603 </span> : : /* Skip over any leading whitespace. +<span class="lineNum"> 604 </span> : : */ +<span class="lineNum"> 605 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : while(isspace(*start))</span> +<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : start++;</span> +<span class="lineNum"> 607 </span> : : +<span class="lineNum"> 608 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 2 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> +<span class="lineNum"> 609 </span> : : return 0; +<span class="lineNum"> 610 </span> : : +<span class="lineNum"> 611 </span> :<span class="lineCov"> 1 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 612 </span> : : +<span class="lineNum"> 613 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : if(add_port_list_ent(plist, buf) == 0)</span> +<span class="lineNum"> 614 </span> : : return 0; +<span class="lineNum"> 615 </span> : : +<span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : start = ndx+1;</span> +<span class="lineNum"> 617 </span> : : } +<span class="lineNum"> 618 </span> : : } +<span class="lineNum"> 619 </span> : : +<span class="lineNum"> 620 </span> : : /* Skip over any leading whitespace (once again for the last in the list). +<span class="lineNum"> 621 </span> : : */ +<span class="lineNum"> 622 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 81 times"> + </span>]:<span class="lineCov"> 81 : while(isspace(*start))</span> +<span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : start++;</span> +<span class="lineNum"> 624 </span> : : +<span class="lineNum"> 625 </span> [<span class="branchCov" title="Branch 0 was taken 79 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 81 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> +<span class="lineNum"> 626 </span> : : return 0; +<span class="lineNum"> 627 </span> : : +<span class="lineNum"> 628 </span> :<span class="lineCov"> 79 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 629 </span> : : +<span class="lineNum"> 630 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 79 times"> + </span>]:<span class="lineCov"> 79 : if(add_port_list_ent(plist, buf) == 0)</span> +<span class="lineNum"> 631 </span> : : return 0; +<span class="lineNum"> 632 </span> : : +<span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : return 1;</span> +<span class="lineNum"> 634 </span> : : } +<span class="lineNum"> 635 </span> : : +<span class="lineNum"> 636 </span> : : /* Expand a comma-separated string into a simple acc_string_list. +<a name="637"><span class="lineNum"> 637 </span> : : */</a> +<span class="lineNum"> 638 </span> : : static int +<span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : expand_acc_string_list(acc_string_list_t **stlist, char *stlist_str)</span> +<span class="lineNum"> 640 </span> : : { +<span class="lineNum"> 641 </span> : : char *ndx, *start; +<span class="lineNum"> 642 </span> :<span class="lineNoCov"> 0 : char buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 643 </span> : : +<span class="lineNum"> 644 </span> :<span class="lineNoCov"> 0 : start = stlist_str;</span> +<span class="lineNum"> 645 </span> : : +<span class="lineNum"> 646 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(ndx = start; *ndx; ndx++)</span> +<span class="lineNum"> 647 </span> : : { +<span class="lineNum"> 648 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*ndx == ',')</span> +<span class="lineNum"> 649 </span> : : { +<span class="lineNum"> 650 </span> : : /* Skip over any leading whitespace. +<span class="lineNum"> 651 </span> : : */ +<span class="lineNum"> 652 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(isspace(*start))</span> +<span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : start++;</span> +<span class="lineNum"> 654 </span> : : +<span class="lineNum"> 655 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(((ndx-start)+1) &gt;= MAX_LINE_LEN)</span> +<span class="lineNum"> 656 </span> : : return FATAL_ERR; +<span class="lineNum"> 657 </span> : : +<span class="lineNum"> 658 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 659 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_string_list_ent(stlist, buf) != SUCCESS)</span> +<span class="lineNum"> 660 </span> : : return FATAL_ERR; +<span class="lineNum"> 661 </span> : : +<span class="lineNum"> 662 </span> :<span class="lineNoCov"> 0 : start = ndx+1;</span> +<span class="lineNum"> 663 </span> : : } +<span class="lineNum"> 664 </span> : : } +<span class="lineNum"> 665 </span> : : +<span class="lineNum"> 666 </span> : : /* Skip over any leading whitespace (once again for the last in the list). +<span class="lineNum"> 667 </span> : : */ +<span class="lineNum"> 668 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(isspace(*start))</span> +<span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : start++;</span> +<span class="lineNum"> 670 </span> : : +<span class="lineNum"> 671 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(((ndx-start)+1) &gt;= MAX_LINE_LEN)</span> +<span class="lineNum"> 672 </span> : : return FATAL_ERR; +<span class="lineNum"> 673 </span> : : +<span class="lineNum"> 674 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 675 </span> : : +<span class="lineNum"> 676 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_string_list_ent(stlist, buf) != SUCCESS)</span> +<span class="lineNum"> 677 </span> : : return FATAL_ERR; +<span class="lineNum"> 678 </span> : : +<span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : return SUCCESS;</span> +<span class="lineNum"> 680 </span> : : } +<span class="lineNum"> 681 </span> : : +<span class="lineNum"> 682 </span> : : /* Free the acc source_list +<a name="683"><span class="lineNum"> 683 </span> : : */</a> +<span class="lineNum"> 684 </span> : : static void +<span class="lineNum"> 685 </span> :<span class="lineCov"> 23117 : free_acc_int_list(acc_int_list_t *sle)</span> +<span class="lineNum"> 686 </span> : : { +<span class="lineNum"> 687 </span> : : acc_int_list_t *last_sle; +<span class="lineNum"> 688 </span> : : +<span class="lineNum"> 689 </span> [<span class="branchCov" title="Branch 0 was taken 18698 times"> + </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 41815 : while(sle != NULL)</span> +<span class="lineNum"> 690 </span> : : { +<span class="lineNum"> 691 </span> :<span class="lineCov"> 18698 : last_sle = sle;</span> +<span class="lineNum"> 692 </span> :<span class="lineCov"> 18698 : sle = last_sle-&gt;next;</span> +<span class="lineNum"> 693 </span> : : +<span class="lineNum"> 694 </span> :<span class="lineCov"> 18698 : free(last_sle);</span> +<span class="lineNum"> 695 </span> : : } +<span class="lineNum"> 696 </span> :<span class="lineCov"> 23117 : }</span> +<span class="lineNum"> 697 </span> : : +<span class="lineNum"> 698 </span> : : /* Free a port_list +<a name="699"><span class="lineNum"> 699 </span> : : */</a> +<span class="lineNum"> 700 </span> : : void +<span class="lineNum"> 701 </span> :<span class="lineCov"> 1761 : free_acc_port_list(acc_port_list_t *ple)</span> +<span class="lineNum"> 702 </span> : : { +<span class="lineNum"> 703 </span> : : acc_port_list_t *last_ple; +<span class="lineNum"> 704 </span> : : +<span class="lineNum"> 705 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1761 times"> + </span>]:<span class="lineCov"> 1761 : while(ple != NULL)</span> +<span class="lineNum"> 706 </span> : : { +<span class="lineNum"> 707 </span> :<span class="lineNoCov"> 0 : last_ple = ple;</span> +<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : ple = last_ple-&gt;next;</span> +<span class="lineNum"> 709 </span> : : +<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : free(last_ple);</span> +<span class="lineNum"> 711 </span> : : } +<span class="lineNum"> 712 </span> :<span class="lineCov"> 1761 : }</span> +<span class="lineNum"> 713 </span> : : +<span class="lineNum"> 714 </span> : : /* Free a string_list +<a name="715"><span class="lineNum"> 715 </span> : : */</a> +<span class="lineNum"> 716 </span> : : static void +<span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : free_acc_string_list(acc_string_list_t *stl)</span> +<span class="lineNum"> 718 </span> : : { +<span class="lineNum"> 719 </span> : : acc_string_list_t *last_stl; +<span class="lineNum"> 720 </span> : : +<span class="lineNum"> 721 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(stl != NULL)</span> +<span class="lineNum"> 722 </span> : : { +<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : last_stl = stl;</span> +<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : stl = last_stl-&gt;next;</span> +<span class="lineNum"> 725 </span> : : +<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : free(last_stl-&gt;str);</span> +<span class="lineNum"> 727 </span> :<span class="lineNoCov"> 0 : free(last_stl);</span> +<span class="lineNum"> 728 </span> : : } +<span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : }</span> +<a name="730"><span class="lineNum"> 730 </span> : : </a> +<span class="lineNum"> 731 </span> : : static void +<span class="lineNum"> 732 </span> :<span class="lineCov"> 24742 : zero_buf_wrapper(char *buf, int len)</span> +<span class="lineNum"> 733 </span> : : { +<span class="lineNum"> 734 </span> : : +<span class="lineNum"> 735 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 24742 times"> + </span>]:<span class="lineCov"> 24742 : if(zero_buf(buf, len) != FKO_SUCCESS)</span> +<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 737 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); +<span class="lineNum"> 738 </span> : : +<span class="lineNum"> 739 </span> :<span class="lineCov"> 24742 : return;</span> +<span class="lineNum"> 740 </span> : : } +<span class="lineNum"> 741 </span> : : +<span class="lineNum"> 742 </span> : : /* Free any allocated content of an access stanza. +<span class="lineNum"> 743 </span> : : * +<span class="lineNum"> 744 </span> : : * NOTE: If a new access.conf parameter is created, and it is a string +<span class="lineNum"> 745 </span> : : * value, it also needs to be added to the list of items to check +<span class="lineNum"> 746 </span> : : * and free below. +<a name="747"><span class="lineNum"> 747 </span> : : */</a> +<span class="lineNum"> 748 </span> : : static void +<span class="lineNum"> 749 </span> :<span class="lineCov"> 23117 : free_acc_stanza_data(acc_stanza_t *acc)</span> +<span class="lineNum"> 750 </span> : : { +<span class="lineNum"> 751 </span> : : +<span class="lineNum"> 752 </span> [<span class="branchCov" title="Branch 0 was taken 23117 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 23117 : if(acc-&gt;source != NULL)</span> +<span class="lineNum"> 753 </span> : : { +<span class="lineNum"> 754 </span> :<span class="lineCov"> 23117 : free(acc-&gt;source);</span> +<span class="lineNum"> 755 </span> :<span class="lineCov"> 23117 : free_acc_int_list(acc-&gt;source_list);</span> +<span class="lineNum"> 756 </span> : : } +<span class="lineNum"> 757 </span> : : +<span class="lineNum"> 758 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;destination != NULL)</span> +<span class="lineNum"> 759 </span> : : { +<span class="lineNum"> 760 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;destination);</span> +<span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : free_acc_int_list(acc-&gt;destination_list);</span> +<span class="lineNum"> 762 </span> : : } +<span class="lineNum"> 763 </span> : : +<span class="lineNum"> 764 </span> [<span class="branchCov" title="Branch 0 was taken 1173 times"> + </span><span class="branchCov" title="Branch 1 was taken 21944 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;open_ports != NULL)</span> +<span class="lineNum"> 765 </span> : : { +<span class="lineNum"> 766 </span> :<span class="lineCov"> 1173 : free(acc-&gt;open_ports);</span> +<span class="lineNum"> 767 </span> :<span class="lineCov"> 1173 : free_acc_port_list(acc-&gt;oport_list);</span> +<span class="lineNum"> 768 </span> : : } +<span class="lineNum"> 769 </span> : : +<span class="lineNum"> 770 </span> [<span class="branchCov" title="Branch 0 was taken 588 times"> + </span><span class="branchCov" title="Branch 1 was taken 22529 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;restrict_ports != NULL)</span> +<span class="lineNum"> 771 </span> : : { +<span class="lineNum"> 772 </span> :<span class="lineCov"> 588 : free(acc-&gt;restrict_ports);</span> +<span class="lineNum"> 773 </span> :<span class="lineCov"> 588 : free_acc_port_list(acc-&gt;rport_list);</span> +<span class="lineNum"> 774 </span> : : } +<span class="lineNum"> 775 </span> : : +<span class="lineNum"> 776 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;force_nat_ip != NULL)</span> +<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;force_nat_ip);</span> +<span class="lineNum"> 778 </span> : : +<span class="lineNum"> 779 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;force_snat_ip != NULL)</span> +<span class="lineNum"> 780 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;force_snat_ip);</span> +<span class="lineNum"> 781 </span> : : +<span class="lineNum"> 782 </span> [<span class="branchCov" title="Branch 0 was taken 23017 times"> + </span><span class="branchCov" title="Branch 1 was taken 100 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;key != NULL)</span> +<span class="lineNum"> 783 </span> : : { +<span class="lineNum"> 784 </span> :<span class="lineCov"> 23017 : zero_buf_wrapper(acc-&gt;key, acc-&gt;key_len);</span> +<span class="lineNum"> 785 </span> :<span class="lineCov"> 23017 : free(acc-&gt;key);</span> +<span class="lineNum"> 786 </span> : : } +<span class="lineNum"> 787 </span> : : +<span class="lineNum"> 788 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;key_base64 != NULL)</span> +<span class="lineNum"> 789 </span> : : { +<span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : zero_buf_wrapper(acc-&gt;key_base64, strlen(acc-&gt;key_base64));</span> +<span class="lineNum"> 791 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;key_base64);</span> +<span class="lineNum"> 792 </span> : : } +<span class="lineNum"> 793 </span> : : +<span class="lineNum"> 794 </span> [<span class="branchCov" title="Branch 0 was taken 1725 times"> + </span><span class="branchCov" title="Branch 1 was taken 21392 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;hmac_key != NULL)</span> +<span class="lineNum"> 795 </span> : : { +<span class="lineNum"> 796 </span> :<span class="lineCov"> 1725 : zero_buf_wrapper(acc-&gt;hmac_key, acc-&gt;hmac_key_len);</span> +<span class="lineNum"> 797 </span> :<span class="lineCov"> 1725 : free(acc-&gt;hmac_key);</span> +<span class="lineNum"> 798 </span> : : } +<span class="lineNum"> 799 </span> : : +<span class="lineNum"> 800 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;hmac_key_base64 != NULL)</span> +<span class="lineNum"> 801 </span> : : { +<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : zero_buf_wrapper(acc-&gt;hmac_key_base64, strlen(acc-&gt;hmac_key_base64));</span> +<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;hmac_key_base64);</span> +<span class="lineNum"> 804 </span> : : } +<span class="lineNum"> 805 </span> : : +<span class="lineNum"> 806 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;cmd_exec_user != NULL)</span> +<span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;cmd_exec_user);</span> +<span class="lineNum"> 808 </span> : : +<span class="lineNum"> 809 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;cmd_exec_group != NULL)</span> +<span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;cmd_exec_group);</span> +<span class="lineNum"> 811 </span> : : +<span class="lineNum"> 812 </span> [<span class="branchCov" title="Branch 0 was taken 391 times"> + </span><span class="branchCov" title="Branch 1 was taken 22726 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;require_username != NULL)</span> +<span class="lineNum"> 813 </span> :<span class="lineCov"> 391 : free(acc-&gt;require_username);</span> +<span class="lineNum"> 814 </span> : : +<span class="lineNum"> 815 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_home_dir != NULL)</span> +<span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_home_dir);</span> +<span class="lineNum"> 817 </span> : : +<span class="lineNum"> 818 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_exe != NULL)</span> +<span class="lineNum"> 819 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_exe);</span> +<span class="lineNum"> 820 </span> : : +<span class="lineNum"> 821 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_decrypt_id != NULL)</span> +<span class="lineNum"> 822 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_decrypt_id);</span> +<span class="lineNum"> 823 </span> : : +<span class="lineNum"> 824 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_decrypt_pw != NULL)</span> +<span class="lineNum"> 825 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_decrypt_pw);</span> +<span class="lineNum"> 826 </span> : : +<span class="lineNum"> 827 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_remote_id != NULL)</span> +<span class="lineNum"> 828 </span> : : { +<span class="lineNum"> 829 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_remote_id);</span> +<span class="lineNum"> 830 </span> :<span class="lineNoCov"> 0 : free_acc_string_list(acc-&gt;gpg_remote_id_list);</span> +<span class="lineNum"> 831 </span> : : } +<span class="lineNum"> 832 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_remote_fpr != NULL)</span> +<span class="lineNum"> 833 </span> : : { +<span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_remote_fpr);</span> +<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : free_acc_string_list(acc-&gt;gpg_remote_fpr_list);</span> +<span class="lineNum"> 836 </span> : : } +<span class="lineNum"> 837 </span> :<span class="lineCov"> 23117 : return;</span> +<span class="lineNum"> 838 </span> : : } +<span class="lineNum"> 839 </span> : : +<span class="lineNum"> 840 </span> : : /* Expand any access entries that may be multi-value. +<a name="841"><span class="lineNum"> 841 </span> : : */</a> +<span class="lineNum"> 842 </span> : : static void +<span class="lineNum"> 843 </span> :<span class="lineCov"> 485 : expand_acc_ent_lists(fko_srv_options_t *opts)</span> +<span class="lineNum"> 844 </span> : : { +<span class="lineNum"> 845 </span> :<span class="lineCov"> 485 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> +<span class="lineNum"> 846 </span> : : +<span class="lineNum"> 847 </span> : : /* We need to do this for each stanza. +<span class="lineNum"> 848 </span> : : */ +<span class="lineNum"> 849 </span> [<span class="branchCov" title="Branch 0 was taken 17811 times"> + </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 18060 : while(acc)</span> +<span class="lineNum"> 850 </span> : : { +<span class="lineNum"> 851 </span> : : /* Expand the source string to 32-bit integer IP + masks for each entry. +<span class="lineNum"> 852 </span> : : */ +<span class="lineNum"> 853 </span> [<span class="branchCov" title="Branch 1 was taken 153 times"> + </span><span class="branchCov" title="Branch 2 was taken 17658 times"> + </span>]:<span class="lineCov"> 17811 : if(expand_acc_int_list(&amp;(acc-&gt;source_list), acc-&gt;source) == 0)</span> +<span class="lineNum"> 854 </span> : : { +<span class="lineNum"> 855 </span> :<span class="lineCov"> 153 : log_msg(LOG_ERR, &quot;[*] Fatal invalid SOURCE in access stanza&quot;);</span> +<span class="lineNum"> 856 </span> :<span class="lineCov"> 153 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 857 </span> : : } +<span class="lineNum"> 858 </span> : : +<span class="lineNum"> 859 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 17658 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 17658 : if(acc-&gt;destination != NULL &amp;&amp; strlen(acc-&gt;destination))</span> +<span class="lineNum"> 860 </span> : : { +<span class="lineNum"> 861 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_int_list(&amp;(acc-&gt;destination_list), acc-&gt;destination) == 0)</span> +<span class="lineNum"> 862 </span> : : { +<span class="lineNum"> 863 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal invalid DESTINATION in access stanza&quot;);</span> +<span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 865 </span> : : } +<span class="lineNum"> 866 </span> : : } +<span class="lineNum"> 867 </span> : : +<span class="lineNum"> 868 </span> : : /* Now expand the open_ports string. +<span class="lineNum"> 869 </span> : : */ +<span class="lineNum"> 870 </span>[<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchCov" title="Branch 1 was taken 17591 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 17658 : if(acc-&gt;open_ports != NULL &amp;&amp; strlen(acc-&gt;open_ports))</span> +<span class="lineNum"> 871 </span> : : { +<span class="lineNum"> 872 </span> [<span class="branchCov" title="Branch 1 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 67 : if(expand_acc_port_list(&amp;(acc-&gt;oport_list), acc-&gt;open_ports) == 0)</span> +<span class="lineNum"> 873 </span> : : { +<span class="lineNum"> 874 </span> :<span class="lineCov"> 67 : log_msg(LOG_ERR, &quot;[*] Fatal invalid OPEN_PORTS in access stanza&quot;);</span> +<span class="lineNum"> 875 </span> :<span class="lineCov"> 67 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 876 </span> : : } +<span class="lineNum"> 877 </span> : : } +<span class="lineNum"> 878 </span> : : +<span class="lineNum"> 879 </span>[<span class="branchCov" title="Branch 0 was taken 16 times"> + </span><span class="branchCov" title="Branch 1 was taken 17575 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 16 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 17591 : if(acc-&gt;restrict_ports != NULL &amp;&amp; strlen(acc-&gt;restrict_ports))</span> +<span class="lineNum"> 880 </span> : : { +<span class="lineNum"> 881 </span> [<span class="branchCov" title="Branch 1 was taken 16 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 16 : if(expand_acc_port_list(&amp;(acc-&gt;rport_list), acc-&gt;restrict_ports) == 0)</span> +<span class="lineNum"> 882 </span> : : { +<span class="lineNum"> 883 </span> :<span class="lineCov"> 16 : log_msg(LOG_ERR, &quot;[*] Fatal invalid RESTRICT_PORTS in access stanza&quot;);</span> +<span class="lineNum"> 884 </span> :<span class="lineCov"> 16 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 885 </span> : : } +<span class="lineNum"> 886 </span> : : } +<span class="lineNum"> 887 </span> : : +<span class="lineNum"> 888 </span> : : /* Expand the GPG_REMOTE_ID string. +<span class="lineNum"> 889 </span> : : */ +<span class="lineNum"> 890 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 17575 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 17575 : if(acc-&gt;gpg_remote_id != NULL &amp;&amp; strlen(acc-&gt;gpg_remote_id))</span> +<span class="lineNum"> 891 </span> : : { +<span class="lineNum"> 892 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_string_list(&amp;(acc-&gt;gpg_remote_id_list),</span> +<span class="lineNum"> 893 </span> : : acc-&gt;gpg_remote_id) != SUCCESS) +<span class="lineNum"> 894 </span> : : { +<span class="lineNum"> 895 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal invalid GPG_REMOTE_ID list in access stanza&quot;);</span> +<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 897 </span> : : } +<span class="lineNum"> 898 </span> : : } +<span class="lineNum"> 899 </span> : : +<span class="lineNum"> 900 </span> : : /* Expand the GPG_FINGERPRINT_ID string. +<span class="lineNum"> 901 </span> : : */ +<span class="lineNum"> 902 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 17575 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 17575 : if(acc-&gt;gpg_remote_fpr != NULL &amp;&amp; strlen(acc-&gt;gpg_remote_fpr))</span> +<span class="lineNum"> 903 </span> : : { +<span class="lineNum"> 904 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_string_list(&amp;(acc-&gt;gpg_remote_fpr_list),</span> +<span class="lineNum"> 905 </span> : : acc-&gt;gpg_remote_fpr) != SUCCESS) +<span class="lineNum"> 906 </span> : : { +<span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal invalid GPG_FINGERPRINT_ID list in access stanza&quot;);</span> +<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 909 </span> : : } +<span class="lineNum"> 910 </span> : : } +<span class="lineNum"> 911 </span> : : +<span class="lineNum"> 912 </span> :<span class="lineCov"> 17575 : acc = acc-&gt;next;</span> +<span class="lineNum"> 913 </span> : : } +<span class="lineNum"> 914 </span> :<span class="lineCov"> 249 : return;</span> +<span class="lineNum"> 915 </span> : : } +<a name="916"><span class="lineNum"> 916 </span> : : </a> +<span class="lineNum"> 917 </span> : : void +<span class="lineNum"> 918 </span> :<span class="lineCov"> 2609 : free_acc_stanzas(fko_srv_options_t *opts)</span> +<span class="lineNum"> 919 </span> : : { +<span class="lineNum"> 920 </span> : : acc_stanza_t *acc, *last_acc; +<span class="lineNum"> 921 </span> : : +<span class="lineNum"> 922 </span> : : /* Free any resources first (in case of reconfig). Assume non-NULL +<span class="lineNum"> 923 </span> : : * entry needs to be freed. +<span class="lineNum"> 924 </span> : : */ +<span class="lineNum"> 925 </span> :<span class="lineCov"> 2609 : acc = opts-&gt;acc_stanzas;</span> +<span class="lineNum"> 926 </span> : : +<span class="lineNum"> 927 </span> [<span class="branchCov" title="Branch 0 was taken 23117 times"> + </span><span class="branchCov" title="Branch 1 was taken 2609 times"> + </span>]:<span class="lineCov"> 25726 : while(acc != NULL)</span> +<span class="lineNum"> 928 </span> : : { +<span class="lineNum"> 929 </span> :<span class="lineCov"> 23117 : last_acc = acc;</span> +<span class="lineNum"> 930 </span> :<span class="lineCov"> 23117 : acc = last_acc-&gt;next;</span> +<span class="lineNum"> 931 </span> : : +<span class="lineNum"> 932 </span> :<span class="lineCov"> 23117 : free_acc_stanza_data(last_acc);</span> +<span class="lineNum"> 933 </span> :<span class="lineCov"> 23117 : free(last_acc);</span> +<span class="lineNum"> 934 </span> : : } +<span class="lineNum"> 935 </span> : : +<span class="lineNum"> 936 </span> :<span class="lineCov"> 2609 : return;</span> +<span class="lineNum"> 937 </span> : : } +<span class="lineNum"> 938 </span> : : +<span class="lineNum"> 939 </span> : : /* Wrapper for free_acc_stanzas(), we may put additional initialization +<span class="lineNum"> 940 </span> : : * code here. +<a name="941"><span class="lineNum"> 941 </span> : : */</a> +<span class="lineNum"> 942 </span> : : static void +<span class="lineNum"> 943 </span> :<span class="lineCov"> 795 : acc_stanza_init(fko_srv_options_t *opts)</span> +<span class="lineNum"> 944 </span> : : { +<span class="lineNum"> 945 </span> : : /* Free any resources first (in case of reconfig). Assume non-NULL +<span class="lineNum"> 946 </span> : : * entry needs to be freed. +<span class="lineNum"> 947 </span> : : */ +<span class="lineNum"> 948 </span> :<span class="lineCov"> 795 : free_acc_stanzas(opts);</span> +<span class="lineNum"> 949 </span> : : +<span class="lineNum"> 950 </span> :<span class="lineCov"> 795 : return;</span> +<span class="lineNum"> 951 </span> : : } +<span class="lineNum"> 952 </span> : : +<span class="lineNum"> 953 </span> : : /* Add a new stanza bay allocating the required memory at the required +<span class="lineNum"> 954 </span> : : * location, yada-yada-yada. +<a name="955"><span class="lineNum"> 955 </span> : : */</a> +<span class="lineNum"> 956 </span> : : static acc_stanza_t* +<span class="lineNum"> 957 </span> :<span class="lineCov"> 23117 : acc_stanza_add(fko_srv_options_t *opts)</span> +<span class="lineNum"> 958 </span> : : { +<span class="lineNum"> 959 </span> :<span class="lineCov"> 23117 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> +<span class="lineNum"> 960 </span> :<span class="lineCov"> 23117 : acc_stanza_t *new_acc = calloc(1, sizeof(acc_stanza_t));</span> +<span class="lineNum"> 961 </span> : : acc_stanza_t *last_acc; +<span class="lineNum"> 962 </span> : : +<span class="lineNum"> 963 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(new_acc == NULL)</span> +<span class="lineNum"> 964 </span> : : { +<span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 966 </span> : : &quot;[*] Fatal memory allocation error adding access stanza&quot; +<span class="lineNum"> 967 </span> : : ); +<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 969 </span> : : } +<span class="lineNum"> 970 </span> : : +<span class="lineNum"> 971 </span> : : /* If this is not the first acc entry, we walk our acc pointer to the +<span class="lineNum"> 972 </span> : : * end of the existing list. +<span class="lineNum"> 973 </span> : : */ +<span class="lineNum"> 974 </span> [<span class="branchCov" title="Branch 0 was taken 772 times"> + </span><span class="branchCov" title="Branch 1 was taken 22345 times"> + </span>]:<span class="lineCov"> 23117 : if(acc == NULL)</span> +<span class="lineNum"> 975 </span> : : { +<span class="lineNum"> 976 </span> :<span class="lineCov"> 23117 : opts-&gt;acc_stanzas = new_acc;</span> +<span class="lineNum"> 977 </span> : : } +<span class="lineNum"> 978 </span> : : else +<span class="lineNum"> 979 </span> : : { +<span class="lineNum"> 980 </span> : : do { +<span class="lineNum"> 981 </span> :<span class="lineCov"> 1761178 : last_acc = acc;</span> +<span class="lineNum"> 982 </span> [<span class="branchCov" title="Branch 0 was taken 1738833 times"> + </span><span class="branchCov" title="Branch 1 was taken 22345 times"> + </span>]:<span class="lineCov"> 1761178 : } while((acc = acc-&gt;next));</span> +<span class="lineNum"> 983 </span> : : +<span class="lineNum"> 984 </span> :<span class="lineCov"> 22345 : last_acc-&gt;next = new_acc;</span> +<span class="lineNum"> 985 </span> : : } +<span class="lineNum"> 986 </span> : : +<span class="lineNum"> 987 </span> :<span class="lineCov"> 23117 : return(new_acc);</span> +<span class="lineNum"> 988 </span> : : } +<span class="lineNum"> 989 </span> : : +<span class="lineNum"> 990 </span> : : /* Scan the access options for entries that have not been set, but need +<span class="lineNum"> 991 </span> : : * a default value. +<a name="992"><span class="lineNum"> 992 </span> : : */</a> +<span class="lineNum"> 993 </span> : : static void +<span class="lineNum"> 994 </span> :<span class="lineCov"> 249 : set_acc_defaults(fko_srv_options_t *opts)</span> +<span class="lineNum"> 995 </span> : : { +<span class="lineNum"> 996 </span> :<span class="lineCov"> 249 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> +<span class="lineNum"> 997 </span> :<span class="lineCov"> 249 : int i=1;</span> +<span class="lineNum"> 998 </span> : : +<span class="lineNum"> 999 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if(!acc)</span> +<span class="lineNum"> 1000 </span> : : return; +<span class="lineNum"> 1001 </span> : : +<span class="lineNum"> 1002 </span> [<span class="branchCov" title="Branch 0 was taken 8355 times"> + </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 8604 : while(acc)</span> +<span class="lineNum"> 1003 </span> : : { +<span class="lineNum"> 1004 </span> : : /* set default fw_access_timeout if necessary +<span class="lineNum"> 1005 </span> : : */ +<span class="lineNum"> 1006 </span> [<span class="branchCov" title="Branch 0 was taken 8124 times"> + </span><span class="branchCov" title="Branch 1 was taken 231 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;fw_access_timeout &lt; 1)</span> +<span class="lineNum"> 1007 </span> :<span class="lineCov"> 8124 : acc-&gt;fw_access_timeout = DEF_FW_ACCESS_TIMEOUT;</span> +<span class="lineNum"> 1008 </span> : : +<span class="lineNum"> 1009 </span> : : /* set default gpg keyring path if necessary +<span class="lineNum"> 1010 </span> : : */ +<span class="lineNum"> 1011 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8355 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;gpg_decrypt_pw != NULL)</span> +<span class="lineNum"> 1012 </span> : : { +<span class="lineNum"> 1013 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_home_dir == NULL)</span> +<span class="lineNum"> 1014 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(acc-&gt;gpg_home_dir), opts-&gt;config[CONF_GPG_HOME_DIR]) != SUCCESS)</span> +<span class="lineNum"> 1015 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1016 </span> : : +<span class="lineNum"> 1017 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! acc-&gt;gpg_require_sig)</span> +<span class="lineNum"> 1018 </span> : : { +<span class="lineNum"> 1019 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (acc-&gt;gpg_disable_sig)</span> +<span class="lineNum"> 1020 </span> : : { +<span class="lineNum"> 1021 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 1022 </span> : : &quot;Warning: GPG_REQUIRE_SIG should really be enabled for stanza source: '%s' (#%d)&quot;, +<span class="lineNum"> 1023 </span> : : acc-&gt;source, i +<span class="lineNum"> 1024 </span> : : ); +<span class="lineNum"> 1025 </span> : : } +<span class="lineNum"> 1026 </span> : : else +<span class="lineNum"> 1027 </span> : : { +<span class="lineNum"> 1028 </span> : : /* Make this the default unless explicitly disabled +<span class="lineNum"> 1029 </span> : : */ +<span class="lineNum"> 1030 </span> :<span class="lineNoCov"> 0 : acc-&gt;gpg_require_sig = 1;</span> +<span class="lineNum"> 1031 </span> : : } +<span class="lineNum"> 1032 </span> : : } +<span class="lineNum"> 1033 </span> : : else +<span class="lineNum"> 1034 </span> : : { +<span class="lineNum"> 1035 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (acc-&gt;gpg_disable_sig)</span> +<span class="lineNum"> 1036 </span> : : { +<span class="lineNum"> 1037 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 1038 </span> : : &quot;Warning: GPG_REQUIRE_SIG and GPG_DISABLE_SIG are both set, will check sigs (stanza source: '%s' #%d)&quot;, +<span class="lineNum"> 1039 </span> : : acc-&gt;source, i +<span class="lineNum"> 1040 </span> : : ); +<span class="lineNum"> 1041 </span> : : } +<span class="lineNum"> 1042 </span> : : } +<span class="lineNum"> 1043 </span> : : +<span class="lineNum"> 1044 </span> : : /* If signature checking is enabled, make sure we either have sig ID's or +<span class="lineNum"> 1045 </span> : : * fingerprint ID's to check +<span class="lineNum"> 1046 </span> : : */ +<span class="lineNum"> 1047 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! acc-&gt;gpg_disable_sig</span> +<span class="lineNum"> 1048 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (acc-&gt;gpg_remote_id == NULL &amp;&amp; acc-&gt;gpg_remote_fpr == NULL))</span> +<span class="lineNum"> 1049 </span> : : { +<span class="lineNum"> 1050 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 1051 </span> : : &quot;Warning: Must have either sig ID's or fingerprints to check via GPG_REMOTE_ID or GPG_FINGERPRINT_ID (stanza source: '%s' #%d)&quot;, +<span class="lineNum"> 1052 </span> : : acc-&gt;source, i +<span class="lineNum"> 1053 </span> : : ); +<span class="lineNum"> 1054 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1055 </span> : : } +<span class="lineNum"> 1056 </span> : : } +<span class="lineNum"> 1057 </span> : : +<span class="lineNum"> 1058 </span> [<span class="branchCov" title="Branch 0 was taken 8249 times"> + </span><span class="branchCov" title="Branch 1 was taken 106 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;encryption_mode == FKO_ENC_MODE_UNKNOWN)</span> +<span class="lineNum"> 1059 </span> :<span class="lineCov"> 8249 : acc-&gt;encryption_mode = FKO_DEFAULT_ENC_MODE;</span> +<span class="lineNum"> 1060 </span> : : +<span class="lineNum"> 1061 </span> : : /* if we're using an HMAC key and the HMAC digest type was not +<span class="lineNum"> 1062 </span> : : * set for HMAC_DIGEST_TYPE, then assume it's SHA256 +<span class="lineNum"> 1063 </span> : : */ +<span class="lineNum"> 1064 </span> : : +<span class="lineNum"> 1065 </span> [<span class="branchCov" title="Branch 0 was taken 8265 times"> + </span><span class="branchCov" title="Branch 1 was taken 90 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;hmac_type == FKO_HMAC_UNKNOWN</span> +<span class="lineNum"> 1066 </span>[<span class="branchCov" title="Branch 0 was taken 285 times"> + </span><span class="branchCov" title="Branch 1 was taken 7980 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 285 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 8265 : &amp;&amp; acc-&gt;hmac_key_len &gt; 0 &amp;&amp; acc-&gt;hmac_key != NULL)</span> +<span class="lineNum"> 1067 </span> : : { +<span class="lineNum"> 1068 </span> :<span class="lineCov"> 285 : acc-&gt;hmac_type = FKO_DEFAULT_HMAC_MODE;</span> +<span class="lineNum"> 1069 </span> : : } +<span class="lineNum"> 1070 </span> : : +<span class="lineNum"> 1071 </span> :<span class="lineCov"> 8355 : acc = acc-&gt;next;</span> +<span class="lineNum"> 1072 </span> :<span class="lineCov"> 8355 : i++;</span> +<span class="lineNum"> 1073 </span> : : } +<span class="lineNum"> 1074 </span> : : return; +<span class="lineNum"> 1075 </span> : : } +<span class="lineNum"> 1076 </span> : : +<span class="lineNum"> 1077 </span> : : /* Perform some sanity checks on an acc stanza data. +<a name="1078"><span class="lineNum"> 1078 </span> : : */</a> +<span class="lineNum"> 1079 </span> : : static int +<span class="lineNum"> 1080 </span> :<span class="lineCov"> 22878 : acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t * const acc)</span> +<span class="lineNum"> 1081 </span> : : { +<span class="lineNum"> 1082 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 22878 times"> + </span>]:<span class="lineCov"> 22878 : if(acc == NULL)</span> +<span class="lineNum"> 1083 </span> : : { +<span class="lineNum"> 1084 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1085 </span> : : &quot;[*] acc_data_is_valid() called with NULL acc stanza&quot;); +<span class="lineNum"> 1086 </span> : : return(0); +<span class="lineNum"> 1087 </span> : : } +<span class="lineNum"> 1088 </span> : : +<span class="lineNum"> 1089 </span>[<span class="branchCov" title="Branch 0 was taken 22831 times"> + </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 22831 times"> + </span>]:<span class="lineCov"> 22878 : if(((acc-&gt;key == NULL || acc-&gt;key_len == 0)</span> +<span class="lineNum"> 1090 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 47 : &amp;&amp; ((acc-&gt;gpg_decrypt_pw == NULL || !strlen(acc-&gt;gpg_decrypt_pw))</span> +<span class="lineNum"> 1091 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span>]:<span class="lineCov"> 47 : &amp;&amp; acc-&gt;gpg_allow_no_pw == 0))</span> +<span class="lineNum"> 1092 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 22831 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 22831 : || (acc-&gt;use_rijndael == 0 &amp;&amp; acc-&gt;use_gpg == 0 &amp;&amp; acc-&gt;gpg_allow_no_pw == 0))</span> +<span class="lineNum"> 1093 </span> : : { +<span class="lineNum"> 1094 </span> :<span class="lineCov"> 47 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1095 </span> : : &quot;[*] No keys found for access stanza source: '%s'&quot;, acc-&gt;source +<span class="lineNum"> 1096 </span> : : ); +<span class="lineNum"> 1097 </span> : : return(0); +<span class="lineNum"> 1098 </span> : : } +<span class="lineNum"> 1099 </span> : : +<span class="lineNum"> 1100 </span>[<span class="branchCov" title="Branch 0 was taken 22831 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 22831 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 22831 : if(acc-&gt;use_rijndael &amp;&amp; acc-&gt;key != NULL)</span> +<span class="lineNum"> 1101 </span> : : { +<span class="lineNum"> 1102 </span> [<span class="branchCov" title="Branch 0 was taken 591 times"> + </span><span class="branchCov" title="Branch 1 was taken 22240 times"> + </span>]:<span class="lineCov"> 22831 : if((acc-&gt;encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV)</span> +<span class="lineNum"> 1103 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchCov" title="Branch 1 was taken 520 times"> + </span>]:<span class="lineCov"> 591 : &amp;&amp; (acc-&gt;key_len &gt; 16))</span> +<span class="lineNum"> 1104 </span> : : { +<span class="lineNum"> 1105 </span> :<span class="lineCov"> 71 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 1106 </span> : : &quot;Warning: truncating encryption key in legacy mode to 16 bytes for access stanza source: '%s'&quot;, +<span class="lineNum"> 1107 </span> : : acc-&gt;source +<span class="lineNum"> 1108 </span> : : ); +<span class="lineNum"> 1109 </span> :<span class="lineCov"> 71 : acc-&gt;key_len = 16;</span> +<span class="lineNum"> 1110 </span> : : } +<span class="lineNum"> 1111 </span> : : } +<span class="lineNum"> 1112 </span> : : +<span class="lineNum"> 1113 </span>[<span class="branchCov" title="Branch 0 was taken 1676 times"> + </span><span class="branchCov" title="Branch 1 was taken 21155 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 1676 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 22831 : if((acc-&gt;hmac_key_len) != 0 &amp;&amp; (acc-&gt;hmac_key != NULL))</span> +<span class="lineNum"> 1114 </span> : : { +<span class="lineNum"> 1115 </span>[<span class="branchCov" title="Branch 0 was taken 1676 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1676 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1676 : if((acc-&gt;key != NULL) &amp;&amp; (acc-&gt;key_len != 0)</span> +<span class="lineNum"> 1116 </span> [<span class="branchCov" title="Branch 0 was taken 272 times"> + </span><span class="branchCov" title="Branch 1 was taken 1404 times"> + </span>]:<span class="lineCov"> 1676 : &amp;&amp; (acc-&gt;key_len == acc-&gt;hmac_key_len))</span> +<span class="lineNum"> 1117 </span> : : { +<span class="lineNum"> 1118 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 271 times"> + </span>]:<span class="lineCov"> 272 : if(memcmp(acc-&gt;key, acc-&gt;hmac_key, acc-&gt;hmac_key_len) == 0)</span> +<span class="lineNum"> 1119 </span> : : { +<span class="lineNum"> 1120 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1121 </span> : : &quot;[*] The encryption passphrase and HMAC key should not be identical for access stanza source: '%s'&quot;, +<span class="lineNum"> 1122 </span> : : acc-&gt;source +<span class="lineNum"> 1123 </span> : : ); +<span class="lineNum"> 1124 </span> : : return(0); +<span class="lineNum"> 1125 </span> : : } +<span class="lineNum"> 1126 </span> : : } +<span class="lineNum"> 1127 </span> [<span class="branchCov" title="Branch 0 was taken 1404 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1404 : else if((acc-&gt;gpg_allow_no_pw == 0)</span> +<span class="lineNum"> 1128 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1404 times"> + </span>]:<span class="lineCov"> 1404 : &amp;&amp; acc-&gt;gpg_decrypt_pw != NULL</span> +<span class="lineNum"> 1129 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (strlen(acc-&gt;gpg_decrypt_pw) == acc-&gt;hmac_key_len))</span> +<span class="lineNum"> 1130 </span> : : { +<span class="lineNum"> 1131 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(memcmp(acc-&gt;gpg_decrypt_pw, acc-&gt;hmac_key, acc-&gt;hmac_key_len) == 0)</span> +<span class="lineNum"> 1132 </span> : : { +<span class="lineNum"> 1133 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1134 </span> : : &quot;[*] The encryption passphrase and HMAC key should not be identical for access stanza source: '%s'&quot;, +<span class="lineNum"> 1135 </span> : : acc-&gt;source +<span class="lineNum"> 1136 </span> : : ); +<span class="lineNum"> 1137 </span> : : return(0); +<span class="lineNum"> 1138 </span> : : } +<span class="lineNum"> 1139 </span> : : } +<span class="lineNum"> 1140 </span> : : } +<span class="lineNum"> 1141 </span> : : +<span class="lineNum"> 1142 </span> : : #if defined(FIREWALL_FIREWALLD) || defined(FIREWALL_IPTABLES) +<span class="lineNum"> 1143 </span>[<span class="branchCov" title="Branch 0 was taken 22830 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 22830 times"> + </span>]:<span class="lineCov"> 22830 : if((acc-&gt;force_snat == 1 || acc-&gt;force_masquerade == 1)</span> +<span class="lineNum"> 1144 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; acc-&gt;force_nat == 0)</span> +<span class="lineNum"> 1145 </span> : : { +<span class="lineNum"> 1146 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all == 1)</span> +<span class="lineNum"> 1147 </span> : : { +<span class="lineNum"> 1148 </span> :<span class="lineNoCov"> 0 : add_acc_force_nat(opts, acc, &quot;0.0.0.0 0&quot;);</span> +<span class="lineNum"> 1149 </span> : : } +<span class="lineNum"> 1150 </span> : : else +<span class="lineNum"> 1151 </span> : : { +<span class="lineNum"> 1152 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1153 </span> : : &quot;[*] FORCE_SNAT/FORCE_MASQUERADE requires either FORCE_NAT or FORWARD_ALL: '%s'&quot;, +<span class="lineNum"> 1154 </span> : : acc-&gt;source +<span class="lineNum"> 1155 </span> : : ); +<span class="lineNum"> 1156 </span> : : return(0); +<span class="lineNum"> 1157 </span> : : } +<span class="lineNum"> 1158 </span> : : } +<span class="lineNum"> 1159 </span> : : #endif +<span class="lineNum"> 1160 </span> : : +<span class="lineNum"> 1161 </span> [<span class="branchCov" title="Branch 0 was taken 22680 times"> + </span><span class="branchCov" title="Branch 1 was taken 150 times"> + </span>]:<span class="lineCov"> 22830 : if(acc-&gt;require_source_address == 0)</span> +<span class="lineNum"> 1162 </span> : : { +<span class="lineNum"> 1163 </span> :<span class="lineCov"> 22680 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 1164 </span> : : &quot;Warning: REQUIRE_SOURCE_ADDRESS not enabled for access stanza source: '%s'&quot;, +<span class="lineNum"> 1165 </span> : : acc-&gt;source +<span class="lineNum"> 1166 </span> : : ); +<span class="lineNum"> 1167 </span> : : } +<span class="lineNum"> 1168 </span> : : +<span class="lineNum"> 1169 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 22830 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 22830 : if(user_pw != NULL &amp;&amp; acc-&gt;cmd_exec_uid != 0 &amp;&amp; acc-&gt;cmd_exec_gid == 0)</span> +<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] +<span class="lineNum"> 1170 </span> : : { +<span class="lineNum"> 1171 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 1172 </span> : : &quot;Setting gid to group associated with CMD_EXEC_USER '%s' for setgid() execution in stanza source: '%s'&quot;, +<span class="lineNum"> 1173 </span> : : acc-&gt;cmd_exec_user, +<span class="lineNum"> 1174 </span> : : acc-&gt;source +<span class="lineNum"> 1175 </span> : : ); +<span class="lineNum"> 1176 </span> :<span class="lineNoCov"> 0 : acc-&gt;cmd_exec_gid = user_pw-&gt;pw_gid;</span> +<span class="lineNum"> 1177 </span> : : } +<span class="lineNum"> 1178 </span> : : +<span class="lineNum"> 1179 </span> : : return(1); +<span class="lineNum"> 1180 </span> : : } +<span class="lineNum"> 1181 </span> : : +<span class="lineNum"> 1182 </span> : : /* Read and parse the access file, popluating the access data as we go. +<a name="1183"><span class="lineNum"> 1183 </span> : : */</a> +<span class="lineNum"> 1184 </span> : : void +<span class="lineNum"> 1185 </span> :<span class="lineCov"> 795 : parse_access_file(fko_srv_options_t *opts)</span> +<span class="lineNum"> 1186 </span> : : { +<span class="lineNum"> 1187 </span> : : FILE *file_ptr; +<span class="lineNum"> 1188 </span> : : char *ndx; +<span class="lineNum"> 1189 </span> :<span class="lineCov"> 795 : int got_source = 0, is_err;</span> +<span class="lineNum"> 1190 </span> :<span class="lineCov"> 795 : unsigned int num_lines = 0;</span> +<span class="lineNum"> 1191 </span> : : +<span class="lineNum"> 1192 </span> :<span class="lineCov"> 795 : char access_line_buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1193 </span> :<span class="lineCov"> 795 : char var[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1194 </span> :<span class="lineCov"> 795 : char val[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 1195 </span> : : +<span class="lineNum"> 1196 </span> :<span class="lineCov"> 795 : struct passwd *pw = NULL;</span> +<span class="lineNum"> 1197 </span> :<span class="lineCov"> 795 : struct passwd *user_pw = NULL;</span> +<span class="lineNum"> 1198 </span> : : struct stat st; +<span class="lineNum"> 1199 </span> : : +<span class="lineNum"> 1200 </span> :<span class="lineCov"> 795 : acc_stanza_t *curr_acc = NULL;</span> +<span class="lineNum"> 1201 </span> : : +<span class="lineNum"> 1202 </span> : : /* First see if the access file exists. If it doesn't, complain +<span class="lineNum"> 1203 </span> : : * and bail. +<span class="lineNum"> 1204 </span> : : */ +<span class="lineNum"> 1205 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(stat(opts-&gt;config[CONF_ACCESS_FILE], &amp;st) != 0)</span> +<span class="lineNum"> 1206 </span> : : { +<span class="lineNum"> 1207 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Access file: '%s' was not found.&quot;,</span> +<span class="lineNum"> 1208 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1209 </span> : : +<span class="lineNum"> 1210 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1211 </span> : : } +<span class="lineNum"> 1212 </span> : : +<span class="lineNum"> 1213 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(verify_file_perms_ownership(opts-&gt;config[CONF_ACCESS_FILE]) != 1)</span> +<span class="lineNum"> 1214 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1215 </span> : : +<span class="lineNum"> 1216 </span> : : /* A note on security here: Coverity flags the following fopen() as a +<span class="lineNum"> 1217 </span> : : * Time of check time of use (TOCTOU) bug with a low priority due to the +<span class="lineNum"> 1218 </span> : : * previous stat() call above. I.e., the access.conf file on disk could +<span class="lineNum"> 1219 </span> : : * have been changed between the stat() and the fopen() causing a TOCTOU +<span class="lineNum"> 1220 </span> : : * bug. While technically this is true, the return value of fopen() is +<span class="lineNum"> 1221 </span> : : * also checked below so stat() success does not imply we assume fopen() +<span class="lineNum"> 1222 </span> : : * success. Also, we could just remove the stat() and +<span class="lineNum"> 1223 </span> : : * verify_file_perms_ownership() calls above to &quot;fix&quot; the bug, but this +<span class="lineNum"> 1224 </span> : : * would actually make things easier for an attacker that has already +<span class="lineNum"> 1225 </span> : : * compromised the local system since access.conf could be changed to, say, +<span class="lineNum"> 1226 </span> : : * a symbolic link (for which verify_file_perms_ownership() throws a +<span class="lineNum"> 1227 </span> : : * warning), and then there is no race at all before the fopen(). I.e. +<span class="lineNum"> 1228 </span> : : * forcing an attacker to do the race makes things harder for them. +<span class="lineNum"> 1229 </span> : : */ +<span class="lineNum"> 1230 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if ((file_ptr = fopen(opts-&gt;config[CONF_ACCESS_FILE], &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 1231 </span> : : { +<span class="lineNum"> 1232 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not open access file: %s&quot;,</span> +<span class="lineNum"> 1233 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1234 </span> :<span class="lineNoCov"> 0 : perror(NULL);</span> +<span class="lineNum"> 1235 </span> : : +<span class="lineNum"> 1236 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1237 </span> : : } +<span class="lineNum"> 1238 </span> : : +<span class="lineNum"> 1239 </span> : : /* Initialize the access list. +<span class="lineNum"> 1240 </span> : : */ +<span class="lineNum"> 1241 </span> :<span class="lineCov"> 795 : acc_stanza_init(opts);</span> +<span class="lineNum"> 1242 </span> : : +<span class="lineNum"> 1243 </span> : : /* Now walk through access file pulling the access entries into the +<span class="lineNum"> 1244 </span> : : * current stanza. +<span class="lineNum"> 1245 </span> : : */ +<span class="lineNum"> 1246 </span> [<span class="branchCov" title="Branch 0 was taken 109560 times"> + </span><span class="branchCov" title="Branch 1 was taken 514 times"> + </span>]:<span class="lineCov"> 110869 : while ((fgets(access_line_buf, MAX_LINE_LEN, file_ptr)) != NULL)</span> +<span class="lineNum"> 1247 </span> : : { +<span class="lineNum"> 1248 </span> :<span class="lineCov"> 109560 : num_lines++;</span> +<span class="lineNum"> 1249 </span> :<span class="lineCov"> 109560 : access_line_buf[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 1250 </span> : : +<span class="lineNum"> 1251 </span> : : /* Get past comments and empty lines (note: we only look at the +<span class="lineNum"> 1252 </span> : : * first character. +<span class="lineNum"> 1253 </span> : : */ +<span class="lineNum"> 1254 </span>[<span class="branchCov" title="Branch 0 was taken 103639 times"> + </span><span class="branchCov" title="Branch 1 was taken 5921 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 103639 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 109560 : if(IS_EMPTY_LINE(access_line_buf[0]))</span> +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 103631 times"> + </span><span class="branchCov" title="Branch 5 was taken 8 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 2813 times"> + </span><span class="branchCov" title="Branch 7 was taken 100818 times"> + </span>] +<span class="lineNum"> 1255 </span> :<span class="lineCov"> 8742 : continue;</span> +<span class="lineNum"> 1256 </span> : : +<span class="lineNum"> 1257 </span> [<span class="branchCov" title="Branch 0 was taken 124 times"> + </span><span class="branchCov" title="Branch 1 was taken 100694 times"> + </span>]:<span class="lineCov"> 100818 : if(sscanf(access_line_buf, &quot;%s %[^;\n\r]&quot;, var, val) != 2)</span> +<span class="lineNum"> 1258 </span> : : { +<span class="lineNum"> 1259 </span> :<span class="lineCov"> 124 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1260 </span> : : &quot;[*] Invalid access file entry in %s at line %i.\n - '%s'&quot;, +<span class="lineNum"> 1261 </span> : : opts-&gt;config[CONF_ACCESS_FILE], num_lines, access_line_buf +<span class="lineNum"> 1262 </span> : : ); +<span class="lineNum"> 1263 </span> :<span class="lineCov"> 124 : fclose(file_ptr);</span> +<span class="lineNum"> 1264 </span> :<span class="lineCov"> 124 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1265 </span> : : } +<span class="lineNum"> 1266 </span> : : +<span class="lineNum"> 1267 </span> : : /* Remove any colon that may be on the end of the var +<span class="lineNum"> 1268 </span> : : */ +<span class="lineNum"> 1269 </span> [<span class="branchCov" title="Branch 0 was taken 266 times"> + </span><span class="branchCov" title="Branch 1 was taken 100428 times"> + </span>]:<span class="lineCov"> 100694 : if((ndx = strrchr(var, ':')) != NULL)</span> +<span class="lineNum"> 1270 </span> :<span class="lineCov"> 266 : *ndx = '\0';</span> +<span class="lineNum"> 1271 </span> : : +<span class="lineNum"> 1272 </span> : : /* Even though sscanf should automatically add a terminating +<span class="lineNum"> 1273 </span> : : * NULL byte, an assumption is made that the input arrays are +<span class="lineNum"> 1274 </span> : : * big enough, so we'll force a terminating NULL byte regardless +<span class="lineNum"> 1275 </span> : : */ +<span class="lineNum"> 1276 </span> :<span class="lineCov"> 100694 : var[MAX_LINE_LEN-1] = 0x0;</span> +<span class="lineNum"> 1277 </span> :<span class="lineCov"> 100694 : val[MAX_LINE_LEN-1] = 0x0;</span> +<span class="lineNum"> 1278 </span> : : +<span class="lineNum"> 1279 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 100694 times"> + </span>]:<span class="lineCov"> 100694 : if (opts-&gt;verbose &gt; 3)</span> +<span class="lineNum"> 1280 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> +<span class="lineNum"> 1281 </span> : : &quot;ACCESS FILE: %s, LINE: %s\tVar: %s, Val: '%s'&quot;, +<span class="lineNum"> 1282 </span> : : opts-&gt;config[CONF_ACCESS_FILE], access_line_buf, var, val +<span class="lineNum"> 1283 </span> : : ); +<span class="lineNum"> 1284 </span> : : +<span class="lineNum"> 1285 </span> : : /* Process the entry. +<span class="lineNum"> 1286 </span> : : * +<span class="lineNum"> 1287 </span> : : * NOTE: If a new access.conf parameter is created. It also needs +<span class="lineNum"> 1288 </span> : : * to be accounted for in the following if/if else construct. +<span class="lineNum"> 1289 </span> : : */ +<span class="lineNum"> 1290 </span> [<span class="branchCov" title="Branch 0 was taken 23145 times"> + </span><span class="branchCov" title="Branch 1 was taken 77549 times"> + </span>]:<span class="lineCov"> 100694 : if(CONF_VAR_IS(var, &quot;SOURCE&quot;))</span> +<span class="lineNum"> 1291 </span> : : { +<span class="lineNum"> 1292 </span> : : /* If this is not the first stanza, sanity check the previous +<span class="lineNum"> 1293 </span> : : * stanza for the minimum required data. +<span class="lineNum"> 1294 </span> : : */ +<span class="lineNum"> 1295 </span> [<span class="branchCov" title="Branch 0 was taken 22373 times"> + </span><span class="branchCov" title="Branch 1 was taken 772 times"> + </span>]:<span class="lineCov"> 23145 : if(curr_acc != NULL) {</span> +<span class="lineNum"> 1296 </span> [<span class="branchCov" title="Branch 1 was taken 28 times"> + </span><span class="branchCov" title="Branch 2 was taken 22345 times"> + </span>]:<span class="lineCov"> 22373 : if(!acc_data_is_valid(opts, user_pw, curr_acc))</span> +<span class="lineNum"> 1297 </span> : : { +<span class="lineNum"> 1298 </span> :<span class="lineCov"> 28 : log_msg(LOG_ERR, &quot;[*] Data error in access file: '%s'&quot;,</span> +<span class="lineNum"> 1299 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1300 </span> :<span class="lineCov"> 28 : fclose(file_ptr);</span> +<span class="lineNum"> 1301 </span> :<span class="lineCov"> 28 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1302 </span> : : } +<span class="lineNum"> 1303 </span> : : } +<span class="lineNum"> 1304 </span> : : +<span class="lineNum"> 1305 </span> : : /* Start new stanza. +<span class="lineNum"> 1306 </span> : : */ +<span class="lineNum"> 1307 </span> :<span class="lineCov"> 23117 : curr_acc = acc_stanza_add(opts);</span> +<span class="lineNum"> 1308 </span> : : +<span class="lineNum"> 1309 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(add_acc_string(&amp;(curr_acc-&gt;source), val) != SUCCESS)</span> +<span class="lineNum"> 1310 </span> : : { +<span class="lineNum"> 1311 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1312 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1313 </span> : : } +<span class="lineNum"> 1314 </span> : : +<span class="lineNum"> 1315 </span> :<span class="lineCov"> 23117 : got_source++;</span> +<span class="lineNum"> 1316 </span> : : } +<span class="lineNum"> 1317 </span> [<span class="branchCov" title="Branch 0 was taken 636 times"> + </span><span class="branchCov" title="Branch 1 was taken 76913 times"> + </span>]:<span class="lineCov"> 77549 : else if (curr_acc == NULL)</span> +<span class="lineNum"> 1318 </span> : : { +<span class="lineNum"> 1319 </span> : : /* The stanza must start with the &quot;SOURCE&quot; variable +<span class="lineNum"> 1320 </span> : : */ +<span class="lineNum"> 1321 </span> :<span class="lineCov"> 636 : continue;</span> +<span class="lineNum"> 1322 </span> : : } +<span class="lineNum"> 1323 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 76913 times"> + </span>]:<span class="lineCov"> 76913 : else if(CONF_VAR_IS(var, &quot;DESTINATION&quot;))</span> +<span class="lineNum"> 1324 </span> : : { +<span class="lineNum"> 1325 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;destination), val) != SUCCESS)</span> +<span class="lineNum"> 1326 </span> : : { +<span class="lineNum"> 1327 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1328 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1329 </span> : : } +<span class="lineNum"> 1330 </span> : : } +<span class="lineNum"> 1331 </span> [<span class="branchCov" title="Branch 0 was taken 1638 times"> + </span><span class="branchCov" title="Branch 1 was taken 75275 times"> + </span>]:<span class="lineCov"> 76913 : else if(CONF_VAR_IS(var, &quot;OPEN_PORTS&quot;))</span> +<span class="lineNum"> 1332 </span> : : { +<span class="lineNum"> 1333 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1638 times"> + </span>]:<span class="lineCov"> 1638 : if(add_acc_string(&amp;(curr_acc-&gt;open_ports), val) != SUCCESS)</span> +<span class="lineNum"> 1334 </span> : : { +<span class="lineNum"> 1335 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1336 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1337 </span> : : } +<span class="lineNum"> 1338 </span> : : } +<span class="lineNum"> 1339 </span> [<span class="branchCov" title="Branch 0 was taken 680 times"> + </span><span class="branchCov" title="Branch 1 was taken 74595 times"> + </span>]:<span class="lineCov"> 75275 : else if(CONF_VAR_IS(var, &quot;RESTRICT_PORTS&quot;))</span> +<span class="lineNum"> 1340 </span> : : { +<span class="lineNum"> 1341 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 680 times"> + </span>]:<span class="lineCov"> 680 : if(add_acc_string(&amp;(curr_acc-&gt;restrict_ports), val) != SUCCESS)</span> +<span class="lineNum"> 1342 </span> : : { +<span class="lineNum"> 1343 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1344 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1345 </span> : : } +<span class="lineNum"> 1346 </span> : : } +<span class="lineNum"> 1347 </span> [<span class="branchCov" title="Branch 0 was taken 30552 times"> + </span><span class="branchCov" title="Branch 1 was taken 44043 times"> + </span>]:<span class="lineCov"> 74595 : else if(CONF_VAR_IS(var, &quot;KEY&quot;))</span> +<span class="lineNum"> 1348 </span> : : { +<span class="lineNum"> 1349 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 30552 times"> + </span>]:<span class="lineCov"> 30552 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> +<span class="lineNum"> 1350 </span> : : { +<span class="lineNum"> 1351 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1352 </span> : : &quot;[*] KEY value is not properly set in stanza source '%s' in access file: '%s'&quot;, +<span class="lineNum"> 1353 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1354 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1355 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1356 </span> : : } +<span class="lineNum"> 1357 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 30552 times"> + </span>]:<span class="lineCov"> 30552 : if(add_acc_string(&amp;(curr_acc-&gt;key), val) != SUCCESS)</span> +<span class="lineNum"> 1358 </span> : : { +<span class="lineNum"> 1359 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1360 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1361 </span> : : } +<span class="lineNum"> 1362 </span> :<span class="lineCov"> 30552 : curr_acc-&gt;key_len = strlen(curr_acc-&gt;key);</span> +<span class="lineNum"> 1363 </span> :<span class="lineCov"> 30552 : add_acc_bool(&amp;(curr_acc-&gt;use_rijndael), &quot;Y&quot;);</span> +<span class="lineNum"> 1364 </span> : : } +<span class="lineNum"> 1365 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 44043 times"> + </span>]:<span class="lineCov"> 44043 : else if(CONF_VAR_IS(var, &quot;KEY_BASE64&quot;))</span> +<span class="lineNum"> 1366 </span> : : { +<span class="lineNum"> 1367 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> +<span class="lineNum"> 1368 </span> : : { +<span class="lineNum"> 1369 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1370 </span> : : &quot;[*] KEY_BASE64 value is not properly set in stanza source '%s' in access file: '%s'&quot;, +<span class="lineNum"> 1371 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1372 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1373 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1374 </span> : : } +<span class="lineNum"> 1375 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) val, strlen(val)))</span> +<span class="lineNum"> 1376 </span> : : { +<span class="lineNum"> 1377 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1378 </span> : : &quot;[*] KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, +<span class="lineNum"> 1379 </span> : : val); +<span class="lineNum"> 1380 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1381 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1382 </span> : : } +<span class="lineNum"> 1383 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;key_base64), val) != SUCCESS)</span> +<span class="lineNum"> 1384 </span> : : { +<span class="lineNum"> 1385 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1386 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1387 </span> : : } +<span class="lineNum"> 1388 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_b64_string(&amp;(curr_acc-&gt;key),</span> +<span class="lineNum"> 1389 </span> :<span class="lineNoCov"> 0 : &amp;(curr_acc-&gt;key_len), curr_acc-&gt;key_base64) != SUCCESS)</span> +<span class="lineNum"> 1390 </span> : : { +<span class="lineNum"> 1391 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1392 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1393 </span> : : } +<span class="lineNum"> 1394 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;use_rijndael), &quot;Y&quot;);</span> +<span class="lineNum"> 1395 </span> : : } +<span class="lineNum"> 1396 </span> : : /* HMAC digest type */ +<span class="lineNum"> 1397 </span> [<span class="branchCov" title="Branch 0 was taken 705 times"> + </span><span class="branchCov" title="Branch 1 was taken 43338 times"> + </span>]:<span class="lineCov"> 44043 : else if(CONF_VAR_IS(var, &quot;HMAC_DIGEST_TYPE&quot;))</span> +<span class="lineNum"> 1398 </span> : : { +<span class="lineNum"> 1399 </span> :<span class="lineCov"> 705 : curr_acc-&gt;hmac_type = hmac_digest_strtoint(val);</span> +<span class="lineNum"> 1400 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 696 times"> + </span>]:<span class="lineCov"> 705 : if(curr_acc-&gt;hmac_type &lt; 0)</span> +<span class="lineNum"> 1401 </span> : : { +<span class="lineNum"> 1402 </span> :<span class="lineCov"> 9 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1403 </span> : : &quot;[*] HMAC_DIGEST_TYPE argument '%s' must be one of {md5,sha1,sha256,sha384,sha512}&quot;, +<span class="lineNum"> 1404 </span> : : val); +<span class="lineNum"> 1405 </span> :<span class="lineCov"> 9 : fclose(file_ptr);</span> +<span class="lineNum"> 1406 </span> :<span class="lineCov"> 9 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1407 </span> : : } +<span class="lineNum"> 1408 </span> : : } +<span class="lineNum"> 1409 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 43338 times"> + </span>]:<span class="lineCov"> 43338 : else if(CONF_VAR_IS(var, &quot;HMAC_KEY_BASE64&quot;))</span> +<span class="lineNum"> 1410 </span> : : { +<span class="lineNum"> 1411 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> +<span class="lineNum"> 1412 </span> : : { +<span class="lineNum"> 1413 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1414 </span> : : &quot;[*] HMAC_KEY_BASE64 value is not properly set in stanza source '%s' in access file: '%s'&quot;, +<span class="lineNum"> 1415 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1416 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1417 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1418 </span> : : } +<span class="lineNum"> 1419 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) val, strlen(val)))</span> +<span class="lineNum"> 1420 </span> : : { +<span class="lineNum"> 1421 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1422 </span> : : &quot;[*] HMAC_KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, +<span class="lineNum"> 1423 </span> : : val); +<span class="lineNum"> 1424 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1425 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1426 </span> : : } +<span class="lineNum"> 1427 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;hmac_key_base64), val) != SUCCESS)</span> +<span class="lineNum"> 1428 </span> : : { +<span class="lineNum"> 1429 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1430 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1431 </span> : : } +<span class="lineNum"> 1432 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_b64_string(&amp;(curr_acc-&gt;hmac_key),</span> +<span class="lineNum"> 1433 </span> :<span class="lineNoCov"> 0 : &amp;(curr_acc-&gt;hmac_key_len), curr_acc-&gt;hmac_key_base64) != SUCCESS)</span> +<span class="lineNum"> 1434 </span> : : { +<span class="lineNum"> 1435 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1436 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1437 </span> : : } +<span class="lineNum"> 1438 </span> : : } +<span class="lineNum"> 1439 </span> [<span class="branchCov" title="Branch 0 was taken 2207 times"> + </span><span class="branchCov" title="Branch 1 was taken 41131 times"> + </span>]:<span class="lineCov"> 43338 : else if(CONF_VAR_IS(var, &quot;HMAC_KEY&quot;))</span> +<span class="lineNum"> 1440 </span> : : { +<span class="lineNum"> 1441 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2207 times"> + </span>]:<span class="lineCov"> 2207 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> +<span class="lineNum"> 1442 </span> : : { +<span class="lineNum"> 1443 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1444 </span> : : &quot;[*] HMAC_KEY value is not properly set in stanza source '%s' in access file: '%s'&quot;, +<span class="lineNum"> 1445 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1446 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1447 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1448 </span> : : } +<span class="lineNum"> 1449 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2207 times"> + </span>]:<span class="lineCov"> 2207 : if(add_acc_string(&amp;(curr_acc-&gt;hmac_key), val) != SUCCESS)</span> +<span class="lineNum"> 1450 </span> : : { +<span class="lineNum"> 1451 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1452 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1453 </span> : : } +<span class="lineNum"> 1454 </span> :<span class="lineCov"> 2207 : curr_acc-&gt;hmac_key_len = strlen(curr_acc-&gt;hmac_key);</span> +<span class="lineNum"> 1455 </span> : : } +<span class="lineNum"> 1456 </span> [<span class="branchCov" title="Branch 0 was taken 1415 times"> + </span><span class="branchCov" title="Branch 1 was taken 39716 times"> + </span>]:<span class="lineCov"> 41131 : else if(CONF_VAR_IS(var, &quot;FW_ACCESS_TIMEOUT&quot;))</span> +<span class="lineNum"> 1457 </span> : : { +<span class="lineNum"> 1458 </span> :<span class="lineCov"> 1415 : curr_acc-&gt;fw_access_timeout = strtol_wrapper(val, 0,</span> +<span class="lineNum"> 1459 </span> : : RCHK_MAX_FW_TIMEOUT, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 1460 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 1412 times"> + </span>]:<span class="lineCov"> 1415 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 1461 </span> : : { +<span class="lineNum"> 1462 </span> :<span class="lineCov"> 3 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1463 </span> : : &quot;[*] FW_ACCESS_TIMEOUT value not in range.&quot;); +<span class="lineNum"> 1464 </span> :<span class="lineCov"> 3 : fclose(file_ptr);</span> +<span class="lineNum"> 1465 </span> :<span class="lineCov"> 3 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1466 </span> : : } +<span class="lineNum"> 1467 </span> : : } +<span class="lineNum"> 1468 </span> [<span class="branchCov" title="Branch 0 was taken 799 times"> + </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 39716 : else if(CONF_VAR_IS(var, &quot;ENCRYPTION_MODE&quot;))</span> +<span class="lineNum"> 1469 </span> : : { +<span class="lineNum"> 1470 </span> [<span class="branchCov" title="Branch 1 was taken 9 times"> + </span><span class="branchCov" title="Branch 2 was taken 790 times"> + </span>]:<span class="lineCov"> 799 : if((curr_acc-&gt;encryption_mode = enc_mode_strtoint(val)) &lt; 0)</span> +<span class="lineNum"> 1471 </span> : : { +<span class="lineNum"> 1472 </span> :<span class="lineCov"> 9 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1473 </span> : : &quot;[*] Unrecognized ENCRYPTION_MODE '%s', use {CBC,CTR,legacy,Asymmetric}&quot;, +<span class="lineNum"> 1474 </span> : : val); +<span class="lineNum"> 1475 </span> :<span class="lineCov"> 9 : fclose(file_ptr);</span> +<span class="lineNum"> 1476 </span> :<span class="lineCov"> 9 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1477 </span> : : } +<span class="lineNum"> 1478 </span> : : } +<span class="lineNum"> 1479 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;ENABLE_CMD_EXEC&quot;))</span> +<span class="lineNum"> 1480 </span> : : { +<span class="lineNum"> 1481 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;enable_cmd_exec), val);</span> +<span class="lineNum"> 1482 </span> : : } +<span class="lineNum"> 1483 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;CMD_EXEC_USER&quot;))</span> +<span class="lineNum"> 1484 </span> : : { +<span class="lineNum"> 1485 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;cmd_exec_user), val) != SUCCESS)</span> +<span class="lineNum"> 1486 </span> : : { +<span class="lineNum"> 1487 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1488 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1489 </span> : : } +<span class="lineNum"> 1490 </span> : : +<span class="lineNum"> 1491 </span> :<span class="lineNoCov"> 0 : errno = 0;</span> +<span class="lineNum"> 1492 </span> :<span class="lineNoCov"> 0 : user_pw = pw = getpwnam(val);</span> +<span class="lineNum"> 1493 </span> : : +<span class="lineNum"> 1494 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pw == NULL)</span> +<span class="lineNum"> 1495 </span> : : { +<span class="lineNum"> 1496 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Unable to determine UID for CMD_EXEC_USER: %s.&quot;,</span> +<span class="lineNum"> 1497 </span> :<span class="lineNoCov"> 0 : errno ? strerror(errno) : &quot;Not a user on this system&quot;);</span> +<span class="lineNum"> 1498 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1499 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1500 </span> : : } +<span class="lineNum"> 1501 </span> : : +<span class="lineNum"> 1502 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;cmd_exec_uid = pw-&gt;pw_uid;</span> +<span class="lineNum"> 1503 </span> : : } +<span class="lineNum"> 1504 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;CMD_EXEC_GROUP&quot;))</span> +<span class="lineNum"> 1505 </span> : : { +<span class="lineNum"> 1506 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;cmd_exec_group), val) != SUCCESS)</span> +<span class="lineNum"> 1507 </span> : : { +<span class="lineNum"> 1508 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1509 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1510 </span> : : } +<span class="lineNum"> 1511 </span> : : +<span class="lineNum"> 1512 </span> :<span class="lineNoCov"> 0 : errno = 0;</span> +<span class="lineNum"> 1513 </span> :<span class="lineNoCov"> 0 : pw = getpwnam(val);</span> +<span class="lineNum"> 1514 </span> : : +<span class="lineNum"> 1515 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pw == NULL)</span> +<span class="lineNum"> 1516 </span> : : { +<span class="lineNum"> 1517 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Unable to determine GID for CMD_EXEC_GROUP: %s.&quot;,</span> +<span class="lineNum"> 1518 </span> :<span class="lineNoCov"> 0 : errno ? strerror(errno) : &quot;Not a group on this system&quot;);</span> +<span class="lineNum"> 1519 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1520 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1521 </span> : : } +<span class="lineNum"> 1522 </span> : : +<span class="lineNum"> 1523 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;cmd_exec_gid = pw-&gt;pw_gid;</span> +<span class="lineNum"> 1524 </span> : : } +<span class="lineNum"> 1525 </span> [<span class="branchCov" title="Branch 0 was taken 491 times"> + </span><span class="branchCov" title="Branch 1 was taken 38426 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;REQUIRE_USERNAME&quot;))</span> +<span class="lineNum"> 1526 </span> : : { +<span class="lineNum"> 1527 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 491 times"> + </span>]:<span class="lineCov"> 491 : if(add_acc_string(&amp;(curr_acc-&gt;require_username), val) != SUCCESS)</span> +<span class="lineNum"> 1528 </span> : : { +<span class="lineNum"> 1529 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1530 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1531 </span> : : } +<span class="lineNum"> 1532 </span> : : } +<span class="lineNum"> 1533 </span> [<span class="branchCov" title="Branch 0 was taken 268 times"> + </span><span class="branchCov" title="Branch 1 was taken 38158 times"> + </span>]:<span class="lineCov"> 38426 : else if(CONF_VAR_IS(var, &quot;REQUIRE_SOURCE_ADDRESS&quot;))</span> +<span class="lineNum"> 1534 </span> : : { +<span class="lineNum"> 1535 </span> :<span class="lineCov"> 268 : add_acc_bool(&amp;(curr_acc-&gt;require_source_address), val);</span> +<span class="lineNum"> 1536 </span> : : } +<span class="lineNum"> 1537 </span> [<span class="branchCov" title="Branch 0 was taken 77 times"> + </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38158 : else if(CONF_VAR_IS(var, &quot;REQUIRE_SOURCE&quot;)) /* synonym for REQUIRE_SOURCE_ADDRESS */</span> +<span class="lineNum"> 1538 </span> : : { +<span class="lineNum"> 1539 </span> :<span class="lineCov"> 77 : add_acc_bool(&amp;(curr_acc-&gt;require_source_address), val);</span> +<span class="lineNum"> 1540 </span> : : } +<span class="lineNum"> 1541 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_HOME_DIR&quot;))</span> +<span class="lineNum"> 1542 </span> : : { +<span class="lineNum"> 1543 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_valid_dir(val))</span> +<span class="lineNum"> 1544 </span> : : { +<span class="lineNum"> 1545 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_home_dir), val) != SUCCESS)</span> +<span class="lineNum"> 1546 </span> : : { +<span class="lineNum"> 1547 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1548 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1549 </span> : : } +<span class="lineNum"> 1550 </span> : : } +<span class="lineNum"> 1551 </span> : : else +<span class="lineNum"> 1552 </span> : : { +<span class="lineNum"> 1553 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1554 </span> : : &quot;[*] GPG_HOME_DIR directory '%s' stat()/existence problem in stanza source '%s' in access file: '%s'&quot;, +<span class="lineNum"> 1555 </span> : : val, curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1556 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1557 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1558 </span> : : } +<span class="lineNum"> 1559 </span> : : } +<span class="lineNum"> 1560 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_EXE&quot;))</span> +<span class="lineNum"> 1561 </span> : : { +<span class="lineNum"> 1562 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_exe), val) != SUCCESS)</span> +<span class="lineNum"> 1563 </span> : : { +<span class="lineNum"> 1564 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1565 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1566 </span> : : } +<span class="lineNum"> 1567 </span> : : } +<span class="lineNum"> 1568 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_DECRYPT_ID&quot;))</span> +<span class="lineNum"> 1569 </span> : : { +<span class="lineNum"> 1570 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_decrypt_id), val) != SUCCESS)</span> +<span class="lineNum"> 1571 </span> : : { +<span class="lineNum"> 1572 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1573 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1574 </span> : : } +<span class="lineNum"> 1575 </span> : : } +<span class="lineNum"> 1576 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_DECRYPT_PW&quot;))</span> +<span class="lineNum"> 1577 </span> : : { +<span class="lineNum"> 1578 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> +<span class="lineNum"> 1579 </span> : : { +<span class="lineNum"> 1580 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1581 </span> : : &quot;[*] GPG_DECRYPT_PW value is not properly set in stanza source '%s' in access file: '%s'&quot;, +<span class="lineNum"> 1582 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1583 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1584 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1585 </span> : : } +<span class="lineNum"> 1586 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_decrypt_pw), val) != SUCCESS)</span> +<span class="lineNum"> 1587 </span> : : { +<span class="lineNum"> 1588 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1589 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1590 </span> : : } +<span class="lineNum"> 1591 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;use_gpg), &quot;Y&quot;);</span> +<span class="lineNum"> 1592 </span> : : } +<span class="lineNum"> 1593 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_ALLOW_NO_PW&quot;))</span> +<span class="lineNum"> 1594 </span> : : { +<span class="lineNum"> 1595 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_allow_no_pw), val);</span> +<span class="lineNum"> 1596 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(curr_acc-&gt;gpg_allow_no_pw == 1)</span> +<span class="lineNum"> 1597 </span> : : { +<span class="lineNum"> 1598 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;use_gpg), &quot;Y&quot;);</span> +<span class="lineNum"> 1599 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_decrypt_pw), &quot;&quot;) != SUCCESS)</span> +<span class="lineNum"> 1600 </span> : : { +<span class="lineNum"> 1601 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1602 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1603 </span> : : } +<span class="lineNum"> 1604 </span> : : } +<span class="lineNum"> 1605 </span> : : } +<span class="lineNum"> 1606 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_REQUIRE_SIG&quot;))</span> +<span class="lineNum"> 1607 </span> : : { +<span class="lineNum"> 1608 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_require_sig), val);</span> +<span class="lineNum"> 1609 </span> : : } +<span class="lineNum"> 1610 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_DISABLE_SIG&quot;))</span> +<span class="lineNum"> 1611 </span> : : { +<span class="lineNum"> 1612 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_disable_sig), val);</span> +<span class="lineNum"> 1613 </span> : : } +<span class="lineNum"> 1614 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_IGNORE_SIG_VERIFY_ERROR&quot;))</span> +<span class="lineNum"> 1615 </span> : : { +<span class="lineNum"> 1616 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_ignore_sig_error), val);</span> +<span class="lineNum"> 1617 </span> : : } +<span class="lineNum"> 1618 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_REMOTE_ID&quot;))</span> +<span class="lineNum"> 1619 </span> : : { +<span class="lineNum"> 1620 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_remote_id), val) != SUCCESS)</span> +<span class="lineNum"> 1621 </span> : : { +<span class="lineNum"> 1622 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1623 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1624 </span> : : } +<span class="lineNum"> 1625 </span> : : } +<span class="lineNum"> 1626 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_FINGERPRINT_ID&quot;))</span> +<span class="lineNum"> 1627 </span> : : { +<span class="lineNum"> 1628 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_remote_fpr), val) != SUCCESS)</span> +<span class="lineNum"> 1629 </span> : : { +<span class="lineNum"> 1630 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1631 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1632 </span> : : } +<span class="lineNum"> 1633 </span> : : } +<span class="lineNum"> 1634 </span> [<span class="branchCov" title="Branch 0 was taken 745 times"> + </span><span class="branchCov" title="Branch 1 was taken 37336 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;ACCESS_EXPIRE&quot;))</span> +<span class="lineNum"> 1635 </span> : : { +<span class="lineNum"> 1636 </span> [<span class="branchCov" title="Branch 1 was taken 10 times"> + </span><span class="branchCov" title="Branch 2 was taken 735 times"> + </span>]:<span class="lineCov"> 745 : if (add_acc_expire_time(opts, &amp;(curr_acc-&gt;access_expire_time), val) != 1)</span> +<span class="lineNum"> 1637 </span> : : { +<span class="lineNum"> 1638 </span> :<span class="lineCov"> 10 : fclose(file_ptr);</span> +<span class="lineNum"> 1639 </span> :<span class="lineCov"> 10 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1640 </span> : : } +<span class="lineNum"> 1641 </span> : : } +<span class="lineNum"> 1642 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37336 times"> + </span>]:<span class="lineCov"> 37336 : else if(CONF_VAR_IS(var, &quot;ACCESS_EXPIRE_EPOCH&quot;))</span> +<span class="lineNum"> 1643 </span> : : { +<span class="lineNum"> 1644 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_acc_expire_time_epoch(opts, &amp;(curr_acc-&gt;access_expire_time), val) != 1)</span> +<span class="lineNum"> 1645 </span> : : { +<span class="lineNum"> 1646 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1647 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1648 </span> : : } +<span class="lineNum"> 1649 </span> : : } +<span class="lineNum"> 1650 </span> [<span class="branchCov" title="Branch 0 was taken 97 times"> + </span><span class="branchCov" title="Branch 1 was taken 37239 times"> + </span>]:<span class="lineCov"> 37336 : else if(CONF_VAR_IS(var, &quot;FORCE_NAT&quot;))</span> +<span class="lineNum"> 1651 </span> : : { +<span class="lineNum"> 1652 </span> : : #if FIREWALL_FIREWALLD +<span class="lineNum"> 1653 </span> [<span class="branchCov" title="Branch 0 was taken 97 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 97 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1) !=0 )</span> +<span class="lineNum"> 1654 </span> : : { +<span class="lineNum"> 1655 </span> :<span class="lineCov"> 97 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1656 </span> : : &quot;[*] FORCE_NAT requires ENABLE_FIREWD_FORWARDING to be enabled in fwknopd.conf&quot;); +<span class="lineNum"> 1657 </span> :<span class="lineCov"> 97 : fclose(file_ptr);</span> +<span class="lineNum"> 1658 </span> :<span class="lineCov"> 97 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1659 </span> : : } +<span class="lineNum"> 1660 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_force_nat(opts, curr_acc, val) != SUCCESS)</span> +<span class="lineNum"> 1661 </span> : : { +<span class="lineNum"> 1662 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1663 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1664 </span> : : } +<span class="lineNum"> 1665 </span> : : #elif FIREWALL_IPTABLES +<span class="lineNum"> 1666 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING], &quot;Y&quot;, 1) !=0 ) +<span class="lineNum"> 1667 </span> : : { +<span class="lineNum"> 1668 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 1669 </span> : : &quot;[*] FORCE_NAT requires ENABLE_IPT_FORWARDING to be enabled in fwknopd.conf&quot;); +<span class="lineNum"> 1670 </span> : : fclose(file_ptr); +<span class="lineNum"> 1671 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1672 </span> : : } +<span class="lineNum"> 1673 </span> : : if(add_acc_force_nat(opts, curr_acc, val) != SUCCESS) +<span class="lineNum"> 1674 </span> : : { +<span class="lineNum"> 1675 </span> : : fclose(file_ptr); +<span class="lineNum"> 1676 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1677 </span> : : } +<span class="lineNum"> 1678 </span> : : #else +<span class="lineNum"> 1679 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 1680 </span> : : &quot;[*] FORCE_NAT not supported.&quot;); +<span class="lineNum"> 1681 </span> : : fclose(file_ptr); +<span class="lineNum"> 1682 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1683 </span> : : #endif +<span class="lineNum"> 1684 </span> : : } +<span class="lineNum"> 1685 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37239 : else if(CONF_VAR_IS(var, &quot;FORCE_SNAT&quot;))</span> +<span class="lineNum"> 1686 </span> : : { +<span class="lineNum"> 1687 </span> : : #if FIREWALL_FIREWALLD +<span class="lineNum"> 1688 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1) !=0 )</span> +<span class="lineNum"> 1689 </span> : : { +<span class="lineNum"> 1690 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1691 </span> : : &quot;[*] FORCE_SNAT requires ENABLE_FIREWD_FORWARDING to be enabled in fwknopd.conf&quot;); +<span class="lineNum"> 1692 </span> :<span class="lineCov"> 1 : fclose(file_ptr);</span> +<span class="lineNum"> 1693 </span> :<span class="lineCov"> 1 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1694 </span> : : } +<span class="lineNum"> 1695 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_force_snat(opts, curr_acc, val) != SUCCESS)</span> +<span class="lineNum"> 1696 </span> : : { +<span class="lineNum"> 1697 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> +<span class="lineNum"> 1698 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1699 </span> : : } +<span class="lineNum"> 1700 </span> : : #elif FIREWALL_IPTABLES +<span class="lineNum"> 1701 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING], &quot;Y&quot;, 1) !=0 ) +<span class="lineNum"> 1702 </span> : : { +<span class="lineNum"> 1703 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 1704 </span> : : &quot;[*] FORCE_SNAT requires ENABLE_IPT_FORWARDING to be enabled in fwknopd.conf&quot;); +<span class="lineNum"> 1705 </span> : : fclose(file_ptr); +<span class="lineNum"> 1706 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1707 </span> : : } +<span class="lineNum"> 1708 </span> : : if(add_acc_force_snat(opts, curr_acc, val) != SUCCESS) +<span class="lineNum"> 1709 </span> : : { +<span class="lineNum"> 1710 </span> : : fclose(file_ptr); +<span class="lineNum"> 1711 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1712 </span> : : } +<span class="lineNum"> 1713 </span> : : #else +<span class="lineNum"> 1714 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 1715 </span> : : &quot;[*] FORCE_SNAT not supported.&quot;); +<span class="lineNum"> 1716 </span> : : fclose(file_ptr); +<span class="lineNum"> 1717 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1718 </span> : : #endif +<span class="lineNum"> 1719 </span> : : } +<span class="lineNum"> 1720 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37238 : else if(CONF_VAR_IS(var, &quot;FORCE_MASQUERADE&quot;))</span> +<span class="lineNum"> 1721 </span> : : { +<span class="lineNum"> 1722 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;force_masquerade), val);</span> +<span class="lineNum"> 1723 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;force_snat), val);</span> +<span class="lineNum"> 1724 </span> : : } +<span class="lineNum"> 1725 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37238 : else if(CONF_VAR_IS(var, &quot;DISABLE_DNAT&quot;))</span> +<span class="lineNum"> 1726 </span> : : { +<span class="lineNum"> 1727 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;disable_dnat), val);</span> +<span class="lineNum"> 1728 </span> : : } +<span class="lineNum"> 1729 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37238 : else if(CONF_VAR_IS(var, &quot;FORWARD_ALL&quot;))</span> +<span class="lineNum"> 1730 </span> : : { +<span class="lineNum"> 1731 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;forward_all), val);</span> +<span class="lineNum"> 1732 </span> : : } +<span class="lineNum"> 1733 </span> : : else +<span class="lineNum"> 1734 </span> : : { +<span class="lineNum"> 1735 </span> :<span class="lineCov"> 109279 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1736 </span> : : &quot;[*] Ignoring unknown access parameter: '%s' in %s&quot;, +<span class="lineNum"> 1737 </span> : : var, opts-&gt;config[CONF_ACCESS_FILE] +<span class="lineNum"> 1738 </span> : : ); +<span class="lineNum"> 1739 </span> : : } +<span class="lineNum"> 1740 </span> : : } +<span class="lineNum"> 1741 </span> : : +<span class="lineNum"> 1742 </span> :<span class="lineCov"> 514 : fclose(file_ptr);</span> +<span class="lineNum"> 1743 </span> : : +<span class="lineNum"> 1744 </span> : : /* Basic check to ensure that we got at least one SOURCE stanza with +<span class="lineNum"> 1745 </span> : : * a valid KEY defined (valid meaning it has a value that is not +<span class="lineNum"> 1746 </span> : : * &quot;__CHANGEME__&quot;. +<span class="lineNum"> 1747 </span> : : */ +<span class="lineNum"> 1748 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 505 times"> + </span>]:<span class="lineCov"> 514 : if (got_source == 0)</span> +<span class="lineNum"> 1749 </span> : : { +<span class="lineNum"> 1750 </span> :<span class="lineCov"> 9 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1751 </span> : : &quot;[*] Could not find valid SOURCE stanza in access file: '%s'&quot;, +<span class="lineNum"> 1752 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1753 </span> :<span class="lineCov"> 9 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1754 </span> : : } +<span class="lineNum"> 1755 </span> : : +<span class="lineNum"> 1756 </span> : : /* Sanity check the last stanza +<span class="lineNum"> 1757 </span> : : */ +<span class="lineNum"> 1758 </span> [<span class="branchCov" title="Branch 1 was taken 20 times"> + </span><span class="branchCov" title="Branch 2 was taken 485 times"> + </span>]:<span class="lineCov"> 505 : if(!acc_data_is_valid(opts, user_pw, curr_acc))</span> +<span class="lineNum"> 1759 </span> : : { +<span class="lineNum"> 1760 </span> :<span class="lineCov"> 20 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1761 </span> : : &quot;[*] Data error in access file: '%s'&quot;, +<span class="lineNum"> 1762 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); +<span class="lineNum"> 1763 </span> :<span class="lineCov"> 20 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1764 </span> : : } +<span class="lineNum"> 1765 </span> : : +<span class="lineNum"> 1766 </span> : : /* Expand our the expandable fields into their respective data buckets. +<span class="lineNum"> 1767 </span> : : */ +<span class="lineNum"> 1768 </span> :<span class="lineCov"> 485 : expand_acc_ent_lists(opts);</span> +<span class="lineNum"> 1769 </span> : : +<span class="lineNum"> 1770 </span> : : /* Make sure default values are set where needed. +<span class="lineNum"> 1771 </span> : : */ +<span class="lineNum"> 1772 </span> :<span class="lineCov"> 249 : set_acc_defaults(opts);</span> +<span class="lineNum"> 1773 </span> : : +<span class="lineNum"> 1774 </span> :<span class="lineCov"> 249 : return;</span> +<span class="lineNum"> 1775 </span> : : } +<a name="1776"><span class="lineNum"> 1776 </span> : : </a> +<span class="lineNum"> 1777 </span> : : int +<span class="lineNum"> 1778 </span> :<span class="lineNoCov"> 0 : compare_addr_list(acc_int_list_t *ip_list, const uint32_t ip)</span> +<span class="lineNum"> 1779 </span> : : { +<span class="lineNum"> 1780 </span> :<span class="lineNoCov"> 0 : int match = 0;</span> +<span class="lineNum"> 1781 </span> : : +<span class="lineNum"> 1782 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(ip_list)</span> +<span class="lineNum"> 1783 </span> : : { +<span class="lineNum"> 1784 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((ip &amp; ip_list-&gt;mask) == (ip_list-&gt;maddr &amp; ip_list-&gt;mask))</span> +<span class="lineNum"> 1785 </span> : : { +<span class="lineNum"> 1786 </span> : : match = 1; +<span class="lineNum"> 1787 </span> : : break; +<span class="lineNum"> 1788 </span> : : } +<span class="lineNum"> 1789 </span> : : +<span class="lineNum"> 1790 </span> :<span class="lineNoCov"> 0 : ip_list = ip_list-&gt;next;</span> +<span class="lineNum"> 1791 </span> : : } +<span class="lineNum"> 1792 </span> : : +<span class="lineNum"> 1793 </span> :<span class="lineNoCov"> 0 : return(match);</span> +<span class="lineNum"> 1794 </span> : : } +<span class="lineNum"> 1795 </span> : : +<span class="lineNum"> 1796 </span> : : /* Compare the contents of 2 port lists. Return true on a match. +<span class="lineNum"> 1797 </span> : : * Match depends on the match_any flag. if match_any is 1 then any +<span class="lineNum"> 1798 </span> : : * entry in the incoming data need only match one item to return true. +<span class="lineNum"> 1799 </span> : : * Otherwise all entries in the incoming data must have a corresponding +<span class="lineNum"> 1800 </span> : : * match in the access port_list. +<a name="1801"><span class="lineNum"> 1801 </span> : : */</a> +<span class="lineNum"> 1802 </span> : : static int +<span class="lineNum"> 1803 </span> :<span class="lineNoCov"> 0 : compare_port_list(acc_port_list_t *in, acc_port_list_t *ac, const int match_any)</span> +<span class="lineNum"> 1804 </span> : : { +<span class="lineNum"> 1805 </span> :<span class="lineNoCov"> 0 : int a_cnt = 0;</span> +<span class="lineNum"> 1806 </span> :<span class="lineNoCov"> 0 : int i_cnt = 0;</span> +<span class="lineNum"> 1807 </span> : : +<span class="lineNum"> 1808 </span> : : acc_port_list_t *tlist; +<span class="lineNum"> 1809 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(in)</span> +<span class="lineNum"> 1810 </span> : : { +<span class="lineNum"> 1811 </span> :<span class="lineNoCov"> 0 : i_cnt++;</span> +<span class="lineNum"> 1812 </span> : : +<span class="lineNum"> 1813 </span> :<span class="lineNoCov"> 0 : tlist = ac;</span> +<span class="lineNum"> 1814 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(tlist)</span> +<span class="lineNum"> 1815 </span> : : { +<span class="lineNum"> 1816 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(in-&gt;proto == tlist-&gt;proto &amp;&amp; in-&gt;port == tlist-&gt;port)</span> +<span class="lineNum"> 1817 </span> : : { +<span class="lineNum"> 1818 </span> :<span class="lineNoCov"> 0 : a_cnt++;</span> +<span class="lineNum"> 1819 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(match_any == 1)</span> +<span class="lineNum"> 1820 </span> : : return(1); +<span class="lineNum"> 1821 </span> : : } +<span class="lineNum"> 1822 </span> :<span class="lineNoCov"> 0 : tlist = tlist-&gt;next;</span> +<span class="lineNum"> 1823 </span> : : } +<span class="lineNum"> 1824 </span> :<span class="lineNoCov"> 0 : in = in-&gt;next;</span> +<span class="lineNum"> 1825 </span> : : } +<span class="lineNum"> 1826 </span> : : +<span class="lineNum"> 1827 </span> :<span class="lineNoCov"> 0 : return(i_cnt == a_cnt);</span> +<span class="lineNum"> 1828 </span> : : } +<span class="lineNum"> 1829 </span> : : +<span class="lineNum"> 1830 </span> : : /* Take a proto/port string (or mulitple comma-separated strings) and check +<span class="lineNum"> 1831 </span> : : * them against the list for the given access stanza. +<span class="lineNum"> 1832 </span> : : * +<span class="lineNum"> 1833 </span> : : * Return 1 if we are allowed +<a name="1834"><span class="lineNum"> 1834 </span> : : */</a> +<span class="lineNum"> 1835 </span> : : int +<span class="lineNum"> 1836 </span> :<span class="lineNoCov"> 0 : acc_check_port_access(acc_stanza_t *acc, char *port_str)</span> +<span class="lineNum"> 1837 </span> : : { +<span class="lineNum"> 1838 </span> :<span class="lineNoCov"> 0 : int res = 1, ctr = 0;</span> +<span class="lineNum"> 1839 </span> : : +<span class="lineNum"> 1840 </span> :<span class="lineNoCov"> 0 : char buf[ACCESS_BUF_LEN] = {0};</span> +<span class="lineNum"> 1841 </span> : : char *ndx, *start; +<span class="lineNum"> 1842 </span> : : +<span class="lineNum"> 1843 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *o_pl = acc-&gt;oport_list;</span> +<span class="lineNum"> 1844 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *r_pl = acc-&gt;rport_list;</span> +<span class="lineNum"> 1845 </span> : : +<span class="lineNum"> 1846 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *in_pl = NULL;</span> +<span class="lineNum"> 1847 </span> : : +<span class="lineNum"> 1848 </span> :<span class="lineNoCov"> 0 : start = port_str;</span> +<span class="lineNum"> 1849 </span> : : +<span class="lineNum"> 1850 </span> : : /* Create our own internal port_list from the incoming SPA data +<span class="lineNum"> 1851 </span> : : * for comparison. +<span class="lineNum"> 1852 </span> : : */ +<span class="lineNum"> 1853 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(ndx = start; *ndx != '\0'; ndx++)</span> +<span class="lineNum"> 1854 </span> : : { +<span class="lineNum"> 1855 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*ndx == ',')</span> +<span class="lineNum"> 1856 </span> : : { +<span class="lineNum"> 1857 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((ctr &gt;= ACCESS_BUF_LEN)</span> +<span class="lineNum"> 1858 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || (((ndx-start)+1) &gt;= ACCESS_BUF_LEN))</span> +<span class="lineNum"> 1859 </span> : : { +<span class="lineNum"> 1860 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1861 </span> : : &quot;[*] Unable to create acc_port_list from incoming data: %s&quot;, +<span class="lineNum"> 1862 </span> : : port_str +<span class="lineNum"> 1863 </span> : : ); +<span class="lineNum"> 1864 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> +<span class="lineNum"> 1865 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 1866 </span> : : } +<span class="lineNum"> 1867 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 1868 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_port_list_ent(&amp;in_pl, buf) == 0)</span> +<span class="lineNum"> 1869 </span> : : { +<span class="lineNum"> 1870 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid proto/port string&quot;);</span> +<span class="lineNum"> 1871 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> +<span class="lineNum"> 1872 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 1873 </span> : : } +<span class="lineNum"> 1874 </span> : : +<span class="lineNum"> 1875 </span> :<span class="lineNoCov"> 0 : start = ndx+1;</span> +<span class="lineNum"> 1876 </span> :<span class="lineNoCov"> 0 : ctr = 0;</span> +<span class="lineNum"> 1877 </span> : : } +<span class="lineNum"> 1878 </span> :<span class="lineNoCov"> 0 : ctr++;</span> +<span class="lineNum"> 1879 </span> : : } +<span class="lineNum"> 1880 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((ctr &gt;= ACCESS_BUF_LEN)</span> +<span class="lineNum"> 1881 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || (((ndx-start)+1) &gt;= ACCESS_BUF_LEN))</span> +<span class="lineNum"> 1882 </span> : : { +<span class="lineNum"> 1883 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1884 </span> : : &quot;[*] Unable to create acc_port_list from incoming data: %s&quot;, +<span class="lineNum"> 1885 </span> : : port_str +<span class="lineNum"> 1886 </span> : : ); +<span class="lineNum"> 1887 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> +<span class="lineNum"> 1888 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 1889 </span> : : } +<span class="lineNum"> 1890 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> +<span class="lineNum"> 1891 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_port_list_ent(&amp;in_pl, buf) == 0)</span> +<span class="lineNum"> 1892 </span> : : { +<span class="lineNum"> 1893 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid proto/port string&quot;);</span> +<span class="lineNum"> 1894 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> +<span class="lineNum"> 1895 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 1896 </span> : : } +<span class="lineNum"> 1897 </span> : : +<span class="lineNum"> 1898 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(in_pl == NULL)</span> +<span class="lineNum"> 1899 </span> : : { +<span class="lineNum"> 1900 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1901 </span> : : &quot;[*] Unable to create acc_port_list from incoming data: %s&quot;, port_str +<span class="lineNum"> 1902 </span> : : ); +<span class="lineNum"> 1903 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 1904 </span> : : } +<span class="lineNum"> 1905 </span> : : +<span class="lineNum"> 1906 </span> : : /* Start with restricted ports (if any). Any match (even if only one +<span class="lineNum"> 1907 </span> : : * entry) means not allowed. +<span class="lineNum"> 1908 </span> : : */ +<span class="lineNum"> 1909 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((acc-&gt;rport_list != NULL) &amp;&amp; (compare_port_list(in_pl, r_pl, 1)))</span> +<span class="lineNum"> 1910 </span> : : { +<span class="lineNum"> 1911 </span> : : res = 0; +<span class="lineNum"> 1912 </span> : : goto cleanup_and_bail; +<span class="lineNum"> 1913 </span> : : } +<span class="lineNum"> 1914 </span> : : +<span class="lineNum"> 1915 </span> : : /* For open port list, all must match. +<span class="lineNum"> 1916 </span> : : */ +<span class="lineNum"> 1917 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((acc-&gt;oport_list != NULL) &amp;&amp; (!compare_port_list(in_pl, o_pl, 0)))</span> +<span class="lineNum"> 1918 </span> :<span class="lineNoCov"> 0 : res = 0;</span> +<span class="lineNum"> 1919 </span> : : +<span class="lineNum"> 1920 </span> : : cleanup_and_bail: +<span class="lineNum"> 1921 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> +<span class="lineNum"> 1922 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 1923 </span> : : } +<span class="lineNum"> 1924 </span> : : +<span class="lineNum"> 1925 </span> : : /* Dump the configuration +<a name="1926"><span class="lineNum"> 1926 </span> : : */</a> +<span class="lineNum"> 1927 </span> : : void +<span class="lineNum"> 1928 </span> :<span class="lineCov"> 249 : dump_access_list(const fko_srv_options_t *opts)</span> +<span class="lineNum"> 1929 </span> : : { +<span class="lineNum"> 1930 </span> :<span class="lineCov"> 249 : int i = 0;</span> +<span class="lineNum"> 1931 </span> : : +<span class="lineNum"> 1932 </span> :<span class="lineCov"> 249 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> +<span class="lineNum"> 1933 </span> : : +<span class="lineNum"> 1934 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;Current fwknopd access settings:\n&quot;);</span> +<span class="lineNum"> 1935 </span> : : +<span class="lineNum"> 1936 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if(!acc)</span> +<span class="lineNum"> 1937 </span> : : { +<span class="lineNum"> 1938 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;\n ** No Access Settings Defined **\n\n&quot;);</span> +<span class="lineNum"> 1939 </span> :<span class="lineCov"> 249 : return;</span> +<span class="lineNum"> 1940 </span> : : } +<span class="lineNum"> 1941 </span> : : +<span class="lineNum"> 1942 </span> [<span class="branchCov" title="Branch 0 was taken 8355 times"> + </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 8604 : while(acc)</span> +<span class="lineNum"> 1943 </span> : : { +<span class="lineNum"> 1944 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 8355 times"> + </span>]:<span class="lineCov"> 8480 : fprintf(stdout,</span> +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>][<span class="branchCov" title="Branch 6 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 8 was not taken"> - </span><span class="branchCov" title="Branch 9 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchCov" title="Branch 11 was taken 8355 times"> + </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchCov" title="Branch 13 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchCov" title="Branch 15 was taken 8355 times"> + </span>] +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 16 was taken 125 times"> + </span><span class="branchCov" title="Branch 17 was taken 8230 times"> + </span>][<span class="branchCov" title="Branch 19 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span>] +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 21 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span>][<span class="branchCov" title="Branch 23 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 25 was not taken"> - </span><span class="branchCov" title="Branch 26 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 27 was not taken"> - </span><span class="branchCov" title="Branch 28 was taken 8355 times"> + </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 29 was not taken"> - </span><span class="branchCov" title="Branch 30 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchCov" title="Branch 32 was taken 8355 times"> + </span>] +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 33 was taken 8315 times"> + </span><span class="branchCov" title="Branch 34 was taken 40 times"> + </span>][<span class="branchCov" title="Branch 35 was taken 79 times"> + </span><span class="branchCov" title="Branch 36 was taken 8276 times"> + </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 37 was not taken"> - </span><span class="branchCov" title="Branch 38 was taken 8355 times"> + </span>][<span class="branchCov" title="Branch 39 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 40 was not taken"> - </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 41 was not taken"> - </span><span class="branchCov" title="Branch 42 was taken 8355 times"> + </span>][<span class="branchCov" title="Branch 43 was taken 286 times"> + </span><span class="branchCov" title="Branch 44 was taken 8069 times"> + </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 45 was not taken"> - </span><span class="branchCov" title="Branch 46 was taken 8355 times"> + </span>][<span class="branchCov" title="Branch 47 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 48 was not taken"> - </span>] +<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 49 was not taken"> - </span><span class="branchCov" title="Branch 50 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 51 was not taken"> - </span><span class="branchCov" title="Branch 52 was taken 8355 times"> + </span>] +<span class="lineNum"> </span> [<span class="branchNoCov" title="Branch 53 was not taken"> - </span><span class="branchCov" title="Branch 54 was taken 8355 times"> + </span>] +<span class="lineNum"> 1945 </span> : : &quot;SOURCE (%i): %s\n&quot; +<span class="lineNum"> 1946 </span> : : &quot;==============================================================\n&quot; +<span class="lineNum"> 1947 </span> : : &quot; DESTINATION: %s\n&quot; +<span class="lineNum"> 1948 </span> : : &quot; OPEN_PORTS: %s\n&quot; +<span class="lineNum"> 1949 </span> : : &quot; RESTRICT_PORTS: %s\n&quot; +<span class="lineNum"> 1950 </span> : : &quot; KEY: %s\n&quot; +<span class="lineNum"> 1951 </span> : : &quot; KEY_BASE64: %s\n&quot; +<span class="lineNum"> 1952 </span> : : &quot; KEY_LEN: %d\n&quot; +<span class="lineNum"> 1953 </span> : : &quot; HMAC_KEY: %s\n&quot; +<span class="lineNum"> 1954 </span> : : &quot; HMAC_KEY_BASE64: %s\n&quot; +<span class="lineNum"> 1955 </span> : : &quot; HMAC_KEY_LEN: %d\n&quot; +<span class="lineNum"> 1956 </span> : : &quot; HMAC_DIGEST_TYPE: %d\n&quot; +<span class="lineNum"> 1957 </span> : : &quot; FW_ACCESS_TIMEOUT: %i\n&quot; +<span class="lineNum"> 1958 </span> : : &quot; ENABLE_CMD_EXEC: %s\n&quot; +<span class="lineNum"> 1959 </span> : : &quot; CMD_EXEC_USER: %s\n&quot; +<span class="lineNum"> 1960 </span> : : &quot; REQUIRE_USERNAME: %s\n&quot; +<span class="lineNum"> 1961 </span> : : &quot; REQUIRE_SOURCE_ADDRESS: %s\n&quot; +<span class="lineNum"> 1962 </span> : : &quot; FORCE_NAT (ip): %s\n&quot; +<span class="lineNum"> 1963 </span> : : &quot; FORCE_NAT (proto): %s\n&quot; +<span class="lineNum"> 1964 </span> : : &quot; FORCE_NAT (port): %d\n&quot; +<span class="lineNum"> 1965 </span> : : &quot; FORCE_SNAT (ip): %s\n&quot; +<span class="lineNum"> 1966 </span> : : &quot; FORCE_MASQUERADE: %s\n&quot; +<span class="lineNum"> 1967 </span> : : &quot; DISABLE_DNAT: %s\n&quot; +<span class="lineNum"> 1968 </span> : : &quot; FORWARD_ALL: %s\n&quot; +<span class="lineNum"> 1969 </span> : : &quot; ACCESS_EXPIRE: %s&quot; /* asctime() adds a newline */ +<span class="lineNum"> 1970 </span> : : &quot; GPG_HOME_DIR: %s\n&quot; +<span class="lineNum"> 1971 </span> : : &quot; GPG_EXE: %s\n&quot; +<span class="lineNum"> 1972 </span> : : &quot; GPG_DECRYPT_ID: %s\n&quot; +<span class="lineNum"> 1973 </span> : : &quot; GPG_DECRYPT_PW: %s\n&quot; +<span class="lineNum"> 1974 </span> : : &quot; GPG_REQUIRE_SIG: %s\n&quot; +<span class="lineNum"> 1975 </span> : : &quot;GPG_IGNORE_SIG_VERIFY_ERROR: %s\n&quot; +<span class="lineNum"> 1976 </span> : : &quot; GPG_REMOTE_ID: %s\n&quot; +<span class="lineNum"> 1977 </span> : : &quot; GPG_FINGERPRINT_ID: %s\n&quot;, +<span class="lineNum"> 1978 </span> : : ++i, +<span class="lineNum"> 1979 </span> : : acc-&gt;source, +<span class="lineNum"> 1980 </span> :<span class="lineCov"> 8355 : (acc-&gt;destination == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;destination,</span> +<span class="lineNum"> 1981 </span> :<span class="lineCov"> 8355 : (acc-&gt;open_ports == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;open_ports,</span> +<span class="lineNum"> 1982 </span> :<span class="lineCov"> 8355 : (acc-&gt;restrict_ports == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;restrict_ports,</span> +<span class="lineNum"> 1983 </span> :<span class="lineCov"> 8355 : (acc-&gt;key == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> +<span class="lineNum"> 1984 </span> :<span class="lineCov"> 8355 : (acc-&gt;key_base64 == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> +<span class="lineNum"> 1985 </span> : : acc-&gt;key_len ? acc-&gt;key_len : 0, +<span class="lineNum"> 1986 </span> :<span class="lineCov"> 8355 : (acc-&gt;hmac_key == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> +<span class="lineNum"> 1987 </span> :<span class="lineCov"> 8355 : (acc-&gt;hmac_key_base64 == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> +<span class="lineNum"> 1988 </span> : : acc-&gt;hmac_key_len ? acc-&gt;hmac_key_len : 0, +<span class="lineNum"> 1989 </span> : : acc-&gt;hmac_type, +<span class="lineNum"> 1990 </span> : : acc-&gt;fw_access_timeout, +<span class="lineNum"> 1991 </span> :<span class="lineCov"> 8355 : acc-&gt;enable_cmd_exec ? &quot;Yes&quot; : &quot;No&quot;,</span> +<span class="lineNum"> 1992 </span> :<span class="lineCov"> 8355 : (acc-&gt;cmd_exec_user == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;cmd_exec_user,</span> +<span class="lineNum"> 1993 </span> :<span class="lineCov"> 8355 : (acc-&gt;require_username == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;require_username,</span> +<span class="lineNum"> 1994 </span> :<span class="lineCov"> 8355 : acc-&gt;require_source_address ? &quot;Yes&quot; : &quot;No&quot;,</span> +<span class="lineNum"> 1995 </span> : : acc-&gt;force_nat ? acc-&gt;force_nat_ip : &quot;&lt;not set&gt;&quot;, +<span class="lineNum"> 1996 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : acc-&gt;force_nat &amp;&amp; acc-&gt;force_nat_proto != NULL ? acc-&gt;force_nat_proto : &quot;&lt;not set&gt;&quot;,</span> +<span class="lineNum"> 1997 </span> :<span class="lineCov"> 8355 : acc-&gt;force_nat ? acc-&gt;force_nat_port : 0,</span> +<span class="lineNum"> 1998 </span> :<span class="lineCov"> 8355 : acc-&gt;force_snat ? acc-&gt;force_snat_ip : &quot;&lt;not set&gt;&quot;,</span> +<span class="lineNum"> 1999 </span> :<span class="lineCov"> 8355 : acc-&gt;force_masquerade ? &quot;Yes&quot; : &quot;No&quot;,</span> +<span class="lineNum"> 2000 </span> :<span class="lineCov"> 8355 : acc-&gt;disable_dnat ? &quot;Yes&quot; : &quot;No&quot;,</span> +<span class="lineNum"> 2001 </span> :<span class="lineCov"> 8355 : acc-&gt;forward_all ? &quot;Yes&quot; : &quot;No&quot;,</span> +<span class="lineNum"> 2002 </span> :<span class="lineCov"> 125 : (acc-&gt;access_expire_time &gt; 0) ? asctime(localtime(&amp;acc-&gt;access_expire_time)) : &quot;&lt;not set&gt;\n&quot;,</span> +<span class="lineNum"> 2003 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_home_dir == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_home_dir,</span> +<span class="lineNum"> 2004 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_exe == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_exe,</span> +<span class="lineNum"> 2005 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_decrypt_id == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_decrypt_id,</span> +<span class="lineNum"> 2006 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_decrypt_pw == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> +<span class="lineNum"> 2007 </span> :<span class="lineCov"> 8355 : acc-&gt;gpg_require_sig ? &quot;Yes&quot; : &quot;No&quot;,</span> +<span class="lineNum"> 2008 </span> :<span class="lineCov"> 8355 : acc-&gt;gpg_ignore_sig_error ? &quot;Yes&quot; : &quot;No&quot;,</span> +<span class="lineNum"> 2009 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_remote_id == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_remote_id,</span> +<span class="lineNum"> 2010 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_remote_fpr == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_remote_fpr</span> +<span class="lineNum"> 2011 </span> : : ); +<span class="lineNum"> 2012 </span> : : +<span class="lineNum"> 2013 </span> :<span class="lineCov"> 8355 : fprintf(stdout, &quot;\n&quot;);</span> +<span class="lineNum"> 2014 </span> : : +<span class="lineNum"> 2015 </span> :<span class="lineCov"> 8355 : acc = acc-&gt;next;</span> +<span class="lineNum"> 2016 </span> : : } +<span class="lineNum"> 2017 </span> : : +<span class="lineNum"> 2018 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;\n&quot;);</span> +<span class="lineNum"> 2019 </span> :<span class="lineCov"> 249 : fflush(stdout);</span> +<span class="lineNum"> 2020 </span> : : } +<span class="lineNum"> 2021 </span> : : #ifdef HAVE_C_UNIT_TESTS +<span class="lineNum"> 2022 </span> : : +<span class="lineNum"> 2023 </span> : : DECLARE_UTEST(compare_port_list, &quot;check compare_port_list function&quot;) +<span class="lineNum"> 2024 </span> : : { +<span class="lineNum"> 2025 </span> : : acc_port_list_t *in1_pl = NULL; +<span class="lineNum"> 2026 </span> : : acc_port_list_t *in2_pl = NULL; +<span class="lineNum"> 2027 </span> : : acc_port_list_t *acc_pl = NULL; +<span class="lineNum"> 2028 </span> : : +<span class="lineNum"> 2029 </span> : : /* Match any test */ +<span class="lineNum"> 2030 </span> : : free_acc_port_list(in1_pl); +<span class="lineNum"> 2031 </span> : : free_acc_port_list(acc_pl); +<span class="lineNum"> 2032 </span> : : add_port_list_ent(&amp;in1_pl, &quot;udp/6002&quot;); +<span class="lineNum"> 2033 </span> : : add_port_list_ent(&amp;in2_pl, &quot;udp/6002, udp/6003&quot;); +<span class="lineNum"> 2034 </span> : : add_port_list_ent(&amp;acc_pl, &quot;udp/6002, udp/6003&quot;); +<span class="lineNum"> 2035 </span> : : CU_ASSERT(compare_port_list(in1_pl, acc_pl, 1) == 1); /* Only one match is needed from access port list - 1 */ +<span class="lineNum"> 2036 </span> : : CU_ASSERT(compare_port_list(in2_pl, acc_pl, 1) == 1); /* Only match is needed from access port list - 2 */ +<span class="lineNum"> 2037 </span> : : CU_ASSERT(compare_port_list(in1_pl, acc_pl, 0) == 1); /* All ports must match access port list - 1 */ +<span class="lineNum"> 2038 </span> : : CU_ASSERT(compare_port_list(in2_pl, acc_pl, 0) == 1); /* All ports must match access port list - 2 */ +<span class="lineNum"> 2039 </span> : : CU_ASSERT(compare_port_list(acc_pl, in1_pl, 0) == 0); /* All ports must match in1 port list - 1 */ +<span class="lineNum"> 2040 </span> : : CU_ASSERT(compare_port_list(acc_pl, in2_pl, 0) == 1); /* All ports must match in2 port list - 2 */ +<span class="lineNum"> 2041 </span> : : } +<span class="lineNum"> 2042 </span> : : +<span class="lineNum"> 2043 </span> : : int register_ts_access(void) +<span class="lineNum"> 2044 </span> : : { +<span class="lineNum"> 2045 </span> : : ts_init(&amp;TEST_SUITE(access), TEST_SUITE_DESCR(access), NULL, NULL); +<span class="lineNum"> 2046 </span> : : ts_add_utest(&amp;TEST_SUITE(access), UTEST_FCT(compare_port_list), UTEST_DESCR(compare_port_list)); +<span class="lineNum"> 2047 </span> : : +<span class="lineNum"> 2048 </span> : : return register_ts(&amp;TEST_SUITE(access)); +<span class="lineNum"> 2049 </span> : : } +<span class="lineNum"> 2050 </span> : : #endif /* HAVE_C_UNIT_TESTS */ +<span class="lineNum"> 2051 </span> : : +<span class="lineNum"> 2052 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html new file mode 100644 index 00000000..c4892a14 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html @@ -0,0 +1,125 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/config_init.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">223</td> + <td class="headerCovTableEntry">332</td> + <td class="headerCovTableEntryLo">67.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntryHi">90.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">124</td> + <td class="headerCovTableEntry">224</td> + <td class="headerCovTableEntryLo">55.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="config_init.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#66">set_config_entry</a></td> + <td class="coverFnHi">71659</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#112">config_entry_index</a></td> + <td class="coverFnHi">10361</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#47">range_check</a></td> + <td class="coverFnHi">4770</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#205">parse_config_file</a></td> + <td class="coverFnHi">3628</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#907">config_init</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#887">set_preconfig_entries</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#126">free_configs</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#138">validate_int_var_ranges</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#315">validate_options</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1197">dump_config</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1217">usage</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html new file mode 100644 index 00000000..2ff3bc4b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html @@ -0,0 +1,125 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/config_init.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">223</td> + <td class="headerCovTableEntry">332</td> + <td class="headerCovTableEntryLo">67.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntryHi">90.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">124</td> + <td class="headerCovTableEntry">224</td> + <td class="headerCovTableEntryLo">55.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="config_init.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#112">config_entry_index</a></td> + <td class="coverFnHi">10361</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#907">config_init</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1197">dump_config</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#126">free_configs</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#205">parse_config_file</a></td> + <td class="coverFnHi">3628</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#47">range_check</a></td> + <td class="coverFnHi">4770</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#66">set_config_entry</a></td> + <td class="coverFnHi">71659</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#887">set_preconfig_entries</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#1217">usage</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#138">validate_int_var_ranges</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="config_init.c.gcov.html#315">validate_options</a></td> + <td class="coverFnHi">795</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html new file mode 100644 index 00000000..9b24fabb --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html @@ -0,0 +1,1384 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/config_init.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - config_init.c<span style="font-size: 80%;"> (source / <a href="config_init.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">223</td> + <td class="headerCovTableEntry">332</td> + <td class="headerCovTableEntryLo">67.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">10</td> + <td class="headerCovTableEntry">11</td> + <td class="headerCovTableEntryHi">90.9 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">124</td> + <td class="headerCovTableEntry">224</td> + <td class="headerCovTableEntryLo">55.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ****************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: config_init.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Command-line and config file processing for fwknop server. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ****************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_errors.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;config_init.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;access.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;cmd_opts.h&quot; +<span class="lineNum"> 36 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 37 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : #if FIREWALL_FIREWALLD +<span class="lineNum"> 40 </span> : : #include &quot;fw_util_firewalld.h&quot; +<span class="lineNum"> 41 </span> : : #elif FIREWALL_IPTABLES +<span class="lineNum"> 42 </span> : : #include &quot;fw_util_iptables.h&quot; +<span class="lineNum"> 43 </span> : : #endif +<span class="lineNum"> 44 </span> : : +<span class="lineNum"> 45 </span> : : /* Check to see if an integer variable has a value that is within a +<span class="lineNum"> 46 </span> : : * specific range +<a name="47"><span class="lineNum"> 47 </span> : : */</a> +<span class="lineNum"> 48 </span> : : static void +<span class="lineNum"> 49 </span> :<span class="lineCov"> 4770 : range_check(fko_srv_options_t *opts, char *var, char *val, int low, int high)</span> +<span class="lineNum"> 50 </span> : : { +<span class="lineNum"> 51 </span> : : int is_err; +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> :<span class="lineCov"> 4770 : strtol_wrapper(val, low, high, NO_EXIT_UPON_ERR, &amp;is_err);</span> +<span class="lineNum"> 54 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 4770 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 55 </span> : : { +<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] var %s value '%s' not in the range %d-%d&quot;,</span> +<span class="lineNum"> 57 </span> : : var, val, low, high); +<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 59 </span> : : } +<span class="lineNum"> 60 </span> : : +<span class="lineNum"> 61 </span> :<span class="lineCov"> 4770 : return;</span> +<span class="lineNum"> 62 </span> : : } +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> : : /* Take an index and a string value. malloc the space for the value +<span class="lineNum"> 65 </span> : : * and assign it to the array at the specified index. +<a name="66"><span class="lineNum"> 66 </span> : : */</a> +<span class="lineNum"> 67 </span> : : static void +<span class="lineNum"> 68 </span> :<span class="lineCov"> 71659 : set_config_entry(fko_srv_options_t *opts, const int var_ndx, const char *value)</span> +<span class="lineNum"> 69 </span> : : { +<span class="lineNum"> 70 </span> : : int space_needed; +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : /* Sanity check the index value. +<span class="lineNum"> 73 </span> : : */ +<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71659 times"> + </span>]:<span class="lineCov"> 71659 : if(var_ndx &lt; 0 || var_ndx &gt;= NUMBER_OF_CONFIG_ENTRIES)</span> +<span class="lineNum"> 75 </span> : : { +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Index value of %i is not valid&quot;, var_ndx);</span> +<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 78 </span> : : } +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> : : /* If this particular entry was already set (i.e. not NULL), then +<span class="lineNum"> 81 </span> : : * assume it needs to be freed first. +<span class="lineNum"> 82 </span> : : */ +<span class="lineNum"> 83 </span> [<span class="branchCov" title="Branch 0 was taken 25595 times"> + </span><span class="branchCov" title="Branch 1 was taken 46064 times"> + </span>]:<span class="lineCov"> 71659 : if(opts-&gt;config[var_ndx] != NULL)</span> +<span class="lineNum"> 84 </span> :<span class="lineCov"> 25595 : free(opts-&gt;config[var_ndx]);</span> +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> : : /* If we are setting it to NULL, do it and be done. +<span class="lineNum"> 87 </span> : : */ +<span class="lineNum"> 88 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71659 times"> + </span>]:<span class="lineCov"> 71659 : if(value == NULL)</span> +<span class="lineNum"> 89 </span> : : { +<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[var_ndx] = NULL;</span> +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 92 </span> : : } +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> : : /* Otherwise, make the space we need and set it. +<span class="lineNum"> 95 </span> : : */ +<span class="lineNum"> 96 </span> :<span class="lineCov"> 71659 : space_needed = strlen(value) + 1;</span> +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> :<span class="lineCov"> 71659 : opts-&gt;config[var_ndx] = calloc(1, space_needed);</span> +<span class="lineNum"> 99 </span> : : +<span class="lineNum"> 100 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71659 times"> + </span>]:<span class="lineCov"> 71659 : if(opts-&gt;config[var_ndx] == NULL)</span> +<span class="lineNum"> 101 </span> : : { +<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal memory allocation error!&quot;);</span> +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 104 </span> : : } +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> :<span class="lineCov"> 71659 : strlcpy(opts-&gt;config[var_ndx], value, space_needed);</span> +<span class="lineNum"> 107 </span> : : +<span class="lineNum"> 108 </span> :<span class="lineCov"> 71659 : return;</span> +<span class="lineNum"> 109 </span> : : } +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> : : /* Given a config parameter name, return its index or -1 if not found. +<a name="112"><span class="lineNum"> 112 </span> : : */</a> +<span class="lineNum"> 113 </span> : : static int +<span class="lineNum"> 114 </span> :<span class="lineCov"> 10361 : config_entry_index(const fko_srv_options_t *opts, const char *var)</span> +<span class="lineNum"> 115 </span> : : { +<span class="lineNum"> 116 </span> : : int i; +<span class="lineNum"> 117 </span> : : +<span class="lineNum"> 118 </span> [<span class="branchCov" title="Branch 0 was taken 344077 times"> + </span><span class="branchCov" title="Branch 1 was taken 1739 times"> + </span>]:<span class="lineCov"> 345816 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> +<span class="lineNum"> 119 </span>[<span class="branchCov" title="Branch 0 was taken 49461 times"> + </span><span class="branchCov" title="Branch 1 was taken 294616 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 8622 times"> + </span><span class="branchCov" title="Branch 3 was taken 40839 times"> + </span>]:<span class="lineCov"> 344077 : if(opts-&gt;config[i] != NULL &amp;&amp; CONF_VAR_IS(var, config_map[i]))</span> +<span class="lineNum"> 120 </span> :<span class="lineCov"> 8622 : return(i);</span> +<span class="lineNum"> 121 </span> : : +<span class="lineNum"> 122 </span> : : return(-1); +<span class="lineNum"> 123 </span> : : } +<span class="lineNum"> 124 </span> : : +<span class="lineNum"> 125 </span> : : /* Free the config memory +<a name="126"><span class="lineNum"> 126 </span> : : */</a> +<span class="lineNum"> 127 </span> : : void +<span class="lineNum"> 128 </span> :<span class="lineCov"> 1814 : free_configs(fko_srv_options_t *opts)</span> +<span class="lineNum"> 129 </span> : : { +<span class="lineNum"> 130 </span> : : int i; +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> :<span class="lineCov"> 1814 : free_acc_stanzas(opts);</span> +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> [<span class="branchCov" title="Branch 1 was taken 87072 times"> + </span><span class="branchCov" title="Branch 2 was taken 1814 times"> + </span>]:<span class="lineCov"> 88886 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> +<span class="lineNum"> 135 </span> [<span class="branchCov" title="Branch 0 was taken 46064 times"> + </span><span class="branchCov" title="Branch 1 was taken 41008 times"> + </span>]:<span class="lineCov"> 87072 : if(opts-&gt;config[i] != NULL)</span> +<span class="lineNum"> 136 </span> :<span class="lineCov"> 46064 : free(opts-&gt;config[i]);</span> +<span class="lineNum"> 137 </span> :<span class="lineCov"> 1814 : }</span> +<a name="138"><span class="lineNum"> 138 </span> : : </a> +<span class="lineNum"> 139 </span> : : static void +<span class="lineNum"> 140 </span> :<span class="lineCov"> 795 : validate_int_var_ranges(fko_srv_options_t *opts)</span> +<span class="lineNum"> 141 </span> : : { +<span class="lineNum"> 142 </span> : : #if FIREWALL_IPFW +<span class="lineNum"> 143 </span> : : int is_err = FKO_SUCCESS; +<span class="lineNum"> 144 </span> : : #endif +<span class="lineNum"> 145 </span> : : +<span class="lineNum"> 146 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;PCAP_LOOP_SLEEP&quot;, opts-&gt;config[CONF_PCAP_LOOP_SLEEP],</span> +<span class="lineNum"> 147 </span> : : 1, RCHK_MAX_PCAP_LOOP_SLEEP); +<span class="lineNum"> 148 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;MAX_SPA_PACKET_AGE&quot;, opts-&gt;config[CONF_MAX_SPA_PACKET_AGE],</span> +<span class="lineNum"> 149 </span> : : 1, RCHK_MAX_SPA_PACKET_AGE); +<span class="lineNum"> 150 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;MAX_SNIFF_BYTES&quot;, opts-&gt;config[CONF_MAX_SNIFF_BYTES],</span> +<span class="lineNum"> 151 </span> : : 1, RCHK_MAX_SNIFF_BYTES); +<span class="lineNum"> 152 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;TCPSERV_PORT&quot;, opts-&gt;config[CONF_TCPSERV_PORT],</span> +<span class="lineNum"> 153 </span> : : 1, RCHK_MAX_TCPSERV_PORT); +<span class="lineNum"> 154 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;UDPSERV_PORT&quot;, opts-&gt;config[CONF_UDPSERV_PORT],</span> +<span class="lineNum"> 155 </span> : : 1, RCHK_MAX_UDPSERV_PORT); +<span class="lineNum"> 156 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;UDPSERV_PORT&quot;, opts-&gt;config[CONF_UDPSERV_SELECT_TIMEOUT],</span> +<span class="lineNum"> 157 </span> : : 1, RCHK_MAX_UDPSERV_SELECT_TIMEOUT); +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> : : #if FIREWALL_IPFW +<span class="lineNum"> 160 </span> : : range_check(opts, &quot;IPFW_START_RULE_NUM&quot;, opts-&gt;config[CONF_IPFW_START_RULE_NUM], +<span class="lineNum"> 161 </span> : : 0, RCHK_MAX_IPFW_START_RULE_NUM); +<span class="lineNum"> 162 </span> : : range_check(opts, &quot;IPFW_MAX_RULES&quot;, opts-&gt;config[CONF_IPFW_MAX_RULES], +<span class="lineNum"> 163 </span> : : 1, RCHK_MAX_IPFW_MAX_RULES); +<span class="lineNum"> 164 </span> : : range_check(opts, &quot;IPFW_ACTIVE_SET_NUM&quot;, opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM], +<span class="lineNum"> 165 </span> : : 0, RCHK_MAX_IPFW_SET_NUM); +<span class="lineNum"> 166 </span> : : range_check(opts, &quot;IPFW_EXPIRE_SET_NUM&quot;, opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM], +<span class="lineNum"> 167 </span> : : 0, RCHK_MAX_IPFW_SET_NUM); +<span class="lineNum"> 168 </span> : : range_check(opts, &quot;IPFW_EXPIRE_PURGE_INTERVAL&quot;, +<span class="lineNum"> 169 </span> : : opts-&gt;config[CONF_IPFW_EXPIRE_PURGE_INTERVAL], +<span class="lineNum"> 170 </span> : : 1, RCHK_MAX_IPFW_PURGE_INTERVAL); +<span class="lineNum"> 171 </span> : : +<span class="lineNum"> 172 </span> : : /* Make sure the active and expire sets are not identical whenever +<span class="lineNum"> 173 </span> : : * they are non-zero +<span class="lineNum"> 174 </span> : : */ +<span class="lineNum"> 175 </span> : : if((strtol_wrapper(opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM], +<span class="lineNum"> 176 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err) &gt; 0 +<span class="lineNum"> 177 </span> : : &amp;&amp; strtol_wrapper(opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM], +<span class="lineNum"> 178 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err) &gt; 0) +<span class="lineNum"> 179 </span> : : &amp;&amp; strtol_wrapper(opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM], +<span class="lineNum"> 180 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err) +<span class="lineNum"> 181 </span> : : == strtol_wrapper(opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM], +<span class="lineNum"> 182 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err)) +<span class="lineNum"> 183 </span> : : { +<span class="lineNum"> 184 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 185 </span> : : &quot;[*] Cannot set identical ipfw active and expire sets.&quot;); +<span class="lineNum"> 186 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 187 </span> : : } +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> : : if(is_err != FKO_SUCCESS) +<span class="lineNum"> 190 </span> : : { +<span class="lineNum"> 191 </span> : : log_msg(LOG_ERR, &quot;[*] invalid integer conversion error.\n&quot;); +<span class="lineNum"> 192 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 193 </span> : : } +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> : : #elif FIREWALL_PF +<span class="lineNum"> 196 </span> : : range_check(opts, &quot;PF_EXPIRE_INTERVAL&quot;, opts-&gt;config[CONF_PF_EXPIRE_INTERVAL], +<span class="lineNum"> 197 </span> : : 1, RCHK_MAX_PF_EXPIRE_INTERVAL); +<span class="lineNum"> 198 </span> : : +<span class="lineNum"> 199 </span> : : #endif /* FIREWALL type */ +<span class="lineNum"> 200 </span> : : +<span class="lineNum"> 201 </span> :<span class="lineCov"> 795 : return;</span> +<span class="lineNum"> 202 </span> : : } +<span class="lineNum"> 203 </span> : : +<span class="lineNum"> 204 </span> : : /* Parse the config file... +<a name="205"><span class="lineNum"> 205 </span> : : */</a> +<span class="lineNum"> 206 </span> : : static void +<span class="lineNum"> 207 </span> :<span class="lineCov"> 3628 : parse_config_file(fko_srv_options_t *opts, const char *config_file)</span> +<span class="lineNum"> 208 </span> : : { +<span class="lineNum"> 209 </span> : : FILE *cfile_ptr; +<span class="lineNum"> 210 </span> :<span class="lineCov"> 3628 : unsigned int numLines = 0;</span> +<span class="lineNum"> 211 </span> : : unsigned int i, good_ent; +<span class="lineNum"> 212 </span> : : int cndx; +<span class="lineNum"> 213 </span> : : +<span class="lineNum"> 214 </span> :<span class="lineCov"> 3628 : char conf_line_buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 215 </span> :<span class="lineCov"> 3628 : char var[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 216 </span> :<span class="lineCov"> 3628 : char val[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 217 </span> :<span class="lineCov"> 3628 : char tmp1[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 218 </span> :<span class="lineCov"> 3628 : char tmp2[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 219 </span> : : +<span class="lineNum"> 220 </span> : : struct stat st; +<span class="lineNum"> 221 </span> : : +<span class="lineNum"> 222 </span> : : /* Make sure the config file exists. +<span class="lineNum"> 223 </span> : : */ +<span class="lineNum"> 224 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 3628 times"> + </span>]:<span class="lineCov"> 3628 : if(stat(config_file, &amp;st) != 0)</span> +<span class="lineNum"> 225 </span> : : { +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Config file: '%s' was not found.&quot;,</span> +<span class="lineNum"> 227 </span> : : config_file); +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 229 </span> : : } +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 3628 times"> + </span>]:<span class="lineCov"> 3628 : if(verify_file_perms_ownership(config_file) != 1)</span> +<span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 233 </span> : : +<span class="lineNum"> 234 </span> : : /* See the comment in the parse_access_file() function regarding security +<span class="lineNum"> 235 </span> : : * here relative to a TOCTOU bug flagged by Coverity. +<span class="lineNum"> 236 </span> : : */ +<span class="lineNum"> 237 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 3628 times"> + </span>]:<span class="lineCov"> 3628 : if ((cfile_ptr = fopen(config_file, &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 238 </span> : : { +<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not open config file: %s&quot;,</span> +<span class="lineNum"> 240 </span> : : config_file); +<span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : perror(NULL);</span> +<span class="lineNum"> 242 </span> : : +<span class="lineNum"> 243 </span> :<span class="lineCov"> 3628 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 244 </span> : : } +<span class="lineNum"> 245 </span> : : +<span class="lineNum"> 246 </span> [<span class="branchCov" title="Branch 0 was taken 108252 times"> + </span><span class="branchCov" title="Branch 1 was taken 3628 times"> + </span>]:<span class="lineCov"> 111880 : while ((fgets(conf_line_buf, MAX_LINE_LEN, cfile_ptr)) != NULL)</span> +<span class="lineNum"> 247 </span> : : { +<span class="lineNum"> 248 </span> :<span class="lineCov"> 108252 : numLines++;</span> +<span class="lineNum"> 249 </span> :<span class="lineCov"> 108252 : conf_line_buf[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> : : /* Get past comments and empty lines (note: we only look at the +<span class="lineNum"> 252 </span> : : * first character. +<span class="lineNum"> 253 </span> : : */ +<span class="lineNum"> 254 </span>[<span class="branchCov" title="Branch 0 was taken 101955 times"> + </span><span class="branchCov" title="Branch 1 was taken 6297 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 101955 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 108252 : if(IS_EMPTY_LINE(conf_line_buf[0]))</span> +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 101951 times"> + </span><span class="branchCov" title="Branch 5 was taken 4 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 2572 times"> + </span><span class="branchCov" title="Branch 7 was taken 99379 times"> + </span>] +<span class="lineNum"> 255 </span> :<span class="lineCov"> 8873 : continue;</span> +<span class="lineNum"> 256 </span> : : +<span class="lineNum"> 257 </span> [<span class="branchCov" title="Branch 0 was taken 86592 times"> + </span><span class="branchCov" title="Branch 1 was taken 12787 times"> + </span>]:<span class="lineCov"> 99379 : if(sscanf(conf_line_buf, &quot;%s %[^;\n\r]&quot;, var, val) != 2)</span> +<span class="lineNum"> 258 </span> : : { +<span class="lineNum"> 259 </span> :<span class="lineCov"> 12787 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 260 </span> : : &quot;*Invalid config file entry in %s at line %i.\n - '%s'&quot;, +<span class="lineNum"> 261 </span> : : config_file, numLines, conf_line_buf +<span class="lineNum"> 262 </span> : : ); +<span class="lineNum"> 263 </span> :<span class="lineCov"> 12787 : continue;</span> +<span class="lineNum"> 264 </span> : : } +<span class="lineNum"> 265 </span> : : +<span class="lineNum"> 266 </span> : : good_ent = 0; +<span class="lineNum"> 267 </span> [<span class="branchCov" title="Branch 0 was taken 3297118 times"> + </span><span class="branchCov" title="Branch 1 was taken 50419 times"> + </span>]:<span class="lineCov"> 3347537 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> +<span class="lineNum"> 268 </span> : : { +<span class="lineNum"> 269 </span> [<span class="branchCov" title="Branch 0 was taken 36173 times"> + </span><span class="branchCov" title="Branch 1 was taken 3260945 times"> + </span>]:<span class="lineCov"> 3297118 : if(CONF_VAR_IS(config_map[i], var))</span> +<span class="lineNum"> 270 </span> : : { +<span class="lineNum"> 271 </span> : : /* First check to see if we need to do a varable expansion +<span class="lineNum"> 272 </span> : : * on this value. Note: this only supports one expansion and +<span class="lineNum"> 273 </span> : : * only if the value starts with the variable. +<span class="lineNum"> 274 </span> : : */ +<span class="lineNum"> 275 </span> [<span class="branchCov" title="Branch 0 was taken 10745 times"> + </span><span class="branchCov" title="Branch 1 was taken 25428 times"> + </span>]:<span class="lineCov"> 36173 : if(*val == '$')</span> +<span class="lineNum"> 276 </span> : : { +<span class="lineNum"> 277 </span> [<span class="branchCov" title="Branch 0 was taken 10361 times"> + </span><span class="branchCov" title="Branch 1 was taken 384 times"> + </span>]:<span class="lineCov"> 10745 : if(sscanf((val+1), &quot;%[A-Z_]%s&quot;, tmp1, tmp2))</span> +<span class="lineNum"> 278 </span> : : { +<span class="lineNum"> 279 </span> [<span class="branchCov" title="Branch 1 was taken 8622 times"> + </span><span class="branchCov" title="Branch 2 was taken 1739 times"> + </span>]:<span class="lineCov"> 10361 : if((cndx = config_entry_index(opts, tmp1)) &gt;= 0)</span> +<span class="lineNum"> 280 </span> : : { +<span class="lineNum"> 281 </span> :<span class="lineCov"> 8622 : strlcpy(val, opts-&gt;config[cndx], sizeof(val));</span> +<span class="lineNum"> 282 </span> :<span class="lineCov"> 8622 : strlcat(val, tmp2, sizeof(val));</span> +<span class="lineNum"> 283 </span> : : } +<span class="lineNum"> 284 </span> : : else +<span class="lineNum"> 285 </span> : : { +<span class="lineNum"> 286 </span> : : /* We didn't map the embedded variable to a valid +<span class="lineNum"> 287 </span> : : * config parameter +<span class="lineNum"> 288 </span> : : */ +<span class="lineNum"> 289 </span> :<span class="lineCov"> 1739 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 290 </span> : : &quot;[*] Invalid embedded variable in: '%s'&quot;, val); +<span class="lineNum"> 291 </span> :<span class="lineCov"> 1739 : break;</span> +<span class="lineNum"> 292 </span> : : } +<span class="lineNum"> 293 </span> : : } +<span class="lineNum"> 294 </span> : : } +<span class="lineNum"> 295 </span> : : +<span class="lineNum"> 296 </span> :<span class="lineCov"> 34434 : set_config_entry(opts, i, val);</span> +<span class="lineNum"> 297 </span> :<span class="lineCov"> 34434 : good_ent++;</span> +<span class="lineNum"> 298 </span> :<span class="lineCov"> 34434 : break;</span> +<span class="lineNum"> 299 </span> : : } +<span class="lineNum"> 300 </span> : : } +<span class="lineNum"> 301 </span> : : +<span class="lineNum"> 302 </span> [<span class="branchCov" title="Branch 0 was taken 52158 times"> + </span><span class="branchCov" title="Branch 1 was taken 34434 times"> + </span>]:<span class="lineCov"> 86592 : if(good_ent == 0)</span> +<span class="lineNum"> 303 </span> :<span class="lineCov"> 108252 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 304 </span> : : &quot;[*] Ignoring unknown configuration parameter: '%s' in %s&quot;, +<span class="lineNum"> 305 </span> : : var, config_file +<span class="lineNum"> 306 </span> : : ); +<span class="lineNum"> 307 </span> : : } +<span class="lineNum"> 308 </span> : : +<span class="lineNum"> 309 </span> :<span class="lineCov"> 3628 : fclose(cfile_ptr);</span> +<span class="lineNum"> 310 </span> : : +<span class="lineNum"> 311 </span> :<span class="lineCov"> 3628 : return;</span> +<span class="lineNum"> 312 </span> : : } +<span class="lineNum"> 313 </span> : : +<span class="lineNum"> 314 </span> : : /* Set defaults, and do sanity and bounds checks for the various options. +<a name="315"><span class="lineNum"> 315 </span> : : */</a> +<span class="lineNum"> 316 </span> : : static void +<span class="lineNum"> 317 </span> :<span class="lineCov"> 795 : validate_options(fko_srv_options_t *opts)</span> +<span class="lineNum"> 318 </span> : : { +<span class="lineNum"> 319 </span> :<span class="lineCov"> 795 : char tmp_path[MAX_PATH_LEN] = {0};</span> +<span class="lineNum"> 320 </span> : : +<span class="lineNum"> 321 </span> : : /* If no conf dir is set in the config file, use the default. +<span class="lineNum"> 322 </span> : : */ +<span class="lineNum"> 323 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FWKNOP_CONF_DIR] == NULL)</span> +<span class="lineNum"> 324 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FWKNOP_CONF_DIR, DEF_CONF_DIR);</span> +<span class="lineNum"> 325 </span> : : +<span class="lineNum"> 326 </span> : : /* If no access.conf path was specified on the command line or set in +<span class="lineNum"> 327 </span> : : * the config file, use the default. +<span class="lineNum"> 328 </span> : : */ +<span class="lineNum"> 329 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ACCESS_FILE] == NULL)</span> +<span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_ACCESS_FILE, DEF_ACCESS_FILE);</span> +<span class="lineNum"> 331 </span> : : +<span class="lineNum"> 332 </span> : : /* If the pid and digest cache files where not set in the config file or +<span class="lineNum"> 333 </span> : : * via command-line, then grab the defaults. Start with RUN_DIR as the +<span class="lineNum"> 334 </span> : : * files may depend on that. +<span class="lineNum"> 335 </span> : : */ +<span class="lineNum"> 336 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FWKNOP_RUN_DIR] == NULL)</span> +<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_FWKNOP_RUN_DIR, DEF_RUN_DIR);</span> +<span class="lineNum"> 338 </span> : : +<span class="lineNum"> 339 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FWKNOP_PID_FILE] == NULL)</span> +<span class="lineNum"> 340 </span> : : { +<span class="lineNum"> 341 </span> :<span class="lineCov"> 795 : strlcpy(tmp_path, opts-&gt;config[CONF_FWKNOP_RUN_DIR], sizeof(tmp_path));</span> +<span class="lineNum"> 342 </span> : : +<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(tmp_path[strlen(tmp_path)-1] != '/')</span> +<span class="lineNum"> 344 </span> :<span class="lineCov"> 795 : strlcat(tmp_path, &quot;/&quot;, sizeof(tmp_path));</span> +<span class="lineNum"> 345 </span> : : +<span class="lineNum"> 346 </span> :<span class="lineCov"> 795 : strlcat(tmp_path, DEF_PID_FILENAME, sizeof(tmp_path));</span> +<span class="lineNum"> 347 </span> : : +<span class="lineNum"> 348 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FWKNOP_PID_FILE, tmp_path);</span> +<span class="lineNum"> 349 </span> : : } +<span class="lineNum"> 350 </span> : : +<span class="lineNum"> 351 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 352 </span> [<span class="branchCov" title="Branch 0 was taken 724 times"> + </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_DIGEST_FILE] == NULL)</span> +<span class="lineNum"> 353 </span> : : #else +<span class="lineNum"> 354 </span> : : if(opts-&gt;config[CONF_DIGEST_DB_FILE] == NULL) +<span class="lineNum"> 355 </span> : : #endif +<span class="lineNum"> 356 </span> : : { +<span class="lineNum"> 357 </span> :<span class="lineCov"> 724 : strlcpy(tmp_path, opts-&gt;config[CONF_FWKNOP_RUN_DIR], sizeof(tmp_path));</span> +<span class="lineNum"> 358 </span> : : +<span class="lineNum"> 359 </span> [<span class="branchCov" title="Branch 0 was taken 724 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 724 : if(tmp_path[strlen(tmp_path)-1] != '/')</span> +<span class="lineNum"> 360 </span> :<span class="lineCov"> 724 : strlcat(tmp_path, &quot;/&quot;, sizeof(tmp_path));</span> +<span class="lineNum"> 361 </span> : : +<span class="lineNum"> 362 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 363 </span> :<span class="lineCov"> 724 : strlcat(tmp_path, DEF_DIGEST_CACHE_FILENAME, sizeof(tmp_path));</span> +<span class="lineNum"> 364 </span> :<span class="lineCov"> 724 : set_config_entry(opts, CONF_DIGEST_FILE, tmp_path);</span> +<span class="lineNum"> 365 </span> : : #else +<span class="lineNum"> 366 </span> : : strlcat(tmp_path, DEF_DIGEST_CACHE_DB_FILENAME, sizeof(tmp_path)); +<span class="lineNum"> 367 </span> : : set_config_entry(opts, CONF_DIGEST_DB_FILE, tmp_path); +<span class="lineNum"> 368 </span> : : #endif +<span class="lineNum"> 369 </span> : : } +<span class="lineNum"> 370 </span> : : +<span class="lineNum"> 371 </span> : : /* Set remaining require CONF_ vars if they are not already set. */ +<span class="lineNum"> 372 </span> : : +<span class="lineNum"> 373 </span> : : /* PCAP capture interface - note that if '-r &lt;pcap file&gt;' is specified +<span class="lineNum"> 374 </span> : : * on the command line, then this will override the pcap interface setting. +<span class="lineNum"> 375 </span> : : */ +<span class="lineNum"> 376 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_INTF] == NULL)</span> +<span class="lineNum"> 377 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_INTF, DEF_INTERFACE);</span> +<span class="lineNum"> 378 </span> : : +<span class="lineNum"> 379 </span> : : /* PCAP Promiscuous mode. +<span class="lineNum"> 380 </span> : : */ +<span class="lineNum"> 381 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_PCAP_PROMISC] == NULL)</span> +<span class="lineNum"> 382 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_PCAP_PROMISC,</span> +<span class="lineNum"> 383 </span> : : DEF_ENABLE_PCAP_PROMISC); +<span class="lineNum"> 384 </span> : : +<span class="lineNum"> 385 </span> : : /* The packet count argument to pcap_dispatch() +<span class="lineNum"> 386 </span> : : */ +<span class="lineNum"> 387 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_DISPATCH_COUNT] == NULL)</span> +<span class="lineNum"> 388 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_DISPATCH_COUNT,</span> +<span class="lineNum"> 389 </span> : : DEF_PCAP_DISPATCH_COUNT); +<span class="lineNum"> 390 </span> : : +<span class="lineNum"> 391 </span> : : /* Microseconds to sleep between pcap loop iterations +<span class="lineNum"> 392 </span> : : */ +<span class="lineNum"> 393 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_LOOP_SLEEP] == NULL)</span> +<span class="lineNum"> 394 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_LOOP_SLEEP,</span> +<span class="lineNum"> 395 </span> : : DEF_PCAP_LOOP_SLEEP); +<span class="lineNum"> 396 </span> : : +<span class="lineNum"> 397 </span> : : /* PCAP Filter. +<span class="lineNum"> 398 </span> : : */ +<span class="lineNum"> 399 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_FILTER] == NULL)</span> +<span class="lineNum"> 400 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_FILTER, DEF_PCAP_FILTER);</span> +<span class="lineNum"> 401 </span> : : +<span class="lineNum"> 402 </span> : : /* Enable SPA packet aging unless we're getting packet data +<span class="lineNum"> 403 </span> : : * directly from a pcap file +<span class="lineNum"> 404 </span> : : */ +<span class="lineNum"> 405 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_SPA_PACKET_AGING] == NULL)</span> +<span class="lineNum"> 406 </span> : : { +<span class="lineNum"> 407 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_FILE] == NULL)</span> +<span class="lineNum"> 408 </span> : : { +<span class="lineNum"> 409 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_SPA_PACKET_AGING,</span> +<span class="lineNum"> 410 </span> : : DEF_ENABLE_SPA_PACKET_AGING); +<span class="lineNum"> 411 </span> : : } +<span class="lineNum"> 412 </span> : : else +<span class="lineNum"> 413 </span> : : { +<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_ENABLE_SPA_PACKET_AGING, &quot;N&quot;);</span> +<span class="lineNum"> 415 </span> : : } +<span class="lineNum"> 416 </span> : : } +<span class="lineNum"> 417 </span> : : +<span class="lineNum"> 418 </span> : : /* SPA packet age. +<span class="lineNum"> 419 </span> : : */ +<span class="lineNum"> 420 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_MAX_SPA_PACKET_AGE] == NULL)</span> +<span class="lineNum"> 421 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_MAX_SPA_PACKET_AGE,</span> +<span class="lineNum"> 422 </span> : : DEF_MAX_SPA_PACKET_AGE); +<span class="lineNum"> 423 </span> : : +<span class="lineNum"> 424 </span> : : +<span class="lineNum"> 425 </span> : : /* Enable digest persistence. +<span class="lineNum"> 426 </span> : : */ +<span class="lineNum"> 427 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchCov" title="Branch 1 was taken 724 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE] == NULL)</span> +<span class="lineNum"> 428 </span> :<span class="lineCov"> 71 : set_config_entry(opts, CONF_ENABLE_DIGEST_PERSISTENCE,</span> +<span class="lineNum"> 429 </span> : : DEF_ENABLE_DIGEST_PERSISTENCE); +<span class="lineNum"> 430 </span> : : +<span class="lineNum"> 431 </span> : : /* Enable destination rule. +<span class="lineNum"> 432 </span> : : */ +<span class="lineNum"> 433 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_DESTINATION_RULE] == NULL)</span> +<span class="lineNum"> 434 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_DESTINATION_RULE,</span> +<span class="lineNum"> 435 </span> : : DEF_ENABLE_DESTINATION_RULE); +<span class="lineNum"> 436 </span> : : +<span class="lineNum"> 437 </span> : : /* Max sniff bytes. +<span class="lineNum"> 438 </span> : : */ +<span class="lineNum"> 439 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_MAX_SNIFF_BYTES] == NULL)</span> +<span class="lineNum"> 440 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_MAX_SNIFF_BYTES, DEF_MAX_SNIFF_BYTES);</span> +<span class="lineNum"> 441 </span> : : +<span class="lineNum"> 442 </span> : : #if FIREWALL_FIREWALLD +<span class="lineNum"> 443 </span> : : /* Enable FIREWD forwarding. +<span class="lineNum"> 444 </span> : : */ +<span class="lineNum"> 445 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING] == NULL)</span> +<span class="lineNum"> 446 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_FORWARDING,</span> +<span class="lineNum"> 447 </span> : : DEF_ENABLE_FIREWD_FORWARDING); +<span class="lineNum"> 448 </span> : : +<span class="lineNum"> 449 </span> : : /* Enable FIREWD local NAT. +<span class="lineNum"> 450 </span> : : */ +<span class="lineNum"> 451 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_LOCAL_NAT] == NULL)</span> +<span class="lineNum"> 452 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_LOCAL_NAT,</span> +<span class="lineNum"> 453 </span> : : DEF_ENABLE_FIREWD_LOCAL_NAT); +<span class="lineNum"> 454 </span> : : +<span class="lineNum"> 455 </span> : : /* Enable FIREWD SNAT. +<span class="lineNum"> 456 </span> : : */ +<span class="lineNum"> 457 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT] == NULL)</span> +<span class="lineNum"> 458 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_SNAT,</span> +<span class="lineNum"> 459 </span> : : DEF_ENABLE_FIREWD_SNAT); +<span class="lineNum"> 460 </span> : : +<span class="lineNum"> 461 </span> : : /* Make sure we have a valid IP if SNAT is enabled +<span class="lineNum"> 462 </span> : : */ +<span class="lineNum"> 463 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 464 </span> : : { +<span class="lineNum"> 465 </span> : : /* Note that fw_config_init() will set use_masquerade if necessary +<span class="lineNum"> 466 </span> : : */ +<span class="lineNum"> 467 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL)</span> +<span class="lineNum"> 468 </span> : : { +<span class="lineNum"> 469 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP]))</span> +<span class="lineNum"> 470 </span> : : { +<span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 472 </span> : : &quot;Invalid IPv4 addr for SNAT_TRANSLATE_IP&quot; +<span class="lineNum"> 473 </span> : : ); +<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 475 </span> : : } +<span class="lineNum"> 476 </span> : : } +<span class="lineNum"> 477 </span> : : } +<span class="lineNum"> 478 </span> : : +<span class="lineNum"> 479 </span> : : /* Enable FIREWD OUTPUT. +<span class="lineNum"> 480 </span> : : */ +<span class="lineNum"> 481 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_OUTPUT] == NULL)</span> +<span class="lineNum"> 482 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_OUTPUT,</span> +<span class="lineNum"> 483 </span> : : DEF_ENABLE_FIREWD_OUTPUT); +<span class="lineNum"> 484 </span> : : +<span class="lineNum"> 485 </span> : : /* Flush FIREWD at init. +<span class="lineNum"> 486 </span> : : */ +<span class="lineNum"> 487 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FLUSH_FIREWD_AT_INIT] == NULL)</span> +<span class="lineNum"> 488 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FLUSH_FIREWD_AT_INIT, DEF_FLUSH_FIREWD_AT_INIT);</span> +<span class="lineNum"> 489 </span> : : +<span class="lineNum"> 490 </span> : : /* Flush FIREWD at exit. +<span class="lineNum"> 491 </span> : : */ +<span class="lineNum"> 492 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FLUSH_FIREWD_AT_EXIT] == NULL)</span> +<span class="lineNum"> 493 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FLUSH_FIREWD_AT_EXIT, DEF_FLUSH_FIREWD_AT_EXIT);</span> +<span class="lineNum"> 494 </span> : : +<span class="lineNum"> 495 </span> : : /* FIREWD input access. +<span class="lineNum"> 496 </span> : : */ +<span class="lineNum"> 497 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_INPUT_ACCESS] == NULL)</span> +<span class="lineNum"> 498 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_INPUT_ACCESS,</span> +<span class="lineNum"> 499 </span> : : DEF_FIREWD_INPUT_ACCESS); +<span class="lineNum"> 500 </span> : : +<span class="lineNum"> 501 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_INPUT_ACCESS]) != 1)</span> +<span class="lineNum"> 502 </span> : : { +<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 504 </span> : : &quot;Invalid FIREWD_INPUT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 505 </span> : : ); +<span class="lineNum"> 506 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 507 </span> : : } +<span class="lineNum"> 508 </span> : : +<span class="lineNum"> 509 </span> : : /* FIREWD output access. +<span class="lineNum"> 510 </span> : : */ +<span class="lineNum"> 511 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_OUTPUT_ACCESS] == NULL)</span> +<span class="lineNum"> 512 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_OUTPUT_ACCESS,</span> +<span class="lineNum"> 513 </span> : : DEF_FIREWD_OUTPUT_ACCESS); +<span class="lineNum"> 514 </span> : : +<span class="lineNum"> 515 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_OUTPUT_ACCESS]) != 1)</span> +<span class="lineNum"> 516 </span> : : { +<span class="lineNum"> 517 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 518 </span> : : &quot;Invalid FIREWD_OUTPUT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 519 </span> : : ); +<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 521 </span> : : } +<span class="lineNum"> 522 </span> : : +<span class="lineNum"> 523 </span> : : /* FIREWD forward access. +<span class="lineNum"> 524 </span> : : */ +<span class="lineNum"> 525 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_FORWARD_ACCESS] == NULL)</span> +<span class="lineNum"> 526 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_FORWARD_ACCESS,</span> +<span class="lineNum"> 527 </span> : : DEF_FIREWD_FORWARD_ACCESS); +<span class="lineNum"> 528 </span> : : +<span class="lineNum"> 529 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_FORWARD_ACCESS]) != 1)</span> +<span class="lineNum"> 530 </span> : : { +<span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 532 </span> : : &quot;Invalid FIREWD_FORWARD_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 533 </span> : : ); +<span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 535 </span> : : } +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> : : /* FIREWD dnat access. +<span class="lineNum"> 538 </span> : : */ +<span class="lineNum"> 539 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_DNAT_ACCESS] == NULL)</span> +<span class="lineNum"> 540 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_DNAT_ACCESS,</span> +<span class="lineNum"> 541 </span> : : DEF_FIREWD_DNAT_ACCESS); +<span class="lineNum"> 542 </span> : : +<span class="lineNum"> 543 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_DNAT_ACCESS]) != 1)</span> +<span class="lineNum"> 544 </span> : : { +<span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 546 </span> : : &quot;Invalid FIREWD_DNAT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 547 </span> : : ); +<span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 549 </span> : : } +<span class="lineNum"> 550 </span> : : +<span class="lineNum"> 551 </span> : : /* FIREWD snat access. +<span class="lineNum"> 552 </span> : : */ +<span class="lineNum"> 553 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_SNAT_ACCESS] == NULL)</span> +<span class="lineNum"> 554 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_SNAT_ACCESS,</span> +<span class="lineNum"> 555 </span> : : DEF_FIREWD_SNAT_ACCESS); +<span class="lineNum"> 556 </span> : : +<span class="lineNum"> 557 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_SNAT_ACCESS]) != 1)</span> +<span class="lineNum"> 558 </span> : : { +<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 560 </span> : : &quot;Invalid FIREWD_SNAT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 561 </span> : : ); +<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 563 </span> : : } +<span class="lineNum"> 564 </span> : : +<span class="lineNum"> 565 </span> : : /* FIREWD masquerade access. +<span class="lineNum"> 566 </span> : : */ +<span class="lineNum"> 567 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_MASQUERADE_ACCESS] == NULL)</span> +<span class="lineNum"> 568 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_MASQUERADE_ACCESS,</span> +<span class="lineNum"> 569 </span> : : DEF_FIREWD_MASQUERADE_ACCESS); +<span class="lineNum"> 570 </span> : : +<span class="lineNum"> 571 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_MASQUERADE_ACCESS]) != 1)</span> +<span class="lineNum"> 572 </span> : : { +<span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 574 </span> : : &quot;Invalid FIREWD_MASQUERADE_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 575 </span> : : ); +<span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 577 </span> : : } +<span class="lineNum"> 578 </span> : : +<span class="lineNum"> 579 </span> : : /* Check for the firewalld 'comment' match at init time +<span class="lineNum"> 580 </span> : : */ +<span class="lineNum"> 581 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_COMMENT_CHECK] == NULL)</span> +<span class="lineNum"> 582 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_COMMENT_CHECK,</span> +<span class="lineNum"> 583 </span> : : DEF_ENABLE_FIREWD_COMMENT_CHECK); +<span class="lineNum"> 584 </span> : : +<span class="lineNum"> 585 </span> : : #elif FIREWALL_IPTABLES +<span class="lineNum"> 586 </span> : : /* Enable IPT forwarding. +<span class="lineNum"> 587 </span> : : */ +<span class="lineNum"> 588 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING] == NULL) +<span class="lineNum"> 589 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_FORWARDING, +<span class="lineNum"> 590 </span> : : DEF_ENABLE_IPT_FORWARDING); +<span class="lineNum"> 591 </span> : : +<span class="lineNum"> 592 </span> : : /* Enable IPT local NAT. +<span class="lineNum"> 593 </span> : : */ +<span class="lineNum"> 594 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_LOCAL_NAT] == NULL) +<span class="lineNum"> 595 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_LOCAL_NAT, +<span class="lineNum"> 596 </span> : : DEF_ENABLE_IPT_LOCAL_NAT); +<span class="lineNum"> 597 </span> : : +<span class="lineNum"> 598 </span> : : /* Enable IPT SNAT. +<span class="lineNum"> 599 </span> : : */ +<span class="lineNum"> 600 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_SNAT] == NULL) +<span class="lineNum"> 601 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_SNAT, +<span class="lineNum"> 602 </span> : : DEF_ENABLE_IPT_SNAT); +<span class="lineNum"> 603 </span> : : +<span class="lineNum"> 604 </span> : : /* Make sure we have a valid IP if SNAT is enabled +<span class="lineNum"> 605 </span> : : */ +<span class="lineNum"> 606 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_SNAT], &quot;Y&quot;, 1) == 0) +<span class="lineNum"> 607 </span> : : { +<span class="lineNum"> 608 </span> : : /* Note that fw_config_init() will set use_masquerade if necessary +<span class="lineNum"> 609 </span> : : */ +<span class="lineNum"> 610 </span> : : if(opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL) +<span class="lineNum"> 611 </span> : : { +<span class="lineNum"> 612 </span> : : if(! is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP])) +<span class="lineNum"> 613 </span> : : { +<span class="lineNum"> 614 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 615 </span> : : &quot;Invalid IPv4 addr for SNAT_TRANSLATE_IP&quot; +<span class="lineNum"> 616 </span> : : ); +<span class="lineNum"> 617 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 618 </span> : : } +<span class="lineNum"> 619 </span> : : } +<span class="lineNum"> 620 </span> : : } +<span class="lineNum"> 621 </span> : : +<span class="lineNum"> 622 </span> : : /* Enable IPT OUTPUT. +<span class="lineNum"> 623 </span> : : */ +<span class="lineNum"> 624 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_OUTPUT] == NULL) +<span class="lineNum"> 625 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_OUTPUT, +<span class="lineNum"> 626 </span> : : DEF_ENABLE_IPT_OUTPUT); +<span class="lineNum"> 627 </span> : : +<span class="lineNum"> 628 </span> : : /* Flush IPT at init. +<span class="lineNum"> 629 </span> : : */ +<span class="lineNum"> 630 </span> : : if(opts-&gt;config[CONF_FLUSH_IPT_AT_INIT] == NULL) +<span class="lineNum"> 631 </span> : : set_config_entry(opts, CONF_FLUSH_IPT_AT_INIT, DEF_FLUSH_IPT_AT_INIT); +<span class="lineNum"> 632 </span> : : +<span class="lineNum"> 633 </span> : : /* Flush IPT at exit. +<span class="lineNum"> 634 </span> : : */ +<span class="lineNum"> 635 </span> : : if(opts-&gt;config[CONF_FLUSH_IPT_AT_EXIT] == NULL) +<span class="lineNum"> 636 </span> : : set_config_entry(opts, CONF_FLUSH_IPT_AT_EXIT, DEF_FLUSH_IPT_AT_EXIT); +<span class="lineNum"> 637 </span> : : +<span class="lineNum"> 638 </span> : : /* IPT input access. +<span class="lineNum"> 639 </span> : : */ +<span class="lineNum"> 640 </span> : : if(opts-&gt;config[CONF_IPT_INPUT_ACCESS] == NULL) +<span class="lineNum"> 641 </span> : : set_config_entry(opts, CONF_IPT_INPUT_ACCESS, +<span class="lineNum"> 642 </span> : : DEF_IPT_INPUT_ACCESS); +<span class="lineNum"> 643 </span> : : +<span class="lineNum"> 644 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_INPUT_ACCESS]) != 1) +<span class="lineNum"> 645 </span> : : { +<span class="lineNum"> 646 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 647 </span> : : &quot;Invalid IPT_INPUT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 648 </span> : : ); +<span class="lineNum"> 649 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 650 </span> : : } +<span class="lineNum"> 651 </span> : : +<span class="lineNum"> 652 </span> : : /* IPT output access. +<span class="lineNum"> 653 </span> : : */ +<span class="lineNum"> 654 </span> : : if(opts-&gt;config[CONF_IPT_OUTPUT_ACCESS] == NULL) +<span class="lineNum"> 655 </span> : : set_config_entry(opts, CONF_IPT_OUTPUT_ACCESS, +<span class="lineNum"> 656 </span> : : DEF_IPT_OUTPUT_ACCESS); +<span class="lineNum"> 657 </span> : : +<span class="lineNum"> 658 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_OUTPUT_ACCESS]) != 1) +<span class="lineNum"> 659 </span> : : { +<span class="lineNum"> 660 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 661 </span> : : &quot;Invalid IPT_OUTPUT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 662 </span> : : ); +<span class="lineNum"> 663 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 664 </span> : : } +<span class="lineNum"> 665 </span> : : +<span class="lineNum"> 666 </span> : : /* IPT forward access. +<span class="lineNum"> 667 </span> : : */ +<span class="lineNum"> 668 </span> : : if(opts-&gt;config[CONF_IPT_FORWARD_ACCESS] == NULL) +<span class="lineNum"> 669 </span> : : set_config_entry(opts, CONF_IPT_FORWARD_ACCESS, +<span class="lineNum"> 670 </span> : : DEF_IPT_FORWARD_ACCESS); +<span class="lineNum"> 671 </span> : : +<span class="lineNum"> 672 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_FORWARD_ACCESS]) != 1) +<span class="lineNum"> 673 </span> : : { +<span class="lineNum"> 674 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 675 </span> : : &quot;Invalid IPT_FORWARD_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 676 </span> : : ); +<span class="lineNum"> 677 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 678 </span> : : } +<span class="lineNum"> 679 </span> : : +<span class="lineNum"> 680 </span> : : /* IPT dnat access. +<span class="lineNum"> 681 </span> : : */ +<span class="lineNum"> 682 </span> : : if(opts-&gt;config[CONF_IPT_DNAT_ACCESS] == NULL) +<span class="lineNum"> 683 </span> : : set_config_entry(opts, CONF_IPT_DNAT_ACCESS, +<span class="lineNum"> 684 </span> : : DEF_IPT_DNAT_ACCESS); +<span class="lineNum"> 685 </span> : : +<span class="lineNum"> 686 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_DNAT_ACCESS]) != 1) +<span class="lineNum"> 687 </span> : : { +<span class="lineNum"> 688 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 689 </span> : : &quot;Invalid IPT_DNAT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 690 </span> : : ); +<span class="lineNum"> 691 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 692 </span> : : } +<span class="lineNum"> 693 </span> : : +<span class="lineNum"> 694 </span> : : /* IPT snat access. +<span class="lineNum"> 695 </span> : : */ +<span class="lineNum"> 696 </span> : : if(opts-&gt;config[CONF_IPT_SNAT_ACCESS] == NULL) +<span class="lineNum"> 697 </span> : : set_config_entry(opts, CONF_IPT_SNAT_ACCESS, +<span class="lineNum"> 698 </span> : : DEF_IPT_SNAT_ACCESS); +<span class="lineNum"> 699 </span> : : +<span class="lineNum"> 700 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_SNAT_ACCESS]) != 1) +<span class="lineNum"> 701 </span> : : { +<span class="lineNum"> 702 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 703 </span> : : &quot;Invalid IPT_SNAT_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 704 </span> : : ); +<span class="lineNum"> 705 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 706 </span> : : } +<span class="lineNum"> 707 </span> : : +<span class="lineNum"> 708 </span> : : /* IPT masquerade access. +<span class="lineNum"> 709 </span> : : */ +<span class="lineNum"> 710 </span> : : if(opts-&gt;config[CONF_IPT_MASQUERADE_ACCESS] == NULL) +<span class="lineNum"> 711 </span> : : set_config_entry(opts, CONF_IPT_MASQUERADE_ACCESS, +<span class="lineNum"> 712 </span> : : DEF_IPT_MASQUERADE_ACCESS); +<span class="lineNum"> 713 </span> : : +<span class="lineNum"> 714 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_MASQUERADE_ACCESS]) != 1) +<span class="lineNum"> 715 </span> : : { +<span class="lineNum"> 716 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 717 </span> : : &quot;Invalid IPT_MASQUERADE_ACCESS specification, see fwknopd.conf comments&quot; +<span class="lineNum"> 718 </span> : : ); +<span class="lineNum"> 719 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 720 </span> : : } +<span class="lineNum"> 721 </span> : : +<span class="lineNum"> 722 </span> : : /* Check for the iptables 'comment' match at init time +<span class="lineNum"> 723 </span> : : */ +<span class="lineNum"> 724 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_COMMENT_CHECK] == NULL) +<span class="lineNum"> 725 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_COMMENT_CHECK, +<span class="lineNum"> 726 </span> : : DEF_ENABLE_IPT_COMMENT_CHECK); +<span class="lineNum"> 727 </span> : : +<span class="lineNum"> 728 </span> : : #elif FIREWALL_IPFW +<span class="lineNum"> 729 </span> : : +<span class="lineNum"> 730 </span> : : /* Flush ipfw rules at init. +<span class="lineNum"> 731 </span> : : */ +<span class="lineNum"> 732 </span> : : if(opts-&gt;config[CONF_FLUSH_IPFW_AT_INIT] == NULL) +<span class="lineNum"> 733 </span> : : set_config_entry(opts, CONF_FLUSH_IPFW_AT_INIT, DEF_FLUSH_IPFW_AT_INIT); +<span class="lineNum"> 734 </span> : : +<span class="lineNum"> 735 </span> : : /* Flush ipfw rules at exit. +<span class="lineNum"> 736 </span> : : */ +<span class="lineNum"> 737 </span> : : if(opts-&gt;config[CONF_FLUSH_IPFW_AT_EXIT] == NULL) +<span class="lineNum"> 738 </span> : : set_config_entry(opts, CONF_FLUSH_IPFW_AT_EXIT, DEF_FLUSH_IPFW_AT_EXIT); +<span class="lineNum"> 739 </span> : : +<span class="lineNum"> 740 </span> : : /* Set IPFW start rule number. +<span class="lineNum"> 741 </span> : : */ +<span class="lineNum"> 742 </span> : : if(opts-&gt;config[CONF_IPFW_START_RULE_NUM] == NULL) +<span class="lineNum"> 743 </span> : : set_config_entry(opts, CONF_IPFW_START_RULE_NUM, +<span class="lineNum"> 744 </span> : : DEF_IPFW_START_RULE_NUM); +<span class="lineNum"> 745 </span> : : +<span class="lineNum"> 746 </span> : : /* Set IPFW max rules. +<span class="lineNum"> 747 </span> : : */ +<span class="lineNum"> 748 </span> : : if(opts-&gt;config[CONF_IPFW_MAX_RULES] == NULL) +<span class="lineNum"> 749 </span> : : set_config_entry(opts, CONF_IPFW_MAX_RULES, +<span class="lineNum"> 750 </span> : : DEF_IPFW_MAX_RULES); +<span class="lineNum"> 751 </span> : : +<span class="lineNum"> 752 </span> : : /* Set IPFW active set number. +<span class="lineNum"> 753 </span> : : */ +<span class="lineNum"> 754 </span> : : if(opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM] == NULL) +<span class="lineNum"> 755 </span> : : set_config_entry(opts, CONF_IPFW_ACTIVE_SET_NUM, +<span class="lineNum"> 756 </span> : : DEF_IPFW_ACTIVE_SET_NUM); +<span class="lineNum"> 757 </span> : : +<span class="lineNum"> 758 </span> : : /* Set IPFW expire set number. +<span class="lineNum"> 759 </span> : : */ +<span class="lineNum"> 760 </span> : : if(opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM] == NULL) +<span class="lineNum"> 761 </span> : : set_config_entry(opts, CONF_IPFW_EXPIRE_SET_NUM, +<span class="lineNum"> 762 </span> : : DEF_IPFW_EXPIRE_SET_NUM); +<span class="lineNum"> 763 </span> : : +<span class="lineNum"> 764 </span> : : /* Set IPFW Dynamic rule expiry interval. +<span class="lineNum"> 765 </span> : : */ +<span class="lineNum"> 766 </span> : : if(opts-&gt;config[CONF_IPFW_EXPIRE_PURGE_INTERVAL] == NULL) +<span class="lineNum"> 767 </span> : : set_config_entry(opts, CONF_IPFW_EXPIRE_PURGE_INTERVAL, +<span class="lineNum"> 768 </span> : : DEF_IPFW_EXPIRE_PURGE_INTERVAL); +<span class="lineNum"> 769 </span> : : +<span class="lineNum"> 770 </span> : : /* Set IPFW Dynamic rule expiry interval. +<span class="lineNum"> 771 </span> : : */ +<span class="lineNum"> 772 </span> : : if(opts-&gt;config[CONF_IPFW_ADD_CHECK_STATE] == NULL) +<span class="lineNum"> 773 </span> : : set_config_entry(opts, CONF_IPFW_ADD_CHECK_STATE, +<span class="lineNum"> 774 </span> : : DEF_IPFW_ADD_CHECK_STATE); +<span class="lineNum"> 775 </span> : : +<span class="lineNum"> 776 </span> : : #elif FIREWALL_PF +<span class="lineNum"> 777 </span> : : /* Set PF anchor name +<span class="lineNum"> 778 </span> : : */ +<span class="lineNum"> 779 </span> : : if(opts-&gt;config[CONF_PF_ANCHOR_NAME] == NULL) +<span class="lineNum"> 780 </span> : : set_config_entry(opts, CONF_PF_ANCHOR_NAME, +<span class="lineNum"> 781 </span> : : DEF_PF_ANCHOR_NAME); +<span class="lineNum"> 782 </span> : : +<span class="lineNum"> 783 </span> : : /* Set PF rule expiry interval. +<span class="lineNum"> 784 </span> : : */ +<span class="lineNum"> 785 </span> : : if(opts-&gt;config[CONF_PF_EXPIRE_INTERVAL] == NULL) +<span class="lineNum"> 786 </span> : : set_config_entry(opts, CONF_PF_EXPIRE_INTERVAL, +<span class="lineNum"> 787 </span> : : DEF_PF_EXPIRE_INTERVAL); +<span class="lineNum"> 788 </span> : : +<span class="lineNum"> 789 </span> : : #elif FIREWALL_IPF +<span class="lineNum"> 790 </span> : : /* --DSS Place-holder */ +<span class="lineNum"> 791 </span> : : +<span class="lineNum"> 792 </span> : : #endif /* FIREWALL type */ +<span class="lineNum"> 793 </span> : : +<span class="lineNum"> 794 </span> : : /* GPG Home dir. +<span class="lineNum"> 795 </span> : : */ +<span class="lineNum"> 796 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_GPG_HOME_DIR] == NULL)</span> +<span class="lineNum"> 797 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_GPG_HOME_DIR, DEF_GPG_HOME_DIR);</span> +<span class="lineNum"> 798 </span> : : +<span class="lineNum"> 799 </span> : : /* GPG executable +<span class="lineNum"> 800 </span> : : */ +<span class="lineNum"> 801 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_GPG_EXE] == NULL)</span> +<span class="lineNum"> 802 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_GPG_EXE, DEF_GPG_EXE);</span> +<span class="lineNum"> 803 </span> : : +<span class="lineNum"> 804 </span> : : /* Enable SPA over HTTP. +<span class="lineNum"> 805 </span> : : */ +<span class="lineNum"> 806 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_SPA_OVER_HTTP] == NULL)</span> +<span class="lineNum"> 807 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_SPA_OVER_HTTP,</span> +<span class="lineNum"> 808 </span> : : DEF_ENABLE_SPA_OVER_HTTP); +<span class="lineNum"> 809 </span> : : +<span class="lineNum"> 810 </span> : : /* Enable TCP server. +<span class="lineNum"> 811 </span> : : */ +<span class="lineNum"> 812 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_TCP_SERVER] == NULL)</span> +<span class="lineNum"> 813 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_TCP_SERVER, DEF_ENABLE_TCP_SERVER);</span> +<span class="lineNum"> 814 </span> : : +<span class="lineNum"> 815 </span> : : /* TCP Server port. +<span class="lineNum"> 816 </span> : : */ +<span class="lineNum"> 817 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_TCPSERV_PORT] == NULL)</span> +<span class="lineNum"> 818 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_TCPSERV_PORT, DEF_TCPSERV_PORT);</span> +<span class="lineNum"> 819 </span> : : +<span class="lineNum"> 820 </span> : : /* Enable UDP server. +<span class="lineNum"> 821 </span> : : */ +<span class="lineNum"> 822 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_UDP_SERVER] == NULL)</span> +<span class="lineNum"> 823 </span> : : { +<span class="lineNum"> 824 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 795 : if((strncasecmp(DEF_ENABLE_UDP_SERVER, &quot;Y&quot;, 1) == 0) &amp;&amp;</span> +<span class="lineNum"> 825 </span> :<span class="lineNoCov"> 0 : !opts-&gt;enable_udp_server)</span> +<span class="lineNum"> 826 </span> : : { +<span class="lineNum"> 827 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;pcap capture not compiled in, forcing UDP server mode&quot;);</span> +<span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : opts-&gt;enable_udp_server = 1;</span> +<span class="lineNum"> 829 </span> : : } +<span class="lineNum"> 830 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_UDP_SERVER, DEF_ENABLE_UDP_SERVER);</span> +<span class="lineNum"> 831 </span> : : } +<span class="lineNum"> 832 </span> : : +<span class="lineNum"> 833 </span> : : /* UDP Server port. +<span class="lineNum"> 834 </span> : : */ +<span class="lineNum"> 835 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_UDPSERV_PORT] == NULL)</span> +<span class="lineNum"> 836 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_UDPSERV_PORT, DEF_UDPSERV_PORT);</span> +<span class="lineNum"> 837 </span> : : +<span class="lineNum"> 838 </span> : : /* UDP server select() timeout in microseconds +<span class="lineNum"> 839 </span> : : */ +<span class="lineNum"> 840 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_UDPSERV_SELECT_TIMEOUT] == NULL)</span> +<span class="lineNum"> 841 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_UDPSERV_SELECT_TIMEOUT,</span> +<span class="lineNum"> 842 </span> : : DEF_UDPSERV_SELECT_TIMEOUT); +<span class="lineNum"> 843 </span> : : +<span class="lineNum"> 844 </span> : : /* Syslog identity. +<span class="lineNum"> 845 </span> : : */ +<span class="lineNum"> 846 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_IDENTITY] == NULL)</span> +<span class="lineNum"> 847 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_SYSLOG_IDENTITY, DEF_SYSLOG_IDENTITY);</span> +<span class="lineNum"> 848 </span> : : +<span class="lineNum"> 849 </span> : : /* Syslog facility. +<span class="lineNum"> 850 </span> : : */ +<span class="lineNum"> 851 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_FACILITY] == NULL)</span> +<span class="lineNum"> 852 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_SYSLOG_FACILITY, DEF_SYSLOG_FACILITY);</span> +<span class="lineNum"> 853 </span> : : +<span class="lineNum"> 854 </span> : : +<span class="lineNum"> 855 </span> : : /* Validate integer variable ranges +<span class="lineNum"> 856 </span> : : */ +<span class="lineNum"> 857 </span> :<span class="lineCov"> 795 : validate_int_var_ranges(opts);</span> +<span class="lineNum"> 858 </span> : : +<span class="lineNum"> 859 </span> : : /* Some options just trigger some output of information, or trigger an +<span class="lineNum"> 860 </span> : : * external function, but do not actually start fwknopd. If any of those +<span class="lineNum"> 861 </span> : : * are set, we can return here an skip the validation routines as all +<span class="lineNum"> 862 </span> : : * other options will be ignored anyway. +<span class="lineNum"> 863 </span> : : * +<span class="lineNum"> 864 </span> : : * These are also mutually exclusive (for now). +<span class="lineNum"> 865 </span> : : */ +<span class="lineNum"> 866 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if((opts-&gt;dump_config + opts-&gt;kill + opts-&gt;restart + opts-&gt;status) == 1)</span> +<span class="lineNum"> 867 </span> : : return; +<span class="lineNum"> 868 </span> : : +<span class="lineNum"> 869 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if((opts-&gt;dump_config + opts-&gt;kill + opts-&gt;restart + opts-&gt;status) &gt; 1)</span> +<span class="lineNum"> 870 </span> : : { +<span class="lineNum"> 871 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 872 </span> : : &quot;The -D, -K, -R, and -S options are mutually exclusive. Pick only one.&quot; +<span class="lineNum"> 873 </span> : : ); +<span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 875 </span> : : } +<span class="lineNum"> 876 </span> : : +<span class="lineNum"> 877 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWALL_EXE] == NULL)</span> +<span class="lineNum"> 878 </span> : : { +<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 880 </span> : : &quot;[*] No firewall command executable is set. Please check FIREWALL_EXE in fwknopd.conf.&quot; +<span class="lineNum"> 881 </span> : : ); +<span class="lineNum"> 882 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 883 </span> : : } +<span class="lineNum"> 884 </span> : : +<span class="lineNum"> 885 </span> : : return; +<span class="lineNum"> 886 </span> : : } +<a name="887"><span class="lineNum"> 887 </span> : : </a> +<span class="lineNum"> 888 </span> : : void +<span class="lineNum"> 889 </span> :<span class="lineCov"> 1814 : set_preconfig_entries(fko_srv_options_t *opts)</span> +<span class="lineNum"> 890 </span> : : { +<span class="lineNum"> 891 </span> : : /* First, set any default or otherwise static settings here. Some may +<span class="lineNum"> 892 </span> : : * end up being overwritten via config file or command-line. +<span class="lineNum"> 893 </span> : : */ +<span class="lineNum"> 894 </span> : : +<span class="lineNum"> 895 </span> : : /* Setup the firewall executable based on build-time info. +<span class="lineNum"> 896 </span> : : * --DSS Note: We will want to either force external script mode, or +<span class="lineNum"> 897 </span> : : * error out if we do not have a firewall executable defined. +<span class="lineNum"> 898 </span> : : */ +<span class="lineNum"> 899 </span> : : #ifdef FIREWALL_EXE +<span class="lineNum"> 900 </span> :<span class="lineCov"> 1814 : set_config_entry(opts, CONF_FIREWALL_EXE, FIREWALL_EXE);</span> +<span class="lineNum"> 901 </span> : : #endif +<span class="lineNum"> 902 </span> : : +<span class="lineNum"> 903 </span> :<span class="lineCov"> 1814 : }</span> +<span class="lineNum"> 904 </span> : : +<span class="lineNum"> 905 </span> : : /* Initialize program configuration via config file and/or command-line +<span class="lineNum"> 906 </span> : : * switches. +<a name="907"><span class="lineNum"> 907 </span> : : */</a> +<span class="lineNum"> 908 </span> : : void +<span class="lineNum"> 909 </span> :<span class="lineCov"> 1814 : config_init(fko_srv_options_t *opts, int argc, char **argv)</span> +<span class="lineNum"> 910 </span> : : { +<span class="lineNum"> 911 </span> : : int cmd_arg, index, is_err; +<span class="lineNum"> 912 </span> :<span class="lineCov"> 1814 : unsigned char got_conf_file = 0, got_override_config = 0;</span> +<span class="lineNum"> 913 </span> : : +<span class="lineNum"> 914 </span> :<span class="lineCov"> 1814 : char override_file[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 915 </span> : : char *ndx, *cmrk; +<span class="lineNum"> 916 </span> : : +<span class="lineNum"> 917 </span> : : /* Zero out options and opts_track. +<span class="lineNum"> 918 </span> : : */ +<span class="lineNum"> 919 </span> : : memset(opts, 0x00, sizeof(fko_srv_options_t)); +<span class="lineNum"> 920 </span> : : +<span class="lineNum"> 921 </span> : : /* Set some preconfiguration options (i.e. build-time defaults) +<span class="lineNum"> 922 </span> : : */ +<span class="lineNum"> 923 </span> :<span class="lineCov"> 1814 : set_preconfig_entries(opts);</span> +<span class="lineNum"> 924 </span> : : +<span class="lineNum"> 925 </span> : : /* In case this is a re-config. +<span class="lineNum"> 926 </span> : : */ +<span class="lineNum"> 927 </span> :<span class="lineCov"> 1814 : optind = 0;</span> +<span class="lineNum"> 928 </span> : : +<span class="lineNum"> 929 </span> : : /* First, scan the command-line args for -h/--help or an alternate +<span class="lineNum"> 930 </span> : : * configuration file. If we find an alternate config file, use it, +<span class="lineNum"> 931 </span> : : * otherwise use the default. We also grab any override config files +<span class="lineNum"> 932 </span> : : * as well. +<span class="lineNum"> 933 </span> : : */ +<span class="lineNum"> 934 </span> [<span class="branchCov" title="Branch 1 was taken 16471 times"> + </span><span class="branchCov" title="Branch 2 was taken 1814 times"> + </span>]:<span class="lineCov"> 20099 : while ((cmd_arg = getopt_long(argc, argv,</span> +<span class="lineNum"> 935 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { +<span class="lineNum"> 936 </span> : : +<span class="lineNum"> 937 </span> : : /* If help is wanted, give it and exit. +<span class="lineNum"> 938 </span> : : */ +<span class="lineNum"> 939 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span><span class="branchCov" title="Branch 2 was taken 1295 times"> + </span><span class="branchCov" title="Branch 3 was taken 13362 times"> + </span>]:<span class="lineCov"> 16471 : switch(cmd_arg) {</span> +<span class="lineNum"> 940 </span> : : case 'h': +<span class="lineNum"> 941 </span> :<span class="lineNoCov"> 0 : usage();</span> +<span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 943 </span> : : +<span class="lineNum"> 944 </span> : : /* Look for configuration file arg. +<span class="lineNum"> 945 </span> : : */ +<span class="lineNum"> 946 </span> : : case 'c': +<span class="lineNum"> 947 </span> :<span class="lineCov"> 1814 : set_config_entry(opts, CONF_CONFIG_FILE, optarg);</span> +<span class="lineNum"> 948 </span> :<span class="lineCov"> 1814 : got_conf_file++;</span> +<span class="lineNum"> 949 </span> : : +<span class="lineNum"> 950 </span> : : /* If we already have the config_override option, we are done. +<span class="lineNum"> 951 </span> : : */ +<span class="lineNum"> 952 </span> [<span class="branchCov" title="Branch 0 was taken 1814 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1814 : if(got_override_config &gt; 0)</span> +<span class="lineNum"> 953 </span> : : break; +<span class="lineNum"> 954 </span> : : +<span class="lineNum"> 955 </span> : : /* Look for override configuration file arg. +<span class="lineNum"> 956 </span> : : */ +<span class="lineNum"> 957 </span> : : case 'O': +<span class="lineNum"> 958 </span> :<span class="lineCov"> 3109 : set_config_entry(opts, CONF_OVERRIDE_CONFIG, optarg);</span> +<span class="lineNum"> 959 </span> :<span class="lineCov"> 4923 : got_override_config++;</span> +<span class="lineNum"> 960 </span> : : +<span class="lineNum"> 961 </span> : : /* If we already have the conf_file option, we are done. +<span class="lineNum"> 962 </span> : : */ +<span class="lineNum"> 963 </span> : : if(got_conf_file &gt; 0) +<span class="lineNum"> 964 </span> : : break; +<span class="lineNum"> 965 </span> : : } +<span class="lineNum"> 966 </span> : : } +<span class="lineNum"> 967 </span> : : +<span class="lineNum"> 968 </span> : : /* If no alternate configuration file was specified, we use the +<span class="lineNum"> 969 </span> : : * default. +<span class="lineNum"> 970 </span> : : */ +<span class="lineNum"> 971 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span>]:<span class="lineCov"> 1814 : if(opts-&gt;config[CONF_CONFIG_FILE] == NULL)</span> +<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_CONFIG_FILE, DEF_CONFIG_FILE);</span> +<span class="lineNum"> 973 </span> : : +<span class="lineNum"> 974 </span> : : /* Parse configuration file to populate any params not already specified +<span class="lineNum"> 975 </span> : : * via command-line options. +<span class="lineNum"> 976 </span> : : */ +<span class="lineNum"> 977 </span> :<span class="lineCov"> 1814 : parse_config_file(opts, opts-&gt;config[CONF_CONFIG_FILE]);</span> +<span class="lineNum"> 978 </span> : : +<span class="lineNum"> 979 </span> : : /* If there are override configuration entries, process them +<span class="lineNum"> 980 </span> : : * here. +<span class="lineNum"> 981 </span> : : */ +<span class="lineNum"> 982 </span> [<span class="branchCov" title="Branch 0 was taken 1814 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1814 : if(opts-&gt;config[CONF_OVERRIDE_CONFIG] != NULL)</span> +<span class="lineNum"> 983 </span> : : { +<span class="lineNum"> 984 </span> : : /* Make a copy of the override_config string so we can munge it. +<span class="lineNum"> 985 </span> : : */ +<span class="lineNum"> 986 </span> :<span class="lineCov"> 1814 : strlcpy(override_file, opts-&gt;config[CONF_OVERRIDE_CONFIG], sizeof(override_file));</span> +<span class="lineNum"> 987 </span> : : +<span class="lineNum"> 988 </span> :<span class="lineCov"> 1814 : ndx = override_file;</span> +<span class="lineNum"> 989 </span> :<span class="lineCov"> 1814 : cmrk = strchr(ndx, ',');</span> +<span class="lineNum"> 990 </span> : : +<span class="lineNum"> 991 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span>]:<span class="lineCov"> 1814 : if(cmrk == NULL)</span> +<span class="lineNum"> 992 </span> : : { +<span class="lineNum"> 993 </span> : : /* Only one to process... +<span class="lineNum"> 994 </span> : : */ +<span class="lineNum"> 995 </span> :<span class="lineCov"> 1814 : parse_config_file(opts, ndx);</span> +<span class="lineNum"> 996 </span> : : +<span class="lineNum"> 997 </span> : : } else { +<span class="lineNum"> 998 </span> : : /* Walk the string pulling the next config override +<span class="lineNum"> 999 </span> : : * at the comma delimiters. +<span class="lineNum"> 1000 </span> : : */ +<span class="lineNum"> 1001 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(cmrk != NULL) {</span> +<span class="lineNum"> 1002 </span> :<span class="lineNoCov"> 0 : *cmrk = '\0';</span> +<span class="lineNum"> 1003 </span> :<span class="lineNoCov"> 0 : parse_config_file(opts, ndx);</span> +<span class="lineNum"> 1004 </span> :<span class="lineNoCov"> 0 : ndx = cmrk + 1;</span> +<span class="lineNum"> 1005 </span> :<span class="lineNoCov"> 0 : cmrk = strchr(ndx, ',');</span> +<span class="lineNum"> 1006 </span> : : } +<span class="lineNum"> 1007 </span> : : +<span class="lineNum"> 1008 </span> : : /* Process the last entry +<span class="lineNum"> 1009 </span> : : */ +<span class="lineNum"> 1010 </span> :<span class="lineNoCov"> 0 : parse_config_file(opts, ndx);</span> +<span class="lineNum"> 1011 </span> : : } +<span class="lineNum"> 1012 </span> : : } +<span class="lineNum"> 1013 </span> : : +<span class="lineNum"> 1014 </span> : : /* Set up the verbosity level according to the value found in the +<span class="lineNum"> 1015 </span> : : * config files */ +<span class="lineNum"> 1016 </span> [<span class="branchCov" title="Branch 0 was taken 451 times"> + </span><span class="branchCov" title="Branch 1 was taken 1363 times"> + </span>]:<span class="lineCov"> 1814 : if (opts-&gt;config[CONF_VERBOSE] != NULL)</span> +<span class="lineNum"> 1017 </span> : : { +<span class="lineNum"> 1018 </span> :<span class="lineCov"> 451 : opts-&gt;verbose = strtol_wrapper(opts-&gt;config[CONF_VERBOSE], 0, -1,</span> +<span class="lineNum"> 1019 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 1020 </span> [<span class="branchCov" title="Branch 0 was taken 17 times"> + </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 451 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 1021 </span> : : { +<span class="lineNum"> 1022 </span> :<span class="lineCov"> 17 : log_msg(LOG_ERR, &quot;[*] VERBOSE value '%s' not in the range (&gt;0)&quot;,</span> +<span class="lineNum"> 1023 </span> : : opts-&gt;config[CONF_VERBOSE]); +<span class="lineNum"> 1024 </span> :<span class="lineCov"> 17 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1025 </span> : : } +<span class="lineNum"> 1026 </span> : : } +<span class="lineNum"> 1027 </span> : : +<span class="lineNum"> 1028 </span> : : /* Reset the options index so we can run through them again. +<span class="lineNum"> 1029 </span> : : */ +<span class="lineNum"> 1030 </span> :<span class="lineCov"> 1797 : optind = 0;</span> +<span class="lineNum"> 1031 </span> : : +<span class="lineNum"> 1032 </span> : : /* Last, but not least, we process command-line options (some of which +<span class="lineNum"> 1033 </span> : : * may override configuration file options. +<span class="lineNum"> 1034 </span> : : */ +<span class="lineNum"> 1035 </span> [<span class="branchCov" title="Branch 1 was taken 11510 times"> + </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 14102 : while ((cmd_arg = getopt_long(argc, argv,</span> +<span class="lineNum"> 1036 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { +<span class="lineNum"> 1037 </span> : : +<span class="lineNum"> 1038 </span> [<span class="branchCov" title="Branch 0 was taken 1002 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1797 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 11510 : switch(cmd_arg) {</span> +<span class="lineNum"> </span><span class="branchCov" title="Branch 4 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchNoCov" title="Branch 6 was not taken"> - </span><span class="branchCov" title="Branch 7 was taken 795 times"> + </span><span class="branchCov" title="Branch 8 was taken 795 times"> + </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 9 was not taken"> - </span><span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchNoCov" title="Branch 11 was not taken"> - </span><span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchNoCov" title="Branch 13 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchNoCov" title="Branch 15 was not taken"> - </span><span class="branchNoCov" title="Branch 16 was not taken"> - </span><span class="branchNoCov" title="Branch 17 was not taken"> - </span><span class="branchNoCov" title="Branch 18 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 19 was not taken"> - </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span><span class="branchNoCov" title="Branch 21 was not taken"> - </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span><span class="branchNoCov" title="Branch 23 was not taken"> - </span> +<span class="lineNum"> </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span><span class="branchCov" title="Branch 25 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 26 was not taken"> - </span><span class="branchCov" title="Branch 27 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 28 was not taken"> - </span> +<span class="lineNum"> </span> <span class="branchCov" title="Branch 29 was taken 2385 times"> + </span><span class="branchNoCov" title="Branch 30 was not taken"> - </span><span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchNoCov" title="Branch 32 was not taken"> - </span> +<span class="lineNum"> </span> <span class="branchCov" title="Branch 33 was taken 3075 times"> + </span>] +<span class="lineNum"> 1039 </span> : : case 'A': +<span class="lineNum"> 1040 </span> : : #if AFL_FUZZING +<span class="lineNum"> 1041 </span> : : opts-&gt;afl_fuzzing = 1; +<span class="lineNum"> 1042 </span> : : #else +<span class="lineNum"> 1043 </span> :<span class="lineCov"> 1002 : log_msg(LOG_ERR, &quot;[*] fwknopd not compiled with AFL fuzzing support&quot;);</span> +<span class="lineNum"> 1044 </span> :<span class="lineCov"> 1002 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1045 </span> : : #endif +<span class="lineNum"> 1046 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1047 </span> : : case AFL_PKT_FILE: +<span class="lineNum"> 1048 </span> : : #if AFL_FUZZING +<span class="lineNum"> 1049 </span> : : opts-&gt;afl_fuzzing = 1; +<span class="lineNum"> 1050 </span> : : set_config_entry(opts, CONF_AFL_PKT_FILE, optarg); +<span class="lineNum"> 1051 </span> : : #else +<span class="lineNum"> 1052 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] fwknopd not compiled with AFL fuzzing support&quot;);</span> +<span class="lineNum"> 1053 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1054 </span> : : #endif +<span class="lineNum"> 1055 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1056 </span> : : case 'a': +<span class="lineNum"> 1057 </span> :<span class="lineCov"> 1797 : set_config_entry(opts, CONF_ACCESS_FILE, optarg);</span> +<span class="lineNum"> 1058 </span> :<span class="lineCov"> 1797 : break;</span> +<span class="lineNum"> 1059 </span> : : case 'c': +<span class="lineNum"> 1060 </span> : : /* This was handled earlier */ +<span class="lineNum"> 1061 </span> : : break; +<span class="lineNum"> 1062 </span> : : case 'C': +<span class="lineNum"> 1063 </span> :<span class="lineNoCov"> 0 : opts-&gt;packet_ctr_limit = strtol_wrapper(optarg,</span> +<span class="lineNum"> 1064 </span> : : 0, (2 &lt;&lt; 30), NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 1065 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 1066 </span> : : { +<span class="lineNum"> 1067 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1068 </span> : : &quot;[*] invalid -C packet count limit '%s'&quot;, +<span class="lineNum"> 1069 </span> : : optarg); +<span class="lineNum"> 1070 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1071 </span> : : } +<span class="lineNum"> 1072 </span> : : break; +<span class="lineNum"> 1073 </span> : : case 'd': +<span class="lineNum"> 1074 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 1075 </span> :<span class="lineCov"> 71 : set_config_entry(opts, CONF_DIGEST_FILE, optarg);</span> +<span class="lineNum"> 1076 </span> : : #else +<span class="lineNum"> 1077 </span> : : set_config_entry(opts, CONF_DIGEST_DB_FILE, optarg); +<span class="lineNum"> 1078 </span> : : #endif +<span class="lineNum"> 1079 </span> :<span class="lineCov"> 71 : break;</span> +<span class="lineNum"> 1080 </span> : : case 'D': +<span class="lineNum"> 1081 </span> :<span class="lineNoCov"> 0 : opts-&gt;dump_config = 1;</span> +<span class="lineNum"> 1082 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1083 </span> : : case DUMP_SERVER_ERR_CODES: +<span class="lineNum"> 1084 </span> :<span class="lineNoCov"> 0 : dump_server_errors();</span> +<span class="lineNum"> 1085 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 1086 </span> : : case EXIT_AFTER_PARSE_CONFIG: +<span class="lineNum"> 1087 </span> :<span class="lineCov"> 795 : opts-&gt;exit_after_parse_config = 1;</span> +<span class="lineNum"> 1088 </span> :<span class="lineCov"> 795 : opts-&gt;foreground = 1;</span> +<span class="lineNum"> 1089 </span> :<span class="lineCov"> 795 : break;</span> +<span class="lineNum"> 1090 </span> : : case 'f': +<span class="lineNum"> 1091 </span> :<span class="lineCov"> 795 : opts-&gt;foreground = 1;</span> +<span class="lineNum"> 1092 </span> :<span class="lineCov"> 795 : break;</span> +<span class="lineNum"> 1093 </span> : : case FAULT_INJECTION_TAG: +<span class="lineNum"> 1094 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 1095 </span> : : set_config_entry(opts, CONF_FAULT_INJECTION_TAG, optarg); +<span class="lineNum"> 1096 </span> : : #else +<span class="lineNum"> 1097 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] fwknopd not compiled with libfiu support&quot;);</span> +<span class="lineNum"> 1098 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1099 </span> : : #endif +<span class="lineNum"> 1100 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1101 </span> : : case FW_LIST: +<span class="lineNum"> 1102 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_list = 1;</span> +<span class="lineNum"> 1103 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1104 </span> : : case FW_LIST_ALL: +<span class="lineNum"> 1105 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_list = 1;</span> +<span class="lineNum"> 1106 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_list_all = 1;</span> +<span class="lineNum"> 1107 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1108 </span> : : case FW_FLUSH: +<span class="lineNum"> 1109 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_flush = 1;</span> +<span class="lineNum"> 1110 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1111 </span> : : case GPG_HOME_DIR: +<span class="lineNum"> 1112 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_valid_dir(optarg))</span> +<span class="lineNum"> 1113 </span> : : { +<span class="lineNum"> 1114 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_GPG_HOME_DIR, optarg);</span> +<span class="lineNum"> 1115 </span> : : } +<span class="lineNum"> 1116 </span> : : else +<span class="lineNum"> 1117 </span> : : { +<span class="lineNum"> 1118 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1119 </span> : : &quot;[*] Directory '%s' could not stat()/does not exist?&quot;, +<span class="lineNum"> 1120 </span> : : optarg); +<span class="lineNum"> 1121 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1122 </span> : : } +<span class="lineNum"> 1123 </span> : : break; +<span class="lineNum"> 1124 </span> : : case 'i': +<span class="lineNum"> 1125 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_PCAP_INTF, optarg);</span> +<span class="lineNum"> 1126 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1127 </span> : : case FIREWD_DISABLE_CHECK_SUPPORT: +<span class="lineNum"> 1128 </span> :<span class="lineNoCov"> 0 : opts-&gt;firewd_disable_check_support = 1;</span> +<span class="lineNum"> 1129 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1130 </span> : : case IPT_DISABLE_CHECK_SUPPORT: +<span class="lineNum"> 1131 </span> :<span class="lineNoCov"> 0 : opts-&gt;ipt_disable_check_support = 1;</span> +<span class="lineNum"> 1132 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1133 </span> : : case 'K': +<span class="lineNum"> 1134 </span> :<span class="lineNoCov"> 0 : opts-&gt;kill = 1;</span> +<span class="lineNum"> 1135 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1136 </span> : : case 'l': +<span class="lineNum"> 1137 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_LOCALE, optarg);</span> +<span class="lineNum"> 1138 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1139 </span> : : case 'O': +<span class="lineNum"> 1140 </span> : : /* This was handled earlier */ +<span class="lineNum"> 1141 </span> : : break; +<span class="lineNum"> 1142 </span> : : case 'p': +<span class="lineNum"> 1143 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_FWKNOP_PID_FILE, optarg);</span> +<span class="lineNum"> 1144 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1145 </span> : : case 'P': +<span class="lineNum"> 1146 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_PCAP_FILTER, optarg);</span> +<span class="lineNum"> 1147 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1148 </span> : : case PCAP_FILE: +<span class="lineNum"> 1149 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_PCAP_FILE, optarg);</span> +<span class="lineNum"> 1150 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1151 </span> : : case ENABLE_PCAP_ANY_DIRECTION: +<span class="lineNum"> 1152 </span> :<span class="lineNoCov"> 0 : opts-&gt;pcap_any_direction = 1;</span> +<span class="lineNum"> 1153 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1154 </span> : : case ROTATE_DIGEST_CACHE: +<span class="lineNum"> 1155 </span> :<span class="lineNoCov"> 0 : opts-&gt;rotate_digest_cache = 1;</span> +<span class="lineNum"> 1156 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1157 </span> : : case 'R': +<span class="lineNum"> 1158 </span> :<span class="lineNoCov"> 0 : opts-&gt;restart = 1;</span> +<span class="lineNum"> 1159 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1160 </span> : : case 'r': +<span class="lineNum"> 1161 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FWKNOP_RUN_DIR, optarg);</span> +<span class="lineNum"> 1162 </span> :<span class="lineCov"> 795 : break;</span> +<span class="lineNum"> 1163 </span> : : case 'S': +<span class="lineNum"> 1164 </span> :<span class="lineNoCov"> 0 : opts-&gt;status = 1;</span> +<span class="lineNum"> 1165 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1166 </span> : : case 't': +<span class="lineNum"> 1167 </span> :<span class="lineCov"> 795 : opts-&gt;test = 1;</span> +<span class="lineNum"> 1168 </span> :<span class="lineCov"> 795 : break;</span> +<span class="lineNum"> 1169 </span> : : case 'U': +<span class="lineNum"> 1170 </span> :<span class="lineNoCov"> 0 : opts-&gt;enable_udp_server = 1;</span> +<span class="lineNum"> 1171 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1172 </span> : : /* Verbosity level */ +<span class="lineNum"> 1173 </span> : : case 'v': +<span class="lineNum"> 1174 </span> :<span class="lineCov"> 2385 : opts-&gt;verbose++;</span> +<span class="lineNum"> 1175 </span> :<span class="lineCov"> 2385 : break;</span> +<span class="lineNum"> 1176 </span> : : case SYSLOG_ENABLE: +<span class="lineNum"> 1177 </span> :<span class="lineNoCov"> 0 : opts-&gt;syslog_enable = 1;</span> +<span class="lineNum"> 1178 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 1179 </span> : : case 'V': +<span class="lineNum"> 1180 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;fwknopd server %s\n&quot;, MY_VERSION);</span> +<span class="lineNum"> 1181 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 1182 </span> : : default: +<span class="lineNum"> 1183 </span> :<span class="lineNoCov"> 0 : usage();</span> +<span class="lineNum"> 1184 </span> :<span class="lineCov"> 9230 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 1185 </span> : : } +<span class="lineNum"> 1186 </span> : : } +<span class="lineNum"> 1187 </span> : : +<span class="lineNum"> 1188 </span> : : /* Now that we have all of our options set, and we are actually going to +<span class="lineNum"> 1189 </span> : : * start fwknopd, we can validate them. +<span class="lineNum"> 1190 </span> : : */ +<span class="lineNum"> 1191 </span> :<span class="lineCov"> 795 : validate_options(opts);</span> +<span class="lineNum"> 1192 </span> : : +<span class="lineNum"> 1193 </span> :<span class="lineCov"> 795 : return;</span> +<span class="lineNum"> 1194 </span> : : } +<span class="lineNum"> 1195 </span> : : +<span class="lineNum"> 1196 </span> : : /* Dump the configuration +<a name="1197"><span class="lineNum"> 1197 </span> : : */</a> +<span class="lineNum"> 1198 </span> : : void +<span class="lineNum"> 1199 </span> :<span class="lineCov"> 249 : dump_config(const fko_srv_options_t *opts)</span> +<span class="lineNum"> 1200 </span> : : { +<span class="lineNum"> 1201 </span> : : int i; +<span class="lineNum"> 1202 </span> : : +<span class="lineNum"> 1203 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;Current fwknopd config settings:\n&quot;);</span> +<span class="lineNum"> 1204 </span> : : +<span class="lineNum"> 1205 </span> [<span class="branchCov" title="Branch 1 was taken 11952 times"> + </span><span class="branchCov" title="Branch 2 was taken 249 times"> + </span>]:<span class="lineCov"> 12201 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> +<span class="lineNum"> 1206 </span> [<span class="branchCov" title="Branch 0 was taken 10458 times"> + </span><span class="branchCov" title="Branch 1 was taken 1494 times"> + </span>]:<span class="lineCov"> 11952 : fprintf(stdout, &quot;%3i. %-28s = '%s'\n&quot;,</span> +<span class="lineNum"> 1207 </span> : : i, +<span class="lineNum"> 1208 </span> : : config_map[i], +<span class="lineNum"> 1209 </span> :<span class="lineCov"> 11952 : (opts-&gt;config[i] == NULL) ? &quot;&lt;not set&gt;&quot; : opts-&gt;config[i]</span> +<span class="lineNum"> 1210 </span> : : ); +<span class="lineNum"> 1211 </span> : : +<span class="lineNum"> 1212 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;\n&quot;);</span> +<span class="lineNum"> 1213 </span> :<span class="lineCov"> 249 : fflush(stdout);</span> +<span class="lineNum"> 1214 </span> :<span class="lineCov"> 249 : }</span> +<span class="lineNum"> 1215 </span> : : +<span class="lineNum"> 1216 </span> : : /* Print usage message... +<a name="1217"><span class="lineNum"> 1217 </span> : : */</a> +<span class="lineNum"> 1218 </span> : : void +<span class="lineNum"> 1219 </span> :<span class="lineNoCov"> 0 : usage(void)</span> +<span class="lineNum"> 1220 </span> : : { +<span class="lineNum"> 1221 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;\n%s server version %s\n%s - http://www.cipherdyne.org/fwknop/\n\n&quot;,</span> +<span class="lineNum"> 1222 </span> : : MY_NAME, MY_VERSION, MY_DESC); +<span class="lineNum"> 1223 </span> :<span class="lineNoCov"> 0 : fprintf(stdout,</span> +<span class="lineNum"> 1224 </span> : : &quot;Usage: fwknopd [options]\n\n&quot; +<span class="lineNum"> 1225 </span> : : &quot; -a, --access-file - Specify an alternate access.conf file.\n&quot; +<span class="lineNum"> 1226 </span> : : &quot; -c, --config-file - Specify an alternate configuration file.\n&quot; +<span class="lineNum"> 1227 </span> : : &quot; -f, --foreground - Run fwknopd in the foreground (do not become\n&quot; +<span class="lineNum"> 1228 </span> : : &quot; a background daemon).\n&quot; +<span class="lineNum"> 1229 </span> : : &quot; -i, --interface - Specify interface to listen for incoming SPA\n&quot; +<span class="lineNum"> 1230 </span> : : &quot; packets.\n&quot; +<span class="lineNum"> 1231 </span> : : &quot; -C, --packet-limit - Limit the number of candidate SPA packets to\n&quot; +<span class="lineNum"> 1232 </span> : : &quot; process and exit when this limit is reached.\n&quot; +<span class="lineNum"> 1233 </span> : : &quot; -d, --digest-file - Specify an alternate digest.cache file.\n&quot; +<span class="lineNum"> 1234 </span> : : &quot; -D, --dump-config - Dump the current fwknop configuration values.\n&quot; +<span class="lineNum"> 1235 </span> : : &quot; -K, --kill - Kill the currently running fwknopd.\n&quot; +<span class="lineNum"> 1236 </span> : : &quot; -l, --locale - Provide a locale setting other than the system\n&quot; +<span class="lineNum"> 1237 </span> : : &quot; default.\n&quot; +<span class="lineNum"> 1238 </span> : : &quot; -O, --override-config - Specify a file with configuration entries that will\n&quot; +<span class="lineNum"> 1239 </span> : : &quot; overide those in fwknopd.conf\n&quot; +<span class="lineNum"> 1240 </span> : : &quot; -p, --pid-file - Specify an alternate fwknopd.pid file.\n&quot; +<span class="lineNum"> 1241 </span> : : &quot; -P, --pcap-filter - Specify a Berkeley packet filter statement to\n&quot; +<span class="lineNum"> 1242 </span> : : &quot; override the PCAP_FILTER variable in fwknopd.conf.\n&quot; +<span class="lineNum"> 1243 </span> : : &quot; -R, --restart - Force the currently running fwknopd to restart.\n&quot; +<span class="lineNum"> 1244 </span> : : &quot; --rotate-digest-cache\n&quot; +<span class="lineNum"> 1245 </span> : : &quot; - Rotate the digest cache file by renaming the file\n&quot; +<span class="lineNum"> 1246 </span> : : &quot; to the same path with the -old suffix.\n&quot; +<span class="lineNum"> 1247 </span> : : &quot; -r, --run-dir - Set path to local state run directory.\n&quot; +<span class="lineNum"> 1248 </span> : : &quot; - Rotate the digest cache file by renaming it to\n&quot; +<span class="lineNum"> 1249 </span> : : &quot; '&lt;name&gt;-old', and starting a new one.\n&quot; +<span class="lineNum"> 1250 </span> : : &quot; -S, --status - Display the status of any running fwknopd process.\n&quot; +<span class="lineNum"> 1251 </span> : : &quot; -t, --test - Test mode, process SPA packets but do not make any\n&quot; +<span class="lineNum"> 1252 </span> : : &quot; firewall modifications.\n&quot; +<span class="lineNum"> 1253 </span> : : &quot; -U, --udp-server - Set UDP server mode.\n&quot; +<span class="lineNum"> 1254 </span> : : &quot; -v, --verbose - Set verbose mode.\n&quot; +<span class="lineNum"> 1255 </span> : : &quot; --syslog-enable - Allow messages to be sent to syslog even if the\n&quot; +<span class="lineNum"> 1256 </span> : : &quot; foreground mode is set.\n&quot; +<span class="lineNum"> 1257 </span> : : &quot; -V, --version - Print version number.\n&quot; +<span class="lineNum"> 1258 </span> : : &quot; -A, --afl-fuzzing - Run in American Fuzzy Lop (AFL) fuzzing mode so\n&quot; +<span class="lineNum"> 1259 </span> : : &quot; that plaintext SPA packets are accepted via stdin.\n&quot; +<span class="lineNum"> 1260 </span> : : &quot; -h, --help - Print this usage message and exit.\n&quot; +<span class="lineNum"> 1261 </span> : : &quot; --dump-serv-err-codes - List all server error codes (only needed by the\n&quot; +<span class="lineNum"> 1262 </span> : : &quot; test suite).\n&quot; +<span class="lineNum"> 1263 </span> : : &quot; --exit-parse-config - Parse config files and exit.\n&quot; +<span class="lineNum"> 1264 </span> : : &quot; --fault-injection-tag - Enable a fault injection tag (only needed by the\n&quot; +<span class="lineNum"> 1265 </span> : : &quot; test suite).\n&quot; +<span class="lineNum"> 1266 </span> : : &quot; --pcap-file - Read potential SPA packets from an existing pcap\n&quot; +<span class="lineNum"> 1267 </span> : : &quot; file.\n&quot; +<span class="lineNum"> 1268 </span> : : &quot; --pcap-any-direction - By default fwknopd processes packets that are\n&quot; +<span class="lineNum"> 1269 </span> : : &quot; sent to the sniffing interface, but this option\n&quot; +<span class="lineNum"> 1270 </span> : : &quot; enables processing of packets that originate from\n&quot; +<span class="lineNum"> 1271 </span> : : &quot; an interface (such as in a forwarding situation).\n&quot; +<span class="lineNum"> 1272 </span> : : &quot; --fw-list - List all firewall rules that fwknop has created\n&quot; +<span class="lineNum"> 1273 </span> : : &quot; and then exit.\n&quot; +<span class="lineNum"> 1274 </span> : : &quot; --fw-list-all - List all firewall rules in the complete policy,\n&quot; +<span class="lineNum"> 1275 </span> : : &quot; including those that have nothing to do with\n&quot; +<span class="lineNum"> 1276 </span> : : &quot; fwknop.\n&quot; +<span class="lineNum"> 1277 </span> : : &quot; --fw-flush - Flush all firewall rules created by fwknop.\n&quot; +<span class="lineNum"> 1278 </span> : : &quot; --gpg-home-dir - Specify the GPG home directory (this is normally\n&quot; +<span class="lineNum"> 1279 </span> : : &quot; done in the access.conf file).\n&quot; +<span class="lineNum"> 1280 </span> : : &quot; --gpg-exe - Specify the path to GPG (this is normally done in\n&quot; +<span class="lineNum"> 1281 </span> : : &quot; the access.conf file).\n&quot; +<span class="lineNum"> 1282 </span> : : &quot; --no-firewd-check-support\n&quot; +<span class="lineNum"> 1283 </span> : : &quot; - Disable test for 'firewall-cmd ... -C' support.\n&quot; +<span class="lineNum"> 1284 </span> : : &quot; --no-ipt-check-support - Disable test for 'iptables -C' support.\n&quot; +<span class="lineNum"> 1285 </span> : : &quot;\n&quot; +<span class="lineNum"> 1286 </span> : : ); +<span class="lineNum"> 1287 </span> : : +<span class="lineNum"> 1288 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1289 </span> : : } +<span class="lineNum"> 1290 </span> : : +<span class="lineNum"> 1291 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html new file mode 100644 index 00000000..5c050657 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html @@ -0,0 +1,105 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/extcmd.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - extcmd.c<span style="font-size: 80%;"> (<a href="extcmd.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">100</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="extcmd.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#655">run_extcmd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#82">_run_extcmd.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#666">run_extcmd_as</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#677">search_extcmd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#552">_run_extcmd_write</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#687">run_extcmd_write</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html new file mode 100644 index 00000000..5fa8d663 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html @@ -0,0 +1,105 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/extcmd.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - extcmd.c<span style="font-size: 80%;"> (<a href="extcmd.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">100</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="extcmd.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#82">_run_extcmd.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#552">_run_extcmd_write</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#655">run_extcmd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#666">run_extcmd_as</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#687">run_extcmd_write</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="extcmd.c.gcov.html#677">search_extcmd</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html new file mode 100644 index 00000000..9886571d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html @@ -0,0 +1,779 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/extcmd.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - extcmd.c<span style="font-size: 80%;"> (source / <a href="extcmd.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">100</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">6</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: extcmd.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Routines for executing and processing external commands. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;extcmd.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 35 </span> : : +<span class="lineNum"> 36 </span> : : #include &lt;errno.h&gt; +<span class="lineNum"> 37 </span> : : #include &lt;signal.h&gt; +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : #if HAVE_SYS_WAIT_H +<span class="lineNum"> 40 </span> : : #include &lt;sys/wait.h&gt; +<span class="lineNum"> 41 </span> : : #endif +<span class="lineNum"> 42 </span> : : +<span class="lineNum"> 43 </span> : : /* +<span class="lineNum"> 44 </span> : : static sig_atomic_t got_sigalrm; +<span class="lineNum"> 45 </span> : : */ +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> : : /* Takes a file descriptor and makes it non-blocking. +<span class="lineNum"> 48 </span> : : static int +<span class="lineNum"> 49 </span> : : set_nonblock(int fd) +<span class="lineNum"> 50 </span> : : { +<span class="lineNum"> 51 </span> : : int val; +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> : : if((val = fcntl(fd, F_GETFL, 0)) &lt; 0) +<span class="lineNum"> 54 </span> : : { +<span class="lineNum"> 55 </span> : : perror(&quot;fcntl F_GETFL error:&quot;); +<span class="lineNum"> 56 </span> : : return(-1); +<span class="lineNum"> 57 </span> : : } +<span class="lineNum"> 58 </span> : : +<span class="lineNum"> 59 </span> : : val |= O_NONBLOCK; +<span class="lineNum"> 60 </span> : : +<span class="lineNum"> 61 </span> : : if(fcntl(fd, F_SETFL, val) &lt; 0) +<span class="lineNum"> 62 </span> : : { +<span class="lineNum"> 63 </span> : : perror(&quot;fcntl F_SETFL error setting O_NONBLOCK&quot;); +<span class="lineNum"> 64 </span> : : return(-1); +<span class="lineNum"> 65 </span> : : } +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> : : return(0); +<span class="lineNum"> 68 </span> : : } +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> : : static void +<span class="lineNum"> 71 </span> : : alarm_handler(int sig) +<span class="lineNum"> 72 </span> : : { +<span class="lineNum"> 73 </span> : : got_sigalrm = 1; +<span class="lineNum"> 74 </span> : : } +<span class="lineNum"> 75 </span> : : */ +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : /* Run an external command returning exit status, and optionally filling +<span class="lineNum"> 78 </span> : : * provided buffer with STDOUT output up to the size provided. +<span class="lineNum"> 79 </span> : : * +<span class="lineNum"> 80 </span> : : * Note: XXX: We are not using the timeout parameter at present. We still need +<span class="lineNum"> 81 </span> : : * to implement a reliable timeout mechanism. +<a name="82"><span class="lineNum"> 82 </span> : : */</a> +<span class="lineNum"> 83 </span> : : static int +<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf,</span> +<span class="lineNum"> 85 </span> : : const size_t so_buf_sz, const int want_stderr, const int timeout, +<span class="lineNum"> 86 </span> : : const char *substr_search, int *pid_status, +<span class="lineNum"> 87 </span> : : const fko_srv_options_t * const opts) +<span class="lineNum"> 88 </span> : : { +<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : char so_read_buf[IO_READ_BUF_LEN] = {0};</span> +<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : pid_t pid=0;</span> +<span class="lineNum"> 91 </span> : : FILE *output; +<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : int retval = EXTCMD_SUCCESS_ALL_OUTPUT;</span> +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : int line_ctr = 0, found_str = 0;</span> +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> : : char *argv_new[MAX_CMDLINE_ARGS]; /* for validation and/or execvpe() */ +<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : int argc_new=0;</span> +<span class="lineNum"> 97 </span> : : +<span class="lineNum"> 98 </span> : : #if HAVE_EXECVPE +<span class="lineNum"> 99 </span> : : int pipe_fd[2]; +<span class="lineNum"> 100 </span> : : #endif +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : *pid_status = 0;</span> +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> : : /* Even without execvpe() we examine the command for basic validity +<span class="lineNum"> 105 </span> : : * in term of number of args +<span class="lineNum"> 106 </span> : : */ +<span class="lineNum"> 107 </span> : : memset(argv_new, 0x0, sizeof(argv_new)); +<span class="lineNum"> 108 </span> : : +<span class="lineNum"> 109 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(cmd, argv_new, &amp;argc_new, opts) != 1)</span> +<span class="lineNum"> 110 </span> : : { +<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 112 </span> : : &quot;run_extcmd(): Error converting cmd str to argv via strtoargv()&quot;); +<span class="lineNum"> 113 </span> : : return EXTCMD_ARGV_ERROR; +<span class="lineNum"> 114 </span> : : } +<span class="lineNum"> 115 </span> : : +<span class="lineNum"> 116 </span> : : #if !HAVE_EXECVPE +<span class="lineNum"> 117 </span> : : /* if we are not using execvpe() then free up argv_new unconditionally +<span class="lineNum"> 118 </span> : : * since was used only for validation +<span class="lineNum"> 119 </span> : : */ +<span class="lineNum"> 120 </span> : : free_argv(argv_new, &amp;argc_new); +<span class="lineNum"> 121 </span> : : #endif +<span class="lineNum"> 122 </span> : : +<span class="lineNum"> 123 </span> : : #if HAVE_EXECVPE +<span class="lineNum"> 124 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 1)</span> +<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;run_extcmd() (with execvpe()): running CMD: %s&quot;, cmd);</span> +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL || substr_search != NULL)</span> +<span class="lineNum"> 128 </span> : : { +<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pipe(pipe_fd) &lt; 0)</span> +<span class="lineNum"> 130 </span> : : { +<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd(): pipe() failed: %s&quot;, strerror(errno));</span> +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 133 </span> : : return EXTCMD_PIPE_ERROR; +<span class="lineNum"> 134 </span> : : } +<span class="lineNum"> 135 </span> : : } +<span class="lineNum"> 136 </span> : : +<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : pid = fork();</span> +<span class="lineNum"> 138 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (pid == 0)</span> +<span class="lineNum"> 139 </span> : : { +<span class="lineNum"> 140 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(chdir(&quot;/&quot;) != 0)</span> +<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_CHDIR_ERROR);</span> +<span class="lineNum"> 142 </span> : : +<span class="lineNum"> 143 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL || substr_search != NULL)</span> +<span class="lineNum"> 144 </span> : : { +<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[0]);</span> +<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDOUT_FILENO);</span> +<span class="lineNum"> 147 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(want_stderr)</span> +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDERR_FILENO);</span> +<span class="lineNum"> 149 </span> : : else +<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : close(STDERR_FILENO);</span> +<span class="lineNum"> 151 </span> : : } +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> : : /* Take care of gid/uid settings before running the command. +<span class="lineNum"> 154 </span> : : */ +<span class="lineNum"> 155 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gid &gt; 0)</span> +<span class="lineNum"> 156 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(setgid(gid) &lt; 0)</span> +<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_SETGID_ERROR);</span> +<span class="lineNum"> 158 </span> : : +<span class="lineNum"> 159 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(uid &gt; 0)</span> +<span class="lineNum"> 160 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(setuid(uid) &lt; 0)</span> +<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_SETUID_ERROR);</span> +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> : : /* don't use env +<span class="lineNum"> 164 </span> : : */ +<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : execvpe(argv_new[0], argv_new, (char * const *)NULL);</span> +<span class="lineNum"> 166 </span> : : } +<span class="lineNum"> 167 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pid == -1)</span> +<span class="lineNum"> 168 </span> : : { +<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd(): fork() failed: %s&quot;, strerror(errno));</span> +<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 171 </span> : : return EXTCMD_FORK_ERROR; +<span class="lineNum"> 172 </span> : : } +<span class="lineNum"> 173 </span> : : +<span class="lineNum"> 174 </span> : : /* Only the parent process makes it here +<span class="lineNum"> 175 </span> : : */ +<span class="lineNum"> 176 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL || substr_search != NULL)</span> +<span class="lineNum"> 177 </span> : : { +<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> +<span class="lineNum"> 179 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((output = fdopen(pipe_fd[0], &quot;r&quot;)) != NULL)</span> +<span class="lineNum"> 180 </span> : : { +<span class="lineNum"> 181 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL)</span> +<span class="lineNum"> 182 </span> : : memset(so_buf, 0x0, so_buf_sz); +<span class="lineNum"> 183 </span> : : +<span class="lineNum"> 184 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while((fgets(so_read_buf, IO_READ_BUF_LEN, output)) != NULL)</span> +<span class="lineNum"> 185 </span> : : { +<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : line_ctr++;</span> +<span class="lineNum"> 187 </span> : : +<span class="lineNum"> 188 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL)</span> +<span class="lineNum"> 189 </span> : : { +<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : strlcat(so_buf, so_read_buf, so_buf_sz);</span> +<span class="lineNum"> 191 </span> : : +<span class="lineNum"> 192 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(so_buf) &gt;= so_buf_sz-1)</span> +<span class="lineNum"> 193 </span> : : break; +<span class="lineNum"> 194 </span> : : } +<span class="lineNum"> 195 </span> : : else /* we are looking for a substring */ +<span class="lineNum"> 196 </span> : : { +<span class="lineNum"> 197 </span> : : /* Get past comments and empty lines (note: we only look at the +<span class="lineNum"> 198 </span> : : * first character). +<span class="lineNum"> 199 </span> : : */ +<span class="lineNum"> 200 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_EMPTY_LINE(so_read_buf[0]))</span> +<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] +<span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 202 </span> : : +<span class="lineNum"> 203 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strstr(so_read_buf, substr_search) != NULL)</span> +<span class="lineNum"> 204 </span> : : { +<span class="lineNum"> 205 </span> : : found_str = 1; +<span class="lineNum"> 206 </span> : : break; +<span class="lineNum"> 207 </span> : : } +<span class="lineNum"> 208 </span> : : } +<span class="lineNum"> 209 </span> : : } +<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : fclose(output);</span> +<span class="lineNum"> 211 </span> : : } +<span class="lineNum"> 212 </span> : : else +<span class="lineNum"> 213 </span> : : { +<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 215 </span> : : &quot;run_extcmd(): could not fdopen() pipe output file descriptor.&quot;); +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 217 </span> : : return EXTCMD_OPEN_ERROR; +<span class="lineNum"> 218 </span> : : } +<span class="lineNum"> 219 </span> : : } +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 222 </span> : : +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : waitpid(pid, pid_status, 0);</span> +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> : : #else +<span class="lineNum"> 226 </span> : : +<span class="lineNum"> 227 </span> : : if(opts-&gt;verbose &gt; 1) +<span class="lineNum"> 228 </span> : : log_msg(LOG_INFO, &quot;run_extcmd() (without execvpe()): running CMD: %s&quot;, cmd); +<span class="lineNum"> 229 </span> : : +<span class="lineNum"> 230 </span> : : if(so_buf == NULL &amp;&amp; substr_search == NULL) +<span class="lineNum"> 231 </span> : : { +<span class="lineNum"> 232 </span> : : /* Since we do not have to capture output, we will fork here (which we +<span class="lineNum"> 233 </span> : : * * would have to do anyway if we are running as another user as well). +<span class="lineNum"> 234 </span> : : * */ +<span class="lineNum"> 235 </span> : : pid = fork(); +<span class="lineNum"> 236 </span> : : if(pid == -1) +<span class="lineNum"> 237 </span> : : { +<span class="lineNum"> 238 </span> : : log_msg(LOG_ERR, &quot;run_extcmd: fork failed: %s&quot;, strerror(errno)); +<span class="lineNum"> 239 </span> : : return(EXTCMD_FORK_ERROR); +<span class="lineNum"> 240 </span> : : } +<span class="lineNum"> 241 </span> : : else if (pid == 0) +<span class="lineNum"> 242 </span> : : { +<span class="lineNum"> 243 </span> : : /* We are the child */ +<span class="lineNum"> 244 </span> : : +<span class="lineNum"> 245 </span> : : if(chdir(&quot;/&quot;) != 0) +<span class="lineNum"> 246 </span> : : exit(EXTCMD_CHDIR_ERROR); +<span class="lineNum"> 247 </span> : : +<span class="lineNum"> 248 </span> : : /* Take care of gid/uid settings before running the command. +<span class="lineNum"> 249 </span> : : */ +<span class="lineNum"> 250 </span> : : if(gid &gt; 0) +<span class="lineNum"> 251 </span> : : if(setgid(gid) &lt; 0) +<span class="lineNum"> 252 </span> : : exit(EXTCMD_SETGID_ERROR); +<span class="lineNum"> 253 </span> : : +<span class="lineNum"> 254 </span> : : if(uid &gt; 0) +<span class="lineNum"> 255 </span> : : if(setuid(uid) &lt; 0) +<span class="lineNum"> 256 </span> : : exit(EXTCMD_SETUID_ERROR); +<span class="lineNum"> 257 </span> : : +<span class="lineNum"> 258 </span> : : *pid_status = system(cmd); +<span class="lineNum"> 259 </span> : : exit(*pid_status); +<span class="lineNum"> 260 </span> : : } +<span class="lineNum"> 261 </span> : : /* Retval is forced to 0 as we don't care about the exit status of +<span class="lineNum"> 262 </span> : : * the child (for now) +<span class="lineNum"> 263 </span> : : */ +<span class="lineNum"> 264 </span> : : retval = EXTCMD_SUCCESS_ALL_OUTPUT; +<span class="lineNum"> 265 </span> : : } +<span class="lineNum"> 266 </span> : : else +<span class="lineNum"> 267 </span> : : { +<span class="lineNum"> 268 </span> : : /* Looking for output use popen and fill the buffer to its limit. +<span class="lineNum"> 269 </span> : : */ +<span class="lineNum"> 270 </span> : : output = popen(cmd, &quot;r&quot;); +<span class="lineNum"> 271 </span> : : if(output == NULL) +<span class="lineNum"> 272 </span> : : { +<span class="lineNum"> 273 </span> : : log_msg(LOG_ERR, &quot;Got popen error %i: %s&quot;, errno, strerror(errno)); +<span class="lineNum"> 274 </span> : : retval = EXTCMD_OPEN_ERROR; +<span class="lineNum"> 275 </span> : : } +<span class="lineNum"> 276 </span> : : else +<span class="lineNum"> 277 </span> : : { +<span class="lineNum"> 278 </span> : : if(so_buf != NULL) +<span class="lineNum"> 279 </span> : : memset(so_buf, 0x0, so_buf_sz); +<span class="lineNum"> 280 </span> : : +<span class="lineNum"> 281 </span> : : while((fgets(so_read_buf, IO_READ_BUF_LEN, output)) != NULL) +<span class="lineNum"> 282 </span> : : { +<span class="lineNum"> 283 </span> : : line_ctr++; +<span class="lineNum"> 284 </span> : : if(so_buf != NULL) +<span class="lineNum"> 285 </span> : : { +<span class="lineNum"> 286 </span> : : strlcat(so_buf, so_read_buf, so_buf_sz); +<span class="lineNum"> 287 </span> : : if(strlen(so_buf) &gt;= so_buf_sz-1) +<span class="lineNum"> 288 </span> : : break; +<span class="lineNum"> 289 </span> : : } +<span class="lineNum"> 290 </span> : : else /* we are looking for a substring */ +<span class="lineNum"> 291 </span> : : { +<span class="lineNum"> 292 </span> : : /* Get past comments and empty lines (note: we only look at the +<span class="lineNum"> 293 </span> : : * first character). +<span class="lineNum"> 294 </span> : : */ +<span class="lineNum"> 295 </span> : : if(IS_EMPTY_LINE(so_read_buf[0])) +<span class="lineNum"> 296 </span> : : continue; +<span class="lineNum"> 297 </span> : : +<span class="lineNum"> 298 </span> : : if(strstr(so_read_buf, substr_search) != NULL) +<span class="lineNum"> 299 </span> : : { +<span class="lineNum"> 300 </span> : : found_str = 1; +<span class="lineNum"> 301 </span> : : break; +<span class="lineNum"> 302 </span> : : } +<span class="lineNum"> 303 </span> : : } +<span class="lineNum"> 304 </span> : : } +<span class="lineNum"> 305 </span> : : pclose(output); +<span class="lineNum"> 306 </span> : : } +<span class="lineNum"> 307 </span> : : } +<span class="lineNum"> 308 </span> : : +<span class="lineNum"> 309 </span> : : #endif +<span class="lineNum"> 310 </span> : : +<span class="lineNum"> 311 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(substr_search != NULL)</span> +<span class="lineNum"> 312 </span> : : { +<span class="lineNum"> 313 </span> : : /* The semantics of the return value changes in search mode to the line +<span class="lineNum"> 314 </span> : : * number where the substring match was found, or zero if it wasn't found +<span class="lineNum"> 315 </span> : : */ +<span class="lineNum"> 316 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(found_str)</span> +<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : retval = line_ctr;</span> +<span class="lineNum"> 318 </span> : : else +<span class="lineNum"> 319 </span> : : retval = 0; +<span class="lineNum"> 320 </span> : : } +<span class="lineNum"> 321 </span> : : else +<span class="lineNum"> 322 </span> : : { +<span class="lineNum"> 323 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(WIFEXITED(*pid_status))</span> +<span class="lineNum"> 324 </span> : : { +<span class="lineNum"> 325 </span> : : /* Even if the child exited with an error condition, if we make it here +<span class="lineNum"> 326 </span> : : * then the child exited normally as far as the OS is concerned (i.e. didn't +<span class="lineNum"> 327 </span> : : * crash or get hit with a signal) +<span class="lineNum"> 328 </span> : : */ +<span class="lineNum"> 329 </span> : : retval = EXTCMD_SUCCESS_ALL_OUTPUT; +<span class="lineNum"> 330 </span> : : } +<span class="lineNum"> 331 </span> : : else +<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : retval = EXTCMD_EXECUTION_ERROR;</span> +<span class="lineNum"> 333 </span> : : } +<span class="lineNum"> 334 </span> : : +<span class="lineNum"> 335 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 1)</span> +<span class="lineNum"> 336 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 337 </span> : : &quot;run_extcmd(): returning %d, pid_status: %d&quot;, +<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : retval, WIFEXITED(*pid_status) ? WEXITSTATUS(*pid_status) : *pid_status);</span> +<span class="lineNum"> 339 </span> : : +<span class="lineNum"> 340 </span> : : return(retval); +<span class="lineNum"> 341 </span> : : } +<span class="lineNum"> 342 </span> : : +<span class="lineNum"> 343 </span> : : +<span class="lineNum"> 344 </span> : : #if 0 /* --DSS the original method that did not work on some systems */ +<span class="lineNum"> 345 </span> : : +<span class="lineNum"> 346 </span> : : /* Create the pipes we will use for getting stdout and stderr +<span class="lineNum"> 347 </span> : : * from the child process. +<span class="lineNum"> 348 </span> : : */ +<span class="lineNum"> 349 </span> : : if(pipe(so) != 0) +<span class="lineNum"> 350 </span> : : return(EXTCMD_PIPE_ERROR); +<span class="lineNum"> 351 </span> : : +<span class="lineNum"> 352 </span> : : if(pipe(se) != 0) +<span class="lineNum"> 353 </span> : : return(EXTCMD_PIPE_ERROR); +<span class="lineNum"> 354 </span> : : +<span class="lineNum"> 355 </span> : : /* Fork off a child process to run the command and provide its outputs. +<span class="lineNum"> 356 </span> : : */ +<span class="lineNum"> 357 </span> : : pid = fork(); +<span class="lineNum"> 358 </span> : : if(pid == -1) +<span class="lineNum"> 359 </span> : : { +<span class="lineNum"> 360 </span> : : return(EXTCMD_FORK_ERROR); +<span class="lineNum"> 361 </span> : : } +<span class="lineNum"> 362 </span> : : else if (pid == 0) +<span class="lineNum"> 363 </span> : : { +<span class="lineNum"> 364 </span> : : /* We are the child, so we dup stdout and stderr to our respective +<span class="lineNum"> 365 </span> : : * write-end of the pipes, close stdin and the read-end of the pipes +<span class="lineNum"> 366 </span> : : * (since we don't need them here). Then use system() to run the +<span class="lineNum"> 367 </span> : : * command and exit with the exit status of that command so we can +<span class="lineNum"> 368 </span> : : * grab it from the waitpid call in the parent. +<span class="lineNum"> 369 </span> : : */ +<span class="lineNum"> 370 </span> : : close(fileno(stdin)); +<span class="lineNum"> 371 </span> : : dup2(so[1], fileno(stdout)); +<span class="lineNum"> 372 </span> : : dup2(se[1], fileno(stderr)); +<span class="lineNum"> 373 </span> : : close(so[0]); +<span class="lineNum"> 374 </span> : : close(se[0]); +<span class="lineNum"> 375 </span> : : +<span class="lineNum"> 376 </span> : : /* If user is not null, then we setuid to that user before running the +<span class="lineNum"> 377 </span> : : * command. +<span class="lineNum"> 378 </span> : : */ +<span class="lineNum"> 379 </span> : : if(uid &gt; 0) +<span class="lineNum"> 380 </span> : : { +<span class="lineNum"> 381 </span> : : if(setuid(uid) &lt; 0) +<span class="lineNum"> 382 </span> : : { +<span class="lineNum"> 383 </span> : : exit(EXTCMD_SETUID_ERROR); +<span class="lineNum"> 384 </span> : : } +<span class="lineNum"> 385 </span> : : } +<span class="lineNum"> 386 </span> : : +<span class="lineNum"> 387 </span> : : /* --DSS XXX: Would it be more efficient to use one of the exec() +<span class="lineNum"> 388 </span> : : * calls (i.e. 'return(execvp(ext_cmd, &amp;argv[1]));')? +<span class="lineNum"> 389 </span> : : * For now, we use system() and exit with the external +<span class="lineNum"> 390 </span> : : * command exit status. +<span class="lineNum"> 391 </span> : : */ +<span class="lineNum"> 392 </span> : : exit(WEXITSTATUS(system(cmd))); +<span class="lineNum"> 393 </span> : : } +<span class="lineNum"> 394 </span> : : +<span class="lineNum"> 395 </span> : : /* Parent from here */ +<span class="lineNum"> 396 </span> : : +<span class="lineNum"> 397 </span> : : /* Give the exit status an initial value of -1. +<span class="lineNum"> 398 </span> : : */ +<span class="lineNum"> 399 </span> : : *status = -1; +<span class="lineNum"> 400 </span> : : +<span class="lineNum"> 401 </span> : : /* Close the write-end of the pipes (we are only reading). +<span class="lineNum"> 402 </span> : : */ +<span class="lineNum"> 403 </span> : : close(so[1]); +<span class="lineNum"> 404 </span> : : close(se[1]); +<span class="lineNum"> 405 </span> : : +<span class="lineNum"> 406 </span> : : /* Set our pipes to non-blocking +<span class="lineNum"> 407 </span> : : */ +<span class="lineNum"> 408 </span> : : set_nonblock(so[0]); +<span class="lineNum"> 409 </span> : : set_nonblock(se[0]); +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> : : tv.tv_sec = EXTCMD_DEF_TIMEOUT; +<span class="lineNum"> 412 </span> : : tv.tv_usec = 0; +<span class="lineNum"> 413 </span> : : +<span class="lineNum"> 414 </span> : : /* Initialize and setup our file descriptor sets for select. +<span class="lineNum"> 415 </span> : : */ +<span class="lineNum"> 416 </span> : : FD_ZERO(&amp;rfds); +<span class="lineNum"> 417 </span> : : FD_ZERO(&amp;efds); +<span class="lineNum"> 418 </span> : : FD_SET(so[0], &amp;rfds); +<span class="lineNum"> 419 </span> : : FD_SET(se[0], &amp;rfds); +<span class="lineNum"> 420 </span> : : FD_SET(so[0], &amp;efds); +<span class="lineNum"> 421 </span> : : FD_SET(se[0], &amp;efds); +<span class="lineNum"> 422 </span> : : +<span class="lineNum"> 423 </span> : : /* Start with fully clear buffers. +<span class="lineNum"> 424 </span> : : */ +<span class="lineNum"> 425 </span> : : memset(so_buf, 0x0, so_buf_sz); +<span class="lineNum"> 426 </span> : : memset(se_buf, 0x0, se_buf_sz); +<span class="lineNum"> 427 </span> : : +<span class="lineNum"> 428 </span> : : /* Read both stdout and stderr piped from the child until we get eof, +<span class="lineNum"> 429 </span> : : * fill the buffers, or error out. +<span class="lineNum"> 430 </span> : : */ +<span class="lineNum"> 431 </span> : : while(so_buf_remaining &gt; 0 || se_buf_remaining &gt; 0) +<span class="lineNum"> 432 </span> : : { +<span class="lineNum"> 433 </span> : : selval = select(8, &amp;rfds, NULL, &amp;efds, &amp;tv); +<span class="lineNum"> 434 </span> : : +<span class="lineNum"> 435 </span> : : if(selval == -1) +<span class="lineNum"> 436 </span> : : { +<span class="lineNum"> 437 </span> : : /* Select error - so kill the child and bail. +<span class="lineNum"> 438 </span> : : */ +<span class="lineNum"> 439 </span> : : kill(pid, SIGTERM); +<span class="lineNum"> 440 </span> : : retval |= EXTCMD_SELECT_ERROR; +<span class="lineNum"> 441 </span> : : break; +<span class="lineNum"> 442 </span> : : } +<span class="lineNum"> 443 </span> : : +<span class="lineNum"> 444 </span> : : if(selval == 0) +<span class="lineNum"> 445 </span> : : { +<span class="lineNum"> 446 </span> : : /* Timeout - so kill the child and bail +<span class="lineNum"> 447 </span> : : */ +<span class="lineNum"> 448 </span> : : kill(pid, SIGTERM); +<span class="lineNum"> 449 </span> : : retval |= EXTCMD_EXECUTION_TIMEOUT; +<span class="lineNum"> 450 </span> : : break; +<span class="lineNum"> 451 </span> : : } +<span class="lineNum"> 452 </span> : : +<span class="lineNum"> 453 </span> : : /* The stdout pipe... +<span class="lineNum"> 454 </span> : : */ +<span class="lineNum"> 455 </span> : : bytes_read = read(so[0], so_read_buf, IO_READ_BUF_LEN); +<span class="lineNum"> 456 </span> : : if(so_buf_remaining &gt; 0) +<span class="lineNum"> 457 </span> : : { +<span class="lineNum"> 458 </span> : : if(bytes_read &gt; 0) +<span class="lineNum"> 459 </span> : : { +<span class="lineNum"> 460 </span> : : /* We have data, so process it... +<span class="lineNum"> 461 </span> : : */ +<span class="lineNum"> 462 </span> : : if(bytes_read &gt; so_buf_remaining) +<span class="lineNum"> 463 </span> : : { +<span class="lineNum"> 464 </span> : : bytes_read = so_buf_remaining; +<span class="lineNum"> 465 </span> : : retval |= EXTCMD_SUCCESS_PARTIAL_STDOUT; +<span class="lineNum"> 466 </span> : : } +<span class="lineNum"> 467 </span> : : +<span class="lineNum"> 468 </span> : : memcpy(so_buf, so_read_buf, bytes_read); +<span class="lineNum"> 469 </span> : : so_buf += bytes_read; +<span class="lineNum"> 470 </span> : : so_buf_remaining -= bytes_read; +<span class="lineNum"> 471 </span> : : } +<span class="lineNum"> 472 </span> : : else if(bytes_read &lt; 0) +<span class="lineNum"> 473 </span> : : { +<span class="lineNum"> 474 </span> : : /* Anything other than EAGAIN or EWOULDBLOCK is conisdered +<span class="lineNum"> 475 </span> : : * error enough to bail. We are done here so we force the +<span class="lineNum"> 476 </span> : : * buf_remaining value to 0. +<span class="lineNum"> 477 </span> : : */ +<span class="lineNum"> 478 </span> : : if(errno != EAGAIN &amp;&amp; errno != EWOULDBLOCK) +<span class="lineNum"> 479 </span> : : { +<span class="lineNum"> 480 </span> : : retval |= EXTCMD_STDOUT_READ_ERROR; +<span class="lineNum"> 481 </span> : : so_buf_remaining = 0; +<span class="lineNum"> 482 </span> : : } +<span class="lineNum"> 483 </span> : : } +<span class="lineNum"> 484 </span> : : else +<span class="lineNum"> 485 </span> : : { +<span class="lineNum"> 486 </span> : : /* Bytes read was 0 which indicate end of file. So we are +<span class="lineNum"> 487 </span> : : * done. +<span class="lineNum"> 488 </span> : : */ +<span class="lineNum"> 489 </span> : : so_buf_remaining = 0; +<span class="lineNum"> 490 </span> : : } +<span class="lineNum"> 491 </span> : : } +<span class="lineNum"> 492 </span> : : else +<span class="lineNum"> 493 </span> : : break; +<span class="lineNum"> 494 </span> : : +<span class="lineNum"> 495 </span> : : /* The stderr pipe... +<span class="lineNum"> 496 </span> : : */ +<span class="lineNum"> 497 </span> : : bytes_read = read(se[0], se_read_buf, IO_READ_BUF_LEN); +<span class="lineNum"> 498 </span> : : if(se_buf_remaining &gt; 0) +<span class="lineNum"> 499 </span> : : { +<span class="lineNum"> 500 </span> : : if(bytes_read &gt; 0) +<span class="lineNum"> 501 </span> : : { +<span class="lineNum"> 502 </span> : : /* We have data, so process it... +<span class="lineNum"> 503 </span> : : */ +<span class="lineNum"> 504 </span> : : if(bytes_read &gt; se_buf_remaining) +<span class="lineNum"> 505 </span> : : { +<span class="lineNum"> 506 </span> : : bytes_read = se_buf_remaining; +<span class="lineNum"> 507 </span> : : retval |= EXTCMD_SUCCESS_PARTIAL_STDERR; +<span class="lineNum"> 508 </span> : : } +<span class="lineNum"> 509 </span> : : +<span class="lineNum"> 510 </span> : : memcpy(se_buf, se_read_buf, bytes_read); +<span class="lineNum"> 511 </span> : : se_buf += bytes_read; +<span class="lineNum"> 512 </span> : : se_buf_remaining -= bytes_read; +<span class="lineNum"> 513 </span> : : } +<span class="lineNum"> 514 </span> : : else if(bytes_read &lt; 0) +<span class="lineNum"> 515 </span> : : { +<span class="lineNum"> 516 </span> : : /* Anything other than EAGAIN or EWOULDBLOCK is conisdered +<span class="lineNum"> 517 </span> : : * error enough to bail. We are done here so we force the +<span class="lineNum"> 518 </span> : : * buf_remaining value to 0. +<span class="lineNum"> 519 </span> : : */ +<span class="lineNum"> 520 </span> : : if(errno != EAGAIN &amp;&amp; errno != EWOULDBLOCK) +<span class="lineNum"> 521 </span> : : { +<span class="lineNum"> 522 </span> : : retval |= EXTCMD_STDERR_READ_ERROR; +<span class="lineNum"> 523 </span> : : se_buf_remaining = 0; +<span class="lineNum"> 524 </span> : : } +<span class="lineNum"> 525 </span> : : } +<span class="lineNum"> 526 </span> : : else +<span class="lineNum"> 527 </span> : : { +<span class="lineNum"> 528 </span> : : /* Bytes read was 0 which indicate end of file. So we are +<span class="lineNum"> 529 </span> : : * done. +<span class="lineNum"> 530 </span> : : */ +<span class="lineNum"> 531 </span> : : se_buf_remaining = 0; +<span class="lineNum"> 532 </span> : : } +<span class="lineNum"> 533 </span> : : } +<span class="lineNum"> 534 </span> : : else +<span class="lineNum"> 535 </span> : : break; +<span class="lineNum"> 536 </span> : : } +<span class="lineNum"> 537 </span> : : +<span class="lineNum"> 538 </span> : : close(so[0]); +<span class="lineNum"> 539 </span> : : close(se[0]); +<span class="lineNum"> 540 </span> : : +<span class="lineNum"> 541 </span> : : /* Wait for the external command to finish and capture its exit status. +<span class="lineNum"> 542 </span> : : */ +<span class="lineNum"> 543 </span> : : waitpid(pid, status, 0); +<span class="lineNum"> 544 </span> : : +<span class="lineNum"> 545 </span> : : if(*status != 0) +<span class="lineNum"> 546 </span> : : retval != EXTCMD_EXECUTION_ERROR; +<span class="lineNum"> 547 </span> : : +<span class="lineNum"> 548 </span> : : /* Return the our status of this operation command. +<span class="lineNum"> 549 </span> : : */ +<span class="lineNum"> 550 </span> : : return(retval); +<span class="lineNum"> 551 </span> : : } +<a name="552"><span class="lineNum"> 552 </span> : : #endif</a> +<span class="lineNum"> 553 </span> : : +<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : int _run_extcmd_write(const char *cmd, const char *cmd_write, int *pid_status,</span> +<span class="lineNum"> 555 </span> : : const fko_srv_options_t * const opts) +<span class="lineNum"> 556 </span> : : { +<span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : int retval = EXTCMD_SUCCESS_ALL_OUTPUT;</span> +<span class="lineNum"> 558 </span> : : char *argv_new[MAX_CMDLINE_ARGS]; /* for validation and/or execvpe() */ +<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : int argc_new=0;</span> +<span class="lineNum"> 560 </span> : : +<span class="lineNum"> 561 </span> : : #if HAVE_EXECVPE +<span class="lineNum"> 562 </span> : : int pipe_fd[2]; +<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : pid_t pid=0;</span> +<span class="lineNum"> 564 </span> : : #else +<span class="lineNum"> 565 </span> : : FILE *fd = NULL; +<span class="lineNum"> 566 </span> : : #endif +<span class="lineNum"> 567 </span> : : +<span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : *pid_status = 0;</span> +<span class="lineNum"> 569 </span> : : +<span class="lineNum"> 570 </span> : : /* Even without execvpe() we examine the command for basic validity +<span class="lineNum"> 571 </span> : : * in term of number of args +<span class="lineNum"> 572 </span> : : */ +<span class="lineNum"> 573 </span> : : memset(argv_new, 0x0, sizeof(argv_new)); +<span class="lineNum"> 574 </span> : : +<span class="lineNum"> 575 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(cmd, argv_new, &amp;argc_new, opts) != 1)</span> +<span class="lineNum"> 576 </span> : : { +<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 578 </span> : : &quot;run_extcmd_write(): Error converting cmd str to argv via strtoargv()&quot;); +<span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : return EXTCMD_ARGV_ERROR;</span> +<span class="lineNum"> 580 </span> : : } +<span class="lineNum"> 581 </span> : : +<span class="lineNum"> 582 </span> : : #if !HAVE_EXECVPE +<span class="lineNum"> 583 </span> : : /* if we are not using execvpe() then free up argv_new unconditionally +<span class="lineNum"> 584 </span> : : * since was used only for validation +<span class="lineNum"> 585 </span> : : */ +<span class="lineNum"> 586 </span> : : free_argv(argv_new, &amp;argc_new); +<span class="lineNum"> 587 </span> : : #endif +<span class="lineNum"> 588 </span> : : +<span class="lineNum"> 589 </span> : : #if HAVE_EXECVPE +<span class="lineNum"> 590 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 1)</span> +<span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;run_extcmd_write() (with execvpe()): running CMD: %s | %s&quot;,</span> +<span class="lineNum"> 592 </span> : : cmd_write, cmd); +<span class="lineNum"> 593 </span> : : +<span class="lineNum"> 594 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pipe(pipe_fd) &lt; 0)</span> +<span class="lineNum"> 595 </span> : : { +<span class="lineNum"> 596 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd_write(): pipe() failed: %s&quot;, strerror(errno));</span> +<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : return EXTCMD_PIPE_ERROR;</span> +<span class="lineNum"> 599 </span> : : } +<span class="lineNum"> 600 </span> : : +<span class="lineNum"> 601 </span> :<span class="lineNoCov"> 0 : pid = fork();</span> +<span class="lineNum"> 602 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (pid == 0)</span> +<span class="lineNum"> 603 </span> : : { +<span class="lineNum"> 604 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(chdir(&quot;/&quot;) != 0)</span> +<span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_CHDIR_ERROR);</span> +<span class="lineNum"> 606 </span> : : +<span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> +<span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[0], STDIN_FILENO);</span> +<span class="lineNum"> 609 </span> : : +<span class="lineNum"> 610 </span> : : /* don't use env +<span class="lineNum"> 611 </span> : : */ +<span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : execvpe(argv_new[0], argv_new, (char * const *)NULL);</span> +<span class="lineNum"> 613 </span> : : } +<span class="lineNum"> 614 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pid == -1)</span> +<span class="lineNum"> 615 </span> : : { +<span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd_write(): fork() failed: %s&quot;, strerror(errno));</span> +<span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 618 </span> :<span class="lineNoCov"> 0 : return EXTCMD_FORK_ERROR;</span> +<span class="lineNum"> 619 </span> : : } +<span class="lineNum"> 620 </span> : : +<span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[0]);</span> +<span class="lineNum"> 622 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(pipe_fd[1], cmd_write, strlen(cmd_write)) &lt; 0)</span> +<span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : retval = EXTCMD_WRITE_ERROR;</span> +<span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> +<span class="lineNum"> 625 </span> : : +<span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> +<span class="lineNum"> 627 </span> : : +<span class="lineNum"> 628 </span> :<span class="lineNoCov"> 0 : waitpid(pid, pid_status, 0);</span> +<span class="lineNum"> 629 </span> : : +<span class="lineNum"> 630 </span> : : #else +<span class="lineNum"> 631 </span> : : if(opts-&gt;verbose &gt; 1) +<span class="lineNum"> 632 </span> : : log_msg(LOG_INFO, &quot;run_extcmd_write() (without execvpe()): running CMD: %s | %s&quot;, +<span class="lineNum"> 633 </span> : : cmd_write, cmd); +<span class="lineNum"> 634 </span> : : +<span class="lineNum"> 635 </span> : : if ((fd = popen(cmd, &quot;w&quot;)) == NULL) +<span class="lineNum"> 636 </span> : : { +<span class="lineNum"> 637 </span> : : log_msg(LOG_ERR, &quot;Got popen error %i: %s&quot;, errno, strerror(errno)); +<span class="lineNum"> 638 </span> : : retval = EXTCMD_OPEN_ERROR; +<span class="lineNum"> 639 </span> : : } +<span class="lineNum"> 640 </span> : : else +<span class="lineNum"> 641 </span> : : { +<span class="lineNum"> 642 </span> : : if (fwrite(cmd_write, strlen(cmd_write), 1, fd) != 1) +<span class="lineNum"> 643 </span> : : { +<span class="lineNum"> 644 </span> : : log_msg(LOG_ERR, &quot;Could not write to cmd stdin&quot;); +<span class="lineNum"> 645 </span> : : retval = -1; +<span class="lineNum"> 646 </span> : : } +<span class="lineNum"> 647 </span> : : pclose(fd); +<span class="lineNum"> 648 </span> : : } +<span class="lineNum"> 649 </span> : : +<span class="lineNum"> 650 </span> : : #endif +<span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : return retval;</span> +<span class="lineNum"> 652 </span> : : } +<span class="lineNum"> 653 </span> : : +<span class="lineNum"> 654 </span> : : /* _run_extcmd() wrapper, run an external command. +<a name="655"><span class="lineNum"> 655 </span> : : */</a> +<span class="lineNum"> 656 </span> : : int +<span class="lineNum"> 657 </span> :<span class="lineNoCov"> 0 : run_extcmd(const char *cmd, char *so_buf, const size_t so_buf_sz,</span> +<span class="lineNum"> 658 </span> : : const int want_stderr, const int timeout, int *pid_status, +<span class="lineNum"> 659 </span> : : const fko_srv_options_t * const opts) +<span class="lineNum"> 660 </span> : : { +<span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : return _run_extcmd(0, 0, cmd, so_buf, so_buf_sz, want_stderr,</span> +<span class="lineNum"> 662 </span> : : timeout, NULL, pid_status, opts); +<span class="lineNum"> 663 </span> : : } +<span class="lineNum"> 664 </span> : : +<span class="lineNum"> 665 </span> : : /* _run_extcmd() wrapper, run an external command as the specified user. +<a name="666"><span class="lineNum"> 666 </span> : : */</a> +<span class="lineNum"> 667 </span> : : int +<span class="lineNum"> 668 </span> :<span class="lineNoCov"> 0 : run_extcmd_as(uid_t uid, gid_t gid, const char *cmd,char *so_buf,</span> +<span class="lineNum"> 669 </span> : : const size_t so_buf_sz, const int want_stderr, const int timeout, +<span class="lineNum"> 670 </span> : : int *pid_status, const fko_srv_options_t * const opts) +<span class="lineNum"> 671 </span> : : { +<span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : return _run_extcmd(uid, gid, cmd, so_buf, so_buf_sz,</span> +<span class="lineNum"> 673 </span> : : want_stderr, timeout, NULL, pid_status, opts); +<span class="lineNum"> 674 </span> : : } +<span class="lineNum"> 675 </span> : : +<span class="lineNum"> 676 </span> : : /* _run_extcmd() wrapper, search command output for a substring. +<a name="677"><span class="lineNum"> 677 </span> : : */</a> +<span class="lineNum"> 678 </span> : : int +<span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : search_extcmd(const char *cmd, const int want_stderr, const int timeout,</span> +<span class="lineNum"> 680 </span> : : const char *substr_search, int *pid_status, +<span class="lineNum"> 681 </span> : : const fko_srv_options_t * const opts) +<span class="lineNum"> 682 </span> : : { +<span class="lineNum"> 683 </span> :<span class="lineNoCov"> 0 : return _run_extcmd(0, 0, cmd, NULL, 0, want_stderr, timeout,</span> +<span class="lineNum"> 684 </span> : : substr_search, pid_status, opts); +<span class="lineNum"> 685 </span> : : } +<span class="lineNum"> 686 </span> : : +<a name="687"><span class="lineNum"> 687 </span> : : /* _run_extcmd_write() wrapper, run a command which is expecting input via stdin</a> +<span class="lineNum"> 688 </span> : : */ +<span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : int run_extcmd_write(const char *cmd, const char *cmd_write, int *pid_status,</span> +<span class="lineNum"> 690 </span> : : const fko_srv_options_t * const opts) +<span class="lineNum"> 691 </span> : : { +<span class="lineNum"> 692 </span> :<span class="lineNoCov"> 0 : return _run_extcmd_write(cmd, cmd_write, pid_status, opts);</span> +<span class="lineNum"> 693 </span> : : } +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html new file mode 100644 index 00000000..68134842 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html @@ -0,0 +1,197 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fw_util_firewalld.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fw_util_firewalld.c<span style="font-size: 80%;"> (<a href="fw_util_firewalld.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">53</td> + <td class="headerCovTableEntry">575</td> + <td class="headerCovTableEntryLo">9.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">29</td> + <td class="headerCovTableEntryLo">10.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">34</td> + <td class="headerCovTableEntry">302</td> + <td class="headerCovTableEntryLo">11.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fw_util_firewalld.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1581">validate_firewd_chain_conf</a></td> + <td class="coverFnHi">4770</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#710">set_fw_chain_conf</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#805">fw_config_init</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#922">fw_cleanup</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#408">jump_rule_exists_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#273">comment_match_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#961">firewd_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#341">add_jump_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1389">check_firewall_rules</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#877">fw_initialize</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#933">create_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#177">rule_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#643">create_chain</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#69">rule_exists_no_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#674">mk_chain</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#201">firewd_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#476">fw_dump_rules</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1123">snat_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1064">dnat_rule.isra.1</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#375">chain_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#51">zero_cmd_buffers</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#560">delete_all_chains</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#143">rule_exists_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#460">jump_rule_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#430">jump_rule_exists_no_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#61">chop_newline</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1240">process_spa_request</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1018">forward_access_rule.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#694">create_fw_chains</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html new file mode 100644 index 00000000..b1ab7a63 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html @@ -0,0 +1,197 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fw_util_firewalld.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fw_util_firewalld.c<span style="font-size: 80%;"> (<a href="fw_util_firewalld.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">53</td> + <td class="headerCovTableEntry">575</td> + <td class="headerCovTableEntryLo">9.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">29</td> + <td class="headerCovTableEntryLo">10.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">34</td> + <td class="headerCovTableEntry">302</td> + <td class="headerCovTableEntryLo">11.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fw_util_firewalld.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#341">add_jump_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#375">chain_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1389">check_firewall_rules</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#61">chop_newline</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#273">comment_match_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#643">create_chain</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#694">create_fw_chains</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#933">create_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#560">delete_all_chains</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1064">dnat_rule.isra.1</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#201">firewd_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#961">firewd_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1018">forward_access_rule.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#922">fw_cleanup</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#805">fw_config_init</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#476">fw_dump_rules</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#877">fw_initialize</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#460">jump_rule_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#408">jump_rule_exists_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#430">jump_rule_exists_no_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#674">mk_chain</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1240">process_spa_request</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#177">rule_exists</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#143">rule_exists_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#69">rule_exists_no_chk_support</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#710">set_fw_chain_conf</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1123">snat_rule</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1581">validate_firewd_chain_conf</a></td> + <td class="coverFnHi">4770</td> + </tr> + <tr> + <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#51">zero_cmd_buffers</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html new file mode 100644 index 00000000..9d5b4ca5 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html @@ -0,0 +1,1702 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fw_util_firewalld.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fw_util_firewalld.c<span style="font-size: 80%;"> (source / <a href="fw_util_firewalld.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">53</td> + <td class="headerCovTableEntry">575</td> + <td class="headerCovTableEntryLo">9.2 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">29</td> + <td class="headerCovTableEntryLo">10.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">34</td> + <td class="headerCovTableEntry">302</td> + <td class="headerCovTableEntryLo">11.3 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fw_util_firewalld.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Fwknop routines for managing firewalld firewall rules. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : +<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #ifdef FIREWALL_FIREWALLD +<span class="lineNum"> 35 </span> : : +<span class="lineNum"> 36 </span> : : #include &quot;fw_util.h&quot; +<span class="lineNum"> 37 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 38 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 39 </span> : : #include &quot;extcmd.h&quot; +<span class="lineNum"> 40 </span> : : #include &quot;access.h&quot; +<span class="lineNum"> 41 </span> : : +<span class="lineNum"> 42 </span> : : static struct fw_config fwc; +<span class="lineNum"> 43 </span> : : static char cmd_buf[CMD_BUFSIZE]; +<span class="lineNum"> 44 </span> : : static char err_buf[CMD_BUFSIZE]; +<span class="lineNum"> 45 </span> : : static char cmd_out[STANDARD_CMD_OUT_BUFSIZE]; +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> : : /* assume 'firewall-cmd --direct --passthrough ipv4 -C' is offered +<span class="lineNum"> 48 </span> : : * (see firewd_chk_support()). +<span class="lineNum"> 49 </span> : : */ +<span class="lineNum"> 50 </span> : : static int have_firewd_chk_support = 1; +<a name="51"><span class="lineNum"> 51 </span> : : </a> +<span class="lineNum"> 52 </span> : : static void +<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers(void)</span> +<span class="lineNum"> 54 </span> : : { +<span class="lineNum"> 55 </span> : : memset(cmd_buf, 0x0, CMD_BUFSIZE); +<span class="lineNum"> 56 </span> : : memset(err_buf, 0x0, CMD_BUFSIZE); +<span class="lineNum"> 57 </span> : : memset(cmd_out, 0x0, STANDARD_CMD_OUT_BUFSIZE); +<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 59 </span> : : +<span class="lineNum"> 60 </span> : : static int pid_status = 0; +<a name="61"><span class="lineNum"> 61 </span> : : </a> +<span class="lineNum"> 62 </span> : : static void +<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : chop_newline(char *str)</span> +<span class="lineNum"> 64 </span> : : { +<span class="lineNum"> 65 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(str[0] != 0x0 &amp;&amp; str[strlen(str)-1] == 0x0a)</span> +<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : str[strlen(str)-1] = 0x0;</span> +<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 68 </span> : : } +<a name="69"><span class="lineNum"> 69 </span> : : </a> +<span class="lineNum"> 70 </span> : : static int +<span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : rule_exists_no_chk_support(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 72 </span> : : const struct fw_chain * const fwc, const unsigned int proto, +<span class="lineNum"> 73 </span> : : const char * const srcip, const char * const dstip, +<span class="lineNum"> 74 </span> : : const unsigned int port, const unsigned int exp_ts) +<span class="lineNum"> 75 </span> : : { +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : int rule_exists=0;</span> +<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : char cmd_buf[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : char target_search[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : char proto_search[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : char srcip_search[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : char dstip_search[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : char port_search[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : char exp_ts_search[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 84 </span> : : +<span class="lineNum"> 85 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, +<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : fwc-&gt;table,</span> +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : fwc-&gt;to_chain</span> +<span class="lineNum"> 89 </span> : : ); +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> : : #if CODE_COVERAGE +<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : int pid_status = 0;</span> +<span class="lineNum"> 93 </span> : : /* If we're maximizing code coverage, then exercise the run_extcmd_write() +<span class="lineNum"> 94 </span> : : * function which is normally only used for the PF firewall. This is to +<span class="lineNum"> 95 </span> : : * maximize code coverage in conjunction with the test suite, and is never +<span class="lineNum"> 96 </span> : : * compiled in for a production release of fwknop. +<span class="lineNum"> 97 </span> : : */ +<span class="lineNum"> 98 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(run_extcmd_write(&quot;/bin/grep -v test&quot;, &quot;/bin/echo test&quot;, &amp;pid_status, opts) == 0)</span> +<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[ignore] Code coverage: Executed command&quot;);</span> +<span class="lineNum"> 100 </span> : : #endif +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(proto == IPPROTO_TCP)</span> +<span class="lineNum"> 103 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; tcp &quot;); +<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(proto == IPPROTO_UDP)</span> +<span class="lineNum"> 105 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; udp &quot;); +<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(proto == IPPROTO_ICMP)</span> +<span class="lineNum"> 107 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; icmp &quot;); +<span class="lineNum"> 108 </span> : : else +<span class="lineNum"> 109 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; %u &quot;, proto); +<span class="lineNum"> 110 </span> : : +<span class="lineNum"> 111 </span> : : snprintf(port_search, CMD_BUFSIZE-1, &quot;:%u &quot;, port); +<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : snprintf(target_search, CMD_BUFSIZE-1, &quot; %s &quot;, fwc-&gt;target);</span> +<span class="lineNum"> 113 </span> : : snprintf(srcip_search, CMD_BUFSIZE-1, &quot; %s &quot;, srcip); +<span class="lineNum"> 114 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (dstip != NULL)</span> +<span class="lineNum"> 115 </span> : : { +<span class="lineNum"> 116 </span> : : snprintf(dstip_search, CMD_BUFSIZE-1, &quot; %s &quot;, dstip); +<span class="lineNum"> 117 </span> : : } +<span class="lineNum"> 118 </span> : : snprintf(exp_ts_search, CMD_BUFSIZE-1, &quot;%u &quot;, exp_ts); +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> : : /* search for each of the substrings - yes, matches from different +<span class="lineNum"> 121 </span> : : * rules may get triggered here, but the expiration time is the +<span class="lineNum"> 122 </span> : : * primary search method +<span class="lineNum"> 123 </span> : : */ +<span class="lineNum"> 124 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, exp_ts_search, &amp;pid_status, opts)</span> +<span class="lineNum"> 125 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, proto_search, &amp;pid_status, opts)</span> +<span class="lineNum"> 126 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, srcip_search, &amp;pid_status, opts)</span> +<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (dstip == NULL) ? 1 : search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, dstip_search, &amp;pid_status, opts)</span> +<span class="lineNum"> 128 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, target_search, &amp;pid_status, opts)</span> +<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, port_search, &amp;pid_status, opts))</span> +<span class="lineNum"> 130 </span> : : rule_exists = 1; +<span class="lineNum"> 131 </span> : : +<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists)</span> +<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> +<span class="lineNum"> 134 </span> : : &quot;rule_exists_no_chk_support() %s %u -&gt; %s expires: %u rule (already exists&quot;, +<span class="lineNum"> 135 </span> : : proto_search, port, srcip, exp_ts); +<span class="lineNum"> 136 </span> : : else +<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> +<span class="lineNum"> 138 </span> : : &quot;rule_exists_no_chk_support() %s %u -&gt; %s expires: %u rule does not exist&quot;, +<span class="lineNum"> 139 </span> : : proto_search, port, srcip, exp_ts); +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : return(rule_exists);</span> +<span class="lineNum"> 142 </span> : : } +<a name="143"><span class="lineNum"> 143 </span> : : </a> +<span class="lineNum"> 144 </span> : : static int +<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : rule_exists_chk_support(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 146 </span> : : const char * const chain, const char * const rule) +<span class="lineNum"> 147 </span> : : { +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : int rule_exists = 0;</span> +<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : int res = 0;</span> +<span class="lineNum"> 150 </span> : : +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_CHK_RULE_ARGS, +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command, chain, rule);</span> +<span class="lineNum"> 155 </span> : : +<span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 157 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 159 </span> : : +<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists_chk_support() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 161 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncmp(err_buf, &quot;success&quot;, strlen(&quot;success&quot;)) == 0)</span> +<span class="lineNum"> 164 </span> : : { +<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : rule_exists = 1;</span> +<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists_chk_support() Rule : '%s' in %s already exists&quot;,</span> +<span class="lineNum"> 167 </span> : : rule, chain); +<span class="lineNum"> 168 </span> : : } +<span class="lineNum"> 169 </span> : : else +<span class="lineNum"> 170 </span> : : { +<span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists_chk_support() Rule : '%s' in %s does not exist&quot;,</span> +<span class="lineNum"> 172 </span> : : rule, chain); +<span class="lineNum"> 173 </span> : : } +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : return(rule_exists);</span> +<span class="lineNum"> 176 </span> : : } +<a name="177"><span class="lineNum"> 177 </span> : : </a> +<span class="lineNum"> 178 </span> : : static int +<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : rule_exists(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 180 </span> : : const struct fw_chain * const fwc, const char * const rule, +<span class="lineNum"> 181 </span> : : const unsigned int proto, const char * const srcip, +<span class="lineNum"> 182 </span> : : const char * const dstip, const unsigned int port, +<span class="lineNum"> 183 </span> : : const unsigned int exp_ts) +<span class="lineNum"> 184 </span> : : { +<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : int rule_exists = 0;</span> +<span class="lineNum"> 186 </span> : : +<span class="lineNum"> 187 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(have_firewd_chk_support == 1)</span> +<span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : rule_exists = rule_exists_chk_support(opts, fwc-&gt;to_chain, rule);</span> +<span class="lineNum"> 189 </span> : : else +<span class="lineNum"> 190 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : rule_exists = rule_exists_no_chk_support(opts, fwc, proto, srcip, (opts-&gt;fw_config-&gt;use_destination ? dstip : NULL), port, exp_ts);</span> +<span class="lineNum"> 191 </span> : : +<span class="lineNum"> 192 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists == 1)</span> +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists() Rule : '%s' in %s already exists&quot;,</span> +<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : rule, fwc-&gt;to_chain);</span> +<span class="lineNum"> 195 </span> : : else +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists() Rule : '%s' in %s does not exist&quot;,</span> +<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : rule, fwc-&gt;to_chain);</span> +<span class="lineNum"> 198 </span> : : +<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return(rule_exists);</span> +<span class="lineNum"> 200 </span> : : } +<a name="201"><span class="lineNum"> 201 </span> : : </a> +<span class="lineNum"> 202 </span> : : static void +<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : firewd_chk_support(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 204 </span> : : { +<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : int res = 1;</span> +<span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : struct fw_chain *in_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_INPUT_ACCESS]);</span> +<span class="lineNum"> 207 </span> : : +<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 209 </span> : : +<span class="lineNum"> 210 </span> : : /* Add a harmless rule to the firewalld INPUT chain and see if firewalld +<span class="lineNum"> 211 </span> : : * supports '-C' to check for it. Set &quot;have_firewd_chk_support&quot; accordingly, +<span class="lineNum"> 212 </span> : : * delete the rule, and return. +<span class="lineNum"> 213 </span> : : */ +<span class="lineNum"> 214 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_TMP_CHK_RULE_ARGS, +<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;table,</span> +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;from_chain,</span> +<span class="lineNum"> 218 </span> : : 1, /* first rule */ +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;target</span> +<span class="lineNum"> 220 </span> : : ); +<span class="lineNum"> 221 </span> : : +<span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 223 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 225 </span> : : +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 227 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 228 </span> : : +<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> : : /* Now see if '-C' works +<span class="lineNum"> 232 </span> : : */ +<span class="lineNum"> 233 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_TMP_VERIFY_CHK_ARGS, +<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 235 </span> : : in_chain-&gt;table, +<span class="lineNum"> 236 </span> : : in_chain-&gt;from_chain, +<span class="lineNum"> 237 </span> : : in_chain-&gt;target +<span class="lineNum"> 238 </span> : : ); +<span class="lineNum"> 239 </span> : : +<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 241 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 243 </span> : : +<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 245 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncmp(err_buf, &quot;success&quot;, strlen(&quot;success&quot;)) == 0)</span> +<span class="lineNum"> 248 </span> : : { +<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() -C supported&quot;);</span> +<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : have_firewd_chk_support = 1;</span> +<span class="lineNum"> 251 </span> : : } +<span class="lineNum"> 252 </span> : : else +<span class="lineNum"> 253 </span> : : { +<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() -C not supported&quot;);</span> +<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : have_firewd_chk_support = 0;</span> +<span class="lineNum"> 256 </span> : : } +<span class="lineNum"> 257 </span> : : +<span class="lineNum"> 258 </span> : : /* Delete the tmp rule +<span class="lineNum"> 259 </span> : : */ +<span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 261 </span> : : +<span class="lineNum"> 262 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_RULE_ARGS, +<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 264 </span> : : in_chain-&gt;table, +<span class="lineNum"> 265 </span> : : in_chain-&gt;from_chain, +<span class="lineNum"> 266 </span> : : 1 +<span class="lineNum"> 267 </span> : : ); +<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 269 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 270 </span> : : +<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 272 </span> : : } +<a name="273"><span class="lineNum"> 273 </span> : : </a> +<span class="lineNum"> 274 </span> : : static int +<span class="lineNum"> 275 </span> :<span class="lineNoCov"> 0 : comment_match_exists(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 276 </span> : : { +<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : int res = 1;</span> +<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : char *ndx = NULL;</span> +<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : struct fw_chain *in_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_INPUT_ACCESS]);</span> +<span class="lineNum"> 280 </span> : : +<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 282 </span> : : +<span class="lineNum"> 283 </span> : : /* Add a harmless rule to the firewalld INPUT chain that uses the comment +<span class="lineNum"> 284 </span> : : * match and make sure it exists. If not, return zero. Otherwise, delete +<span class="lineNum"> 285 </span> : : * the rule and return true. +<span class="lineNum"> 286 </span> : : */ +<span class="lineNum"> 287 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_TMP_COMMENT_ARGS, +<span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;table,</span> +<span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;from_chain,</span> +<span class="lineNum"> 291 </span> : : 1, /* first rule */ +<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;target</span> +<span class="lineNum"> 293 </span> : : ); +<span class="lineNum"> 294 </span> : : +<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 296 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 298 </span> : : +<span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;comment_match_exists() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 300 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 301 </span> : : +<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 303 </span> : : +<span class="lineNum"> 304 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, +<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 306 </span> : : in_chain-&gt;table, +<span class="lineNum"> 307 </span> : : in_chain-&gt;from_chain +<span class="lineNum"> 308 </span> : : ); +<span class="lineNum"> 309 </span> : : +<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE,</span> +<span class="lineNum"> 311 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : chop_newline(cmd_out);</span> +<span class="lineNum"> 313 </span> : : +<span class="lineNum"> 314 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, cmd_out);</span> +<span class="lineNum"> 316 </span> : : +<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : ndx = strstr(cmd_out, TMP_COMMENT);</span> +<span class="lineNum"> 318 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> +<span class="lineNum"> 319 </span> : : res = 0; /* did not find the tmp comment */ +<span class="lineNum"> 320 </span> : : else +<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : res = 1;</span> +<span class="lineNum"> 322 </span> : : +<span class="lineNum"> 323 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 1)</span> +<span class="lineNum"> 324 </span> : : { +<span class="lineNum"> 325 </span> : : /* Delete the tmp comment rule +<span class="lineNum"> 326 </span> : : */ +<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 328 </span> : : +<span class="lineNum"> 329 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_RULE_ARGS, +<span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 331 </span> : : in_chain-&gt;table, +<span class="lineNum"> 332 </span> : : in_chain-&gt;from_chain, +<span class="lineNum"> 333 </span> : : 1 +<span class="lineNum"> 334 </span> : : ); +<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 336 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 337 </span> : : } +<span class="lineNum"> 338 </span> : : +<span class="lineNum"> 339 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 340 </span> : : } +<a name="341"><span class="lineNum"> 341 </span> : : </a> +<span class="lineNum"> 342 </span> : : static int +<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : add_jump_rule(const fko_srv_options_t * const opts, const int chain_num)</span> +<span class="lineNum"> 344 </span> : : { +<span class="lineNum"> 345 </span> :<span class="lineNoCov"> 0 : int res = 0, rv = 0;</span> +<span class="lineNum"> 346 </span> : : +<span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 348 </span> : : +<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_ADD_JUMP_RULE_ARGS,</span> +<span class="lineNum"> 350 </span> : : fwc.fw_command, +<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> +<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].from_chain,</span> +<span class="lineNum"> 353 </span> : : fwc.chain[chain_num].jump_rule_pos, +<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> +<span class="lineNum"> 355 </span> : : ); +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 358 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 359 </span> : : +<span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;add_jump_rule() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 361 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 362 </span> : : +<span class="lineNum"> 363 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 364 </span> : : { +<span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Added jump rule from chain: %s to chain: %s&quot;,</span> +<span class="lineNum"> 366 </span> : : fwc.chain[chain_num].from_chain, +<span class="lineNum"> 367 </span> : : fwc.chain[chain_num].to_chain); +<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : rv = 1;</span> +<span class="lineNum"> 369 </span> : : } +<span class="lineNum"> 370 </span> : : else +<span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 372 </span> : : +<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : return rv;</span> +<span class="lineNum"> 374 </span> : : } +<a name="375"><span class="lineNum"> 375 </span> : : </a> +<span class="lineNum"> 376 </span> : : static int +<span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : chain_exists(const fko_srv_options_t * const opts, const int chain_num)</span> +<span class="lineNum"> 378 </span> : : { +<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : int res = 0, rv = 0;</span> +<span class="lineNum"> 380 </span> : : +<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 382 </span> : : +<span class="lineNum"> 383 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_CHAIN_EXISTS_ARGS, +<span class="lineNum"> 384 </span> : : fwc.fw_command, +<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> +<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> +<span class="lineNum"> 387 </span> : : ); +<span class="lineNum"> 388 </span> : : +<span class="lineNum"> 389 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 390 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 392 </span> : : +<span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;chain_exists() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 394 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 395 </span> : : +<span class="lineNum"> 396 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strstr(err_buf, FIREWD_CMD_FAIL_STR) == NULL)</span> +<span class="lineNum"> 397 </span> : : { +<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;'%s' table '%s' chain exists&quot;,</span> +<span class="lineNum"> 399 </span> : : fwc.chain[chain_num].table, +<span class="lineNum"> 400 </span> : : fwc.chain[chain_num].to_chain); +<span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : rv = 1;</span> +<span class="lineNum"> 402 </span> : : } +<span class="lineNum"> 403 </span> : : else +<span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 405 </span> : : +<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : return rv;</span> +<span class="lineNum"> 407 </span> : : } +<a name="408"><span class="lineNum"> 408 </span> : : </a> +<span class="lineNum"> 409 </span> : : static int +<span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : jump_rule_exists_chk_support(const fko_srv_options_t * const opts, const int chain_num)</span> +<span class="lineNum"> 411 </span> : : { +<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : int exists = 0;</span> +<span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 414 </span> : : +<span class="lineNum"> 415 </span> : : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_CHK_JUMP_RULE_ARGS, +<span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> +<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> +<span class="lineNum"> 418 </span> : : ); +<span class="lineNum"> 419 </span> : : +<span class="lineNum"> 420 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists_chk_support(opts, fwc.chain[chain_num].from_chain, rule_buf) == 1)</span> +<span class="lineNum"> 421 </span> : : { +<span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_chk_support() jump rule found&quot;);</span> +<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : exists = 1;</span> +<span class="lineNum"> 424 </span> : : } +<span class="lineNum"> 425 </span> : : else +<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_chk_support() jump rule not found&quot;);</span> +<span class="lineNum"> 427 </span> : : +<span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : return exists;</span> +<span class="lineNum"> 429 </span> : : } +<a name="430"><span class="lineNum"> 430 </span> : : </a> +<span class="lineNum"> 431 </span> : : static int +<span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, const int chain_num)</span> +<span class="lineNum"> 433 </span> : : { +<span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : int exists = 0;</span> +<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : char cmd_buf[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : char chain_search[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 437 </span> : : +<span class="lineNum"> 438 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, +<span class="lineNum"> 439 </span> : : fwc.fw_command, +<span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> +<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].from_chain</span> +<span class="lineNum"> 442 </span> : : ); +<span class="lineNum"> 443 </span> : : +<span class="lineNum"> 444 </span> : : /* include spaces on either side as produced by 'firewalld -L' output +<span class="lineNum"> 445 </span> : : */ +<span class="lineNum"> 446 </span> : : snprintf(chain_search, CMD_BUFSIZE-1, &quot; %s &quot;, +<span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain);</span> +<span class="lineNum"> 448 </span> : : +<span class="lineNum"> 449 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(search_extcmd(cmd_buf, WANT_STDERR,</span> +<span class="lineNum"> 450 </span> : : NO_TIMEOUT, chain_search, &amp;pid_status, opts) &gt; 0) +<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : exists = 1;</span> +<span class="lineNum"> 452 </span> : : +<span class="lineNum"> 453 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(exists)</span> +<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_no_chk_support() jump rule found&quot;);</span> +<span class="lineNum"> 455 </span> : : else +<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_no_chk_support() jump rule not found&quot;);</span> +<span class="lineNum"> 457 </span> : : +<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : return(exists);</span> +<span class="lineNum"> 459 </span> : : } +<a name="460"><span class="lineNum"> 460 </span> : : </a> +<span class="lineNum"> 461 </span> : : static int +<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : jump_rule_exists(const fko_srv_options_t * const opts, const int chain_num)</span> +<span class="lineNum"> 463 </span> : : { +<span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : int exists = 0;</span> +<span class="lineNum"> 465 </span> : : +<span class="lineNum"> 466 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(have_firewd_chk_support == 1)</span> +<span class="lineNum"> 467 </span> :<span class="lineNoCov"> 0 : exists = jump_rule_exists_chk_support(opts, chain_num);</span> +<span class="lineNum"> 468 </span> : : else +<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : exists = jump_rule_exists_no_chk_support(opts, chain_num);</span> +<span class="lineNum"> 470 </span> : : +<span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : return exists;</span> +<span class="lineNum"> 472 </span> : : } +<span class="lineNum"> 473 </span> : : +<span class="lineNum"> 474 </span> : : /* Print all firewall rules currently instantiated by the running fwknopd +<span class="lineNum"> 475 </span> : : * daemon to stdout. +<a name="476"><span class="lineNum"> 476 </span> : : */</a> +<span class="lineNum"> 477 </span> : : int +<span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : fw_dump_rules(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 479 </span> : : { +<span class="lineNum"> 480 </span> : : int i; +<span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : int res, got_err = 0;</span> +<span class="lineNum"> 482 </span> : : +<span class="lineNum"> 483 </span> :<span class="lineNoCov"> 0 : struct fw_chain *ch = opts-&gt;fw_config-&gt;chain;</span> +<span class="lineNum"> 484 </span> : : +<span class="lineNum"> 485 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;fw_list_all == 1)</span> +<span class="lineNum"> 486 </span> : : { +<span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Listing all firewalld rules in applicable tables...\n&quot;);</span> +<span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> +<span class="lineNum"> 489 </span> : : +<span class="lineNum"> 490 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> +<span class="lineNum"> 491 </span> : : { +<span class="lineNum"> 492 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> +<span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 494 </span> : : +<span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 496 </span> : : +<span class="lineNum"> 497 </span> : : /* Create the list command +<span class="lineNum"> 498 </span> : : */ +<span class="lineNum"> 499 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_ALL_RULES_ARGS, +<span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : ch[i].table</span> +<span class="lineNum"> 502 </span> : : ); +<span class="lineNum"> 503 </span> : : +<span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, NULL, 0, NO_STDERR,</span> +<span class="lineNum"> 505 </span> : : NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 506 </span> : : +<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;fw_dump_rules() CMD: '%s' (res: %d)&quot;,</span> +<span class="lineNum"> 508 </span> : : cmd_buf, res); +<span class="lineNum"> 509 </span> : : +<span class="lineNum"> 510 </span> : : /* Expect full success on this */ +<span class="lineNum"> 511 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 512 </span> : : { +<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : got_err++;</span> +<span class="lineNum"> 515 </span> : : } +<span class="lineNum"> 516 </span> : : } +<span class="lineNum"> 517 </span> : : } +<span class="lineNum"> 518 </span> : : else +<span class="lineNum"> 519 </span> : : { +<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Listing rules in fwknopd firewalld chains...\n&quot;);</span> +<span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> +<span class="lineNum"> 522 </span> : : +<span class="lineNum"> 523 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> +<span class="lineNum"> 524 </span> : : { +<span class="lineNum"> 525 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> +<span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 527 </span> : : +<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 529 </span> : : +<span class="lineNum"> 530 </span> : : /* Create the list command +<span class="lineNum"> 531 </span> : : */ +<span class="lineNum"> 532 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, +<span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : ch[i].table,</span> +<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : ch[i].to_chain</span> +<span class="lineNum"> 536 </span> : : ); +<span class="lineNum"> 537 </span> : : +<span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;\n&quot;);</span> +<span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> +<span class="lineNum"> 540 </span> : : +<span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, NULL, 0, NO_STDERR,</span> +<span class="lineNum"> 542 </span> : : NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 543 </span> : : +<span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;fw_dump_rules() CMD: '%s' (res: %d)&quot;,</span> +<span class="lineNum"> 545 </span> : : cmd_buf, res); +<span class="lineNum"> 546 </span> : : +<span class="lineNum"> 547 </span> : : /* Expect full success on this */ +<span class="lineNum"> 548 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 549 </span> : : { +<span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : got_err++;</span> +<span class="lineNum"> 552 </span> : : } +<span class="lineNum"> 553 </span> : : } +<span class="lineNum"> 554 </span> : : } +<span class="lineNum"> 555 </span> : : +<span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : return(got_err);</span> +<span class="lineNum"> 557 </span> : : } +<span class="lineNum"> 558 </span> : : +<span class="lineNum"> 559 </span> : : /* Quietly flush and delete all fwknop custom chains. +<a name="560"><span class="lineNum"> 560 </span> : : */</a> +<span class="lineNum"> 561 </span> : : static void +<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : delete_all_chains(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 563 </span> : : { +<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : int i, res, cmd_ctr = 0;</span> +<span class="lineNum"> 565 </span> : : +<span class="lineNum"> 566 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> +<span class="lineNum"> 567 </span> : : { +<span class="lineNum"> 568 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> +<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 570 </span> : : +<span class="lineNum"> 571 </span> : : /* First look for a jump rule to this chain and remove it if it +<span class="lineNum"> 572 </span> : : * is there. +<span class="lineNum"> 573 </span> : : */ +<span class="lineNum"> 574 </span> : : cmd_ctr = 0; +<span class="lineNum"> 575 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(cmd_ctr &lt; CMD_LOOP_TRIES &amp;&amp; (jump_rule_exists(opts, i) == 1))</span> +<span class="lineNum"> 576 </span> : : { +<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 578 </span> : : +<span class="lineNum"> 579 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_JUMP_RULE_ARGS, +<span class="lineNum"> 580 </span> : : fwc.fw_command, +<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].table,</span> +<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].from_chain,</span> +<span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].to_chain</span> +<span class="lineNum"> 584 </span> : : ); +<span class="lineNum"> 585 </span> : : +<span class="lineNum"> 586 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 587 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 589 </span> : : +<span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;delete_all_chains() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 591 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 592 </span> : : +<span class="lineNum"> 593 </span> : : /* Expect full success on this */ +<span class="lineNum"> 594 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 596 </span> : : +<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : cmd_ctr++;</span> +<span class="lineNum"> 598 </span> : : } +<span class="lineNum"> 599 </span> : : +<span class="lineNum"> 600 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 601 </span> : : +<span class="lineNum"> 602 </span> : : /* Now flush and remove the chain. +<span class="lineNum"> 603 </span> : : */ +<span class="lineNum"> 604 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_FLUSH_CHAIN_ARGS, +<span class="lineNum"> 605 </span> : : fwc.fw_command, +<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].table,</span> +<span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].to_chain</span> +<span class="lineNum"> 608 </span> : : ); +<span class="lineNum"> 609 </span> : : +<span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> +<span class="lineNum"> 611 </span> : : NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 613 </span> : : +<span class="lineNum"> 614 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;delete_all_chains() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 615 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 616 </span> : : +<span class="lineNum"> 617 </span> : : /* Expect full success on this */ +<span class="lineNum"> 618 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 619 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 620 </span> : : +<span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 622 </span> : : +<span class="lineNum"> 623 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_CHAIN_ARGS, +<span class="lineNum"> 624 </span> : : fwc.fw_command, +<span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].table,</span> +<span class="lineNum"> 626 </span> : : fwc.chain[i].to_chain +<span class="lineNum"> 627 </span> : : ); +<span class="lineNum"> 628 </span> : : +<span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> +<span class="lineNum"> 630 </span> : : NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 632 </span> : : +<span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;delete_all_chains() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 634 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 635 </span> : : +<span class="lineNum"> 636 </span> : : /* Expect full success on this */ +<span class="lineNum"> 637 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 639 </span> : : +<span class="lineNum"> 640 </span> : : } +<span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 642 </span> : : } +<a name="643"><span class="lineNum"> 643 </span> : : </a> +<span class="lineNum"> 644 </span> : : static int +<span class="lineNum"> 645 </span> :<span class="lineNoCov"> 0 : create_chain(const fko_srv_options_t * const opts, const int chain_num)</span> +<span class="lineNum"> 646 </span> : : { +<span class="lineNum"> 647 </span> :<span class="lineNoCov"> 0 : int res = 0, rv = 0;</span> +<span class="lineNum"> 648 </span> : : +<span class="lineNum"> 649 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 650 </span> : : +<span class="lineNum"> 651 </span> : : /* Create the custom chain. +<span class="lineNum"> 652 </span> : : */ +<span class="lineNum"> 653 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_NEW_CHAIN_ARGS, +<span class="lineNum"> 654 </span> : : fwc.fw_command, +<span class="lineNum"> 655 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> +<span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> +<span class="lineNum"> 657 </span> : : ); +<span class="lineNum"> 658 </span> : : +<span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> +<span class="lineNum"> 660 </span> : : NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 662 </span> : : +<span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;create_chain() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 664 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 665 </span> : : +<span class="lineNum"> 666 </span> : : /* Expect full success on this */ +<span class="lineNum"> 667 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 668 </span> : : rv = 1; +<span class="lineNum"> 669 </span> : : else +<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 671 </span> : : +<span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : return rv;</span> +<span class="lineNum"> 673 </span> : : } +<a name="674"><span class="lineNum"> 674 </span> : : </a> +<span class="lineNum"> 675 </span> : : static int +<span class="lineNum"> 676 </span> :<span class="lineNoCov"> 0 : mk_chain(const fko_srv_options_t * const opts, const int chain_num)</span> +<span class="lineNum"> 677 </span> : : { +<span class="lineNum"> 678 </span> :<span class="lineNoCov"> 0 : int err = 0;</span> +<span class="lineNum"> 679 </span> : : +<span class="lineNum"> 680 </span> : : /* Make sure the required chain and jump rule exist +<span class="lineNum"> 681 </span> : : */ +<span class="lineNum"> 682 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! chain_exists(opts, chain_num))</span> +<span class="lineNum"> 683 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! create_chain(opts, chain_num))</span> +<span class="lineNum"> 684 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 685 </span> : : +<span class="lineNum"> 686 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! jump_rule_exists(opts, chain_num))</span> +<span class="lineNum"> 687 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! add_jump_rule(opts, chain_num))</span> +<span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 689 </span> : : +<span class="lineNum"> 690 </span> :<span class="lineNoCov"> 0 : return err;</span> +<span class="lineNum"> 691 </span> : : } +<span class="lineNum"> 692 </span> : : +<span class="lineNum"> 693 </span> : : /* Create the fwknop custom chains (at least those that are configured). +<a name="694"><span class="lineNum"> 694 </span> : : */</a> +<span class="lineNum"> 695 </span> : : static int +<span class="lineNum"> 696 </span> :<span class="lineNoCov"> 0 : create_fw_chains(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 697 </span> : : { +<span class="lineNum"> 698 </span> :<span class="lineNoCov"> 0 : int i, got_err = 0;</span> +<span class="lineNum"> 699 </span> : : +<span class="lineNum"> 700 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> +<span class="lineNum"> 701 </span> : : { +<span class="lineNum"> 702 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> +<span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 704 </span> : : +<span class="lineNum"> 705 </span> :<span class="lineNoCov"> 0 : got_err += mk_chain(opts, i);</span> +<span class="lineNum"> 706 </span> : : } +<span class="lineNum"> 707 </span> : : +<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : return(got_err);</span> +<span class="lineNum"> 709 </span> : : } +<a name="710"><span class="lineNum"> 710 </span> : : </a> +<span class="lineNum"> 711 </span> : : static int +<span class="lineNum"> 712 </span> :<span class="lineCov"> 795 : set_fw_chain_conf(const int type, const char * const conf_str)</span> +<span class="lineNum"> 713 </span> : : { +<span class="lineNum"> 714 </span> : : int i, j, is_err; +<span class="lineNum"> 715 </span> :<span class="lineCov"> 795 : char tbuf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 716 </span> :<span class="lineCov"> 795 : const char *ndx = conf_str;</span> +<span class="lineNum"> 717 </span> : : +<span class="lineNum"> 718 </span> : : char *chain_fields[FW_NUM_CHAIN_FIELDS]; +<span class="lineNum"> 719 </span> : : +<span class="lineNum"> 720 </span> :<span class="lineCov"> 795 : struct fw_chain *chain = &amp;(fwc.chain[type]);</span> +<span class="lineNum"> 721 </span> : : +<span class="lineNum"> 722 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(conf_str == NULL)</span> +<span class="lineNum"> 723 </span> : : { +<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] NULL conf_str&quot;);</span> +<span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 726 </span> : : } +<span class="lineNum"> 727 </span> : : +<span class="lineNum"> 728 </span> :<span class="lineCov"> 795 : chain-&gt;type = type;</span> +<span class="lineNum"> 729 </span> : : +<span class="lineNum"> 730 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(ndx != NULL)</span> +<span class="lineNum"> 731 </span> :<span class="lineCov"> 795 : chain_fields[0] = tbuf;</span> +<span class="lineNum"> 732 </span> : : +<span class="lineNum"> 733 </span> : : i = 0; +<span class="lineNum"> 734 </span> : : j = 1; +<span class="lineNum"> 735 </span> [<span class="branchCov" title="Branch 0 was taken 32595 times"> + </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 33390 : while(*ndx != '\0')</span> +<span class="lineNum"> 736 </span> : : { +<span class="lineNum"> 737 </span> [<span class="branchCov" title="Branch 0 was taken 28620 times"> + </span><span class="branchCov" title="Branch 1 was taken 3975 times"> + </span>]:<span class="lineCov"> 32595 : if(*ndx != ' ')</span> +<span class="lineNum"> 738 </span> : : { +<span class="lineNum"> 739 </span> [<span class="branchCov" title="Branch 0 was taken 3975 times"> + </span><span class="branchCov" title="Branch 1 was taken 24645 times"> + </span>]:<span class="lineCov"> 28620 : if(*ndx == ',')</span> +<span class="lineNum"> 740 </span> : : { +<span class="lineNum"> 741 </span> :<span class="lineCov"> 3975 : tbuf[i] = '\0';</span> +<span class="lineNum"> 742 </span> :<span class="lineCov"> 3975 : chain_fields[j++] = &amp;(tbuf[++i]);</span> +<span class="lineNum"> 743 </span> : : } +<span class="lineNum"> 744 </span> : : else +<span class="lineNum"> 745 </span> :<span class="lineCov"> 24645 : tbuf[i++] = *ndx;</span> +<span class="lineNum"> 746 </span> : : } +<span class="lineNum"> 747 </span> [<span class="branchCov" title="Branch 0 was taken 28620 times"> + </span><span class="branchCov" title="Branch 1 was taken 3975 times"> + </span>]:<span class="lineCov"> 32595 : if(*ndx != '\0'</span> +<span class="lineNum"> 748 </span> :<span class="lineCov"> 32595 : &amp;&amp; *ndx != ' '</span> +<span class="lineNum"> 749 </span> [<span class="branchCov" title="Branch 0 was taken 24645 times"> + </span><span class="branchCov" title="Branch 1 was taken 3975 times"> + </span>]:<span class="lineCov"> 28620 : &amp;&amp; *ndx != ','</span> +<span class="lineNum"> 750 </span> [<span class="branchCov" title="Branch 0 was taken 23850 times"> + </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 24645 : &amp;&amp; *ndx != '_'</span> +<span class="lineNum"> 751 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 23850 times"> + </span>]:<span class="lineCov"> 23850 : &amp;&amp; isalnum(*ndx) == 0)</span> +<span class="lineNum"> 752 </span> : : { +<span class="lineNum"> 753 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Custom chain config parse error: &quot;</span> +<span class="lineNum"> 754 </span> : : &quot;invalid character '%c' for chain type %i, &quot; +<span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : &quot;line: %s&quot;, *ndx, type, conf_str);</span> +<span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 757 </span> : : } +<span class="lineNum"> 758 </span> :<span class="lineCov"> 32595 : ndx++;</span> +<span class="lineNum"> 759 </span> : : } +<span class="lineNum"> 760 </span> : : +<span class="lineNum"> 761 </span> : : /* Sanity check - j should be the number of chain fields +<span class="lineNum"> 762 </span> : : * (excluding the type). +<span class="lineNum"> 763 </span> : : */ +<span class="lineNum"> 764 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(j != FW_NUM_CHAIN_FIELDS)</span> +<span class="lineNum"> 765 </span> : : { +<span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Custom chain config parse error: &quot;</span> +<span class="lineNum"> 767 </span> : : &quot;wrong number of fields for chain type %i, &quot; +<span class="lineNum"> 768 </span> : : &quot;line: %s&quot;, type, conf_str); +<span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 770 </span> : : } +<span class="lineNum"> 771 </span> : : +<span class="lineNum"> 772 </span> : : /* Pull and set Target */ +<span class="lineNum"> 773 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;target, chain_fields[0], sizeof(chain-&gt;target));</span> +<span class="lineNum"> 774 </span> : : +<span class="lineNum"> 775 </span> : : /* Pull and set Table */ +<span class="lineNum"> 776 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;table, chain_fields[1], sizeof(chain-&gt;table));</span> +<span class="lineNum"> 777 </span> : : +<span class="lineNum"> 778 </span> : : /* Pull and set From_chain */ +<span class="lineNum"> 779 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;from_chain, chain_fields[2], sizeof(chain-&gt;from_chain));</span> +<span class="lineNum"> 780 </span> : : +<span class="lineNum"> 781 </span> : : /* Pull and set Jump_rule_position */ +<span class="lineNum"> 782 </span> :<span class="lineCov"> 795 : chain-&gt;jump_rule_pos = strtol_wrapper(chain_fields[3],</span> +<span class="lineNum"> 783 </span> : : 0, RCHK_MAX_FIREWD_RULE_NUM, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 784 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 785 </span> : : { +<span class="lineNum"> 786 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid jump rule position in Line: %s&quot;,</span> +<span class="lineNum"> 787 </span> : : conf_str); +<span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 789 </span> : : } +<span class="lineNum"> 790 </span> : : +<span class="lineNum"> 791 </span> : : /* Pull and set To_chain */ +<span class="lineNum"> 792 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;to_chain, chain_fields[4], sizeof(chain-&gt;to_chain));</span> +<span class="lineNum"> 793 </span> : : +<span class="lineNum"> 794 </span> : : /* Pull and set to_chain rule position */ +<span class="lineNum"> 795 </span> :<span class="lineCov"> 795 : chain-&gt;rule_pos = strtol_wrapper(chain_fields[5],</span> +<span class="lineNum"> 796 </span> : : 0, RCHK_MAX_FIREWD_RULE_NUM, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 797 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 798 </span> : : { +<span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid to_chain rule position in Line: %s&quot;,</span> +<span class="lineNum"> 800 </span> : : conf_str); +<span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 802 </span> : : } +<span class="lineNum"> 803 </span> : : return 1; +<span class="lineNum"> 804 </span> : : } +<a name="805"><span class="lineNum"> 805 </span> : : </a> +<span class="lineNum"> 806 </span> : : int +<span class="lineNum"> 807 </span> :<span class="lineCov"> 795 : fw_config_init(fko_srv_options_t * const opts)</span> +<span class="lineNum"> 808 </span> : : { +<span class="lineNum"> 809 </span> : : memset(&amp;fwc, 0x0, sizeof(struct fw_config)); +<span class="lineNum"> 810 </span> : : +<span class="lineNum"> 811 </span> : : /* Set our firewall exe command path (firewall-cmd or iptables in most cases). +<span class="lineNum"> 812 </span> : : */ +<span class="lineNum"> 813 </span> : : #if FIREWALL_FIREWALLD +<span class="lineNum"> 814 </span> : : char cmd_passthru[512]; +<span class="lineNum"> 815 </span> :<span class="lineCov"> 795 : snprintf(cmd_passthru, sizeof cmd_passthru, &quot;%s %s &quot;,</span> +<span class="lineNum"> 816 </span> : : opts-&gt;config[CONF_FIREWALL_EXE], FIREWD_CMD_PREFIX); +<span class="lineNum"> 817 </span> :<span class="lineCov"> 795 : strlcpy(fwc.fw_command, cmd_passthru, sizeof(fwc.fw_command));</span> +<span class="lineNum"> 818 </span> : : #else +<span class="lineNum"> 819 </span> : : strlcpy(fwc.fw_command, opts-&gt;config[CONF_FIREWALL_EXE], sizeof(fwc.fw_command)); +<span class="lineNum"> 820 </span> : : #endif +<span class="lineNum"> 821 </span> : : +<span class="lineNum"> 822 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 823 </span> : : fiu_return_on(&quot;fw_config_init&quot;, 0); +<span class="lineNum"> 824 </span> : : #endif +<span class="lineNum"> 825 </span> : : +<span class="lineNum"> 826 </span> : : /* Pull the fwknop chain config info and setup our internal +<span class="lineNum"> 827 </span> : : * config struct. The FIREWD_INPUT is the only one that is +<span class="lineNum"> 828 </span> : : * required. The rest are optional. +<span class="lineNum"> 829 </span> : : */ +<span class="lineNum"> 830 </span> [<span class="branchCov" title="Branch 1 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 795 : if(set_fw_chain_conf(FIREWD_INPUT_ACCESS, opts-&gt;config[CONF_FIREWD_INPUT_ACCESS]) != 1)</span> +<span class="lineNum"> 831 </span> : : return 0; +<span class="lineNum"> 832 </span> : : +<span class="lineNum"> 833 </span> : : /* The FWKNOP_OUTPUT_ACCESS requires ENABLE_FIREWD_OUTPUT_ACCESS == Y +<span class="lineNum"> 834 </span> : : */ +<span class="lineNum"> 835 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_OUTPUT], &quot;Y&quot;, 1)==0)</span> +<span class="lineNum"> 836 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_OUTPUT_ACCESS, opts-&gt;config[CONF_FIREWD_OUTPUT_ACCESS]) != 1)</span> +<span class="lineNum"> 837 </span> : : return 0; +<span class="lineNum"> 838 </span> : : +<span class="lineNum"> 839 </span> : : /* The remaining access chains require ENABLE_FIREWD_FORWARDING = Y +<span class="lineNum"> 840 </span> : : */ +<span class="lineNum"> 841 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1)==0)</span> +<span class="lineNum"> 842 </span> : : { +<span class="lineNum"> 843 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_FORWARD_ACCESS, opts-&gt;config[CONF_FIREWD_FORWARD_ACCESS]) != 1)</span> +<span class="lineNum"> 844 </span> : : return 0; +<span class="lineNum"> 845 </span> : : +<span class="lineNum"> 846 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_DNAT_ACCESS, opts-&gt;config[CONF_FIREWD_DNAT_ACCESS]) != 1)</span> +<span class="lineNum"> 847 </span> : : return 0; +<span class="lineNum"> 848 </span> : : +<span class="lineNum"> 849 </span> : : /* Requires ENABLE_FIREWD_SNAT = Y +<span class="lineNum"> 850 </span> : : */ +<span class="lineNum"> 851 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT], &quot;Y&quot;, 1)==0)</span> +<span class="lineNum"> 852 </span> : : { +<span class="lineNum"> 853 </span> : : /* Support both SNAT and MASQUERADE - this will be controlled +<span class="lineNum"> 854 </span> : : * via the access.conf configuration for individual rules +<span class="lineNum"> 855 </span> : : */ +<span class="lineNum"> 856 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_MASQUERADE_ACCESS,</span> +<span class="lineNum"> 857 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_FIREWD_MASQUERADE_ACCESS]) != 1)</span> +<span class="lineNum"> 858 </span> : : return 0; +<span class="lineNum"> 859 </span> : : +<span class="lineNum"> 860 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_SNAT_ACCESS,</span> +<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_FIREWD_SNAT_ACCESS]) != 1)</span> +<span class="lineNum"> 862 </span> : : return 0; +<span class="lineNum"> 863 </span> : : } +<span class="lineNum"> 864 </span> : : } +<span class="lineNum"> 865 </span> : : +<span class="lineNum"> 866 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_DESTINATION_RULE], &quot;Y&quot;, 1)==0)</span> +<span class="lineNum"> 867 </span> : : { +<span class="lineNum"> 868 </span> :<span class="lineNoCov"> 0 : fwc.use_destination = 1;</span> +<span class="lineNum"> 869 </span> : : } +<span class="lineNum"> 870 </span> : : +<span class="lineNum"> 871 </span> : : /* Let us find it via our opts struct as well. +<span class="lineNum"> 872 </span> : : */ +<span class="lineNum"> 873 </span> :<span class="lineCov"> 795 : opts-&gt;fw_config = &amp;fwc;</span> +<span class="lineNum"> 874 </span> : : +<span class="lineNum"> 875 </span> :<span class="lineCov"> 795 : return 1;</span> +<span class="lineNum"> 876 </span> : : } +<a name="877"><span class="lineNum"> 877 </span> : : </a> +<span class="lineNum"> 878 </span> : : int +<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : fw_initialize(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 880 </span> : : { +<span class="lineNum"> 881 </span> :<span class="lineNoCov"> 0 : int res = 1;</span> +<span class="lineNum"> 882 </span> : : +<span class="lineNum"> 883 </span> : : /* Flush the chains (just in case) so we can start fresh. +<span class="lineNum"> 884 </span> : : */ +<span class="lineNum"> 885 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_FLUSH_FIREWD_AT_INIT], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 886 </span> :<span class="lineNoCov"> 0 : delete_all_chains(opts);</span> +<span class="lineNum"> 887 </span> : : +<span class="lineNum"> 888 </span> : : /* Now create any configured chains. +<span class="lineNum"> 889 </span> : : */ +<span class="lineNum"> 890 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(create_fw_chains(opts) != 0)</span> +<span class="lineNum"> 891 </span> : : { +<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 893 </span> : : &quot;Warning: Errors detected during fwknop custom chain creation&quot;); +<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : res = 0;</span> +<span class="lineNum"> 895 </span> : : } +<span class="lineNum"> 896 </span> : : +<span class="lineNum"> 897 </span> : : /* Make sure that the 'comment' match is available +<span class="lineNum"> 898 </span> : : */ +<span class="lineNum"> 899 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_COMMENT_CHECK], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 900 </span> : : { +<span class="lineNum"> 901 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(comment_match_exists(opts) == 1)</span> +<span class="lineNum"> 902 </span> : : { +<span class="lineNum"> 903 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;firewalld 'comment' match is available&quot;);</span> +<span class="lineNum"> 904 </span> : : } +<span class="lineNum"> 905 </span> : : else +<span class="lineNum"> 906 </span> : : { +<span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Warning: Could not use the 'comment' match&quot;);</span> +<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : res = 0;</span> +<span class="lineNum"> 909 </span> : : } +<span class="lineNum"> 910 </span> : : } +<span class="lineNum"> 911 </span> : : +<span class="lineNum"> 912 </span> : : /* See if firewalld offers the '-C' argument (older versions don't). If not, +<span class="lineNum"> 913 </span> : : * then switch to parsing firewalld -L output to find rules. +<span class="lineNum"> 914 </span> : : */ +<span class="lineNum"> 915 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;firewd_disable_check_support)</span> +<span class="lineNum"> 916 </span> :<span class="lineNoCov"> 0 : have_firewd_chk_support = 0;</span> +<span class="lineNum"> 917 </span> : : else +<span class="lineNum"> 918 </span> :<span class="lineNoCov"> 0 : firewd_chk_support(opts);</span> +<span class="lineNum"> 919 </span> : : +<span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 921 </span> : : } +<a name="922"><span class="lineNum"> 922 </span> : : </a> +<span class="lineNum"> 923 </span> : : int +<span class="lineNum"> 924 </span> :<span class="lineNoCov"> 0 : fw_cleanup(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 925 </span> : : { +<span class="lineNum"> 926 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_FLUSH_FIREWD_AT_EXIT], &quot;N&quot;, 1) == 0</span> +<span class="lineNum"> 927 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; opts-&gt;fw_flush == 0)</span> +<span class="lineNum"> 928 </span> : : return(0); +<span class="lineNum"> 929 </span> : : +<span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : delete_all_chains(opts);</span> +<span class="lineNum"> 931 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 932 </span> : : } +<a name="933"><span class="lineNum"> 933 </span> : : </a> +<span class="lineNum"> 934 </span> : : static int +<span class="lineNum"> 935 </span> :<span class="lineNoCov"> 0 : create_rule(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 936 </span> : : const char * const fw_chain, const char * const fw_rule) +<span class="lineNum"> 937 </span> : : { +<span class="lineNum"> 938 </span> :<span class="lineNoCov"> 0 : int res = 0;</span> +<span class="lineNum"> 939 </span> : : +<span class="lineNum"> 940 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 941 </span> : : +<span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s -A %s %s&quot;, opts-&gt;fw_config-&gt;fw_command, fw_chain, fw_rule);</span> +<span class="lineNum"> 943 </span> : : +<span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> +<span class="lineNum"> 945 </span> : : NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 946 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 947 </span> : : +<span class="lineNum"> 948 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;create_rule() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 949 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 950 </span> : : +<span class="lineNum"> 951 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 952 </span> : : { +<span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;create_rule() Rule: '%s' added to %s&quot;, fw_rule, fw_chain);</span> +<span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : res = 1;</span> +<span class="lineNum"> 955 </span> : : } +<span class="lineNum"> 956 </span> : : else +<span class="lineNum"> 957 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 958 </span> : : +<span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 960 </span> : : } +<a name="961"><span class="lineNum"> 961 </span> : : </a> +<span class="lineNum"> 962 </span> : : static void +<span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : firewd_rule(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 964 </span> : : const char * const complete_rule_buf, +<span class="lineNum"> 965 </span> : : const char * const fw_rule_macro, +<span class="lineNum"> 966 </span> : : const char * const srcip, const char * const dstip, +<span class="lineNum"> 967 </span> : : const unsigned int proto, const unsigned int port, +<span class="lineNum"> 968 </span> : : struct fw_chain * const chain, +<span class="lineNum"> 969 </span> : : const unsigned int exp_ts, const time_t now, +<span class="lineNum"> 970 </span> : : const char * const msg, const char * const access_msg) +<span class="lineNum"> 971 </span> : : { +<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 973 </span> : : +<span class="lineNum"> 974 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(complete_rule_buf != NULL &amp;&amp; complete_rule_buf[0] != 0x0)</span> +<span class="lineNum"> 975 </span> : : { +<span class="lineNum"> 976 </span> :<span class="lineNoCov"> 0 : strlcpy(rule_buf, complete_rule_buf, CMD_BUFSIZE-1);</span> +<span class="lineNum"> 977 </span> : : } +<span class="lineNum"> 978 </span> : : else +<span class="lineNum"> 979 </span> : : { +<span class="lineNum"> 980 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); +<span class="lineNum"> 981 </span> : : +<span class="lineNum"> 982 </span> : : snprintf(rule_buf, CMD_BUFSIZE-1, fw_rule_macro, +<span class="lineNum"> 983 </span> :<span class="lineNoCov"> 0 : chain-&gt;table,</span> +<span class="lineNum"> 984 </span> : : proto, +<span class="lineNum"> 985 </span> : : srcip, +<span class="lineNum"> 986 </span> : : dstip, +<span class="lineNum"> 987 </span> : : port, +<span class="lineNum"> 988 </span> : : exp_ts, +<span class="lineNum"> 989 </span> :<span class="lineNoCov"> 0 : chain-&gt;target</span> +<span class="lineNum"> 990 </span> : : ); +<span class="lineNum"> 991 </span> : : } +<span class="lineNum"> 992 </span> : : +<span class="lineNum"> 993 </span> : : /* Check to make sure that the chain and jump rule exists +<span class="lineNum"> 994 </span> : : */ +<span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : mk_chain(opts, chain-&gt;type);</span> +<span class="lineNum"> 996 </span> : : +<span class="lineNum"> 997 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists(opts, chain, rule_buf,</span> +<span class="lineNum"> 998 </span> : : proto, srcip, dstip, port, exp_ts) == 0) +<span class="lineNum"> 999 </span> : : { +<span class="lineNum"> 1000 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(create_rule(opts, chain-&gt;to_chain, rule_buf))</span> +<span class="lineNum"> 1001 </span> : : { +<span class="lineNum"> 1002 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Added %s rule to %s for %s -&gt; %s %s, expires at %u&quot;,</span> +<span class="lineNum"> 1003 </span> : : msg, chain-&gt;to_chain, srcip, (dstip == NULL) ? FIREWD_ANY_IP : dstip, +<span class="lineNum"> 1004 </span> : : access_msg, exp_ts +<span class="lineNum"> 1005 </span> : : ); +<span class="lineNum"> 1006 </span> : : +<span class="lineNum"> 1007 </span> :<span class="lineNoCov"> 0 : chain-&gt;active_rules++;</span> +<span class="lineNum"> 1008 </span> : : +<span class="lineNum"> 1009 </span> : : /* Reset the next expected expire time for this chain if it +<span class="lineNum"> 1010 </span> : : * is warranted. +<span class="lineNum"> 1011 </span> : : */ +<span class="lineNum"> 1012 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(chain-&gt;next_expire &lt; now || exp_ts &lt; chain-&gt;next_expire)</span> +<span class="lineNum"> 1013 </span> :<span class="lineNoCov"> 0 : chain-&gt;next_expire = exp_ts;</span> +<span class="lineNum"> 1014 </span> : : } +<span class="lineNum"> 1015 </span> : : } +<span class="lineNum"> 1016 </span> : : +<span class="lineNum"> 1017 </span> :<span class="lineNoCov"> 0 : return;</span> +<a name="1018"><span class="lineNum"> 1018 </span> : : }</a> +<span class="lineNum"> 1019 </span> : : +<span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : static void forward_access_rule(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 1021 </span> : : const acc_stanza_t * const acc, +<span class="lineNum"> 1022 </span> : : struct fw_chain * const fwd_chain, +<span class="lineNum"> 1023 </span> : : const char * const nat_ip, +<span class="lineNum"> 1024 </span> : : const unsigned int nat_port, +<span class="lineNum"> 1025 </span> : : const unsigned int fst_proto, +<span class="lineNum"> 1026 </span> : : const unsigned int fst_port, +<span class="lineNum"> 1027 </span> : : spa_data_t * const spadat, +<span class="lineNum"> 1028 </span> : : const unsigned int exp_ts, +<span class="lineNum"> 1029 </span> : : const time_t now) +<span class="lineNum"> 1030 </span> : : { +<span class="lineNum"> 1031 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 1032 </span> : : +<span class="lineNum"> 1033 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> +<span class="lineNum"> 1034 </span> : : &quot;forward_access_rule() forward_all: %d, nat_ip: %s, nat_port: %d&quot;, +<span class="lineNum"> 1035 </span> :<span class="lineNoCov"> 0 : acc-&gt;forward_all, nat_ip, nat_port);</span> +<span class="lineNum"> 1036 </span> : : +<span class="lineNum"> 1037 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all)</span> +<span class="lineNum"> 1038 </span> : : { +<span class="lineNum"> 1039 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); +<span class="lineNum"> 1040 </span> : : +<span class="lineNum"> 1041 </span> :<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_FWD_ALL_RULE_ARGS,</span> +<span class="lineNum"> 1042 </span> :<span class="lineNoCov"> 0 : fwd_chain-&gt;table,</span> +<span class="lineNum"> 1043 </span> : : spadat-&gt;use_src_ip, +<span class="lineNum"> 1044 </span> : : exp_ts, +<span class="lineNum"> 1045 </span> :<span class="lineNoCov"> 0 : fwd_chain-&gt;target</span> +<span class="lineNum"> 1046 </span> : : ); +<span class="lineNum"> 1047 </span> : : +<span class="lineNum"> 1048 </span> : : /* Make a global ACCEPT rule for all ports/protocols +<span class="lineNum"> 1049 </span> : : */ +<span class="lineNum"> 1050 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1051 </span> : : NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, +<span class="lineNum"> 1052 </span> : : &quot;FORWARD ALL&quot;, &quot;*/*&quot;); +<span class="lineNum"> 1053 </span> : : } +<span class="lineNum"> 1054 </span> : : else +<span class="lineNum"> 1055 </span> : : { +<span class="lineNum"> 1056 </span> : : /* Make the FORWARD access rule +<span class="lineNum"> 1057 </span> : : */ +<span class="lineNum"> 1058 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_FWD_RULE_ARGS, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1059 </span> : : nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, +<span class="lineNum"> 1060 </span> :<span class="lineNoCov"> 0 : &quot;FORWARD&quot;, spadat-&gt;spa_message_remain);</span> +<span class="lineNum"> 1061 </span> : : +<span class="lineNum"> 1062 </span> : : } +<span class="lineNum"> 1063 </span> :<span class="lineNoCov"> 0 : return;</span> +<a name="1064"><span class="lineNum"> 1064 </span> : : }</a> +<span class="lineNum"> 1065 </span> : : +<span class="lineNum"> 1066 </span> :<span class="lineNoCov"> 0 : static void dnat_rule(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 1067 </span> : : const acc_stanza_t * const acc, +<span class="lineNum"> 1068 </span> : : struct fw_chain * const dnat_chain, +<span class="lineNum"> 1069 </span> : : const char * const nat_ip, +<span class="lineNum"> 1070 </span> : : const unsigned int nat_port, +<span class="lineNum"> 1071 </span> : : const unsigned int fst_proto, +<span class="lineNum"> 1072 </span> : : const unsigned int fst_port, +<span class="lineNum"> 1073 </span> : : spa_data_t * const spadat, +<span class="lineNum"> 1074 </span> : : const unsigned int exp_ts, +<span class="lineNum"> 1075 </span> : : const time_t now) +<span class="lineNum"> 1076 </span> : : { +<span class="lineNum"> 1077 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 1078 </span> : : +<span class="lineNum"> 1079 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;dnat_rule() forward_all: %d, nat_ip: %s, nat_port: %d&quot;,</span> +<span class="lineNum"> 1080 </span> :<span class="lineNoCov"> 0 : acc-&gt;forward_all, nat_ip, nat_port);</span> +<span class="lineNum"> 1081 </span> : : +<span class="lineNum"> 1082 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all)</span> +<span class="lineNum"> 1083 </span> : : { +<span class="lineNum"> 1084 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); +<span class="lineNum"> 1085 </span> : : +<span class="lineNum"> 1086 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_ALL_RULE_ARGS,</span> +<span class="lineNum"> 1087 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;table,</span> +<span class="lineNum"> 1088 </span> : : spadat-&gt;use_src_ip, +<span class="lineNum"> 1089 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> +<span class="lineNum"> 1090 </span> : : exp_ts, +<span class="lineNum"> 1091 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;target,</span> +<span class="lineNum"> 1092 </span> : : nat_ip +<span class="lineNum"> 1093 </span> : : ); +<span class="lineNum"> 1094 </span> : : +<span class="lineNum"> 1095 </span> : : /* Make a global DNAT rule for all ports/protocols +<span class="lineNum"> 1096 </span> : : */ +<span class="lineNum"> 1097 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1098 </span> : : NULL, ANY_PROTO, ANY_PORT, dnat_chain, exp_ts, now, +<span class="lineNum"> 1099 </span> : : &quot;DNAT ALL&quot;, &quot;*/*&quot;); +<span class="lineNum"> 1100 </span> : : } +<span class="lineNum"> 1101 </span> : : else +<span class="lineNum"> 1102 </span> : : { +<span class="lineNum"> 1103 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); +<span class="lineNum"> 1104 </span> : : +<span class="lineNum"> 1105 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_RULE_ARGS,</span> +<span class="lineNum"> 1106 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;table,</span> +<span class="lineNum"> 1107 </span> : : fst_proto, +<span class="lineNum"> 1108 </span> : : spadat-&gt;use_src_ip, +<span class="lineNum"> 1109 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> +<span class="lineNum"> 1110 </span> : : fst_port, +<span class="lineNum"> 1111 </span> : : exp_ts, +<span class="lineNum"> 1112 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;target,</span> +<span class="lineNum"> 1113 </span> : : nat_ip, +<span class="lineNum"> 1114 </span> : : nat_port +<span class="lineNum"> 1115 </span> : : ); +<span class="lineNum"> 1116 </span> : : +<span class="lineNum"> 1117 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1118 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> +<span class="lineNum"> 1119 </span> : : fst_proto, fst_port, dnat_chain, exp_ts, now, &quot;DNAT&quot;, +<span class="lineNum"> 1120 </span> :<span class="lineNoCov"> 0 : spadat-&gt;spa_message_remain);</span> +<span class="lineNum"> 1121 </span> : : } +<span class="lineNum"> 1122 </span> :<span class="lineNoCov"> 0 : return;</span> +<a name="1123"><span class="lineNum"> 1123 </span> : : }</a> +<span class="lineNum"> 1124 </span> : : +<span class="lineNum"> 1125 </span> :<span class="lineNoCov"> 0 : static void snat_rule(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 1126 </span> : : const acc_stanza_t * const acc, +<span class="lineNum"> 1127 </span> : : const char * const nat_ip, +<span class="lineNum"> 1128 </span> : : const unsigned int nat_port, +<span class="lineNum"> 1129 </span> : : const unsigned int fst_proto, +<span class="lineNum"> 1130 </span> : : const unsigned int fst_port, +<span class="lineNum"> 1131 </span> : : spa_data_t * const spadat, +<span class="lineNum"> 1132 </span> : : const unsigned int exp_ts, +<span class="lineNum"> 1133 </span> : : const time_t now) +<span class="lineNum"> 1134 </span> : : { +<span class="lineNum"> 1135 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> +<span class="lineNum"> 1136 </span> :<span class="lineNoCov"> 0 : char snat_target[SNAT_TARGET_BUFSIZE] = {0};</span> +<span class="lineNum"> 1137 </span> :<span class="lineNoCov"> 0 : struct fw_chain *snat_chain = NULL;</span> +<span class="lineNum"> 1138 </span> : : +<span class="lineNum"> 1139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> +<span class="lineNum"> 1140 </span> : : &quot;snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d, force_snat: %d, force_snat_ip: %s, force_masq: %d&quot;, +<span class="lineNum"> 1141 </span> :<span class="lineNoCov"> 0 : acc-&gt;forward_all, nat_ip, nat_port, acc-&gt;force_snat,</span> +<span class="lineNum"> 1142 </span> :<span class="lineNoCov"> 0 : (acc-&gt;force_snat_ip == NULL) ? &quot;(NONE)&quot; : acc-&gt;force_snat_ip,</span> +<span class="lineNum"> 1143 </span> :<span class="lineNoCov"> 0 : acc-&gt;force_masquerade);</span> +<span class="lineNum"> 1144 </span> : : +<span class="lineNum"> 1145 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all)</span> +<span class="lineNum"> 1146 </span> : : { +<span class="lineNum"> 1147 </span> : : /* Default to MASQUERADE */ +<span class="lineNum"> 1148 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_MASQUERADE_ACCESS]);</span> +<span class="lineNum"> 1149 </span> : : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, &quot; &quot;); +<span class="lineNum"> 1150 </span> : : +<span class="lineNum"> 1151 </span> : : /* Add SNAT or MASQUERADE rules. +<span class="lineNum"> 1152 </span> : : */ +<span class="lineNum"> 1153 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_snat &amp;&amp; is_valid_ipv4_addr(acc-&gt;force_snat_ip))</span> +<span class="lineNum"> 1154 </span> : : { +<span class="lineNum"> 1155 </span> : : /* Using static SNAT */ +<span class="lineNum"> 1156 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> +<span class="lineNum"> 1157 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> +<span class="lineNum"> 1158 </span> : : &quot;--to-source %s&quot;, acc-&gt;force_snat_ip); +<span class="lineNum"> 1159 </span> : : } +<span class="lineNum"> 1160 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if((opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL)</span> +<span class="lineNum"> 1161 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP]))</span> +<span class="lineNum"> 1162 </span> : : { +<span class="lineNum"> 1163 </span> : : /* Using static SNAT */ +<span class="lineNum"> 1164 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> +<span class="lineNum"> 1165 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> +<span class="lineNum"> 1166 </span> : : &quot;--to-source %s&quot;, opts-&gt;config[CONF_SNAT_TRANSLATE_IP]); +<span class="lineNum"> 1167 </span> : : } +<span class="lineNum"> 1168 </span> : : +<span class="lineNum"> 1169 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); +<span class="lineNum"> 1170 </span> : : +<span class="lineNum"> 1171 </span> :<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_ALL_RULE_ARGS,</span> +<span class="lineNum"> 1172 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;table,</span> +<span class="lineNum"> 1173 </span> : : spadat-&gt;use_src_ip, +<span class="lineNum"> 1174 </span> : : exp_ts, +<span class="lineNum"> 1175 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;target,</span> +<span class="lineNum"> 1176 </span> : : snat_target +<span class="lineNum"> 1177 </span> : : ); +<span class="lineNum"> 1178 </span> : : +<span class="lineNum"> 1179 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1180 </span> : : NULL, ANY_PROTO, ANY_PORT, snat_chain, exp_ts, now, +<span class="lineNum"> 1181 </span> : : &quot;SNAT ALL&quot;, &quot;*/*&quot;); +<span class="lineNum"> 1182 </span> : : } +<span class="lineNum"> 1183 </span> : : else +<span class="lineNum"> 1184 </span> : : { +<span class="lineNum"> 1185 </span> : : /* Add SNAT or MASQUERADE rules. +<span class="lineNum"> 1186 </span> : : */ +<span class="lineNum"> 1187 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_snat &amp;&amp; is_valid_ipv4_addr(acc-&gt;force_snat_ip))</span> +<span class="lineNum"> 1188 </span> : : { +<span class="lineNum"> 1189 </span> : : /* Using static SNAT */ +<span class="lineNum"> 1190 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> +<span class="lineNum"> 1191 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> +<span class="lineNum"> 1192 </span> : : &quot;--to-source %s:%i&quot;, acc-&gt;force_snat_ip, fst_port); +<span class="lineNum"> 1193 </span> : : } +<span class="lineNum"> 1194 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(acc-&gt;force_snat &amp;&amp; acc-&gt;force_masquerade)</span> +<span class="lineNum"> 1195 </span> : : { +<span class="lineNum"> 1196 </span> : : /* Using MASQUERADE */ +<span class="lineNum"> 1197 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_MASQUERADE_ACCESS]);</span> +<span class="lineNum"> 1198 </span> : : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, +<span class="lineNum"> 1199 </span> : : &quot;--to-ports %i&quot;, fst_port); +<span class="lineNum"> 1200 </span> : : } +<span class="lineNum"> 1201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if((opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL)</span> +<span class="lineNum"> 1202 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP]))</span> +<span class="lineNum"> 1203 </span> : : { +<span class="lineNum"> 1204 </span> : : /* Using static SNAT */ +<span class="lineNum"> 1205 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> +<span class="lineNum"> 1206 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> +<span class="lineNum"> 1207 </span> : : &quot;--to-source %s:%i&quot;, opts-&gt;config[CONF_SNAT_TRANSLATE_IP], +<span class="lineNum"> 1208 </span> : : fst_port); +<span class="lineNum"> 1209 </span> : : } +<span class="lineNum"> 1210 </span> : : else +<span class="lineNum"> 1211 </span> : : { +<span class="lineNum"> 1212 </span> : : /* Using MASQUERADE */ +<span class="lineNum"> 1213 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_MASQUERADE_ACCESS]);</span> +<span class="lineNum"> 1214 </span> : : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, +<span class="lineNum"> 1215 </span> : : &quot;--to-ports %i&quot;, fst_port); +<span class="lineNum"> 1216 </span> : : } +<span class="lineNum"> 1217 </span> : : +<span class="lineNum"> 1218 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); +<span class="lineNum"> 1219 </span> : : +<span class="lineNum"> 1220 </span> : : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_RULE_ARGS, +<span class="lineNum"> 1221 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;table,</span> +<span class="lineNum"> 1222 </span> : : fst_proto, +<span class="lineNum"> 1223 </span> : : nat_ip, +<span class="lineNum"> 1224 </span> : : nat_port, +<span class="lineNum"> 1225 </span> : : exp_ts, +<span class="lineNum"> 1226 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;target,</span> +<span class="lineNum"> 1227 </span> : : snat_target +<span class="lineNum"> 1228 </span> : : ); +<span class="lineNum"> 1229 </span> : : +<span class="lineNum"> 1230 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1231 </span> : : NULL, fst_proto, nat_port, snat_chain, exp_ts, now, &quot;SNAT&quot;, +<span class="lineNum"> 1232 </span> :<span class="lineNoCov"> 0 : spadat-&gt;spa_message_remain);</span> +<span class="lineNum"> 1233 </span> : : } +<span class="lineNum"> 1234 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 1235 </span> : : } +<span class="lineNum"> 1236 </span> : : +<span class="lineNum"> 1237 </span> : : /****************************************************************************/ +<span class="lineNum"> 1238 </span> : : +<span class="lineNum"> 1239 </span> : : /* Rule Processing - Create an access request... +<a name="1240"><span class="lineNum"> 1240 </span> : : */</a> +<span class="lineNum"> 1241 </span> : : int +<span class="lineNum"> 1242 </span> :<span class="lineNoCov"> 0 : process_spa_request(const fko_srv_options_t * const opts,</span> +<span class="lineNum"> 1243 </span> : : const acc_stanza_t * const acc, spa_data_t * const spadat) +<span class="lineNum"> 1244 </span> : : { +<span class="lineNum"> 1245 </span> :<span class="lineNoCov"> 0 : char nat_ip[MAX_IPV4_STR_LEN] = {0};</span> +<span class="lineNum"> 1246 </span> :<span class="lineNoCov"> 0 : unsigned int nat_port = 0;</span> +<span class="lineNum"> 1247 </span> : : unsigned int fst_proto; +<span class="lineNum"> 1248 </span> : : unsigned int fst_port; +<span class="lineNum"> 1249 </span> : : +<span class="lineNum"> 1250 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const in_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_INPUT_ACCESS]);</span> +<span class="lineNum"> 1251 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const out_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_OUTPUT_ACCESS]);</span> +<span class="lineNum"> 1252 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const fwd_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_FORWARD_ACCESS]);</span> +<span class="lineNum"> 1253 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const dnat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_DNAT_ACCESS]);</span> +<span class="lineNum"> 1254 </span> : : +<span class="lineNum"> 1255 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *port_list = NULL;</span> +<span class="lineNum"> 1256 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *ple = NULL;</span> +<span class="lineNum"> 1257 </span> : : +<span class="lineNum"> 1258 </span> :<span class="lineNoCov"> 0 : char *ndx = NULL;</span> +<span class="lineNum"> 1259 </span> :<span class="lineNoCov"> 0 : int res = 0, is_err;</span> +<span class="lineNum"> 1260 </span> : : time_t now; +<span class="lineNum"> 1261 </span> : : unsigned int exp_ts; +<span class="lineNum"> 1262 </span> : : +<span class="lineNum"> 1263 </span> : : /* Parse and expand our access message. +<span class="lineNum"> 1264 </span> : : */ +<span class="lineNum"> 1265 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_port_list(&amp;port_list, spadat-&gt;spa_message_remain) != 1)</span> +<span class="lineNum"> 1266 </span> : : { +<span class="lineNum"> 1267 </span> : : /* technically we would already have exited with an error if there were +<span class="lineNum"> 1268 </span> : : * any memory allocation errors (see the add_port_list() function), but +<span class="lineNum"> 1269 </span> : : * for completeness... +<span class="lineNum"> 1270 </span> : : */ +<span class="lineNum"> 1271 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> +<span class="lineNum"> 1272 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 1273 </span> : : } +<span class="lineNum"> 1274 </span> : : +<span class="lineNum"> 1275 </span> : : /* Start at the top of the proto-port list... +<span class="lineNum"> 1276 </span> : : */ +<span class="lineNum"> 1277 </span> :<span class="lineNoCov"> 0 : ple = port_list;</span> +<span class="lineNum"> 1278 </span> : : +<span class="lineNum"> 1279 </span> : : /* Remember the first proto/port combo in case we need them +<span class="lineNum"> 1280 </span> : : * for NAT access requests. +<span class="lineNum"> 1281 </span> : : */ +<span class="lineNum"> 1282 </span> :<span class="lineNoCov"> 0 : fst_proto = ple-&gt;proto;</span> +<span class="lineNum"> 1283 </span> :<span class="lineNoCov"> 0 : fst_port = ple-&gt;port;</span> +<span class="lineNum"> 1284 </span> : : +<span class="lineNum"> 1285 </span> : : /* Set our expire time value. +<span class="lineNum"> 1286 </span> : : */ +<span class="lineNum"> 1287 </span> :<span class="lineNoCov"> 0 : time(&amp;now);</span> +<span class="lineNum"> 1288 </span> :<span class="lineNoCov"> 0 : exp_ts = now + spadat-&gt;fw_access_timeout;</span> +<span class="lineNum"> 1289 </span> : : +<span class="lineNum"> 1290 </span> : : /* deal with SPA packets that themselves request a NAT operation +<span class="lineNum"> 1291 </span> : : */ +<span class="lineNum"> 1292 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat-&gt;message_type == FKO_LOCAL_NAT_ACCESS_MSG</span> +<span class="lineNum"> 1293 </span> : : || spadat-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG +<span class="lineNum"> 1294 </span> :<span class="lineNoCov"> 0 : || spadat-&gt;message_type == FKO_NAT_ACCESS_MSG</span> +<span class="lineNum"> 1295 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || spadat-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG</span> +<span class="lineNum"> 1296 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || acc-&gt;force_nat)</span> +<span class="lineNum"> 1297 </span> : : { +<span class="lineNum"> 1298 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_nat)</span> +<span class="lineNum"> 1299 </span> : : { +<span class="lineNum"> 1300 </span> :<span class="lineNoCov"> 0 : strlcpy(nat_ip, acc-&gt;force_nat_ip, sizeof(nat_ip));</span> +<span class="lineNum"> 1301 </span> :<span class="lineNoCov"> 0 : nat_port = acc-&gt;force_nat_port;</span> +<span class="lineNum"> 1302 </span> : : } +<span class="lineNum"> 1303 </span> : : else +<span class="lineNum"> 1304 </span> : : { +<span class="lineNum"> 1305 </span> :<span class="lineNoCov"> 0 : ndx = strchr(spadat-&gt;nat_access, ',');</span> +<span class="lineNum"> 1306 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx != NULL)</span> +<span class="lineNum"> 1307 </span> : : { +<span class="lineNum"> 1308 </span> :<span class="lineNoCov"> 0 : strlcpy(nat_ip, spadat-&gt;nat_access, (ndx-spadat-&gt;nat_access)+1);</span> +<span class="lineNum"> 1309 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_valid_ipv4_addr(nat_ip))</span> +<span class="lineNum"> 1310 </span> : : { +<span class="lineNum"> 1311 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Invalid NAT IP in SPA message&quot;);</span> +<span class="lineNum"> 1312 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> +<span class="lineNum"> 1313 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 1314 </span> : : } +<span class="lineNum"> 1315 </span> : : +<span class="lineNum"> 1316 </span> :<span class="lineNoCov"> 0 : nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT,</span> +<span class="lineNum"> 1317 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 1318 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 1319 </span> : : { +<span class="lineNum"> 1320 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Invalid NAT port in SPA message&quot;);</span> +<span class="lineNum"> 1321 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> +<span class="lineNum"> 1322 </span> :<span class="lineNoCov"> 0 : res = is_err;</span> +<span class="lineNum"> 1323 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 1324 </span> : : } +<span class="lineNum"> 1325 </span> : : } +<span class="lineNum"> 1326 </span> : : } +<span class="lineNum"> 1327 </span> : : +<span class="lineNum"> 1328 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat-&gt;message_type == FKO_LOCAL_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 1329 </span> : : { +<span class="lineNum"> 1330 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1331 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> +<span class="lineNum"> 1332 </span> : : fst_proto, nat_port, in_chain, exp_ts, now, &quot;local NAT&quot;, +<span class="lineNum"> 1333 </span> : : spadat-&gt;spa_message_remain); +<span class="lineNum"> 1334 </span> : : } +<span class="lineNum"> 1335 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(strlen(fwd_chain-&gt;to_chain))</span> +<span class="lineNum"> 1336 </span> : : { +<span class="lineNum"> 1337 </span> : : /* FORWARD access rule +<span class="lineNum"> 1338 </span> : : */ +<span class="lineNum"> 1339 </span> :<span class="lineNoCov"> 0 : forward_access_rule(opts, acc, fwd_chain, nat_ip,</span> +<span class="lineNum"> 1340 </span> : : nat_port, fst_proto, fst_port, spadat, exp_ts, now); +<span class="lineNum"> 1341 </span> : : } +<span class="lineNum"> 1342 </span> : : +<span class="lineNum"> 1343 </span> : : /* DNAT rule +<span class="lineNum"> 1344 </span> : : */ +<span class="lineNum"> 1345 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(dnat_chain-&gt;to_chain) &amp;&amp; !acc-&gt;disable_dnat)</span> +<span class="lineNum"> 1346 </span> :<span class="lineNoCov"> 0 : dnat_rule(opts, acc, dnat_chain, nat_ip,</span> +<span class="lineNum"> 1347 </span> : : nat_port, fst_proto, fst_port, spadat, exp_ts, now); +<span class="lineNum"> 1348 </span> : : +<span class="lineNum"> 1349 </span> : : /* SNAT rule +<span class="lineNum"> 1350 </span> : : */ +<span class="lineNum"> 1351 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_snat || strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 1352 </span> :<span class="lineNoCov"> 0 : snat_rule(opts, acc, nat_ip, nat_port,</span> +<span class="lineNum"> 1353 </span> : : fst_proto, fst_port, spadat, exp_ts, now); +<span class="lineNum"> 1354 </span> : : } +<span class="lineNum"> 1355 </span> : : else /* Non-NAT request - this is the typical case. */ +<span class="lineNum"> 1356 </span> : : { +<span class="lineNum"> 1357 </span> : : /* Create an access command for each proto/port for the source ip. +<span class="lineNum"> 1358 </span> : : */ +<span class="lineNum"> 1359 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(ple != NULL)</span> +<span class="lineNum"> 1360 </span> : : { +<span class="lineNum"> 1361 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1362 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> +<span class="lineNum"> 1363 </span> : : ple-&gt;proto, ple-&gt;port, in_chain, exp_ts, now, &quot;access&quot;, +<span class="lineNum"> 1364 </span> : : spadat-&gt;spa_message_remain); +<span class="lineNum"> 1365 </span> : : +<span class="lineNum"> 1366 </span> : : /* We need to make a corresponding OUTPUT rule if out_chain target +<span class="lineNum"> 1367 </span> : : * is not NULL. +<span class="lineNum"> 1368 </span> : : */ +<span class="lineNum"> 1369 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(out_chain-&gt;to_chain))</span> +<span class="lineNum"> 1370 </span> : : { +<span class="lineNum"> 1371 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_OUT_RULE_ARGS, spadat-&gt;use_src_ip,</span> +<span class="lineNum"> 1372 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> +<span class="lineNum"> 1373 </span> : : ple-&gt;proto, ple-&gt;port, out_chain, exp_ts, now, &quot;OUTPUT&quot;, +<span class="lineNum"> 1374 </span> : : spadat-&gt;spa_message_remain); +<span class="lineNum"> 1375 </span> : : } +<span class="lineNum"> 1376 </span> :<span class="lineNoCov"> 0 : ple = ple-&gt;next;</span> +<span class="lineNum"> 1377 </span> : : } +<span class="lineNum"> 1378 </span> : : } +<span class="lineNum"> 1379 </span> : : +<span class="lineNum"> 1380 </span> : : /* Done with the port list for access rules. +<span class="lineNum"> 1381 </span> : : */ +<span class="lineNum"> 1382 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> +<span class="lineNum"> 1383 </span> : : +<span class="lineNum"> 1384 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 1385 </span> : : } +<span class="lineNum"> 1386 </span> : : +<span class="lineNum"> 1387 </span> : : /* Iterate over the configure firewall access chains and purge expired +<span class="lineNum"> 1388 </span> : : * firewall rules. +<a name="1389"><span class="lineNum"> 1389 </span> : : */</a> +<span class="lineNum"> 1390 </span> : : void +<span class="lineNum"> 1391 </span> :<span class="lineNoCov"> 0 : check_firewall_rules(const fko_srv_options_t * const opts)</span> +<span class="lineNum"> 1392 </span> : : { +<span class="lineNum"> 1393 </span> :<span class="lineNoCov"> 0 : char exp_str[12] = {0};</span> +<span class="lineNum"> 1394 </span> :<span class="lineNoCov"> 0 : char rule_num_str[6] = {0};</span> +<span class="lineNum"> 1395 </span> : : char *ndx, *rn_start, *rn_end, *tmp_mark; +<span class="lineNum"> 1396 </span> : : +<span class="lineNum"> 1397 </span> : : int i, res, rn_offset, rule_num, is_err; +<span class="lineNum"> 1398 </span> :<span class="lineNoCov"> 0 : time_t now, rule_exp, min_exp = 0;</span> +<span class="lineNum"> 1399 </span> : : +<span class="lineNum"> 1400 </span> :<span class="lineNoCov"> 0 : struct fw_chain *ch = opts-&gt;fw_config-&gt;chain;</span> +<span class="lineNum"> 1401 </span> : : +<span class="lineNum"> 1402 </span> :<span class="lineNoCov"> 0 : time(&amp;now);</span> +<span class="lineNum"> 1403 </span> : : +<span class="lineNum"> 1404 </span> : : /* Iterate over each chain and look for active rules to delete. +<span class="lineNum"> 1405 </span> : : */ +<span class="lineNum"> 1406 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> +<span class="lineNum"> 1407 </span> : : { +<span class="lineNum"> 1408 </span> : : /* If there are no active rules or we have not yet +<span class="lineNum"> 1409 </span> : : * reached our expected next expire time, continue. +<span class="lineNum"> 1410 </span> : : */ +<span class="lineNum"> 1411 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ch[i].active_rules == 0 || ch[i].next_expire &gt; now)</span> +<span class="lineNum"> 1412 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 1413 </span> : : +<span class="lineNum"> 1414 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 1415 </span> : : +<span class="lineNum"> 1416 </span> :<span class="lineNoCov"> 0 : rn_offset = 0;</span> +<span class="lineNum"> 1417 </span> : : +<span class="lineNum"> 1418 </span> : : /* There should be a rule to delete. Get the current list of +<span class="lineNum"> 1419 </span> : : * rules for this chain and delete the ones that are expired. +<span class="lineNum"> 1420 </span> : : */ +<span class="lineNum"> 1421 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, +<span class="lineNum"> 1422 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 1423 </span> :<span class="lineNoCov"> 0 : ch[i].table,</span> +<span class="lineNum"> 1424 </span> :<span class="lineNoCov"> 0 : ch[i].to_chain</span> +<span class="lineNum"> 1425 </span> : : ); +<span class="lineNum"> 1426 </span> : : +<span class="lineNum"> 1427 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE,</span> +<span class="lineNum"> 1428 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 1429 </span> :<span class="lineNoCov"> 0 : chop_newline(cmd_out);</span> +<span class="lineNum"> 1430 </span> : : +<span class="lineNum"> 1431 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)&quot;,</span> +<span class="lineNum"> 1432 </span> : : cmd_buf, res, cmd_out); +<span class="lineNum"> 1433 </span> : : +<span class="lineNum"> 1434 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 1435 </span> : : { +<span class="lineNum"> 1436 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, cmd_out);</span> +<span class="lineNum"> 1437 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 1438 </span> : : } +<span class="lineNum"> 1439 </span> : : +<span class="lineNum"> 1440 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;RES=%i, CMD_BUF: %s\nRULES LIST: %s&quot;, res, cmd_buf, cmd_out);</span> +<span class="lineNum"> 1441 </span> : : +<span class="lineNum"> 1442 </span> :<span class="lineNoCov"> 0 : ndx = strstr(cmd_out, EXPIRE_COMMENT_PREFIX);</span> +<span class="lineNum"> 1443 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> +<span class="lineNum"> 1444 </span> : : { +<span class="lineNum"> 1445 </span> : : /* we did not find an expected rule. +<span class="lineNum"> 1446 </span> : : */ +<span class="lineNum"> 1447 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1448 </span> : : &quot;Did not find expire comment in rules list %i&quot;, i); +<span class="lineNum"> 1449 </span> : : +<span class="lineNum"> 1450 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> +<span class="lineNum"> 1451 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> +<span class="lineNum"> 1452 </span> : : +<span class="lineNum"> 1453 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 1454 </span> : : } +<span class="lineNum"> 1455 </span> : : +<span class="lineNum"> 1456 </span> : : /* walk the list and process rules as needed. +<span class="lineNum"> 1457 </span> : : */ +<span class="lineNum"> 1458 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (ndx != NULL) {</span> +<span class="lineNum"> 1459 </span> : : /* Jump forward and extract the timestamp +<span class="lineNum"> 1460 </span> : : */ +<span class="lineNum"> 1461 </span> :<span class="lineNoCov"> 0 : ndx += strlen(EXPIRE_COMMENT_PREFIX);</span> +<span class="lineNum"> 1462 </span> : : +<span class="lineNum"> 1463 </span> : : /* remember this spot for when we look for the next +<span class="lineNum"> 1464 </span> : : * rule. +<span class="lineNum"> 1465 </span> : : */ +<span class="lineNum"> 1466 </span> :<span class="lineNoCov"> 0 : tmp_mark = ndx;</span> +<span class="lineNum"> 1467 </span> : : +<span class="lineNum"> 1468 </span> :<span class="lineNoCov"> 0 : strlcpy(exp_str, ndx, sizeof(exp_str));</span> +<span class="lineNum"> 1469 </span> :<span class="lineNoCov"> 0 : rule_exp = (time_t)atoll(exp_str);</span> +<span class="lineNum"> 1470 </span> : : +<span class="lineNum"> 1471 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exp &lt;= now)</span> +<span class="lineNum"> 1472 </span> : : { +<span class="lineNum"> 1473 </span> : : /* Backtrack and get the rule number and delete it. +<span class="lineNum"> 1474 </span> : : */ +<span class="lineNum"> 1475 </span> : : rn_start = ndx; +<span class="lineNum"> 1476 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(--rn_start &gt; cmd_out)</span> +<span class="lineNum"> 1477 </span> : : { +<span class="lineNum"> 1478 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*rn_start == '\n')</span> +<span class="lineNum"> 1479 </span> : : break; +<span class="lineNum"> 1480 </span> : : } +<span class="lineNum"> 1481 </span> : : +<span class="lineNum"> 1482 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*rn_start != '\n')</span> +<span class="lineNum"> 1483 </span> : : { +<span class="lineNum"> 1484 </span> : : /* This should not happen. But if it does, complain, +<span class="lineNum"> 1485 </span> : : * decrement the active rule value, and go on. +<span class="lineNum"> 1486 </span> : : */ +<span class="lineNum"> 1487 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1488 </span> : : &quot;Rule parse error while finding rule line start in chain %i&quot;, i); +<span class="lineNum"> 1489 </span> : : +<span class="lineNum"> 1490 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> +<span class="lineNum"> 1491 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> +<span class="lineNum"> 1492 </span> : : +<span class="lineNum"> 1493 </span> : : break; +<span class="lineNum"> 1494 </span> : : } +<span class="lineNum"> 1495 </span> :<span class="lineNoCov"> 0 : rn_start++;</span> +<span class="lineNum"> 1496 </span> : : +<span class="lineNum"> 1497 </span> :<span class="lineNoCov"> 0 : rn_end = strchr(rn_start, ' ');</span> +<span class="lineNum"> 1498 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rn_end == NULL)</span> +<span class="lineNum"> 1499 </span> : : { +<span class="lineNum"> 1500 </span> : : /* This should not happen. But if it does, complain, +<span class="lineNum"> 1501 </span> : : * decrement the active rule value, and go on. +<span class="lineNum"> 1502 </span> : : */ +<span class="lineNum"> 1503 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1504 </span> : : &quot;Rule parse error while finding rule number in chain %i&quot;, i); +<span class="lineNum"> 1505 </span> : : +<span class="lineNum"> 1506 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> +<span class="lineNum"> 1507 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> +<span class="lineNum"> 1508 </span> : : +<span class="lineNum"> 1509 </span> : : break; +<span class="lineNum"> 1510 </span> : : } +<span class="lineNum"> 1511 </span> : : +<span class="lineNum"> 1512 </span> :<span class="lineNoCov"> 0 : strlcpy(rule_num_str, rn_start, (rn_end - rn_start)+1);</span> +<span class="lineNum"> 1513 </span> : : +<span class="lineNum"> 1514 </span> :<span class="lineNoCov"> 0 : rule_num = strtol_wrapper(rule_num_str, rn_offset, RCHK_MAX_FIREWD_RULE_NUM,</span> +<span class="lineNum"> 1515 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 1516 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 1517 </span> : : { +<span class="lineNum"> 1518 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 1519 </span> : : &quot;Rule parse error while finding rule number in chain %i&quot;, i); +<span class="lineNum"> 1520 </span> : : +<span class="lineNum"> 1521 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> +<span class="lineNum"> 1522 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> +<span class="lineNum"> 1523 </span> : : +<span class="lineNum"> 1524 </span> : : break; +<span class="lineNum"> 1525 </span> : : } +<span class="lineNum"> 1526 </span> : : +<span class="lineNum"> 1527 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> +<span class="lineNum"> 1528 </span> : : +<span class="lineNum"> 1529 </span> :<span class="lineNoCov"> 0 : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_RULE_ARGS,</span> +<span class="lineNum"> 1530 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> +<span class="lineNum"> 1531 </span> : : ch[i].table, +<span class="lineNum"> 1532 </span> : : ch[i].to_chain, +<span class="lineNum"> 1533 </span> : : rule_num - rn_offset +<span class="lineNum"> 1534 </span> : : ); +<span class="lineNum"> 1535 </span> : : +<span class="lineNum"> 1536 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> +<span class="lineNum"> 1537 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 1538 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> +<span class="lineNum"> 1539 </span> : : +<span class="lineNum"> 1540 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;check_firewall_rules() CMD: '%s' (res: %d, err: %s)&quot;,</span> +<span class="lineNum"> 1541 </span> : : cmd_buf, res, err_buf); +<span class="lineNum"> 1542 </span> : : +<span class="lineNum"> 1543 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> +<span class="lineNum"> 1544 </span> : : { +<span class="lineNum"> 1545 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Removed rule %s from %s with expire time of %u&quot;,</span> +<span class="lineNum"> 1546 </span> : : rule_num_str, ch[i].to_chain, rule_exp +<span class="lineNum"> 1547 </span> : : ); +<span class="lineNum"> 1548 </span> : : +<span class="lineNum"> 1549 </span> :<span class="lineNoCov"> 0 : rn_offset++;</span> +<span class="lineNum"> 1550 </span> : : +<span class="lineNum"> 1551 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> +<span class="lineNum"> 1552 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> +<span class="lineNum"> 1553 </span> : : } +<span class="lineNum"> 1554 </span> : : else +<span class="lineNum"> 1555 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> +<span class="lineNum"> 1556 </span> : : +<span class="lineNum"> 1557 </span> : : } +<span class="lineNum"> 1558 </span> : : else +<span class="lineNum"> 1559 </span> : : { +<span class="lineNum"> 1560 </span> : : /* Track the minimum future rule expire time. +<span class="lineNum"> 1561 </span> : : */ +<span class="lineNum"> 1562 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exp &gt; now)</span> +<span class="lineNum"> 1563 </span> :<span class="lineNoCov"> 0 : min_exp = (min_exp &lt; rule_exp) ? min_exp : rule_exp;</span> +<span class="lineNum"> 1564 </span> : : } +<span class="lineNum"> 1565 </span> : : +<span class="lineNum"> 1566 </span> : : /* Push our tracking index forward beyond (just processed) _exp_ +<span class="lineNum"> 1567 </span> : : * string so we can continue to the next rule in the list. +<span class="lineNum"> 1568 </span> : : */ +<span class="lineNum"> 1569 </span> :<span class="lineNoCov"> 0 : ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX);</span> +<span class="lineNum"> 1570 </span> : : } +<span class="lineNum"> 1571 </span> : : +<span class="lineNum"> 1572 </span> : : /* Set the next pending expire time accordingly. 0 if there are no +<span class="lineNum"> 1573 </span> : : * more rules, or whatever the next expected (min_exp) time will be. +<span class="lineNum"> 1574 </span> : : */ +<span class="lineNum"> 1575 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ch[i].active_rules &lt; 1)</span> +<span class="lineNum"> 1576 </span> :<span class="lineNoCov"> 0 : ch[i].next_expire = 0;</span> +<span class="lineNum"> 1577 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(min_exp)</span> +<span class="lineNum"> 1578 </span> :<span class="lineNoCov"> 0 : ch[i].next_expire = min_exp;</span> +<span class="lineNum"> 1579 </span> : : } +<span class="lineNum"> 1580 </span> :<span class="lineNoCov"> 0 : }</span> +<a name="1581"><span class="lineNum"> 1581 </span> : : </a> +<span class="lineNum"> 1582 </span> : : int +<span class="lineNum"> 1583 </span> :<span class="lineCov"> 4770 : validate_firewd_chain_conf(const char * const chain_str)</span> +<span class="lineNum"> 1584 </span> : : { +<span class="lineNum"> 1585 </span> :<span class="lineCov"> 4770 : int j, rv = 1;</span> +<span class="lineNum"> 1586 </span> :<span class="lineCov"> 4770 : const char *ndx = chain_str;</span> +<span class="lineNum"> 1587 </span> : : +<span class="lineNum"> 1588 </span> :<span class="lineCov"> 4770 : j = 1;</span> +<span class="lineNum"> 1589 </span> [<span class="branchCov" title="Branch 0 was taken 219420 times"> + </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 224190 : while(*ndx != '\0')</span> +<span class="lineNum"> 1590 </span> : : { +<span class="lineNum"> 1591 </span> [<span class="branchCov" title="Branch 0 was taken 23850 times"> + </span><span class="branchCov" title="Branch 1 was taken 195570 times"> + </span>]:<span class="lineCov"> 219420 : if(*ndx == ',')</span> +<span class="lineNum"> 1592 </span> :<span class="lineCov"> 23850 : j++;</span> +<span class="lineNum"> 1593 </span> : : +<span class="lineNum"> 1594 </span> [<span class="branchCov" title="Branch 0 was taken 195570 times"> + </span><span class="branchCov" title="Branch 1 was taken 23850 times"> + </span>]:<span class="lineCov"> 219420 : if(*ndx != '\0'</span> +<span class="lineNum"> 1595 </span> :<span class="lineCov"> 219420 : &amp;&amp; *ndx != ' '</span> +<span class="lineNum"> 1596 </span> [<span class="branchCov" title="Branch 0 was taken 171720 times"> + </span><span class="branchCov" title="Branch 1 was taken 23850 times"> + </span>]:<span class="lineCov"> 195570 : &amp;&amp; *ndx != ','</span> +<span class="lineNum"> 1597 </span> [<span class="branchCov" title="Branch 0 was taken 166950 times"> + </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 171720 : &amp;&amp; *ndx != '_'</span> +<span class="lineNum"> 1598 </span> [<span class="branchCov" title="Branch 1 was taken 166950 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 166950 : &amp;&amp; isalnum(*ndx) == 0)</span> +<span class="lineNum"> 1599 </span> : : { +<span class="lineNum"> 1600 </span> : : rv = 0; +<span class="lineNum"> 1601 </span> : : break; +<span class="lineNum"> 1602 </span> : : } +<span class="lineNum"> 1603 </span> :<span class="lineCov"> 219420 : ndx++;</span> +<span class="lineNum"> 1604 </span> : : } +<span class="lineNum"> 1605 </span> : : +<span class="lineNum"> 1606 </span> : : /* Sanity check - j should be the number of chain fields +<span class="lineNum"> 1607 </span> : : * (excluding the type). +<span class="lineNum"> 1608 </span> : : */ +<span class="lineNum"> 1609 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 4770 : if(j != FW_NUM_CHAIN_FIELDS)</span> +<span class="lineNum"> 1610 </span> :<span class="lineNoCov"> 0 : rv = 0;</span> +<span class="lineNum"> 1611 </span> : : +<span class="lineNum"> 1612 </span> :<span class="lineCov"> 4770 : return rv;</span> +<span class="lineNum"> 1613 </span> : : } +<span class="lineNum"> 1614 </span> : : +<span class="lineNum"> 1615 </span> : : #endif /* FIREWALL_FIREWALLD */ +<span class="lineNum"> 1616 </span> : : +<span class="lineNum"> 1617 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html new file mode 100644 index 00000000..e19110a1 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html @@ -0,0 +1,133 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd.c<span style="font-size: 80%;"> (<a href="fwknopd.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">80</td> + <td class="headerCovTableEntry">275</td> + <td class="headerCovTableEntryLo">29.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">13</td> + <td class="headerCovTableEntryLo">53.8 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">36</td> + <td class="headerCovTableEntry">164</td> + <td class="headerCovTableEntryLo">22.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fwknopd.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#74">main</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#654">check_dir_path</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#274">set_locale.isra.0</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#866">write_pid_file</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#948">get_running_pid</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#447">setup_pid</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#409">init_digest_cache</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#522">status_fwknopd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#538">handle_signals</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#740">make_dir_path</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#496">restart_fwknopd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#586">stop_fwknopd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#809">daemonize_process</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html new file mode 100644 index 00000000..18292af7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html @@ -0,0 +1,133 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd.c<span style="font-size: 80%;"> (<a href="fwknopd.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">80</td> + <td class="headerCovTableEntry">275</td> + <td class="headerCovTableEntryLo">29.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">13</td> + <td class="headerCovTableEntryLo">53.8 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">36</td> + <td class="headerCovTableEntry">164</td> + <td class="headerCovTableEntryLo">22.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fwknopd.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#654">check_dir_path</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#809">daemonize_process</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#948">get_running_pid</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#538">handle_signals</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#409">init_digest_cache</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#74">main</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#740">make_dir_path</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#496">restart_fwknopd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#274">set_locale.isra.0</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#447">setup_pid</a></td> + <td class="coverFnHi">249</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#522">status_fwknopd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#586">stop_fwknopd</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd.c.gcov.html#866">write_pid_file</a></td> + <td class="coverFnHi">249</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html new file mode 100644 index 00000000..60a41355 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html @@ -0,0 +1,1102 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd.c<span style="font-size: 80%;"> (source / <a href="fwknopd.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">80</td> + <td class="headerCovTableEntry">275</td> + <td class="headerCovTableEntryLo">29.1 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntry">13</td> + <td class="headerCovTableEntryLo">53.8 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">36</td> + <td class="headerCovTableEntry">164</td> + <td class="headerCovTableEntryLo">22.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: fwknopd.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: An implementation of an fwknop server. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fwknopd.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;access.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;config_init.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 36 </span> : : #include &quot;fw_util.h&quot; +<span class="lineNum"> 37 </span> : : #include &quot;sig_handler.h&quot; +<span class="lineNum"> 38 </span> : : #include &quot;replay_cache.h&quot; +<span class="lineNum"> 39 </span> : : #include &quot;tcp_server.h&quot; +<span class="lineNum"> 40 </span> : : #include &quot;udp_server.h&quot; +<span class="lineNum"> 41 </span> : : +<span class="lineNum"> 42 </span> : : #if USE_LIBPCAP +<span class="lineNum"> 43 </span> : : #include &quot;pcap_capture.h&quot; +<span class="lineNum"> 44 </span> : : #endif +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : /* Prototypes +<span class="lineNum"> 47 </span> : : */ +<span class="lineNum"> 48 </span> : : static int check_dir_path(const char * const path, +<span class="lineNum"> 49 </span> : : const char * const path_name, const unsigned char use_basename); +<span class="lineNum"> 50 </span> : : static int make_dir_path(const char * const path); +<span class="lineNum"> 51 </span> : : static void daemonize_process(fko_srv_options_t * const opts); +<span class="lineNum"> 52 </span> : : static int stop_fwknopd(fko_srv_options_t * const opts); +<span class="lineNum"> 53 </span> : : static int status_fwknopd(fko_srv_options_t * const opts); +<span class="lineNum"> 54 </span> : : static int restart_fwknopd(fko_srv_options_t * const opts); +<span class="lineNum"> 55 </span> : : static int write_pid_file(fko_srv_options_t *opts); +<span class="lineNum"> 56 </span> : : static int handle_signals(fko_srv_options_t *opts); +<span class="lineNum"> 57 </span> : : static void setup_pid(fko_srv_options_t *opts); +<span class="lineNum"> 58 </span> : : static void init_digest_cache(fko_srv_options_t *opts); +<span class="lineNum"> 59 </span> : : static void set_locale(fko_srv_options_t *opts); +<span class="lineNum"> 60 </span> : : static pid_t get_running_pid(const fko_srv_options_t *opts); +<span class="lineNum"> 61 </span> : : #if AFL_FUZZING +<span class="lineNum"> 62 </span> : : static void afl_enc_pkt_from_file(fko_srv_options_t *opts); +<span class="lineNum"> 63 </span> : : static void afl_pkt_from_stdin(fko_srv_options_t *opts); +<span class="lineNum"> 64 </span> : : #endif +<span class="lineNum"> 65 </span> : : +<span class="lineNum"> 66 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 67 </span> : : static void enable_fault_injections(fko_srv_options_t * const opts); +<span class="lineNum"> 68 </span> : : #endif +<span class="lineNum"> 69 </span> : : +<span class="lineNum"> 70 </span> : : #if AFL_FUZZING +<span class="lineNum"> 71 </span> : : #define AFL_MAX_PKT_SIZE 1024 +<span class="lineNum"> 72 </span> : : #define AFL_DUMP_CTX_SIZE 4096 +<span class="lineNum"> 73 </span> : : #endif +<a name="74"><span class="lineNum"> 74 </span> : : </a> +<span class="lineNum"> 75 </span> : : int +<span class="lineNum"> 76 </span> :<span class="lineCov"> 3628 : main(int argc, char **argv)</span> +<span class="lineNum"> 77 </span> : : { +<span class="lineNum"> 78 </span> : : fko_srv_options_t opts; +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> : : while(1) +<span class="lineNum"> 81 </span> : : { +<span class="lineNum"> 82 </span> : : /* Handle command line +<span class="lineNum"> 83 </span> : : */ +<span class="lineNum"> 84 </span> :<span class="lineCov"> 1814 : config_init(&amp;opts, argc, argv);</span> +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 87 </span> : : /* Set any fault injection points early +<span class="lineNum"> 88 </span> : : */ +<span class="lineNum"> 89 </span> : : enable_fault_injections(&amp;opts); +<span class="lineNum"> 90 </span> : : #endif +<span class="lineNum"> 91 </span> : : +<span class="lineNum"> 92 </span> : : /* Process any options that do their thing and exit. +<span class="lineNum"> 93 </span> : : */ +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> : : /* Kill the currently running fwknopd process? +<span class="lineNum"> 96 </span> : : */ +<span class="lineNum"> 97 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.kill == 1)</span> +<span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, stop_fwknopd(&amp;opts));</span> +<span class="lineNum"> 99 </span> : : +<span class="lineNum"> 100 </span> : : /* Status of the currently running fwknopd process? +<span class="lineNum"> 101 </span> : : */ +<span class="lineNum"> 102 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.status == 1)</span> +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, status_fwknopd(&amp;opts));</span> +<span class="lineNum"> 104 </span> : : +<span class="lineNum"> 105 </span> : : /* Restart the currently running fwknopd process? +<span class="lineNum"> 106 </span> : : */ +<span class="lineNum"> 107 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.restart == 1)</span> +<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, restart_fwknopd(&amp;opts));</span> +<span class="lineNum"> 109 </span> : : +<span class="lineNum"> 110 </span> : : /* Initialize logging. +<span class="lineNum"> 111 </span> : : */ +<span class="lineNum"> 112 </span> :<span class="lineCov"> 795 : init_logging(&amp;opts);</span> +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : /* Update the verbosity level for the log module */ +<span class="lineNum"> 115 </span> :<span class="lineCov"> 795 : log_set_verbosity(LOG_DEFAULT_VERBOSITY + opts.verbose);</span> +<span class="lineNum"> 116 </span> : : +<span class="lineNum"> 117 </span> : : #if HAVE_LOCALE_H +<span class="lineNum"> 118 </span> : : /* Set the locale if specified. +<span class="lineNum"> 119 </span> : : */ +<span class="lineNum"> 120 </span> :<span class="lineCov"> 795 : set_locale(&amp;opts);</span> +<span class="lineNum"> 121 </span> : : #endif +<span class="lineNum"> 122 </span> : : +<span class="lineNum"> 123 </span> : : /* Make sure we have a valid run dir and path leading to digest file +<span class="lineNum"> 124 </span> : : * in case it configured to be somewhere other than the run dir. +<span class="lineNum"> 125 </span> : : */ +<span class="lineNum"> 126 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(!opts.afl_fuzzing</span> +<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : &amp;&amp; ! check_dir_path((const char *)opts.config[CONF_FWKNOP_RUN_DIR], &quot;Run&quot;, 0))</span> +<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> : : /* Initialize the firewall rules handler based on the fwknopd.conf +<span class="lineNum"> 131 </span> : : * file, but (for iptables firewalls) don't flush any rules or create +<span class="lineNum"> 132 </span> : : * any chains yet. This allows us to dump the current firewall rules +<span class="lineNum"> 133 </span> : : * via fw_rules_dump() in --fw-list mode before changing around any rules +<span class="lineNum"> 134 </span> : : * of an existing fwknopd process. +<span class="lineNum"> 135 </span> : : */ +<span class="lineNum"> 136 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(fw_config_init(&amp;opts) != 1)</span> +<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 138 </span> : : +<span class="lineNum"> 139 </span>[<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.fw_list == 1 || opts.fw_list_all == 1)</span> +<span class="lineNum"> 140 </span> : : { +<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : fw_dump_rules(&amp;opts);</span> +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 143 </span> : : } +<span class="lineNum"> 144 </span> : : +<span class="lineNum"> 145 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.fw_flush == 1)</span> +<span class="lineNum"> 146 </span> : : { +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Deleting any existing firewall rules...\n&quot;);</span> +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 149 </span> : : } +<span class="lineNum"> 150 </span> : : +<span class="lineNum"> 151 </span> : : /* Process the access.conf file. +<span class="lineNum"> 152 </span> : : */ +<span class="lineNum"> 153 </span> :<span class="lineCov"> 795 : parse_access_file(&amp;opts);</span> +<span class="lineNum"> 154 </span> : : +<span class="lineNum"> 155 </span> : : /* Show config (including access.conf vars) and exit dump config was +<span class="lineNum"> 156 </span> : : * wanted. +<span class="lineNum"> 157 </span> : : */ +<span class="lineNum"> 158 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(opts.dump_config == 1)</span> +<span class="lineNum"> 159 </span> : : { +<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : dump_config(&amp;opts);</span> +<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : dump_access_list(&amp;opts);</span> +<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 163 </span> : : } +<span class="lineNum"> 164 </span> : : +<span class="lineNum"> 165 </span> : : /* Acquire pid, become a daemon or run in the foreground, write pid +<span class="lineNum"> 166 </span> : : * to pid file. +<span class="lineNum"> 167 </span> : : */ +<span class="lineNum"> 168 </span> :<span class="lineCov"> 249 : setup_pid(&amp;opts);</span> +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span>[<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 249 : if(opts.verbose &gt; 1 &amp;&amp; opts.foreground)</span> +<span class="lineNum"> 171 </span> : : { +<span class="lineNum"> 172 </span> :<span class="lineCov"> 249 : dump_config(&amp;opts);</span> +<span class="lineNum"> 173 </span> :<span class="lineCov"> 249 : dump_access_list(&amp;opts);</span> +<span class="lineNum"> 174 </span> : : } +<span class="lineNum"> 175 </span> : : +<span class="lineNum"> 176 </span> : : /* Initialize the digest cache for replay attack detection (either +<span class="lineNum"> 177 </span> : : * with dbm support or with the default simple cache file strategy) +<span class="lineNum"> 178 </span> : : * if so configured. +<span class="lineNum"> 179 </span> : : */ +<span class="lineNum"> 180 </span> :<span class="lineCov"> 249 : init_digest_cache(&amp;opts);</span> +<span class="lineNum"> 181 </span> : : +<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if(opts.exit_after_parse_config)</span> +<span class="lineNum"> 183 </span> : : { +<span class="lineNum"> 184 </span> :<span class="lineCov"> 249 : log_msg(LOG_INFO, &quot;Configs parsed, exiting.&quot;);</span> +<span class="lineNum"> 185 </span> :<span class="lineCov"> 249 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 186 </span> : : } +<span class="lineNum"> 187 </span> : : +<span class="lineNum"> 188 </span> : : #if AFL_FUZZING +<span class="lineNum"> 189 </span> : : /* SPA data from STDIN. */ +<span class="lineNum"> 190 </span> : : if(opts.afl_fuzzing) +<span class="lineNum"> 191 </span> : : { +<span class="lineNum"> 192 </span> : : if(opts.config[CONF_AFL_PKT_FILE] != 0x0) +<span class="lineNum"> 193 </span> : : { +<span class="lineNum"> 194 </span> : : afl_enc_pkt_from_file(&amp;opts); +<span class="lineNum"> 195 </span> : : } +<span class="lineNum"> 196 </span> : : else +<span class="lineNum"> 197 </span> : : { +<span class="lineNum"> 198 </span> : : afl_pkt_from_stdin(&amp;opts); +<span class="lineNum"> 199 </span> : : } +<span class="lineNum"> 200 </span> : : } +<span class="lineNum"> 201 </span> : : #endif +<span class="lineNum"> 202 </span> : : +<span class="lineNum"> 203 </span> : : /* Prepare the firewall - i.e. flush any old rules and (for iptables) +<span class="lineNum"> 204 </span> : : * create fwknop chains. +<span class="lineNum"> 205 </span> : : */ +<span class="lineNum"> 206 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!opts.test &amp;&amp; (fw_initialize(&amp;opts) != 1))</span> +<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 208 </span> : : +<span class="lineNum"> 209 </span> : : /* If we are to acquire SPA data via a UDP socket, start it up here. +<span class="lineNum"> 210 </span> : : */ +<span class="lineNum"> 211 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts.enable_udp_server ||</span> +<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : strncasecmp(opts.config[CONF_ENABLE_UDP_SERVER], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 213 </span> : : { +<span class="lineNum"> 214 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(run_udp_server(&amp;opts) &lt; 0)</span> +<span class="lineNum"> 215 </span> : : { +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Fatal run_udp_server() error&quot;);</span> +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 218 </span> : : } +<span class="lineNum"> 219 </span> : : else +<span class="lineNum"> 220 </span> : : { +<span class="lineNum"> 221 </span> : : break; +<span class="lineNum"> 222 </span> : : } +<span class="lineNum"> 223 </span> : : } +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> : : /* If the TCP server option was set, fire it up here. Note that in +<span class="lineNum"> 226 </span> : : * this mode, fwknopd still acquires SPA packets via libpcap. If you +<span class="lineNum"> 227 </span> : : * want to use UDP only without the libpcap dependency, see the FIXME... +<span class="lineNum"> 228 </span> : : */ +<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts.config[CONF_ENABLE_TCP_SERVER], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 230 </span> : : { +<span class="lineNum"> 231 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(run_tcp_server(&amp;opts) &lt; 0)</span> +<span class="lineNum"> 232 </span> : : { +<span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Fatal run_tcp_server() error&quot;);</span> +<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 235 </span> : : } +<span class="lineNum"> 236 </span> : : } +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> : : #if USE_LIBPCAP +<span class="lineNum"> 239 </span> : : /* Intiate pcap capture mode... +<span class="lineNum"> 240 </span> : : */ +<span class="lineNum"> 241 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts.config[CONF_ENABLE_UDP_SERVER], &quot;N&quot;, 1) == 0)</span> +<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : pcap_capture(&amp;opts);</span> +<span class="lineNum"> 243 </span> : : #endif +<span class="lineNum"> 244 </span> : : +<span class="lineNum"> 245 </span> : : /* Deal with any signals that we've received and break out +<span class="lineNum"> 246 </span> : : * of the loop for any terminating signals +<span class="lineNum"> 247 </span> : : */ +<span class="lineNum"> 248 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(handle_signals(&amp;opts) == 1)</span> +<span class="lineNum"> 249 </span> : : break; +<span class="lineNum"> 250 </span> : : } +<span class="lineNum"> 251 </span> : : +<span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Shutting Down fwknopd.&quot;);</span> +<span class="lineNum"> 253 </span> : : +<span class="lineNum"> 254 </span> : : /* Kill the TCP server (if we have one running). +<span class="lineNum"> 255 </span> : : */ +<span class="lineNum"> 256 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts.tcp_server_pid &gt; 0)</span> +<span class="lineNum"> 257 </span> : : { +<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Killing the TCP server (pid=%i)&quot;,</span> +<span class="lineNum"> 259 </span> : : opts.tcp_server_pid); +<span class="lineNum"> 260 </span> : : +<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : kill(opts.tcp_server_pid, SIGTERM);</span> +<span class="lineNum"> 262 </span> : : +<span class="lineNum"> 263 </span> : : /* --DSS XXX: This seems to be necessary if the tcp server +<span class="lineNum"> 264 </span> : : * was restarted by this program. We need to +<span class="lineNum"> 265 </span> : : * investigate and fix this. For now, this works +<span class="lineNum"> 266 </span> : : * (it is kludgy, but does no harm afaik). +<span class="lineNum"> 267 </span> : : */ +<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : kill(opts.tcp_server_pid, SIGKILL);</span> +<span class="lineNum"> 269 </span> : : } +<span class="lineNum"> 270 </span> : : +<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 272 </span> : : +<span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : return(EXIT_SUCCESS); /* This never gets called */</span> +<a name="274"><span class="lineNum"> 274 </span> : : }</a> +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> :<span class="lineCov"> 795 : static void set_locale(fko_srv_options_t *opts)</span> +<span class="lineNum"> 277 </span> : : { +<span class="lineNum"> 278 </span> : : char *locale; +<span class="lineNum"> 279 </span> : : +<span class="lineNum"> 280 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_LOCALE] != NULL</span> +<span class="lineNum"> 281 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncasecmp(opts-&gt;config[CONF_LOCALE], &quot;NONE&quot;, 4) != 0)</span> +<span class="lineNum"> 282 </span> : : { +<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : locale = setlocale(LC_ALL, opts-&gt;config[CONF_LOCALE]);</span> +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(locale == NULL)</span> +<span class="lineNum"> 286 </span> : : { +<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 288 </span> : : &quot;WARNING: Unable to set locale to '%s'.&quot;, +<span class="lineNum"> 289 </span> : : opts-&gt;config[CONF_LOCALE] +<span class="lineNum"> 290 </span> : : ); +<span class="lineNum"> 291 </span> : : } +<span class="lineNum"> 292 </span> : : else +<span class="lineNum"> 293 </span> : : { +<span class="lineNum"> 294 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 295 </span> : : &quot;Locale set to '%s'.&quot;, opts-&gt;config[CONF_LOCALE] +<span class="lineNum"> 296 </span> : : ); +<span class="lineNum"> 297 </span> : : } +<span class="lineNum"> 298 </span> : : } +<span class="lineNum"> 299 </span> :<span class="lineCov"> 795 : return;</span> +<span class="lineNum"> 300 </span> : : } +<span class="lineNum"> 301 </span> : : +<span class="lineNum"> 302 </span> : : #if AFL_FUZZING +<span class="lineNum"> 303 </span> : : static void afl_enc_pkt_from_file(fko_srv_options_t *opts) +<span class="lineNum"> 304 </span> : : { +<span class="lineNum"> 305 </span> : : FILE *fp = NULL; +<span class="lineNum"> 306 </span> : : fko_ctx_t decrypt_ctx = NULL; +<span class="lineNum"> 307 </span> : : unsigned char enc_spa_pkt[AFL_MAX_PKT_SIZE] = {0}, rc; +<span class="lineNum"> 308 </span> : : int res = 0, es = EXIT_SUCCESS, enc_msg_len; +<span class="lineNum"> 309 </span> : : char dump_buf[AFL_DUMP_CTX_SIZE]; +<span class="lineNum"> 310 </span> : : +<span class="lineNum"> 311 </span> : : fp = fopen(opts-&gt;config[CONF_AFL_PKT_FILE], &quot;rb&quot;); +<span class="lineNum"> 312 </span> : : if(fp != NULL) +<span class="lineNum"> 313 </span> : : { +<span class="lineNum"> 314 </span> : : enc_msg_len = 0; +<span class="lineNum"> 315 </span> : : while(fread(&amp;rc, 1, 1, fp)) +<span class="lineNum"> 316 </span> : : { +<span class="lineNum"> 317 </span> : : enc_spa_pkt[enc_msg_len] = rc; +<span class="lineNum"> 318 </span> : : enc_msg_len++; +<span class="lineNum"> 319 </span> : : if(enc_msg_len == AFL_MAX_PKT_SIZE-1) +<span class="lineNum"> 320 </span> : : break; +<span class="lineNum"> 321 </span> : : } +<span class="lineNum"> 322 </span> : : fclose(fp); +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> : : fko_new(&amp;decrypt_ctx); +<span class="lineNum"> 325 </span> : : +<span class="lineNum"> 326 </span> : : res = fko_afl_set_spa_data(decrypt_ctx, (const char *)enc_spa_pkt, +<span class="lineNum"> 327 </span> : : enc_msg_len); +<span class="lineNum"> 328 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 329 </span> : : res = fko_decrypt_spa_data(decrypt_ctx, &quot;fwknoptest&quot;, +<span class="lineNum"> 330 </span> : : strlen(&quot;fwknoptest&quot;)); +<span class="lineNum"> 331 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 332 </span> : : res = dump_ctx_to_buffer(decrypt_ctx, dump_buf, sizeof(dump_buf)); +<span class="lineNum"> 333 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 334 </span> : : log_msg(LOG_INFO, &quot;%s&quot;, dump_buf); +<span class="lineNum"> 335 </span> : : else +<span class="lineNum"> 336 </span> : : log_msg(LOG_ERR, &quot;Error (%d): %s&quot;, res, fko_errstr(res)); +<span class="lineNum"> 337 </span> : : +<span class="lineNum"> 338 </span> : : fko_destroy(decrypt_ctx); +<span class="lineNum"> 339 </span> : : +<span class="lineNum"> 340 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 341 </span> : : { +<span class="lineNum"> 342 </span> : : log_msg(LOG_INFO, &quot;SPA packet decode: %s&quot;, fko_errstr(res)); +<span class="lineNum"> 343 </span> : : es = EXIT_SUCCESS; +<span class="lineNum"> 344 </span> : : } +<span class="lineNum"> 345 </span> : : else +<span class="lineNum"> 346 </span> : : { +<span class="lineNum"> 347 </span> : : log_msg(LOG_ERR, &quot;Could not decode SPA packet: %s&quot;, fko_errstr(res)); +<span class="lineNum"> 348 </span> : : es = EXIT_FAILURE; +<span class="lineNum"> 349 </span> : : } +<span class="lineNum"> 350 </span> : : } +<span class="lineNum"> 351 </span> : : else +<span class="lineNum"> 352 </span> : : log_msg(LOG_ERR, &quot;Could not acquire SPA packet from file: %s.&quot;, +<span class="lineNum"> 353 </span> : : opts-&gt;config[CONF_AFL_PKT_FILE]); +<span class="lineNum"> 354 </span> : : +<span class="lineNum"> 355 </span> : : clean_exit(opts, NO_FW_CLEANUP, es); +<span class="lineNum"> 356 </span> : : } +<span class="lineNum"> 357 </span> : : +<span class="lineNum"> 358 </span> : : static void afl_pkt_from_stdin(fko_srv_options_t *opts) +<span class="lineNum"> 359 </span> : : { +<span class="lineNum"> 360 </span> : : FILE *fp = NULL; +<span class="lineNum"> 361 </span> : : fko_ctx_t decode_ctx = NULL; +<span class="lineNum"> 362 </span> : : unsigned char spa_pkt[AFL_MAX_PKT_SIZE] = {0}; +<span class="lineNum"> 363 </span> : : int res = 0, es = EXIT_SUCCESS; +<span class="lineNum"> 364 </span> : : char dump_buf[AFL_DUMP_CTX_SIZE]; +<span class="lineNum"> 365 </span> : : +<span class="lineNum"> 366 </span> : : fp = fdopen(STDIN_FILENO, &quot;r&quot;); +<span class="lineNum"> 367 </span> : : if(fp != NULL) +<span class="lineNum"> 368 </span> : : { +<span class="lineNum"> 369 </span> : : if(fgets((char *)spa_pkt, AFL_MAX_PKT_SIZE, fp) == NULL) +<span class="lineNum"> 370 </span> : : { +<span class="lineNum"> 371 </span> : : fclose(fp); +<span class="lineNum"> 372 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 373 </span> : : } +<span class="lineNum"> 374 </span> : : +<span class="lineNum"> 375 </span> : : fclose(fp); +<span class="lineNum"> 376 </span> : : +<span class="lineNum"> 377 </span> : : fko_new(&amp;decode_ctx); +<span class="lineNum"> 378 </span> : : +<span class="lineNum"> 379 </span> : : res = fko_set_encoded_data(decode_ctx, (char *) spa_pkt, +<span class="lineNum"> 380 </span> : : strlen((char *)spa_pkt), 0, FKO_DIGEST_SHA256); +<span class="lineNum"> 381 </span> : : +<span class="lineNum"> 382 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 383 </span> : : res = fko_set_spa_data(decode_ctx, (const char *) spa_pkt); +<span class="lineNum"> 384 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 385 </span> : : res = fko_decode_spa_data(decode_ctx); +<span class="lineNum"> 386 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 387 </span> : : res = dump_ctx_to_buffer(decode_ctx, dump_buf, sizeof(dump_buf)); +<span class="lineNum"> 388 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 389 </span> : : log_msg(LOG_INFO, &quot;%s&quot;, dump_buf); +<span class="lineNum"> 390 </span> : : +<span class="lineNum"> 391 </span> : : fko_destroy(decode_ctx); +<span class="lineNum"> 392 </span> : : +<span class="lineNum"> 393 </span> : : if(res == FKO_SUCCESS) +<span class="lineNum"> 394 </span> : : { +<span class="lineNum"> 395 </span> : : log_msg(LOG_INFO, &quot;SPA packet decode: %s&quot;, fko_errstr(res)); +<span class="lineNum"> 396 </span> : : es = EXIT_SUCCESS; +<span class="lineNum"> 397 </span> : : } +<span class="lineNum"> 398 </span> : : else +<span class="lineNum"> 399 </span> : : { +<span class="lineNum"> 400 </span> : : log_msg(LOG_ERR, &quot;Could not decode SPA packet: %s&quot;, fko_errstr(res)); +<span class="lineNum"> 401 </span> : : es = EXIT_FAILURE; +<span class="lineNum"> 402 </span> : : } +<span class="lineNum"> 403 </span> : : } +<span class="lineNum"> 404 </span> : : else +<span class="lineNum"> 405 </span> : : log_msg(LOG_ERR, &quot;Could not acquire SPA packet from stdin.&quot;); +<span class="lineNum"> 406 </span> : : +<span class="lineNum"> 407 </span> : : clean_exit(opts, NO_FW_CLEANUP, es); +<span class="lineNum"> 408 </span> : : } +<a name="409"><span class="lineNum"> 409 </span> : : #endif</a> +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> :<span class="lineCov"> 249 : static void init_digest_cache(fko_srv_options_t *opts)</span> +<span class="lineNum"> 412 </span> : : { +<span class="lineNum"> 413 </span> : : int rp_cache_count; +<span class="lineNum"> 414 </span> : : +<span class="lineNum"> 415 </span> : : #if AFL_FUZZING +<span class="lineNum"> 416 </span> : : if(opts-&gt;afl_fuzzing) +<span class="lineNum"> 417 </span> : : return; +<span class="lineNum"> 418 </span> : : #endif +<span class="lineNum"> 419 </span> : : +<span class="lineNum"> 420 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchCov" title="Branch 1 was taken 178 times"> + </span>]:<span class="lineCov"> 249 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 421 </span> : : { +<span class="lineNum"> 422 </span> :<span class="lineCov"> 71 : rp_cache_count = replay_cache_init(opts);</span> +<span class="lineNum"> 423 </span> : : +<span class="lineNum"> 424 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 71 : if(rp_cache_count &lt; 0)</span> +<span class="lineNum"> 425 </span> : : { +<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 427 </span> : : &quot;Error opening digest cache file. Incoming digests will not be remembered.&quot; +<span class="lineNum"> 428 </span> : : ); +<span class="lineNum"> 429 </span> : : /* Destination points to heap memory, and is guaranteed to be +<span class="lineNum"> 430 </span> : : * at least two bytes large via validate_options(), +<span class="lineNum"> 431 </span> : : * DEF_ENABLE_DIGEST_PERSISTENCE, and set_config_entry() +<span class="lineNum"> 432 </span> : : */ +<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : strlcpy(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;N&quot;, 2);</span> +<span class="lineNum"> 434 </span> : : } +<span class="lineNum"> 435 </span> : : +<span class="lineNum"> 436 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 71 : if(opts-&gt;verbose)</span> +<span class="lineNum"> 437 </span> :<span class="lineCov"> 71 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 438 </span> : : &quot;Using Digest Cache: '%s' (entry count = %i)&quot;, +<span class="lineNum"> 439 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 440 </span> : : opts-&gt;config[CONF_DIGEST_FILE], rp_cache_count +<span class="lineNum"> 441 </span> : : #else +<span class="lineNum"> 442 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], rp_cache_count +<span class="lineNum"> 443 </span> : : #endif +<span class="lineNum"> 444 </span> : : ); +<span class="lineNum"> 445 </span> : : } +<span class="lineNum"> 446 </span> :<span class="lineCov"> 249 : return;</span> +<a name="447"><span class="lineNum"> 447 </span> : : }</a> +<span class="lineNum"> 448 </span> : : +<span class="lineNum"> 449 </span> :<span class="lineCov"> 249 : static void setup_pid(fko_srv_options_t *opts)</span> +<span class="lineNum"> 450 </span> : : { +<span class="lineNum"> 451 </span> : : pid_t old_pid; +<span class="lineNum"> 452 </span> : : +<span class="lineNum"> 453 </span> : : #if AFL_FUZZING +<span class="lineNum"> 454 </span> : : if(opts-&gt;afl_fuzzing) +<span class="lineNum"> 455 </span> : : return; +<span class="lineNum"> 456 </span> : : #endif +<span class="lineNum"> 457 </span> : : +<span class="lineNum"> 458 </span> : : /* If we are a new process (just being started), proceed with normal +<span class="lineNum"> 459 </span> : : * start-up. Otherwise, we are here as a result of a signal sent to an +<span class="lineNum"> 460 </span> : : * existing process and we want to restart. +<span class="lineNum"> 461 </span> : : */ +<span class="lineNum"> 462 </span> [<span class="branchCov" title="Branch 2 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 249 : if(get_running_pid(opts) != getpid())</span> +<span class="lineNum"> 463 </span> : : { +<span class="lineNum"> 464 </span> : : /* If foreground mode is not set, then fork off and become a daemon. +<span class="lineNum"> 465 </span> : : * Otherwise, attempt to get the pid file lock and go on. +<span class="lineNum"> 466 </span> : : */ +<span class="lineNum"> 467 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(opts-&gt;foreground == 0)</span> +<span class="lineNum"> 468 </span> : : { +<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : daemonize_process(opts);</span> +<span class="lineNum"> 470 </span> : : } +<span class="lineNum"> 471 </span> : : else +<span class="lineNum"> 472 </span> : : { +<span class="lineNum"> 473 </span> :<span class="lineCov"> 249 : old_pid = write_pid_file(opts);</span> +<span class="lineNum"> 474 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(old_pid &gt; 0)</span> +<span class="lineNum"> 475 </span> : : { +<span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : fprintf(stderr,</span> +<span class="lineNum"> 477 </span> : : &quot;[*] An instance of fwknopd is already running: (PID=%i).\n&quot;, old_pid +<span class="lineNum"> 478 </span> : : ); +<span class="lineNum"> 479 </span> : : +<span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 481 </span> : : } +<span class="lineNum"> 482 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : else if(old_pid &lt; 0)</span> +<span class="lineNum"> 483 </span> : : { +<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] PID file error. The lock may not be effective.\n&quot;);</span> +<span class="lineNum"> 485 </span> : : } +<span class="lineNum"> 486 </span> : : } +<span class="lineNum"> 487 </span> : : +<span class="lineNum"> 488 </span> :<span class="lineCov"> 249 : log_msg(LOG_INFO, &quot;Starting %s&quot;, MY_NAME);</span> +<span class="lineNum"> 489 </span> : : } +<span class="lineNum"> 490 </span> : : else +<span class="lineNum"> 491 </span> : : { +<span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Re-starting %s&quot;, MY_NAME);</span> +<span class="lineNum"> 493 </span> : : } +<span class="lineNum"> 494 </span> : : +<span class="lineNum"> 495 </span> :<span class="lineCov"> 249 : return;</span> +<a name="496"><span class="lineNum"> 496 </span> : : }</a> +<span class="lineNum"> 497 </span> : : +<span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : static int restart_fwknopd(fko_srv_options_t * const opts)</span> +<span class="lineNum"> 499 </span> : : { +<span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : int res = 0;</span> +<span class="lineNum"> 501 </span> : : pid_t old_pid; +<span class="lineNum"> 502 </span> : : +<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : old_pid = get_running_pid(opts);</span> +<span class="lineNum"> 504 </span> : : +<span class="lineNum"> 505 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> +<span class="lineNum"> 506 </span> : : { +<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : res = kill(old_pid, SIGHUP);</span> +<span class="lineNum"> 508 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 0)</span> +<span class="lineNum"> 509 </span> : : { +<span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Sent restart signal to fwknopd (pid=%i)\n&quot;, old_pid);</span> +<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> +<span class="lineNum"> 512 </span> : : } +<span class="lineNum"> 513 </span> : : else +<span class="lineNum"> 514 </span> : : { +<span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable to send signal to fwknop: &quot;);</span> +<span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> +<span class="lineNum"> 517 </span> : : } +<span class="lineNum"> 518 </span> : : } +<span class="lineNum"> 519 </span> : : +<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;No running fwknopd detected.\n&quot;);</span> +<span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> +<a name="522"><span class="lineNum"> 522 </span> : : }</a> +<span class="lineNum"> 523 </span> : : +<span class="lineNum"> 524 </span> :<span class="lineNoCov"> 0 : static int status_fwknopd(fko_srv_options_t * const opts)</span> +<span class="lineNum"> 525 </span> : : { +<span class="lineNum"> 526 </span> : : pid_t old_pid; +<span class="lineNum"> 527 </span> : : +<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : old_pid = write_pid_file(opts);</span> +<span class="lineNum"> 529 </span> : : +<span class="lineNum"> 530 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> +<span class="lineNum"> 531 </span> : : { +<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Detected fwknopd is running (pid=%i).\n&quot;, old_pid);</span> +<span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> +<span class="lineNum"> 534 </span> : : } +<span class="lineNum"> 535 </span> : : +<span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;No running fwknopd detected.\n&quot;);</span> +<span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> +<a name="538"><span class="lineNum"> 538 </span> : : }</a> +<span class="lineNum"> 539 </span> : : +<span class="lineNum"> 540 </span> :<span class="lineNoCov"> 0 : static int handle_signals(fko_srv_options_t *opts)</span> +<span class="lineNum"> 541 </span> : : { +<span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : int last_sig = 0, rv = 1;</span> +<span class="lineNum"> 543 </span> : : +<span class="lineNum"> 544 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_signal) {</span> +<span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : last_sig = got_signal;</span> +<span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> +<span class="lineNum"> 547 </span> : : +<span class="lineNum"> 548 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_sighup)</span> +<span class="lineNum"> 549 </span> : : { +<span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Got SIGHUP. Re-reading configs.&quot;);</span> +<span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : free_configs(opts);</span> +<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : kill(opts-&gt;tcp_server_pid, SIGTERM);</span> +<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : usleep(1000000);</span> +<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : got_sighup = 0;</span> +<span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : rv = 0; /* this means fwknopd will not exit */</span> +<span class="lineNum"> 556 </span> : : } +<span class="lineNum"> 557 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(got_sigint)</span> +<span class="lineNum"> 558 </span> : : { +<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Got SIGINT. Exiting...&quot;);</span> +<span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : got_sigint = 0;</span> +<span class="lineNum"> 561 </span> : : } +<span class="lineNum"> 562 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(got_sigterm)</span> +<span class="lineNum"> 563 </span> : : { +<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Got SIGTERM. Exiting...&quot;);</span> +<span class="lineNum"> 565 </span> :<span class="lineNoCov"> 0 : got_sigterm = 0;</span> +<span class="lineNum"> 566 </span> : : } +<span class="lineNum"> 567 </span> : : else +<span class="lineNum"> 568 </span> : : { +<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 570 </span> : : &quot;Got signal %i. No defined action but to exit.&quot;, last_sig); +<span class="lineNum"> 571 </span> : : } +<span class="lineNum"> 572 </span> : : } +<span class="lineNum"> 573 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (opts-&gt;packet_ctr_limit &gt; 0</span> +<span class="lineNum"> 574 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; opts-&gt;packet_ctr &gt;= opts-&gt;packet_ctr_limit)</span> +<span class="lineNum"> 575 </span> : : { +<span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 577 </span> : : &quot;Packet count limit (%d) reached. Exiting...&quot;, +<span class="lineNum"> 578 </span> : : opts-&gt;packet_ctr_limit); +<span class="lineNum"> 579 </span> : : } +<span class="lineNum"> 580 </span> : : else /* got_signal was not set (should be if we are here) */ +<span class="lineNum"> 581 </span> : : { +<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 583 </span> : : &quot;Capture ended without signal. Exiting...&quot;); +<span class="lineNum"> 584 </span> : : } +<span class="lineNum"> 585 </span> :<span class="lineNoCov"> 0 : return rv;</span> +<a name="586"><span class="lineNum"> 586 </span> : : }</a> +<span class="lineNum"> 587 </span> : : +<span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : static int stop_fwknopd(fko_srv_options_t * const opts)</span> +<span class="lineNum"> 589 </span> : : { +<span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : int res = 0, is_err = 0;</span> +<span class="lineNum"> 591 </span> : : pid_t old_pid; +<span class="lineNum"> 592 </span> : : +<span class="lineNum"> 593 </span> :<span class="lineNoCov"> 0 : old_pid = get_running_pid(opts);</span> +<span class="lineNum"> 594 </span> : : +<span class="lineNum"> 595 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> +<span class="lineNum"> 596 </span> : : { +<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : res = kill(old_pid, SIGTERM);</span> +<span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> +<span class="lineNum"> 599 </span> : : +<span class="lineNum"> 600 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 0 &amp;&amp; is_err != 0)</span> +<span class="lineNum"> 601 </span> : : { +<span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Killed fwknopd (pid=%i)\n&quot;, old_pid);</span> +<span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> +<span class="lineNum"> 604 </span> : : } +<span class="lineNum"> 605 </span> : : else +<span class="lineNum"> 606 </span> : : { +<span class="lineNum"> 607 </span> : : /* give a bit of time for process shutdown and check again +<span class="lineNum"> 608 </span> : : */ +<span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : sleep(1);</span> +<span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> +<span class="lineNum"> 611 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != 0)</span> +<span class="lineNum"> 612 </span> : : { +<span class="lineNum"> 613 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Killed fwknopd (pid=%i) via SIGTERM\n&quot;,</span> +<span class="lineNum"> 614 </span> : : old_pid); +<span class="lineNum"> 615 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> +<span class="lineNum"> 616 </span> : : } +<span class="lineNum"> 617 </span> : : else +<span class="lineNum"> 618 </span> : : { +<span class="lineNum"> 619 </span> :<span class="lineNoCov"> 0 : res = kill(old_pid, SIGKILL);</span> +<span class="lineNum"> 620 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> +<span class="lineNum"> 621 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 0 &amp;&amp; is_err != 0)</span> +<span class="lineNum"> 622 </span> : : { +<span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : fprintf(stdout,</span> +<span class="lineNum"> 624 </span> : : &quot;Killed fwknopd (pid=%i) via SIGKILL\n&quot;, +<span class="lineNum"> 625 </span> : : old_pid); +<span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> +<span class="lineNum"> 627 </span> : : } +<span class="lineNum"> 628 </span> : : else +<span class="lineNum"> 629 </span> : : { +<span class="lineNum"> 630 </span> :<span class="lineNoCov"> 0 : sleep(1);</span> +<span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> +<span class="lineNum"> 632 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != 0)</span> +<span class="lineNum"> 633 </span> : : { +<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : fprintf(stdout,</span> +<span class="lineNum"> 635 </span> : : &quot;Killed fwknopd (pid=%i) via SIGKILL\n&quot;, +<span class="lineNum"> 636 </span> : : old_pid); +<span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> +<span class="lineNum"> 638 </span> : : } +<span class="lineNum"> 639 </span> : : else +<span class="lineNum"> 640 </span> : : { +<span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable to kill fwknop: &quot;);</span> +<span class="lineNum"> 642 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> +<span class="lineNum"> 643 </span> : : } +<span class="lineNum"> 644 </span> : : } +<span class="lineNum"> 645 </span> : : } +<span class="lineNum"> 646 </span> : : } +<span class="lineNum"> 647 </span> : : } +<span class="lineNum"> 648 </span> : : +<span class="lineNum"> 649 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;No running fwknopd detected.\n&quot;);</span> +<span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> +<span class="lineNum"> 651 </span> : : } +<span class="lineNum"> 652 </span> : : +<span class="lineNum"> 653 </span> : : /* Ensure the specified directory exists. If not, create it or die. +<a name="654"><span class="lineNum"> 654 </span> : : */</a> +<span class="lineNum"> 655 </span> : : static int +<span class="lineNum"> 656 </span> :<span class="lineCov"> 795 : check_dir_path(const char * const filepath, const char * const fp_desc, const unsigned char use_basename)</span> +<span class="lineNum"> 657 </span> : : { +<span class="lineNum"> 658 </span> : : struct stat st; +<span class="lineNum"> 659 </span> :<span class="lineCov"> 795 : int res = 0;</span> +<span class="lineNum"> 660 </span> : : char tmp_path[MAX_PATH_LEN]; +<span class="lineNum"> 661 </span> : : char *ndx; +<span class="lineNum"> 662 </span> : : +<span class="lineNum"> 663 </span> : : /* +<span class="lineNum"> 664 </span> : : * FIXME: We shouldn't use a hard-coded dir-separator here. +<span class="lineNum"> 665 </span> : : */ +<span class="lineNum"> 666 </span> : : /* But first make sure we are using an absolute path. +<span class="lineNum"> 667 </span> : : */ +<span class="lineNum"> 668 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(*filepath != PATH_SEP)</span> +<span class="lineNum"> 669 </span> : : { +<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 671 </span> : : &quot;Path '%s' is not absolute.&quot;, filepath +<span class="lineNum"> 672 </span> : : ); +<span class="lineNum"> 673 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 674 </span> : : } +<span class="lineNum"> 675 </span> : : +<span class="lineNum"> 676 </span> : : /* If this is a file path that we want to use only the basename, strip +<span class="lineNum"> 677 </span> : : * the trailing filename here. +<span class="lineNum"> 678 </span> : : */ +<span class="lineNum"> 679 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 795 : if(use_basename &amp;&amp; ((ndx = strrchr(filepath, PATH_SEP)) != NULL))</span> +<span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : strlcpy(tmp_path, filepath, (ndx-filepath)+1);</span> +<span class="lineNum"> 681 </span> : : else +<span class="lineNum"> 682 </span> :<span class="lineCov"> 795 : strlcpy(tmp_path, filepath, sizeof(tmp_path));</span> +<span class="lineNum"> 683 </span> : : +<span class="lineNum"> 684 </span> : : /* At this point, we should make the path is more than just the +<span class="lineNum"> 685 </span> : : * PATH_SEP. If it is not, silently return. +<span class="lineNum"> 686 </span> : : */ +<span class="lineNum"> 687 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(strlen(tmp_path) &lt; 2)</span> +<span class="lineNum"> 688 </span> : : return 1; +<span class="lineNum"> 689 </span> : : +<span class="lineNum"> 690 </span> : : /* Make sure we have a valid directory. +<span class="lineNum"> 691 </span> : : */ +<span class="lineNum"> 692 </span> :<span class="lineCov"> 795 : res = stat(tmp_path, &amp;st);</span> +<span class="lineNum"> 693 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(res != 0)</span> +<span class="lineNum"> 694 </span> : : { +<span class="lineNum"> 695 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == ENOENT)</span> +<span class="lineNum"> 696 </span> : : { +<span class="lineNum"> 697 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 698 </span> : : &quot;%s directory: %s does not exist. Attempting to create it.&quot;, +<span class="lineNum"> 699 </span> : : fp_desc, tmp_path +<span class="lineNum"> 700 </span> : : ); +<span class="lineNum"> 701 </span> : : +<span class="lineNum"> 702 </span> : : /* Directory does not exist, so attempt to create it. +<span class="lineNum"> 703 </span> : : */ +<span class="lineNum"> 704 </span> :<span class="lineNoCov"> 0 : res = make_dir_path(tmp_path);</span> +<span class="lineNum"> 705 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != 0)</span> +<span class="lineNum"> 706 </span> : : { +<span class="lineNum"> 707 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 708 </span> : : &quot;Unable to create %s directory: %s (error: %i)&quot;, +<span class="lineNum"> 709 </span> : : fp_desc, tmp_path, errno +<span class="lineNum"> 710 </span> : : ); +<span class="lineNum"> 711 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 712 </span> : : } +<span class="lineNum"> 713 </span> : : +<span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 715 </span> : : &quot;Successfully created %s directory: %s&quot;, fp_desc, tmp_path +<span class="lineNum"> 716 </span> : : ); +<span class="lineNum"> 717 </span> : : } +<span class="lineNum"> 718 </span> : : else +<span class="lineNum"> 719 </span> : : { +<span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 721 </span> : : &quot;Stat of %s returned error %i&quot;, tmp_path, errno +<span class="lineNum"> 722 </span> : : ); +<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 724 </span> : : } +<span class="lineNum"> 725 </span> : : } +<span class="lineNum"> 726 </span> : : else +<span class="lineNum"> 727 </span> : : { +<span class="lineNum"> 728 </span> : : /* It is a file, but is it a directory? +<span class="lineNum"> 729 </span> : : */ +<span class="lineNum"> 730 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(! S_ISDIR(st.st_mode))</span> +<span class="lineNum"> 731 </span> : : { +<span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 733 </span> : : &quot;Specified %s directory: %s is NOT a directory&quot;, fp_desc, tmp_path +<span class="lineNum"> 734 </span> : : ); +<span class="lineNum"> 735 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 736 </span> : : } +<span class="lineNum"> 737 </span> : : } +<span class="lineNum"> 738 </span> : : return 1; +<span class="lineNum"> 739 </span> : : } +<a name="740"><span class="lineNum"> 740 </span> : : </a> +<span class="lineNum"> 741 </span> : : static int +<span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : make_dir_path(const char * const run_dir)</span> +<span class="lineNum"> 743 </span> : : { +<span class="lineNum"> 744 </span> : : struct stat st; +<span class="lineNum"> 745 </span> :<span class="lineNoCov"> 0 : int res = 0, len = 0;</span> +<span class="lineNum"> 746 </span> : : char tmp_path[MAX_PATH_LEN]; +<span class="lineNum"> 747 </span> : : char *ndx; +<span class="lineNum"> 748 </span> : : +<span class="lineNum"> 749 </span> :<span class="lineNoCov"> 0 : strlcpy(tmp_path, run_dir, sizeof(tmp_path));</span> +<span class="lineNum"> 750 </span> : : +<span class="lineNum"> 751 </span> :<span class="lineNoCov"> 0 : len = strlen(tmp_path);</span> +<span class="lineNum"> 752 </span> : : +<span class="lineNum"> 753 </span> : : /* Strip any trailing dir sep char. +<span class="lineNum"> 754 </span> : : */ +<span class="lineNum"> 755 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tmp_path[len-1] == PATH_SEP)</span> +<span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : tmp_path[len-1] = '\0';</span> +<span class="lineNum"> 757 </span> : : +<span class="lineNum"> 758 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(ndx = tmp_path+1; *ndx; ndx++)</span> +<span class="lineNum"> 759 </span> : : { +<span class="lineNum"> 760 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*ndx == '/')</span> +<span class="lineNum"> 761 </span> : : { +<span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : *ndx = '\0';</span> +<span class="lineNum"> 763 </span> : : +<span class="lineNum"> 764 </span> : : /* Stat this part of the path to see if it is a valid directory. +<span class="lineNum"> 765 </span> : : * If it does not exist, attempt to create it. If it does, and +<span class="lineNum"> 766 </span> : : * it is a directory, go on. Otherwise, any other error cause it +<span class="lineNum"> 767 </span> : : * to bail. +<span class="lineNum"> 768 </span> : : */ +<span class="lineNum"> 769 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(tmp_path, &amp;st) != 0)</span> +<span class="lineNum"> 770 </span> : : { +<span class="lineNum"> 771 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == ENOENT)</span> +<span class="lineNum"> 772 </span> : : { +<span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : res = mkdir(tmp_path, S_IRWXU);</span> +<span class="lineNum"> 774 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != 0)</span> +<span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 776 </span> : : +<span class="lineNum"> 777 </span> : : /* run stat() against the component since we just +<span class="lineNum"> 778 </span> : : * created it +<span class="lineNum"> 779 </span> : : */ +<span class="lineNum"> 780 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(tmp_path, &amp;st) != 0)</span> +<span class="lineNum"> 781 </span> : : { +<span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 783 </span> : : &quot;Could not create component: %s of %s&quot;, tmp_path, run_dir +<span class="lineNum"> 784 </span> : : ); +<span class="lineNum"> 785 </span> :<span class="lineNoCov"> 0 : return(ENOTDIR);</span> +<span class="lineNum"> 786 </span> : : } +<span class="lineNum"> 787 </span> : : } +<span class="lineNum"> 788 </span> : : } +<span class="lineNum"> 789 </span> : : +<span class="lineNum"> 790 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! S_ISDIR(st.st_mode))</span> +<span class="lineNum"> 791 </span> : : { +<span class="lineNum"> 792 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 793 </span> : : &quot;Component: %s of %s is NOT a directory&quot;, tmp_path, run_dir +<span class="lineNum"> 794 </span> : : ); +<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : return(ENOTDIR);</span> +<span class="lineNum"> 796 </span> : : } +<span class="lineNum"> 797 </span> : : +<span class="lineNum"> 798 </span> :<span class="lineNoCov"> 0 : *ndx = '/';</span> +<span class="lineNum"> 799 </span> : : } +<span class="lineNum"> 800 </span> : : } +<span class="lineNum"> 801 </span> : : +<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : res = mkdir(tmp_path, S_IRWXU);</span> +<span class="lineNum"> 803 </span> : : +<span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : return(res);</span> +<span class="lineNum"> 805 </span> : : } +<span class="lineNum"> 806 </span> : : +<span class="lineNum"> 807 </span> : : /* Become a daemon: fork(), start a new session, chdir &quot;/&quot;, +<span class="lineNum"> 808 </span> : : * and close unneeded standard filehandles. +<a name="809"><span class="lineNum"> 809 </span> : : */</a> +<span class="lineNum"> 810 </span> : : static void +<span class="lineNum"> 811 </span> :<span class="lineNoCov"> 0 : daemonize_process(fko_srv_options_t * const opts)</span> +<span class="lineNum"> 812 </span> : : { +<span class="lineNum"> 813 </span> : : pid_t pid, old_pid; +<span class="lineNum"> 814 </span> : : +<span class="lineNum"> 815 </span> : : /* Reset the our umask +<span class="lineNum"> 816 </span> : : */ +<span class="lineNum"> 817 </span> :<span class="lineNoCov"> 0 : umask(0);</span> +<span class="lineNum"> 818 </span> : : +<span class="lineNum"> 819 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((pid = fork()) &lt; 0)</span> +<span class="lineNum"> 820 </span> : : { +<span class="lineNum"> 821 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable to fork: &quot;);</span> +<span class="lineNum"> 822 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 823 </span> : : } +<span class="lineNum"> 824 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (pid != 0) /* parent */</span> +<span class="lineNum"> 825 </span> : : { +<span class="lineNum"> 826 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> +<span class="lineNum"> 827 </span> : : } +<span class="lineNum"> 828 </span> : : +<span class="lineNum"> 829 </span> : : /* Child process from here on out */ +<span class="lineNum"> 830 </span> : : +<span class="lineNum"> 831 </span> : : /* Start a new session +<span class="lineNum"> 832 </span> : : */ +<span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : setsid();</span> +<span class="lineNum"> 834 </span> : : +<span class="lineNum"> 835 </span> : : /* Create the PID file (or be blocked by an existing one). +<span class="lineNum"> 836 </span> : : */ +<span class="lineNum"> 837 </span> :<span class="lineNoCov"> 0 : old_pid = write_pid_file(opts);</span> +<span class="lineNum"> 838 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> +<span class="lineNum"> 839 </span> : : { +<span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : fprintf(stderr,</span> +<span class="lineNum"> 841 </span> : : &quot;[*] An instance of fwknopd is already running: (PID=%i).\n&quot;, old_pid +<span class="lineNum"> 842 </span> : : ); +<span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 844 </span> : : } +<span class="lineNum"> 845 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(old_pid &lt; 0)</span> +<span class="lineNum"> 846 </span> : : { +<span class="lineNum"> 847 </span> :<span class="lineNoCov"> 0 : fprintf(stderr,</span> +<span class="lineNum"> 848 </span> : : &quot;[*] PID file error. The lock may not be effective.\n&quot;); +<span class="lineNum"> 849 </span> : : } +<span class="lineNum"> 850 </span> : : +<span class="lineNum"> 851 </span> : : /* Chdir to the root of the filesystem +<span class="lineNum"> 852 </span> : : */ +<span class="lineNum"> 853 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((chdir(&quot;/&quot;)) &lt; 0) {</span> +<span class="lineNum"> 854 </span> :<span class="lineNoCov"> 0 : perror(&quot;Could not chdir() to /: &quot;);</span> +<span class="lineNum"> 855 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 856 </span> : : } +<span class="lineNum"> 857 </span> : : +<span class="lineNum"> 858 </span> : : /* Close un-needed file handles +<span class="lineNum"> 859 </span> : : */ +<span class="lineNum"> 860 </span> :<span class="lineNoCov"> 0 : close(STDIN_FILENO);</span> +<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : close(STDOUT_FILENO);</span> +<span class="lineNum"> 862 </span> :<span class="lineNoCov"> 0 : close(STDERR_FILENO);</span> +<span class="lineNum"> 863 </span> : : +<span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 865 </span> : : } +<a name="866"><span class="lineNum"> 866 </span> : : </a> +<span class="lineNum"> 867 </span> : : static int +<span class="lineNum"> 868 </span> :<span class="lineCov"> 249 : write_pid_file(fko_srv_options_t *opts)</span> +<span class="lineNum"> 869 </span> : : { +<span class="lineNum"> 870 </span> : : pid_t old_pid, my_pid; +<span class="lineNum"> 871 </span> : : int op_fd, lck_res, num_bytes; +<span class="lineNum"> 872 </span> :<span class="lineCov"> 249 : char buf[PID_BUFLEN] = {0};</span> +<span class="lineNum"> 873 </span> : : +<span class="lineNum"> 874 </span> : : /* Reset errno (just in case) +<span class="lineNum"> 875 </span> : : */ +<span class="lineNum"> 876 </span> :<span class="lineCov"> 249 : errno = 0;</span> +<span class="lineNum"> 877 </span> : : +<span class="lineNum"> 878 </span> : : /* Open the PID file +<span class="lineNum"> 879 </span> : : */ +<span class="lineNum"> 880 </span> :<span class="lineCov"> 249 : op_fd = open(</span> +<span class="lineNum"> 881 </span> :<span class="lineCov"> 249 : opts-&gt;config[CONF_FWKNOP_PID_FILE], O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR</span> +<span class="lineNum"> 882 </span> : : ); +<span class="lineNum"> 883 </span> : : +<span class="lineNum"> 884 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(op_fd == -1)</span> +<span class="lineNum"> 885 </span> : : { +<span class="lineNum"> 886 </span> :<span class="lineNoCov"> 0 : perror(&quot;Error trying to open PID file: &quot;);</span> +<span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 888 </span> : : } +<span class="lineNum"> 889 </span> : : +<span class="lineNum"> 890 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(fcntl(op_fd, F_SETFD, FD_CLOEXEC) == -1)</span> +<span class="lineNum"> 891 </span> : : { +<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : close(op_fd);</span> +<span class="lineNum"> 893 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unexpected error from fcntl: &quot;);</span> +<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 895 </span> : : } +<span class="lineNum"> 896 </span> : : +<span class="lineNum"> 897 </span> : : /* Attempt to lock the PID file. If we get an EWOULDBLOCK +<span class="lineNum"> 898 </span> : : * error, another instance already has the lock. So we grab +<span class="lineNum"> 899 </span> : : * the pid from the existing lock file, complain and bail. +<span class="lineNum"> 900 </span> : : */ +<span class="lineNum"> 901 </span> :<span class="lineCov"> 249 : lck_res = lockf(op_fd, F_TLOCK, 0);</span> +<span class="lineNum"> 902 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(lck_res == -1)</span> +<span class="lineNum"> 903 </span> : : { +<span class="lineNum"> 904 </span> :<span class="lineNoCov"> 0 : close(op_fd);</span> +<span class="lineNum"> 905 </span> : : +<span class="lineNum"> 906 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno != EAGAIN)</span> +<span class="lineNum"> 907 </span> : : { +<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unexpected error from lockf: &quot;);</span> +<span class="lineNum"> 909 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 910 </span> : : } +<span class="lineNum"> 911 </span> : : +<span class="lineNum"> 912 </span> : : /* Look for an existing lock holder. If we get a pid return it. +<span class="lineNum"> 913 </span> : : */ +<span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : old_pid = get_running_pid(opts);</span> +<span class="lineNum"> 915 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid)</span> +<span class="lineNum"> 916 </span> : : return old_pid; +<span class="lineNum"> 917 </span> : : +<span class="lineNum"> 918 </span> : : /* Otherwise, consider it an error. +<span class="lineNum"> 919 </span> : : */ +<span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable read existing PID file: &quot;);</span> +<span class="lineNum"> 921 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 922 </span> : : } +<span class="lineNum"> 923 </span> : : +<span class="lineNum"> 924 </span> : : /* Write our PID to the file +<span class="lineNum"> 925 </span> : : */ +<span class="lineNum"> 926 </span> :<span class="lineCov"> 249 : my_pid = getpid();</span> +<span class="lineNum"> 927 </span> : : snprintf(buf, PID_BUFLEN, &quot;%i\n&quot;, my_pid); +<span class="lineNum"> 928 </span> : : +<span class="lineNum"> 929 </span> :<span class="lineCov"> 249 : log_msg(LOG_DEBUG, &quot;[+] Writing my PID (%i) to the lock file: %s&quot;,</span> +<span class="lineNum"> 930 </span> : : my_pid, opts-&gt;config[CONF_FWKNOP_PID_FILE]); +<span class="lineNum"> 931 </span> : : +<span class="lineNum"> 932 </span> :<span class="lineCov"> 249 : num_bytes = write(op_fd, buf, strlen(buf));</span> +<span class="lineNum"> 933 </span> : : +<span class="lineNum"> 934 </span>[<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(errno || num_bytes != strlen(buf))</span> +<span class="lineNum"> 935 </span> :<span class="lineNoCov"> 0 : perror(&quot;Lock may not be valid. PID file write error: &quot;);</span> +<span class="lineNum"> 936 </span> : : +<span class="lineNum"> 937 </span> : : /* Sync/flush regardless... +<span class="lineNum"> 938 </span> : : */ +<span class="lineNum"> 939 </span> :<span class="lineCov"> 249 : fsync(op_fd);</span> +<span class="lineNum"> 940 </span> : : +<span class="lineNum"> 941 </span> : : /* Put the lock file discriptor in out options struct so any +<span class="lineNum"> 942 </span> : : * child processes we my spawn can close and release it. +<span class="lineNum"> 943 </span> : : */ +<span class="lineNum"> 944 </span> :<span class="lineCov"> 249 : opts-&gt;lock_fd = op_fd;</span> +<span class="lineNum"> 945 </span> : : +<span class="lineNum"> 946 </span> :<span class="lineCov"> 249 : return 0;</span> +<span class="lineNum"> 947 </span> : : } +<a name="948"><span class="lineNum"> 948 </span> : : </a> +<span class="lineNum"> 949 </span> : : static pid_t +<span class="lineNum"> 950 </span> :<span class="lineCov"> 249 : get_running_pid(const fko_srv_options_t *opts)</span> +<span class="lineNum"> 951 </span> : : { +<span class="lineNum"> 952 </span> :<span class="lineCov"> 249 : int op_fd, is_err, bytes_read = 0;</span> +<span class="lineNum"> 953 </span> :<span class="lineCov"> 249 : char buf[PID_BUFLEN] = {0};</span> +<span class="lineNum"> 954 </span> :<span class="lineCov"> 249 : pid_t rpid = 0;</span> +<span class="lineNum"> 955 </span> : : +<span class="lineNum"> 956 </span> : : +<span class="lineNum"> 957 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(verify_file_perms_ownership(opts-&gt;config[CONF_FWKNOP_PID_FILE]) != 1)</span> +<span class="lineNum"> 958 </span> : : { +<span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;verify_file_perms_ownership() error\n&quot;);</span> +<span class="lineNum"> 960 </span> :<span class="lineNoCov"> 0 : return(rpid);</span> +<span class="lineNum"> 961 </span> : : } +<span class="lineNum"> 962 </span> : : +<span class="lineNum"> 963 </span> :<span class="lineCov"> 498 : op_fd = open(opts-&gt;config[CONF_FWKNOP_PID_FILE], O_RDONLY);</span> +<span class="lineNum"> 964 </span> : : +<span class="lineNum"> 965 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(op_fd == -1)</span> +<span class="lineNum"> 966 </span> : : { +<span class="lineNum"> 967 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((opts-&gt;foreground != 0) &amp;&amp; (opts-&gt;verbose != 0))</span> +<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : perror(&quot;Error trying to open PID file: &quot;);</span> +<span class="lineNum"> 969 </span> : : return(rpid); +<span class="lineNum"> 970 </span> : : } +<span class="lineNum"> 971 </span> : : +<span class="lineNum"> 972 </span> :<span class="lineCov"> 249 : bytes_read = read(op_fd, buf, PID_BUFLEN);</span> +<span class="lineNum"> 973 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if (bytes_read &gt; 0)</span> +<span class="lineNum"> 974 </span> : : { +<span class="lineNum"> 975 </span> :<span class="lineCov"> 249 : buf[PID_BUFLEN-1] = '\0';</span> +<span class="lineNum"> 976 </span> : : /* max pid value is configurable on Linux +<span class="lineNum"> 977 </span> : : */ +<span class="lineNum"> 978 </span> :<span class="lineCov"> 249 : rpid = (pid_t) strtol_wrapper(buf, 0, (2 &lt;&lt; 30),</span> +<span class="lineNum"> 979 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 980 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 981 </span> :<span class="lineNoCov"> 0 : rpid = 0;</span> +<span class="lineNum"> 982 </span> : : } +<span class="lineNum"> 983 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (bytes_read &lt; 0)</span> +<span class="lineNum"> 984 </span> :<span class="lineNoCov"> 0 : perror(&quot;Error trying to read() PID file: &quot;);</span> +<span class="lineNum"> 985 </span> : : +<span class="lineNum"> 986 </span> :<span class="lineCov"> 249 : close(op_fd);</span> +<span class="lineNum"> 987 </span> : : +<span class="lineNum"> 988 </span> :<span class="lineCov"> 249 : return(rpid);</span> +<span class="lineNum"> 989 </span> : : } +<span class="lineNum"> 990 </span> : : +<span class="lineNum"> 991 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 992 </span> : : static void +<span class="lineNum"> 993 </span> : : enable_fault_injections(fko_srv_options_t * const opts) +<span class="lineNum"> 994 </span> : : { +<span class="lineNum"> 995 </span> : : if(opts-&gt;config[CONF_FAULT_INJECTION_TAG] != NULL) +<span class="lineNum"> 996 </span> : : { +<span class="lineNum"> 997 </span> : : if(opts-&gt;verbose) +<span class="lineNum"> 998 </span> : : log_msg(LOG_INFO, &quot;Enable fault injection tag: %s&quot;, +<span class="lineNum"> 999 </span> : : opts-&gt;config[CONF_FAULT_INJECTION_TAG]); +<span class="lineNum"> 1000 </span> : : if(fiu_init(0) != 0) +<span class="lineNum"> 1001 </span> : : { +<span class="lineNum"> 1002 </span> : : fprintf(stderr, &quot;[*] Could not enable fault injection tag: %s\n&quot;, +<span class="lineNum"> 1003 </span> : : opts-&gt;config[CONF_FAULT_INJECTION_TAG]); +<span class="lineNum"> 1004 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1005 </span> : : } +<span class="lineNum"> 1006 </span> : : if (fiu_enable(opts-&gt;config[CONF_FAULT_INJECTION_TAG], 1, NULL, 0) != 0) +<span class="lineNum"> 1007 </span> : : { +<span class="lineNum"> 1008 </span> : : fprintf(stderr, &quot;[*] Could not enable fault injection tag: %s\n&quot;, +<span class="lineNum"> 1009 </span> : : opts-&gt;config[CONF_FAULT_INJECTION_TAG]); +<span class="lineNum"> 1010 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); +<span class="lineNum"> 1011 </span> : : } +<span class="lineNum"> 1012 </span> : : } +<span class="lineNum"> 1013 </span> : : return; +<span class="lineNum"> 1014 </span> : : } +<span class="lineNum"> 1015 </span> : : #endif +<span class="lineNum"> 1016 </span> : : +<span class="lineNum"> 1017 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html new file mode 100644 index 00000000..a03d2dc6 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd_errors.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd_errors.c<span style="font-size: 80%;"> (<a href="fwknopd_errors.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fwknopd_errors.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#110">dump_server_errors</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#99">get_errstr</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#35">fwknopd_errstr</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html new file mode 100644 index 00000000..86f733e6 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd_errors.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd_errors.c<span style="font-size: 80%;"> (<a href="fwknopd_errors.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fwknopd_errors.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#110">dump_server_errors</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#35">fwknopd_errstr</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#99">get_errstr</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html new file mode 100644 index 00000000..a8aa2f2b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html @@ -0,0 +1,217 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd_errors.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd_errors.c<span style="font-size: 80%;"> (source / <a href="fwknopd_errors.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">24</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: errors.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Error message functions for fwknopd +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_errors.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : /* Return a string describing the meaning of the given error code. +<a name="35"><span class="lineNum"> 35 </span> : : */</a> +<span class="lineNum"> 36 </span> : : static const char* +<span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : fwknopd_errstr(const int err_code)</span> +<span class="lineNum"> 38 </span> : : { +<span class="lineNum"> 39 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span> :<span class="lineNoCov"> 0 : switch (err_code)</span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span><span class="branchNoExec" title="Branch 8 was not executed"> # </span> +<span class="lineNum"> </span><span class="branchNoExec" title="Branch 9 was not executed"> # </span><span class="branchNoExec" title="Branch 10 was not executed"> # </span><span class="branchNoExec" title="Branch 11 was not executed"> # </span><span class="branchNoExec" title="Branch 12 was not executed"> # </span><span class="branchNoExec" title="Branch 13 was not executed"> # </span> +<span class="lineNum"> </span> <span class="branchNoExec" title="Branch 14 was not executed"> # </span><span class="branchNoExec" title="Branch 15 was not executed"> # </span><span class="branchNoExec" title="Branch 16 was not executed"> # </span><span class="branchNoExec" title="Branch 17 was not executed"> # </span>] +<span class="lineNum"> 40 </span> : : { +<span class="lineNum"> 41 </span> : : case 0: +<span class="lineNum"> 42 </span> : : return(&quot;Success&quot;); +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : case SPA_MSG_BAD_DATA: +<span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : return(&quot;Data is not a valid SPA message format&quot;);</span> +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> : : case SPA_MSG_LEN_TOO_SMALL: +<span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : return(&quot;Not enough data to be a valid SPA message&quot;);</span> +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : case SPA_MSG_NOT_SPA_DATA: +<span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : return(&quot;Data is not an SPA message&quot;);</span> +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> : : case SPA_MSG_HTTP_NOT_ENABLED: +<span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : return(&quot;SPA via HTTP request, but ENABLE_SPA_OVER_HTTP is not set&quot;);</span> +<span class="lineNum"> 55 </span> : : +<span class="lineNum"> 56 </span> : : case SPA_MSG_FKO_CTX_ERROR: +<span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : return(&quot;Error creating FKO context for incoming data.&quot;);</span> +<span class="lineNum"> 58 </span> : : +<span class="lineNum"> 59 </span> : : case SPA_MSG_DIGEST_ERROR: +<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to retrieve digest from the SPA data.&quot;);</span> +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> : : case SPA_MSG_DIGEST_CACHE_ERROR: +<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : return(&quot;Error trying to access the digest.cache file&quot;);</span> +<span class="lineNum"> 64 </span> : : +<span class="lineNum"> 65 </span> : : case SPA_MSG_REPLAY: +<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return(&quot;Detected SPA message replay&quot;);</span> +<span class="lineNum"> 67 </span> : : +<span class="lineNum"> 68 </span> : : case SPA_MSG_TOO_OLD: +<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : return(&quot;SPA message timestamp is outside the allowable window&quot;);</span> +<span class="lineNum"> 70 </span> : : +<span class="lineNum"> 71 </span> : : case SPA_MSG_ACCESS_DENIED: +<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : return(&quot;SPA message did not pass access checks&quot;);</span> +<span class="lineNum"> 73 </span> : : +<span class="lineNum"> 74 </span> : : case SPA_MSG_COMMAND_ERROR: +<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : return(&quot;An error occurred while executing an SPA command message&quot;);</span> +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : case SPA_MSG_NOT_SUPPORTED: +<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : return(&quot;Unsupported SPA message operation&quot;);</span> +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> : : case SPA_MSG_ERROR: +<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : return(&quot;General SPA message processing error&quot;);</span> +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> : : case FW_RULE_ADD_ERROR: +<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : return(&quot;An error occurred while tring to add a firewall rule&quot;);</span> +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> : : case FW_RULE_DELETE_ERROR: +<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : return(&quot;An error occurred while tring to delete a firewall rule&quot;);</span> +<span class="lineNum"> 88 </span> : : +<span class="lineNum"> 89 </span> : : case FW_RULE_UNKNOWN_ERROR: +<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown/unclassified firewall rule processing error&quot;);</span> +<span class="lineNum"> 91 </span> : : } +<span class="lineNum"> 92 </span> : : +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : return(&quot;Undefined/unknown fwknopd Error&quot;);</span> +<span class="lineNum"> 94 </span> : : } +<span class="lineNum"> 95 </span> : : +<span class="lineNum"> 96 </span> : : /* Attempt to determine the error code type and send the appropriate +<span class="lineNum"> 97 </span> : : * response. Basically assume it is a libfko error if it is not an fwknopd +<span class="lineNum"> 98 </span> : : * error code. +<a name="99"><span class="lineNum"> 99 </span> : : */</a> +<span class="lineNum"> 100 </span> : : const char* +<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : get_errstr(const int err_code)</span> +<span class="lineNum"> 102 </span> : : { +<span class="lineNum"> 103 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! IS_FWKNOPD_ERROR(err_code))</span> +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : return(fko_errstr(err_code));</span> +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return(fwknopd_errstr(err_code));</span> +<span class="lineNum"> 107 </span> : : } +<span class="lineNum"> 108 </span> : : +<span class="lineNum"> 109 </span> : : /* print all server errors (from server/fwknopd_errors.c) to stdout +<a name="110"><span class="lineNum"> 110 </span> : : */</a> +<span class="lineNum"> 111 </span> : : void +<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : dump_server_errors(void)</span> +<span class="lineNum"> 113 </span> : : { +<span class="lineNum"> 114 </span> : : int i; +<span class="lineNum"> 115 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=SPA_MSG_BAD_DATA; i&lt;=SPA_MSG_ERROR; i++)</span> +<span class="lineNum"> 116 </span> : : { +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;err code: %d, err string: '%s'\n&quot;,</span> +<span class="lineNum"> 118 </span> : : i, fwknopd_errstr(i)); +<span class="lineNum"> 119 </span> : : } +<span class="lineNum"> 120 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=FW_RULE_ADD_ERROR; i&lt;=FW_RULE_UNKNOWN_ERROR; i++)</span> +<span class="lineNum"> 121 </span> : : { +<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;err code: %d, err string: '%s'\n&quot;,</span> +<span class="lineNum"> 123 </span> : : i, fwknopd_errstr(i)); +<span class="lineNum"> 124 </span> : : } +<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> +<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 127 </span> : : } +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html new file mode 100644 index 00000000..b42a6b11 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/incoming_spa.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - incoming_spa.c<span style="font-size: 80%;"> (<a href="incoming_spa.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">344</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">230</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="incoming_spa.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#145">get_raw_digest</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#233">get_spa_data_fields</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#276">is_src_match</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#291">incoming_spa</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#51">preprocess_spa_data.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html new file mode 100644 index 00000000..2f83220d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html @@ -0,0 +1,101 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/incoming_spa.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - incoming_spa.c<span style="font-size: 80%;"> (<a href="incoming_spa.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">344</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">230</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="incoming_spa.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#145">get_raw_digest</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#233">get_spa_data_fields</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#291">incoming_spa</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#276">is_src_match</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="incoming_spa.c.gcov.html#51">preprocess_spa_data.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html new file mode 100644 index 00000000..c8cdbbff --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html @@ -0,0 +1,1063 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/incoming_spa.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - incoming_spa.c<span style="font-size: 80%;"> (source / <a href="incoming_spa.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">344</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">5</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">230</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: incoming_spa.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Process an incoming SPA data packet for fwknopd. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;netinet_common.h&quot; +<span class="lineNum"> 33 </span> : : +<span class="lineNum"> 34 </span> : : #if HAVE_SYS_WAIT_H +<span class="lineNum"> 35 </span> : : #include &lt;sys/wait.h&gt; +<span class="lineNum"> 36 </span> : : #endif +<span class="lineNum"> 37 </span> : : +<span class="lineNum"> 38 </span> : : #include &quot;incoming_spa.h&quot; +<span class="lineNum"> 39 </span> : : #include &quot;access.h&quot; +<span class="lineNum"> 40 </span> : : #include &quot;extcmd.h&quot; +<span class="lineNum"> 41 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 42 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 43 </span> : : #include &quot;fw_util.h&quot; +<span class="lineNum"> 44 </span> : : #include &quot;fwknopd_errors.h&quot; +<span class="lineNum"> 45 </span> : : #include &quot;replay_cache.h&quot; +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> : : #define CTX_DUMP_BUFSIZE 4096 /*!&lt; Maximum size allocated to a FKO context dump */ +<span class="lineNum"> 48 </span> : : +<span class="lineNum"> 49 </span> : : /* Validate and in some cases preprocess/reformat the SPA data. Return an +<span class="lineNum"> 50 </span> : : * error code value if there is any indication the data is not valid spa data. +<a name="51"><span class="lineNum"> 51 </span> : : */</a> +<span class="lineNum"> 52 </span> : : static int +<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : preprocess_spa_data(fko_srv_options_t *opts, const char *src_ip)</span> +<span class="lineNum"> 54 </span> : : { +<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : spa_pkt_info_t *spa_pkt = &amp;(opts-&gt;spa_pkt);</span> +<span class="lineNum"> 56 </span> : : +<span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : char *ndx = (char *)&amp;(spa_pkt-&gt;packet_data);</span> +<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : int pkt_data_len = spa_pkt-&gt;packet_data_len;</span> +<span class="lineNum"> 59 </span> : : int i; +<span class="lineNum"> 60 </span> : : +<span class="lineNum"> 61 </span> : : /* At this point, we can reset the packet data length to 0. This is our +<span class="lineNum"> 62 </span> : : * indicator to the rest of the program that we do not have a current +<span class="lineNum"> 63 </span> : : * spa packet to process (after this one that is). +<span class="lineNum"> 64 </span> : : */ +<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : spa_pkt-&gt;packet_data_len = 0;</span> +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> : : /* These two checks are already done in process_packet(), but this is a +<span class="lineNum"> 68 </span> : : * defensive measure to run them again here +<span class="lineNum"> 69 </span> : : */ +<span class="lineNum"> 70 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &lt; MIN_SPA_DATA_SIZE)</span> +<span class="lineNum"> 71 </span> : : return(SPA_MSG_BAD_DATA); +<span class="lineNum"> 72 </span> : : +<span class="lineNum"> 73 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &gt; MAX_SPA_PACKET_LEN)</span> +<span class="lineNum"> 74 </span> : : return(SPA_MSG_BAD_DATA); +<span class="lineNum"> 75 </span> : : +<span class="lineNum"> 76 </span> : : /* Ignore any SPA packets that contain the Rijndael or GnuPG prefixes +<span class="lineNum"> 77 </span> : : * since an attacker might have tacked them on to a previously seen +<span class="lineNum"> 78 </span> : : * SPA packet in an attempt to get past the replay check. And, we're +<span class="lineNum"> 79 </span> : : * no worse off since a legitimate SPA packet that happens to include +<span class="lineNum"> 80 </span> : : * a prefix after the outer one is stripped off won't decrypt properly +<span class="lineNum"> 81 </span> : : * anyway because libfko would not add a new one. +<span class="lineNum"> 82 </span> : : */ +<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(constant_runtime_cmp(ndx, B64_RIJNDAEL_SALT, B64_RIJNDAEL_SALT_STR_LEN) == 0)</span> +<span class="lineNum"> 84 </span> : : return(SPA_MSG_BAD_DATA); +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &gt; MIN_GNUPG_MSG_SIZE</span> +<span class="lineNum"> 87 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; constant_runtime_cmp(ndx, B64_GPG_PREFIX, B64_GPG_PREFIX_STR_LEN) == 0)</span> +<span class="lineNum"> 88 </span> : : return(SPA_MSG_BAD_DATA); +<span class="lineNum"> 89 </span> : : +<span class="lineNum"> 90 </span> : : /* Detect and parse out SPA data from an HTTP request. If the SPA data +<span class="lineNum"> 91 </span> : : * starts with &quot;GET /&quot; and the user agent starts with &quot;Fwknop&quot;, then +<span class="lineNum"> 92 </span> : : * assume it is a SPA over HTTP request. +<span class="lineNum"> 93 </span> : : */ +<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_SPA_OVER_HTTP], &quot;Y&quot;, 1) == 0</span> +<span class="lineNum"> 95 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncasecmp(ndx, &quot;GET /&quot;, 5) == 0</span> +<span class="lineNum"> 96 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strstr(ndx, &quot;User-Agent: Fwknop&quot;) != NULL)</span> +<span class="lineNum"> 97 </span> : : { +<span class="lineNum"> 98 </span> : : /* This looks like an HTTP request, so let's see if we are +<span class="lineNum"> 99 </span> : : * configured to accept such request and if so, find the SPA +<span class="lineNum"> 100 </span> : : * data. +<span class="lineNum"> 101 </span> : : */ +<span class="lineNum"> 102 </span> : : +<span class="lineNum"> 103 </span> : : /* Now extract, adjust (convert characters translated by the fwknop +<span class="lineNum"> 104 </span> : : * client), and reset the SPA message itself. +<span class="lineNum"> 105 </span> : : */ +<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : strlcpy((char *)spa_pkt-&gt;packet_data, ndx+5, pkt_data_len);</span> +<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : pkt_data_len -= 5;</span> +<span class="lineNum"> 108 </span> : : +<span class="lineNum"> 109 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;pkt_data_len; i++)</span> +<span class="lineNum"> 110 </span> : : { +<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(isspace(*ndx)) /* The first space marks the end of the req */</span> +<span class="lineNum"> 112 </span> : : { +<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : *ndx = '\0';</span> +<span class="lineNum"> 114 </span> : : break; +<span class="lineNum"> 115 </span> : : } +<span class="lineNum"> 116 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(*ndx == '-') /* Convert '-' to '+' */</span> +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : *ndx = '+';</span> +<span class="lineNum"> 118 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(*ndx == '_') /* Convert '_' to '/' */</span> +<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : *ndx = '/';</span> +<span class="lineNum"> 120 </span> : : +<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : ndx++;</span> +<span class="lineNum"> 122 </span> : : } +<span class="lineNum"> 123 </span> : : +<span class="lineNum"> 124 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(i &lt; MIN_SPA_DATA_SIZE)</span> +<span class="lineNum"> 125 </span> : : return(SPA_MSG_BAD_DATA); +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : spa_pkt-&gt;packet_data_len = pkt_data_len = i;</span> +<span class="lineNum"> 128 </span> : : } +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> : : /* Require base64-encoded data +<span class="lineNum"> 131 </span> : : */ +<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_base64(spa_pkt-&gt;packet_data, pkt_data_len))</span> +<span class="lineNum"> 133 </span> : : return(SPA_MSG_NOT_SPA_DATA); +<span class="lineNum"> 134 </span> : : +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> : : /* --DSS: Are there other checks we can do here ??? */ +<span class="lineNum"> 137 </span> : : +<span class="lineNum"> 138 </span> : : /* If we made it here, we have no reason to assume this is not SPA data +<span class="lineNum"> 139 </span> : : * (at least until we come up with more checks). +<span class="lineNum"> 140 </span> : : */ +<span class="lineNum"> 141 </span> : : return(FKO_SUCCESS); +<span class="lineNum"> 142 </span> : : } +<span class="lineNum"> 143 </span> : : +<span class="lineNum"> 144 </span> : : /* For replay attack detection +<a name="145"><span class="lineNum"> 145 </span> : : */</a> +<span class="lineNum"> 146 </span> : : static int +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : get_raw_digest(char **digest, char *pkt_data)</span> +<span class="lineNum"> 148 </span> : : { +<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : fko_ctx_t ctx = NULL;</span> +<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : char *tmp_digest = NULL;</span> +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : short raw_digest_type = -1;</span> +<span class="lineNum"> 153 </span> : : +<span class="lineNum"> 154 </span> : : /* initialize an FKO context with no decryption key just so +<span class="lineNum"> 155 </span> : : * we can get the outer message digest +<span class="lineNum"> 156 </span> : : */ +<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : res = fko_new_with_data(&amp;ctx, (char *)pkt_data, NULL, 0,</span> +<span class="lineNum"> 158 </span> : : FKO_DEFAULT_ENC_MODE, NULL, 0, 0); +<span class="lineNum"> 159 </span> : : +<span class="lineNum"> 160 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 161 </span> : : { +<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error initializing FKO context from SPA data: %s&quot;,</span> +<span class="lineNum"> 163 </span> : : fko_errstr(res)); +<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_FKO_CTX_ERROR);</span> +<span class="lineNum"> 167 </span> : : } +<span class="lineNum"> 168 </span> : : +<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : res = fko_set_raw_spa_digest_type(ctx, FKO_DEFAULT_DIGEST);</span> +<span class="lineNum"> 170 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 171 </span> : : { +<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error setting digest type for SPA data: %s&quot;,</span> +<span class="lineNum"> 173 </span> : : fko_errstr(res)); +<span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> +<span class="lineNum"> 177 </span> : : } +<span class="lineNum"> 178 </span> : : +<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : res = fko_get_raw_spa_digest_type(ctx, &amp;raw_digest_type);</span> +<span class="lineNum"> 180 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 181 </span> : : { +<span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error getting digest type for SPA data: %s&quot;,</span> +<span class="lineNum"> 183 </span> : : fko_errstr(res)); +<span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> +<span class="lineNum"> 187 </span> : : } +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> : : /* Make sure the digest type is what we expect +<span class="lineNum"> 190 </span> : : */ +<span class="lineNum"> 191 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(raw_digest_type != FKO_DEFAULT_DIGEST)</span> +<span class="lineNum"> 192 </span> : : { +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error setting digest type for SPA data: %s&quot;,</span> +<span class="lineNum"> 194 </span> : : fko_errstr(res)); +<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> +<span class="lineNum"> 198 </span> : : } +<span class="lineNum"> 199 </span> : : +<span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : res = fko_set_raw_spa_digest(ctx);</span> +<span class="lineNum"> 201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 202 </span> : : { +<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error setting digest for SPA data: %s&quot;,</span> +<span class="lineNum"> 204 </span> : : fko_errstr(res)); +<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> +<span class="lineNum"> 208 </span> : : } +<span class="lineNum"> 209 </span> : : +<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : res = fko_get_raw_spa_digest(ctx, &amp;tmp_digest);</span> +<span class="lineNum"> 211 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 212 </span> : : { +<span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error getting digest from SPA data: %s&quot;,</span> +<span class="lineNum"> 214 </span> : : fko_errstr(res)); +<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> +<span class="lineNum"> 218 </span> : : } +<span class="lineNum"> 219 </span> : : +<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : *digest = strdup(tmp_digest);</span> +<span class="lineNum"> 221 </span> : : +<span class="lineNum"> 222 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*digest == NULL)</span> +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : res = SPA_MSG_ERROR; /* really a strdup() memory allocation problem */</span> +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 227 </span> : : +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : return res;</span> +<span class="lineNum"> 229 </span> : : } +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> : : +<span class="lineNum"> 232 </span> : : /* Popluate a spa_data struct from an initialized (and populated) FKO context. +<a name="233"><span class="lineNum"> 233 </span> : : */</a> +<span class="lineNum"> 234 </span> : : static int +<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : get_spa_data_fields(fko_ctx_t ctx, spa_data_t *spdat)</span> +<span class="lineNum"> 236 </span> : : { +<span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> +<span class="lineNum"> 238 </span> : : +<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : res = fko_get_username(ctx, &amp;(spdat-&gt;username));</span> +<span class="lineNum"> 240 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 241 </span> : : return(res); +<span class="lineNum"> 242 </span> : : +<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : res = fko_get_timestamp(ctx, &amp;(spdat-&gt;timestamp));</span> +<span class="lineNum"> 244 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 245 </span> : : return(res); +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : res = fko_get_version(ctx, &amp;(spdat-&gt;version));</span> +<span class="lineNum"> 248 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 249 </span> : : return(res); +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_message_type(ctx, &amp;(spdat-&gt;message_type));</span> +<span class="lineNum"> 252 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 253 </span> : : return(res); +<span class="lineNum"> 254 </span> : : +<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_message(ctx, &amp;(spdat-&gt;spa_message));</span> +<span class="lineNum"> 256 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 257 </span> : : return(res); +<span class="lineNum"> 258 </span> : : +<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_nat_access(ctx, &amp;(spdat-&gt;nat_access));</span> +<span class="lineNum"> 260 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 261 </span> : : return(res); +<span class="lineNum"> 262 </span> : : +<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_server_auth(ctx, &amp;(spdat-&gt;server_auth));</span> +<span class="lineNum"> 264 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 265 </span> : : return(res); +<span class="lineNum"> 266 </span> : : +<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_client_timeout(ctx, (int *)&amp;(spdat-&gt;client_timeout));</span> +<span class="lineNum"> 268 </span> : : if(res != FKO_SUCCESS) +<span class="lineNum"> 269 </span> : : return(res); +<span class="lineNum"> 270 </span> : : +<span class="lineNum"> 271 </span> : : return(res); +<span class="lineNum"> 272 </span> : : } +<span class="lineNum"> 273 </span> : : +<span class="lineNum"> 274 </span> : : /* Check for access.conf stanza SOURCE match based on SPA packet +<span class="lineNum"> 275 </span> : : * source IP +<a name="276"><span class="lineNum"> 276 </span> : : */</a> +<span class="lineNum"> 277 </span> : : static int +<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : is_src_match(acc_stanza_t *acc, const uint32_t ip)</span> +<span class="lineNum"> 279 </span> : : { +<span class="lineNum"> 280 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (acc)</span> +<span class="lineNum"> 281 </span> : : { +<span class="lineNum"> 282 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(compare_addr_list(acc-&gt;source_list, ip))</span> +<span class="lineNum"> 283 </span> : : return 1; +<span class="lineNum"> 284 </span> : : +<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 286 </span> : : } +<span class="lineNum"> 287 </span> : : return 0; +<span class="lineNum"> 288 </span> : : } +<span class="lineNum"> 289 </span> : : +<span class="lineNum"> 290 </span> : : /* Process the SPA packet data +<a name="291"><span class="lineNum"> 291 </span> : : */</a> +<span class="lineNum"> 292 </span> : : void +<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : incoming_spa(fko_srv_options_t *opts)</span> +<span class="lineNum"> 294 </span> : : { +<span class="lineNum"> 295 </span> : : /* Always a good idea to initialize ctx to null if it will be used +<span class="lineNum"> 296 </span> : : * repeatedly (especially when using fko_new_with_data()). +<span class="lineNum"> 297 </span> : : */ +<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : fko_ctx_t ctx = NULL;</span> +<span class="lineNum"> 299 </span> : : +<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : char *spa_ip_demark, *gpg_id, *gpg_fpr, *raw_digest = NULL;</span> +<span class="lineNum"> 301 </span> : : time_t now_ts; +<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : int res, ts_diff, enc_type, stanza_num=0, pid_status=0;</span> +<span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : int added_replay_digest = 0, pkt_data_len=0;</span> +<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : int is_err, cmd_exec_success = 0, attempted_decrypt = 0;</span> +<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : int conf_pkt_age = 0;</span> +<span class="lineNum"> 306 </span> : : char dump_buf[CTX_DUMP_BUFSIZE]; +<span class="lineNum"> 307 </span> : : +<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : spa_pkt_info_t *spa_pkt = &amp;(opts-&gt;spa_pkt);</span> +<span class="lineNum"> 309 </span> : : +<span class="lineNum"> 310 </span> : : /* This will hold our pertinent SPA data. +<span class="lineNum"> 311 </span> : : */ +<span class="lineNum"> 312 </span> : : spa_data_t spadat; +<span class="lineNum"> 313 </span> : : +<span class="lineNum"> 314 </span> : : /* Loop through all access stanzas looking for a match +<span class="lineNum"> 315 </span> : : */ +<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> +<span class="lineNum"> 317 </span> : : acc_string_list_t *gpg_id_ndx; +<span class="lineNum"> 318 </span> : : acc_string_list_t *gpg_fpr_ndx; +<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : unsigned char is_gpg_match = 0;</span> +<span class="lineNum"> 320 </span> : : +<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(spa_pkt-&gt;packet_src_ip),</span> +<span class="lineNum"> 322 </span> : : spadat.pkt_source_ip, sizeof(spadat.pkt_source_ip)); +<span class="lineNum"> 323 </span> : : +<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(spa_pkt-&gt;packet_dst_ip),</span> +<span class="lineNum"> 325 </span> : : spadat.pkt_destination_ip, sizeof(spadat.pkt_destination_ip)); +<span class="lineNum"> 326 </span> : : +<span class="lineNum"> 327 </span> : : /* At this point, we want to validate and (if needed) preprocess the +<span class="lineNum"> 328 </span> : : * SPA data and/or to be reasonably sure we have a SPA packet (i.e +<span class="lineNum"> 329 </span> : : * try to eliminate obvious non-spa packets). +<span class="lineNum"> 330 </span> : : */ +<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : pkt_data_len = spa_pkt-&gt;packet_data_len;</span> +<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : res = preprocess_spa_data(opts, spadat.pkt_source_ip);</span> +<span class="lineNum"> 333 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 334 </span> : : { +<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;[%s] preprocess_spa_data() returned error %i: '%s' for incoming packet.&quot;,</span> +<span class="lineNum"> 336 </span> : : spadat.pkt_source_ip, res, get_errstr(res)); +<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 338 </span> : : } +<span class="lineNum"> 339 </span> : : +<span class="lineNum"> 340 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;foreground == 1 &amp;&amp; opts-&gt;verbose &gt; 2)</span> +<span class="lineNum"> 341 </span> : : { +<span class="lineNum"> 342 </span> : : printf(&quot;[+] candidate SPA packet payload:\n&quot;); +<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : hex_dump(spa_pkt-&gt;packet_data, pkt_data_len);</span> +<span class="lineNum"> 344 </span> : : } +<span class="lineNum"> 345 </span> : : +<span class="lineNum"> 346 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_SPA_PACKET_AGING], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 347 </span> : : { +<span class="lineNum"> 348 </span> :<span class="lineNoCov"> 0 : conf_pkt_age = strtol_wrapper(opts-&gt;config[CONF_MAX_SPA_PACKET_AGE],</span> +<span class="lineNum"> 349 </span> : : 0, RCHK_MAX_SPA_PACKET_AGE, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 350 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 351 </span> : : { +<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] [%s] invalid MAX_SPA_PACKET_AGE&quot;, spadat.pkt_source_ip);</span> +<span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 354 </span> : : } +<span class="lineNum"> 355 </span> : : } +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_src_match(opts-&gt;acc_stanzas, ntohl(spa_pkt-&gt;packet_src_ip)))</span> +<span class="lineNum"> 358 </span> : : { +<span class="lineNum"> 359 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 360 </span> : : { +<span class="lineNum"> 361 </span> : : /* Check for a replay attack +<span class="lineNum"> 362 </span> : : */ +<span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : res = get_raw_digest(&amp;raw_digest, (char *)spa_pkt-&gt;packet_data);</span> +<span class="lineNum"> 364 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 365 </span> : : { +<span class="lineNum"> 366 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (raw_digest != NULL)</span> +<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : free(raw_digest);</span> +<span class="lineNum"> 368 </span> : : return; +<span class="lineNum"> 369 </span> : : } +<span class="lineNum"> 370 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (raw_digest == NULL)</span> +<span class="lineNum"> 371 </span> : : return; +<span class="lineNum"> 372 </span> : : +<span class="lineNum"> 373 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_replay(opts, raw_digest) != SPA_MSG_SUCCESS)</span> +<span class="lineNum"> 374 </span> : : { +<span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : free(raw_digest);</span> +<span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 377 </span> : : } +<span class="lineNum"> 378 </span> : : } +<span class="lineNum"> 379 </span> : : } +<span class="lineNum"> 380 </span> : : else +<span class="lineNum"> 381 </span> : : { +<span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 383 </span> : : &quot;No access data found for source IP: %s&quot;, spadat.pkt_source_ip +<span class="lineNum"> 384 </span> : : ); +<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 386 </span> : : } +<span class="lineNum"> 387 </span> : : +<span class="lineNum"> 388 </span> : : /* Now that we know there is a matching access.conf stanza and the +<span class="lineNum"> 389 </span> : : * incoming SPA packet is not a replay, see if we should grant any +<span class="lineNum"> 390 </span> : : * access +<span class="lineNum"> 391 </span> : : */ +<span class="lineNum"> 392 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(acc)</span> +<span class="lineNum"> 393 </span> : : { +<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : res = FKO_SUCCESS;</span> +<span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : cmd_exec_success = 0;</span> +<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : attempted_decrypt = 0;</span> +<span class="lineNum"> 397 </span> :<span class="lineNoCov"> 0 : stanza_num++;</span> +<span class="lineNum"> 398 </span> : : +<span class="lineNum"> 399 </span> : : /* Start access loop with a clean FKO context +<span class="lineNum"> 400 </span> : : */ +<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx != NULL)</span> +<span class="lineNum"> 402 </span> : : { +<span class="lineNum"> 403 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 405 </span> : : &quot;[%s] (stanza #%d) fko_destroy() could not zero out sensitive data buffer.&quot;, +<span class="lineNum"> 406 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 407 </span> : : ); +<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 409 </span> : : } +<span class="lineNum"> 410 </span> : : +<span class="lineNum"> 411 </span> : : /* Check for a match for the SPA source and destination IP and the access stanza +<span class="lineNum"> 412 </span> : : */ +<span class="lineNum"> 413 </span>[<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>][<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! compare_addr_list(acc-&gt;source_list, ntohl(spa_pkt-&gt;packet_src_ip)) ||</span> +<span class="lineNum"> 414 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : (acc-&gt;destination_list != NULL &amp;&amp; ! compare_addr_list(acc-&gt;destination_list, ntohl(spa_pkt-&gt;packet_dst_ip))))</span> +<span class="lineNum"> 415 </span> : : { +<span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> +<span class="lineNum"> 417 </span> : : &quot;(stanza #%d) SPA packet (%s -&gt; %s) filtered by SOURCE and/or DESTINATION criteria&quot;, +<span class="lineNum"> 418 </span> : : stanza_num, spadat.pkt_source_ip, spadat.pkt_destination_ip); +<span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 421 </span> : : } +<span class="lineNum"> 422 </span> : : +<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;(stanza #%d) SPA Packet from IP: %s received with access source match&quot;,</span> +<span class="lineNum"> 424 </span> : : stanza_num, spadat.pkt_source_ip); +<span class="lineNum"> 425 </span> : : +<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;SPA Packet: '%s'&quot;, spa_pkt-&gt;packet_data);</span> +<span class="lineNum"> 427 </span> : : +<span class="lineNum"> 428 </span> : : /* Make sure this access stanza has not expired +<span class="lineNum"> 429 </span> : : */ +<span class="lineNum"> 430 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;access_expire_time &gt; 0)</span> +<span class="lineNum"> 431 </span> : : { +<span class="lineNum"> 432 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;expired)</span> +<span class="lineNum"> 433 </span> : : { +<span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 436 </span> : : } +<span class="lineNum"> 437 </span> : : else +<span class="lineNum"> 438 </span> : : { +<span class="lineNum"> 439 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(time(NULL) &gt; acc-&gt;access_expire_time)</span> +<span class="lineNum"> 440 </span> : : { +<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[%s] (stanza #%d) Access stanza has expired&quot;,</span> +<span class="lineNum"> 442 </span> : : spadat.pkt_source_ip, stanza_num); +<span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : acc-&gt;expired = 1;</span> +<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 446 </span> : : } +<span class="lineNum"> 447 </span> : : } +<span class="lineNum"> 448 </span> : : } +<span class="lineNum"> 449 </span> : : +<span class="lineNum"> 450 </span> : : /* Get encryption type and try its decoding routine first (if the key +<span class="lineNum"> 451 </span> : : * for that type is set) +<span class="lineNum"> 452 </span> : : */ +<span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : enc_type = fko_encryption_type((char *)spa_pkt-&gt;packet_data);</span> +<span class="lineNum"> 454 </span> : : +<span class="lineNum"> 455 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;use_rijndael)</span> +<span class="lineNum"> 456 </span> : : { +<span class="lineNum"> 457 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (acc-&gt;key == NULL)</span> +<span class="lineNum"> 458 </span> : : { +<span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 460 </span> : : &quot;[%s] (stanza #%d) No KEY for RIJNDAEL encrypted messages&quot;, +<span class="lineNum"> 461 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 462 </span> : : ); +<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 465 </span> : : } +<span class="lineNum"> 466 </span> : : +<span class="lineNum"> 467 </span> : : /* Command mode messages may be quite long +<span class="lineNum"> 468 </span> : : */ +<span class="lineNum"> 469 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;enable_cmd_exec || enc_type == FKO_ENCRYPTION_RIJNDAEL)</span> +<span class="lineNum"> 470 </span> : : { +<span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : res = fko_new_with_data(&amp;ctx, (char *)spa_pkt-&gt;packet_data,</span> +<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : acc-&gt;key, acc-&gt;key_len, acc-&gt;encryption_mode, acc-&gt;hmac_key,</span> +<span class="lineNum"> 473 </span> : : acc-&gt;hmac_key_len, acc-&gt;hmac_type); +<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : attempted_decrypt = 1;</span> +<span class="lineNum"> 475 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == FKO_SUCCESS)</span> +<span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : cmd_exec_success = 1;</span> +<span class="lineNum"> 477 </span> : : } +<span class="lineNum"> 478 </span> : : } +<span class="lineNum"> 479 </span> : : +<span class="lineNum"> 480 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;use_gpg &amp;&amp; enc_type == FKO_ENCRYPTION_GPG &amp;&amp; cmd_exec_success == 0)</span> +<span class="lineNum"> 481 </span> : : { +<span class="lineNum"> 482 </span> : : /* For GPG we create the new context without decrypting on the fly +<span class="lineNum"> 483 </span> : : * so we can set some GPG parameters first. +<span class="lineNum"> 484 </span> : : */ +<span class="lineNum"> 485 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_decrypt_pw != NULL || acc-&gt;gpg_allow_no_pw)</span> +<span class="lineNum"> 486 </span> : : { +<span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : res = fko_new_with_data(&amp;ctx, (char *)spa_pkt-&gt;packet_data, NULL,</span> +<span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : 0, FKO_ENC_MODE_ASYMMETRIC, acc-&gt;hmac_key,</span> +<span class="lineNum"> 489 </span> : : acc-&gt;hmac_key_len, acc-&gt;hmac_type); +<span class="lineNum"> 490 </span> : : +<span class="lineNum"> 491 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 492 </span> : : { +<span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 494 </span> : : &quot;[%s] (stanza #%d) Error creating fko context (before decryption): %s&quot;, +<span class="lineNum"> 495 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res) +<span class="lineNum"> 496 </span> : : ); +<span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 499 </span> : : } +<span class="lineNum"> 500 </span> : : +<span class="lineNum"> 501 </span> : : /* Set whatever GPG parameters we have. +<span class="lineNum"> 502 </span> : : */ +<span class="lineNum"> 503 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_exe != NULL)</span> +<span class="lineNum"> 504 </span> : : { +<span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_exe(ctx, acc-&gt;gpg_exe);</span> +<span class="lineNum"> 506 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 507 </span> : : { +<span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 509 </span> : : &quot;[%s] (stanza #%d) Error setting GPG path %s: %s&quot;, +<span class="lineNum"> 510 </span> : : spadat.pkt_source_ip, stanza_num, acc-&gt;gpg_exe, +<span class="lineNum"> 511 </span> : : fko_errstr(res) +<span class="lineNum"> 512 </span> : : ); +<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 515 </span> : : } +<span class="lineNum"> 516 </span> : : } +<span class="lineNum"> 517 </span> : : +<span class="lineNum"> 518 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_home_dir != NULL)</span> +<span class="lineNum"> 519 </span> : : { +<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_home_dir(ctx, acc-&gt;gpg_home_dir);</span> +<span class="lineNum"> 521 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 522 </span> : : { +<span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 524 </span> : : &quot;[%s] (stanza #%d) Error setting GPG keyring path to %s: %s&quot;, +<span class="lineNum"> 525 </span> : : spadat.pkt_source_ip, stanza_num, acc-&gt;gpg_home_dir, +<span class="lineNum"> 526 </span> : : fko_errstr(res) +<span class="lineNum"> 527 </span> : : ); +<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 530 </span> : : } +<span class="lineNum"> 531 </span> : : } +<span class="lineNum"> 532 </span> : : +<span class="lineNum"> 533 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_decrypt_id != NULL)</span> +<span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_recipient(ctx, acc-&gt;gpg_decrypt_id);</span> +<span class="lineNum"> 535 </span> : : +<span class="lineNum"> 536 </span> : : /* If GPG_REQUIRE_SIG is set for this acc stanza, then set +<span class="lineNum"> 537 </span> : : * the FKO context accordingly and check the other GPG Sig- +<span class="lineNum"> 538 </span> : : * related parameters. This also applies when REMOTE_ID is +<span class="lineNum"> 539 </span> : : * set. +<span class="lineNum"> 540 </span> : : */ +<span class="lineNum"> 541 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_require_sig)</span> +<span class="lineNum"> 542 </span> : : { +<span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signature_verify(ctx, 1);</span> +<span class="lineNum"> 544 </span> : : +<span class="lineNum"> 545 </span> : : /* Set whether or not to ignore signature verification errors. +<span class="lineNum"> 546 </span> : : */ +<span class="lineNum"> 547 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_ignore_verify_error(ctx, acc-&gt;gpg_ignore_sig_error);</span> +<span class="lineNum"> 548 </span> : : } +<span class="lineNum"> 549 </span> : : else +<span class="lineNum"> 550 </span> : : { +<span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signature_verify(ctx, 0);</span> +<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_ignore_verify_error(ctx, 1);</span> +<span class="lineNum"> 553 </span> : : } +<span class="lineNum"> 554 </span> : : +<span class="lineNum"> 555 </span> : : /* Now decrypt the data. +<span class="lineNum"> 556 </span> : : */ +<span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : res = fko_decrypt_spa_data(ctx, acc-&gt;gpg_decrypt_pw, 0);</span> +<span class="lineNum"> 558 </span> :<span class="lineNoCov"> 0 : attempted_decrypt = 1;</span> +<span class="lineNum"> 559 </span> : : } +<span class="lineNum"> 560 </span> : : } +<span class="lineNum"> 561 </span> : : +<span class="lineNum"> 562 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(attempted_decrypt == 0)</span> +<span class="lineNum"> 563 </span> : : { +<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> +<span class="lineNum"> 565 </span> : : &quot;[%s] (stanza #%d) No stanza encryption mode match for encryption type: %i.&quot;, +<span class="lineNum"> 566 </span> : : spadat.pkt_source_ip, stanza_num, enc_type); +<span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 569 </span> : : } +<span class="lineNum"> 570 </span> : : +<span class="lineNum"> 571 </span> : : /* Do we have a valid FKO context? Did the SPA decrypt properly? +<span class="lineNum"> 572 </span> : : */ +<span class="lineNum"> 573 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 574 </span> : : { +<span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Error creating fko context: %s&quot;,</span> +<span class="lineNum"> 576 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); +<span class="lineNum"> 577 </span> : : +<span class="lineNum"> 578 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_GPG_ERROR(res))</span> +<span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) - GPG ERROR: %s&quot;,</span> +<span class="lineNum"> 580 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); +<span class="lineNum"> 581 </span> : : +<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 584 </span> : : } +<span class="lineNum"> 585 </span> : : +<span class="lineNum"> 586 </span> : : /* Add this SPA packet into the replay detection cache +<span class="lineNum"> 587 </span> : : */ +<span class="lineNum"> 588 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!opts-&gt;test &amp;&amp; added_replay_digest == 0</span> +<span class="lineNum"> 589 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncasecmp(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 590 </span> : : { +<span class="lineNum"> 591 </span> : : +<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : res = add_replay(opts, raw_digest);</span> +<span class="lineNum"> 593 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (res != SPA_MSG_SUCCESS)</span> +<span class="lineNum"> 594 </span> : : { +<span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Could not add digest to replay cache&quot;,</span> +<span class="lineNum"> 596 </span> : : spadat.pkt_source_ip, stanza_num); +<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 599 </span> : : } +<span class="lineNum"> 600 </span> : : added_replay_digest = 1; +<span class="lineNum"> 601 </span> : : } +<span class="lineNum"> 602 </span> : : +<span class="lineNum"> 603 </span> : : /* At this point, we assume the SPA data is valid. Now we need to see +<span class="lineNum"> 604 </span> : : * if it meets our access criteria. +<span class="lineNum"> 605 </span> : : */ +<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;[%s] (stanza #%d) SPA Decode (res=%i):&quot;,</span> +<span class="lineNum"> 607 </span> : : spadat.pkt_source_ip, stanza_num, res); +<span class="lineNum"> 608 </span> : : +<span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : res = dump_ctx_to_buffer(ctx, dump_buf, sizeof(dump_buf));</span> +<span class="lineNum"> 610 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (res == FKO_SUCCESS)</span> +<span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;%s&quot;, dump_buf);</span> +<span class="lineNum"> 612 </span> : : else +<span class="lineNum"> 613 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Unable to dump FKO context: %s&quot;, fko_errstr(res));</span> +<span class="lineNum"> 614 </span> : : +<span class="lineNum"> 615 </span> : : /* First, if this is a GPG message, and GPG_REMOTE_ID list is not empty, +<span class="lineNum"> 616 </span> : : * then we need to make sure this incoming message is signer ID matches +<span class="lineNum"> 617 </span> : : * an entry in the list. +<span class="lineNum"> 618 </span> : : */ +<span class="lineNum"> 619 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(enc_type == FKO_ENCRYPTION_GPG &amp;&amp; acc-&gt;gpg_require_sig)</span> +<span class="lineNum"> 620 </span> : : { +<span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : res = fko_get_gpg_signature_id(ctx, &amp;gpg_id);</span> +<span class="lineNum"> 622 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 623 </span> : : { +<span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 625 </span> : : &quot;[%s] (stanza #%d) Error pulling the GPG signature ID from the context: %s&quot;, +<span class="lineNum"> 626 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); +<span class="lineNum"> 627 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 628 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 629 </span> : : } +<span class="lineNum"> 630 </span> : : +<span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : res = fko_get_gpg_signature_fpr(ctx, &amp;gpg_fpr);</span> +<span class="lineNum"> 632 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 633 </span> : : { +<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 635 </span> : : &quot;[%s] (stanza #%d) Error pulling the GPG fingerprint from the context: %s&quot;, +<span class="lineNum"> 636 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); +<span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 639 </span> : : } +<span class="lineNum"> 640 </span> : : +<span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[%s] (stanza #%d) Incoming SPA data signed by '%s' (fingerprint '%s').&quot;,</span> +<span class="lineNum"> 642 </span> : : spadat.pkt_source_ip, stanza_num, gpg_id, gpg_fpr); +<span class="lineNum"> 643 </span> : : +<span class="lineNum"> 644 </span> : : /* prefer GnuPG fingerprint match if so configured +<span class="lineNum"> 645 </span> : : */ +<span class="lineNum"> 646 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_remote_fpr != NULL)</span> +<span class="lineNum"> 647 </span> : : { +<span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : is_gpg_match = 0;</span> +<span class="lineNum"> 649 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(gpg_fpr_ndx = acc-&gt;gpg_remote_fpr_list;</span> +<span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : gpg_fpr_ndx != NULL; gpg_fpr_ndx=gpg_fpr_ndx-&gt;next)</span> +<span class="lineNum"> 651 </span> : : { +<span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : res = fko_gpg_signature_fpr_match(ctx,</span> +<span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : gpg_fpr_ndx-&gt;str, &amp;is_gpg_match);</span> +<span class="lineNum"> 654 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 655 </span> : : { +<span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 657 </span> : : &quot;[%s] (stanza #%d) Error in GPG signature comparision: %s&quot;, +<span class="lineNum"> 658 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); +<span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 660 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 661 </span> : : } +<span class="lineNum"> 662 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_gpg_match)</span> +<span class="lineNum"> 663 </span> : : break; +<span class="lineNum"> 664 </span> : : } +<span class="lineNum"> 665 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_gpg_match)</span> +<span class="lineNum"> 666 </span> : : { +<span class="lineNum"> 667 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 668 </span> : : &quot;[%s] (stanza #%d) Incoming SPA packet signed by: %s, but that fingerprint is not in the GPG_FINGERPRINT_ID list.&quot;, +<span class="lineNum"> 669 </span> : : spadat.pkt_source_ip, stanza_num, gpg_fpr); +<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 671 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 672 </span> : : } +<span class="lineNum"> 673 </span> : : } +<span class="lineNum"> 674 </span> : : +<span class="lineNum"> 675 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_remote_id != NULL)</span> +<span class="lineNum"> 676 </span> : : { +<span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : is_gpg_match = 0;</span> +<span class="lineNum"> 678 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(gpg_id_ndx = acc-&gt;gpg_remote_id_list;</span> +<span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : gpg_id_ndx != NULL; gpg_id_ndx=gpg_id_ndx-&gt;next)</span> +<span class="lineNum"> 680 </span> : : { +<span class="lineNum"> 681 </span> :<span class="lineNoCov"> 0 : res = fko_gpg_signature_id_match(ctx,</span> +<span class="lineNum"> 682 </span> :<span class="lineNoCov"> 0 : gpg_id_ndx-&gt;str, &amp;is_gpg_match);</span> +<span class="lineNum"> 683 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 684 </span> : : { +<span class="lineNum"> 685 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 686 </span> : : &quot;[%s] (stanza #%d) Error in GPG signature comparision: %s&quot;, +<span class="lineNum"> 687 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); +<span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 690 </span> : : } +<span class="lineNum"> 691 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_gpg_match)</span> +<span class="lineNum"> 692 </span> : : break; +<span class="lineNum"> 693 </span> : : } +<span class="lineNum"> 694 </span> : : +<span class="lineNum"> 695 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_gpg_match)</span> +<span class="lineNum"> 696 </span> : : { +<span class="lineNum"> 697 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 698 </span> : : &quot;[%s] (stanza #%d) Incoming SPA packet signed by ID: %s, but that ID is not in the GPG_REMOTE_ID list.&quot;, +<span class="lineNum"> 699 </span> : : spadat.pkt_source_ip, stanza_num, gpg_id); +<span class="lineNum"> 700 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 702 </span> : : } +<span class="lineNum"> 703 </span> : : } +<span class="lineNum"> 704 </span> : : } +<span class="lineNum"> 705 </span> : : +<span class="lineNum"> 706 </span> : : /* Populate our spa data struct for future reference. +<span class="lineNum"> 707 </span> : : */ +<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : res = get_spa_data_fields(ctx, &amp;spadat);</span> +<span class="lineNum"> 709 </span> : : +<span class="lineNum"> 710 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> +<span class="lineNum"> 711 </span> : : { +<span class="lineNum"> 712 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[%s] (stanza #%d) Unexpected error pulling SPA data from the context: %s&quot;,</span> +<span class="lineNum"> 713 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); +<span class="lineNum"> 714 </span> : : +<span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 716 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 717 </span> : : } +<span class="lineNum"> 718 </span> : : +<span class="lineNum"> 719 </span> : : /* Figure out what our timeout will be. If it is specified in the SPA +<span class="lineNum"> 720 </span> : : * data, then use that. If not, try the FW_ACCESS_TIMEOUT from the +<span class="lineNum"> 721 </span> : : * access.conf file (if there is one). Otherwise use the default. +<span class="lineNum"> 722 </span> : : */ +<span class="lineNum"> 723 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat.client_timeout &gt; 0)</span> +<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : spadat.fw_access_timeout = spadat.client_timeout;</span> +<span class="lineNum"> 725 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(acc-&gt;fw_access_timeout &gt; 0)</span> +<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : spadat.fw_access_timeout = acc-&gt;fw_access_timeout;</span> +<span class="lineNum"> 727 </span> : : else +<span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : spadat.fw_access_timeout = DEF_FW_ACCESS_TIMEOUT;</span> +<span class="lineNum"> 729 </span> : : +<span class="lineNum"> 730 </span> : : /* Check packet age if so configured. +<span class="lineNum"> 731 </span> : : */ +<span class="lineNum"> 732 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_SPA_PACKET_AGING], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 733 </span> : : { +<span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : time(&amp;now_ts);</span> +<span class="lineNum"> 735 </span> : : +<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : ts_diff = labs(now_ts - spadat.timestamp);</span> +<span class="lineNum"> 737 </span> : : +<span class="lineNum"> 738 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ts_diff &gt; conf_pkt_age)</span> +<span class="lineNum"> 739 </span> : : { +<span class="lineNum"> 740 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) SPA data time difference is too great (%i seconds).&quot;,</span> +<span class="lineNum"> 741 </span> : : spadat.pkt_source_ip, stanza_num, ts_diff); +<span class="lineNum"> 742 </span> : : +<span class="lineNum"> 743 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 744 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 745 </span> : : } +<span class="lineNum"> 746 </span> : : } +<span class="lineNum"> 747 </span> : : +<span class="lineNum"> 748 </span> : : /* At this point, we have enough to check the embedded (or packet source) +<span class="lineNum"> 749 </span> : : * IP address against the defined access rights. We start by splitting +<span class="lineNum"> 750 </span> : : * the spa msg source IP from the remainder of the message. +<span class="lineNum"> 751 </span> : : */ +<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : spa_ip_demark = strchr(spadat.spa_message, ',');</span> +<span class="lineNum"> 753 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spa_ip_demark == NULL)</span> +<span class="lineNum"> 754 </span> : : { +<span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Error parsing SPA message string: %s&quot;,</span> +<span class="lineNum"> 756 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); +<span class="lineNum"> 757 </span> : : +<span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 760 </span> : : } +<span class="lineNum"> 761 </span> : : +<span class="lineNum"> 762 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((spa_ip_demark-spadat.spa_message) &lt; MIN_IPV4_STR_LEN-1</span> +<span class="lineNum"> 763 </span> :<span class="lineNoCov"> 0 : || (spa_ip_demark-spadat.spa_message) &gt; MAX_IPV4_STR_LEN)</span> +<span class="lineNum"> 764 </span> : : { +<span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Invalid source IP in SPA message, ignoring SPA packet&quot;,</span> +<span class="lineNum"> 766 </span> : : spadat.pkt_source_ip, stanza_num); +<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 768 </span> : : } +<span class="lineNum"> 769 </span> : : +<span class="lineNum"> 770 </span> :<span class="lineNoCov"> 0 : strlcpy(spadat.spa_message_src_ip,</span> +<span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : spadat.spa_message, (spa_ip_demark-spadat.spa_message)+1);</span> +<span class="lineNum"> 772 </span> : : +<span class="lineNum"> 773 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(spadat.spa_message_src_ip))</span> +<span class="lineNum"> 774 </span> : : { +<span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Invalid source IP in SPA message, ignoring SPA packet&quot;,</span> +<span class="lineNum"> 776 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); +<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 778 </span> : : } +<span class="lineNum"> 779 </span> : : +<span class="lineNum"> 780 </span> :<span class="lineNoCov"> 0 : strlcpy(spadat.spa_message_remain, spa_ip_demark+1, MAX_DECRYPTED_SPA_LEN);</span> +<span class="lineNum"> 781 </span> : : +<span class="lineNum"> 782 </span> : : /* If use source IP was requested (embedded IP of 0.0.0.0), make sure it +<span class="lineNum"> 783 </span> : : * is allowed. +<span class="lineNum"> 784 </span> : : */ +<span class="lineNum"> 785 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcmp(spadat.spa_message_src_ip, &quot;0.0.0.0&quot;) == 0)</span> +<span class="lineNum"> 786 </span> : : { +<span class="lineNum"> 787 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;require_source_address)</span> +<span class="lineNum"> 788 </span> : : { +<span class="lineNum"> 789 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 790 </span> : : &quot;[%s] (stanza #%d) Got 0.0.0.0 when valid source IP was required.&quot;, +<span class="lineNum"> 791 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 792 </span> : : ); +<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 794 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 795 </span> : : } +<span class="lineNum"> 796 </span> : : +<span class="lineNum"> 797 </span> :<span class="lineNoCov"> 0 : spadat.use_src_ip = spadat.pkt_source_ip;</span> +<span class="lineNum"> 798 </span> : : } +<span class="lineNum"> 799 </span> : : else +<span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : spadat.use_src_ip = spadat.spa_message_src_ip;</span> +<span class="lineNum"> 801 </span> : : +<span class="lineNum"> 802 </span> : : /* If REQUIRE_USERNAME is set, make sure the username in this SPA data +<span class="lineNum"> 803 </span> : : * matches. +<span class="lineNum"> 804 </span> : : */ +<span class="lineNum"> 805 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;require_username != NULL)</span> +<span class="lineNum"> 806 </span> : : { +<span class="lineNum"> 807 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcmp(spadat.username, acc-&gt;require_username) != 0)</span> +<span class="lineNum"> 808 </span> : : { +<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 810 </span> : : &quot;[%s] (stanza #%d) Username in SPA data (%s) does not match required username: %s&quot;, +<span class="lineNum"> 811 </span> : : spadat.pkt_source_ip, stanza_num, spadat.username, acc-&gt;require_username +<span class="lineNum"> 812 </span> : : ); +<span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 815 </span> : : } +<span class="lineNum"> 816 </span> : : } +<span class="lineNum"> 817 </span> : : +<span class="lineNum"> 818 </span> : : /* Take action based on SPA message type. +<span class="lineNum"> 819 </span> : : */ +<span class="lineNum"> 820 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat.message_type == FKO_LOCAL_NAT_ACCESS_MSG</span> +<span class="lineNum"> 821 </span> : : || spadat.message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG +<span class="lineNum"> 822 </span> :<span class="lineNoCov"> 0 : || spadat.message_type == FKO_NAT_ACCESS_MSG</span> +<span class="lineNum"> 823 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || spadat.message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG)</span> +<span class="lineNum"> 824 </span> : : { +<span class="lineNum"> 825 </span> : : #if FIREWALL_FIREWALLD +<span class="lineNum"> 826 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1)!=0)</span> +<span class="lineNum"> 827 </span> : : { +<span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 829 </span> : : &quot;(stanza #%d) SPA packet from %s requested NAT access, but is not enabled&quot;, +<span class="lineNum"> 830 </span> : : stanza_num, spadat.pkt_source_ip +<span class="lineNum"> 831 </span> : : ); +<span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 834 </span> : : } +<span class="lineNum"> 835 </span> : : #elif FIREWALL_IPTABLES +<span class="lineNum"> 836 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING], &quot;Y&quot;, 1)!=0) +<span class="lineNum"> 837 </span> : : { +<span class="lineNum"> 838 </span> : : log_msg(LOG_WARNING, +<span class="lineNum"> 839 </span> : : &quot;(stanza #%d) SPA packet from %s requested NAT access, but is not enabled&quot;, +<span class="lineNum"> 840 </span> : : stanza_num, spadat.pkt_source_ip +<span class="lineNum"> 841 </span> : : ); +<span class="lineNum"> 842 </span> : : acc = acc-&gt;next; +<span class="lineNum"> 843 </span> : : continue; +<span class="lineNum"> 844 </span> : : } +<span class="lineNum"> 845 </span> : : #else +<span class="lineNum"> 846 </span> : : log_msg(LOG_WARNING, +<span class="lineNum"> 847 </span> : : &quot;(stanza #%d) SPA packet from %s requested unsupported NAT access&quot;, +<span class="lineNum"> 848 </span> : : stanza_num, spadat.pkt_source_ip +<span class="lineNum"> 849 </span> : : ); +<span class="lineNum"> 850 </span> : : acc = acc-&gt;next; +<span class="lineNum"> 851 </span> : : continue; +<span class="lineNum"> 852 </span> : : #endif +<span class="lineNum"> 853 </span> : : } +<span class="lineNum"> 854 </span> : : +<span class="lineNum"> 855 </span> : : /* Command messages. +<span class="lineNum"> 856 </span> : : */ +<span class="lineNum"> 857 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat.message_type == FKO_COMMAND_MSG)</span> +<span class="lineNum"> 858 </span> : : { +<span class="lineNum"> 859 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!acc-&gt;enable_cmd_exec)</span> +<span class="lineNum"> 860 </span> : : { +<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 862 </span> : : &quot;[%s] (stanza #%d) SPA Command messages are not allowed in the current configuration.&quot;, +<span class="lineNum"> 863 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 864 </span> : : ); +<span class="lineNum"> 865 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 866 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 867 </span> : : } +<span class="lineNum"> 868 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(opts-&gt;test)</span> +<span class="lineNum"> 869 </span> : : { +<span class="lineNum"> 870 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 871 </span> : : &quot;[%s] (stanza #%d) --test mode enabled, skipping command execution.&quot;, +<span class="lineNum"> 872 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 873 </span> : : ); +<span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 876 </span> : : } +<span class="lineNum"> 877 </span> : : else +<span class="lineNum"> 878 </span> : : { +<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 880 </span> : : &quot;[%s] (stanza #%d) Processing SPA Command message: command='%s'.&quot;, +<span class="lineNum"> 881 </span> : : spadat.pkt_source_ip, stanza_num, spadat.spa_message_remain +<span class="lineNum"> 882 </span> : : ); +<span class="lineNum"> 883 </span> : : +<span class="lineNum"> 884 </span> : : /* Do we need to become another user? If so, we call +<span class="lineNum"> 885 </span> : : * run_extcmd_as and pass the cmd_exec_uid. +<span class="lineNum"> 886 </span> : : */ +<span class="lineNum"> 887 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;cmd_exec_user != NULL &amp;&amp; strncasecmp(acc-&gt;cmd_exec_user, &quot;root&quot;, 4) != 0)</span> +<span class="lineNum"> 888 </span> : : { +<span class="lineNum"> 889 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 890 </span> : : &quot;[%s] (stanza #%d) setuid/setgid user/group to %s/%s (UID=%i,GID=%i) before running command.&quot;, +<span class="lineNum"> 891 </span> : : spadat.pkt_source_ip, stanza_num, acc-&gt;cmd_exec_user, +<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : acc-&gt;cmd_exec_group == NULL ? acc-&gt;cmd_exec_user : acc-&gt;cmd_exec_group,</span> +<span class="lineNum"> 893 </span> : : acc-&gt;cmd_exec_uid, acc-&gt;cmd_exec_gid); +<span class="lineNum"> 894 </span> : : +<span class="lineNum"> 895 </span> :<span class="lineNoCov"> 0 : res = run_extcmd_as(acc-&gt;cmd_exec_uid, acc-&gt;cmd_exec_gid,</span> +<span class="lineNum"> 896 </span> : : spadat.spa_message_remain, NULL, 0, +<span class="lineNum"> 897 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); +<span class="lineNum"> 898 </span> : : } +<span class="lineNum"> 899 </span> : : else /* Just run it as we are (root that is). */ +<span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(spadat.spa_message_remain, NULL, 0,</span> +<span class="lineNum"> 901 </span> : : WANT_STDERR, 5, &amp;pid_status, opts); +<span class="lineNum"> 902 </span> : : +<span class="lineNum"> 903 </span> : : /* should only call WEXITSTATUS() if WIFEXITED() is true +<span class="lineNum"> 904 </span> : : */ +<span class="lineNum"> 905 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 906 </span> : : &quot;[%s] (stanza #%d) CMD_EXEC: command returned %i, pid_status: %d&quot;, +<span class="lineNum"> 907 </span> : : spadat.pkt_source_ip, stanza_num, res, +<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : WIFEXITED(pid_status) ? WEXITSTATUS(pid_status) : pid_status);</span> +<span class="lineNum"> 909 </span> : : +<span class="lineNum"> 910 </span> :<span class="lineNoCov"> 0 : if(WIFEXITED(pid_status))</span> +<span class="lineNum"> 911 </span> : : { +<span class="lineNum"> 912 </span> : : if(WEXITSTATUS(pid_status) != 0) +<span class="lineNum"> 913 </span> : : res = SPA_MSG_COMMAND_ERROR; +<span class="lineNum"> 914 </span> : : } +<span class="lineNum"> 915 </span> : : else +<span class="lineNum"> 916 </span> : : res = SPA_MSG_COMMAND_ERROR; +<span class="lineNum"> 917 </span> : : +<span class="lineNum"> 918 </span> : : /* we processed the command on a matching access stanza, so we +<span class="lineNum"> 919 </span> : : * don't look for anything else to do with this SPA packet +<span class="lineNum"> 920 </span> : : */ +<span class="lineNum"> 921 </span> : : break; +<span class="lineNum"> 922 </span> : : } +<span class="lineNum"> 923 </span> : : } +<span class="lineNum"> 924 </span> : : +<span class="lineNum"> 925 </span> : : /* From this point forward, we have some kind of access message. So +<span class="lineNum"> 926 </span> : : * we first see if access is allowed by checking access against +<span class="lineNum"> 927 </span> : : * restrict_ports and open_ports. +<span class="lineNum"> 928 </span> : : * +<span class="lineNum"> 929 </span> : : * --DSS TODO: We should add BLACKLIST support here as well. +<span class="lineNum"> 930 </span> : : */ +<span class="lineNum"> 931 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! acc_check_port_access(acc, spadat.spa_message_remain))</span> +<span class="lineNum"> 932 </span> : : { +<span class="lineNum"> 933 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 934 </span> : : &quot;[%s] (stanza #%d) One or more requested protocol/ports was denied per access.conf.&quot;, +<span class="lineNum"> 935 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 936 </span> : : ); +<span class="lineNum"> 937 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 938 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 939 </span> : : } +<span class="lineNum"> 940 </span> : : +<span class="lineNum"> 941 </span> : : /* At this point, we process the SPA request and break out of the +<span class="lineNum"> 942 </span> : : * access stanza loop (first valid access stanza stops us looking +<span class="lineNum"> 943 </span> : : * for others). +<span class="lineNum"> 944 </span> : : */ +<span class="lineNum"> 945 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;test) /* no firewall changes in --test mode */</span> +<span class="lineNum"> 946 </span> : : { +<span class="lineNum"> 947 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 948 </span> : : &quot;[%s] (stanza #%d) --test mode enabled, skipping firewall manipulation.&quot;, +<span class="lineNum"> 949 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 950 </span> : : ); +<span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> +<span class="lineNum"> 952 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 953 </span> : : } +<span class="lineNum"> 954 </span> : : else +<span class="lineNum"> 955 </span> : : { +<span class="lineNum"> 956 </span> :<span class="lineNoCov"> 0 : process_spa_request(opts, acc, &amp;spadat);</span> +<span class="lineNum"> 957 </span> : : } +<span class="lineNum"> 958 </span> : : +<span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 960 </span> : : } +<span class="lineNum"> 961 </span> : : +<span class="lineNum"> 962 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (raw_digest != NULL)</span> +<span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : free(raw_digest);</span> +<span class="lineNum"> 964 </span> : : +<span class="lineNum"> 965 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx != NULL)</span> +<span class="lineNum"> 966 </span> : : { +<span class="lineNum"> 967 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> +<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 969 </span> : : &quot;[%s] (stanza #%d) fko_destroy() could not zero out sensitive data buffer.&quot;, +<span class="lineNum"> 970 </span> : : spadat.pkt_source_ip, stanza_num +<span class="lineNum"> 971 </span> : : ); +<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> +<span class="lineNum"> 973 </span> : : } +<span class="lineNum"> 974 </span> : : +<span class="lineNum"> 975 </span> : : return; +<span class="lineNum"> 976 </span> : : } +<span class="lineNum"> 977 </span> : : +<span class="lineNum"> 978 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html new file mode 100644 index 00000000..3b87ee36 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html @@ -0,0 +1,275 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">876</td> + <td class="headerCovTableEntry">3080</td> + <td class="headerCovTableEntryLo">28.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">49</td> + <td class="headerCovTableEntry">124</td> + <td class="headerCovTableEntryLo">39.5 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">541</td> + <td class="headerCovTableEntry">2007</td> + <td class="headerCovTableEntryLo">27.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 63</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 61</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 31</td> + </tr> + <tr> + <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 57</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 40</td> + </tr> + <tr> + <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 81</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 54</td> + </tr> + <tr> + <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 103</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 70</td> + </tr> + <tr> + <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 100</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 6</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 72</td> + </tr> + <tr> + <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 344</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 5</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 230</td> + </tr> + <tr> + <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> + </td> + <td class="coverPerLo">9.2&nbsp;%</td> + <td class="coverNumLo">53 / 575</td> + <td class="coverPerLo">10.3&nbsp;%</td> + <td class="coverNumLo">3 / 29</td> + <td class="coverPerLo">11.3&nbsp;%</td> + <td class="coverNumLo">34 / 302</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> + </td> + <td class="coverPerLo">16.0&nbsp;%</td> + <td class="coverNumLo">12 / 75</td> + <td class="coverPerLo">28.6&nbsp;%</td> + <td class="coverNumLo">2 / 7</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">8 / 58</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">80 / 275</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">7 / 13</td> + <td class="coverPerLo">22.0&nbsp;%</td> + <td class="coverNumLo">36 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> + </td> + <td class="coverPerLo">59.7&nbsp;%</td> + <td class="coverNumLo">43 / 72</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">30.4&nbsp;%</td> + <td class="coverNumLo">14 / 46</td> + </tr> + <tr> + <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">409 / 755</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">20 / 30</td> + <td class="coverPerLo">49.0&nbsp;%</td> + <td class="coverNumLo">295 / 602</td> + </tr> + <tr> + <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> + </td> + <td class="coverPerLo">35.7&nbsp;%</td> + <td class="coverNumLo">56 / 157</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">3 / 9</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">30 / 60</td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> + </td> + <td class="coverPerLo">67.2&nbsp;%</td> + <td class="coverNumLo">223 / 332</td> + <td class="coverPerHi">90.9&nbsp;%</td> + <td class="coverNumHi">10 / 11</td> + <td class="coverPerLo">55.4&nbsp;%</td> + <td class="coverNumLo">124 / 224</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html new file mode 100644 index 00000000..9d47466c --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html @@ -0,0 +1,275 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">876</td> + <td class="headerCovTableEntry">3080</td> + <td class="headerCovTableEntryLo">28.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">49</td> + <td class="headerCovTableEntry">124</td> + <td class="headerCovTableEntryLo">39.5 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">541</td> + <td class="headerCovTableEntry">2007</td> + <td class="headerCovTableEntryLo">27.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 57</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 40</td> + </tr> + <tr> + <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 103</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 70</td> + </tr> + <tr> + <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 63</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 81</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 54</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 61</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 31</td> + </tr> + <tr> + <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 344</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 5</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 230</td> + </tr> + <tr> + <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 100</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 6</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 72</td> + </tr> + <tr> + <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> + </td> + <td class="coverPerLo">9.2&nbsp;%</td> + <td class="coverNumLo">53 / 575</td> + <td class="coverPerLo">10.3&nbsp;%</td> + <td class="coverNumLo">3 / 29</td> + <td class="coverPerLo">11.3&nbsp;%</td> + <td class="coverNumLo">34 / 302</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> + </td> + <td class="coverPerLo">16.0&nbsp;%</td> + <td class="coverNumLo">12 / 75</td> + <td class="coverPerLo">28.6&nbsp;%</td> + <td class="coverNumLo">2 / 7</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">8 / 58</td> + </tr> + <tr> + <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> + </td> + <td class="coverPerLo">35.7&nbsp;%</td> + <td class="coverNumLo">56 / 157</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">3 / 9</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">30 / 60</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">80 / 275</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">7 / 13</td> + <td class="coverPerLo">22.0&nbsp;%</td> + <td class="coverNumLo">36 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">409 / 755</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">20 / 30</td> + <td class="coverPerLo">49.0&nbsp;%</td> + <td class="coverNumLo">295 / 602</td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> + </td> + <td class="coverPerLo">67.2&nbsp;%</td> + <td class="coverNumLo">223 / 332</td> + <td class="coverPerHi">90.9&nbsp;%</td> + <td class="coverNumHi">10 / 11</td> + <td class="coverPerLo">55.4&nbsp;%</td> + <td class="coverNumLo">124 / 224</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> + </td> + <td class="coverPerLo">59.7&nbsp;%</td> + <td class="coverNumLo">43 / 72</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">30.4&nbsp;%</td> + <td class="coverNumLo">14 / 46</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html new file mode 100644 index 00000000..ba55c381 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html @@ -0,0 +1,275 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">876</td> + <td class="headerCovTableEntry">3080</td> + <td class="headerCovTableEntryLo">28.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">49</td> + <td class="headerCovTableEntry">124</td> + <td class="headerCovTableEntryLo">39.5 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">541</td> + <td class="headerCovTableEntry">2007</td> + <td class="headerCovTableEntryLo">27.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 57</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 40</td> + </tr> + <tr> + <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 61</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 31</td> + </tr> + <tr> + <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 63</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 81</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 54</td> + </tr> + <tr> + <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 100</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 6</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 72</td> + </tr> + <tr> + <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 103</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 70</td> + </tr> + <tr> + <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 344</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 5</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 230</td> + </tr> + <tr> + <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> + </td> + <td class="coverPerLo">9.2&nbsp;%</td> + <td class="coverNumLo">53 / 575</td> + <td class="coverPerLo">10.3&nbsp;%</td> + <td class="coverNumLo">3 / 29</td> + <td class="coverPerLo">11.3&nbsp;%</td> + <td class="coverNumLo">34 / 302</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> + </td> + <td class="coverPerLo">16.0&nbsp;%</td> + <td class="coverNumLo">12 / 75</td> + <td class="coverPerLo">28.6&nbsp;%</td> + <td class="coverNumLo">2 / 7</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">8 / 58</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">80 / 275</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">7 / 13</td> + <td class="coverPerLo">22.0&nbsp;%</td> + <td class="coverNumLo">36 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> + </td> + <td class="coverPerLo">35.7&nbsp;%</td> + <td class="coverNumLo">56 / 157</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">3 / 9</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">30 / 60</td> + </tr> + <tr> + <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">409 / 755</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">20 / 30</td> + <td class="coverPerLo">49.0&nbsp;%</td> + <td class="coverNumLo">295 / 602</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> + </td> + <td class="coverPerLo">59.7&nbsp;%</td> + <td class="coverNumLo">43 / 72</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">30.4&nbsp;%</td> + <td class="coverNumLo">14 / 46</td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> + </td> + <td class="coverPerLo">67.2&nbsp;%</td> + <td class="coverNumLo">223 / 332</td> + <td class="coverPerHi">90.9&nbsp;%</td> + <td class="coverNumHi">10 / 11</td> + <td class="coverPerLo">55.4&nbsp;%</td> + <td class="coverNumLo">124 / 224</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html new file mode 100644 index 00000000..99f62562 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html @@ -0,0 +1,275 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">876</td> + <td class="headerCovTableEntry">3080</td> + <td class="headerCovTableEntryLo">28.4 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">49</td> + <td class="headerCovTableEntry">124</td> + <td class="headerCovTableEntryLo">39.5 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">541</td> + <td class="headerCovTableEntry">2007</td> + <td class="headerCovTableEntryLo">27.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="80%" cellpadding=1 cellspacing=1 border=0> + + <tr> + <td width="44%"><br></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + <td width="8%"></td> + </tr> + + <tr> + <td class="tableHead">Filename <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> + <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> + <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> + </tr> + <tr> + <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> + </td> + <td class="coverPerLo">54.2&nbsp;%</td> + <td class="coverNumLo">409 / 755</td> + <td class="coverPerLo">66.7&nbsp;%</td> + <td class="coverNumLo">20 / 30</td> + <td class="coverPerLo">49.0&nbsp;%</td> + <td class="coverNumLo">295 / 602</td> + </tr> + <tr> + <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> + </td> + <td class="coverPerLo">67.2&nbsp;%</td> + <td class="coverNumLo">223 / 332</td> + <td class="coverPerHi">90.9&nbsp;%</td> + <td class="coverNumHi">10 / 11</td> + <td class="coverPerLo">55.4&nbsp;%</td> + <td class="coverNumLo">124 / 224</td> + </tr> + <tr> + <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 100</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 6</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 72</td> + </tr> + <tr> + <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> + </td> + <td class="coverPerLo">9.2&nbsp;%</td> + <td class="coverNumLo">53 / 575</td> + <td class="coverPerLo">10.3&nbsp;%</td> + <td class="coverNumLo">3 / 29</td> + <td class="coverPerLo">11.3&nbsp;%</td> + <td class="coverNumLo">34 / 302</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> + </td> + <td class="coverPerLo">29.1&nbsp;%</td> + <td class="coverNumLo">80 / 275</td> + <td class="coverPerLo">53.8&nbsp;%</td> + <td class="coverNumLo">7 / 13</td> + <td class="coverPerLo">22.0&nbsp;%</td> + <td class="coverNumLo">36 / 164</td> + </tr> + <tr> + <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 24</td> + </tr> + <tr> + <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 344</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 5</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 230</td> + </tr> + <tr> + <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> + </td> + <td class="coverPerLo">59.7&nbsp;%</td> + <td class="coverNumLo">43 / 72</td> + <td class="coverPerHi">100.0&nbsp;%</td> + <td class="coverNumHi">4 / 4</td> + <td class="coverPerLo">30.4&nbsp;%</td> + <td class="coverNumLo">14 / 46</td> + </tr> + <tr> + <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 103</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 70</td> + </tr> + <tr> + <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 57</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 40</td> + </tr> + <tr> + <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> + </td> + <td class="coverPerLo">35.7&nbsp;%</td> + <td class="coverNumLo">56 / 157</td> + <td class="coverPerLo">33.3&nbsp;%</td> + <td class="coverNumLo">3 / 9</td> + <td class="coverPerLo">50.0&nbsp;%</td> + <td class="coverNumLo">30 / 60</td> + </tr> + <tr> + <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 61</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 3</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 31</td> + </tr> + <tr> + <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 63</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 30</td> + </tr> + <tr> + <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> + </td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 81</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 1</td> + <td class="coverPerLo">0.0&nbsp;%</td> + <td class="coverNumLo">0 / 54</td> + </tr> + <tr> + <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> + <td class="coverBar" align="center"> + <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> + </td> + <td class="coverPerLo">16.0&nbsp;%</td> + <td class="coverNumLo">12 / 75</td> + <td class="coverPerLo">28.6&nbsp;%</td> + <td class="coverNumLo">2 / 7</td> + <td class="coverPerLo">13.8&nbsp;%</td> + <td class="coverNumLo">8 / 58</td> + </tr> + </table> + </center> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html new file mode 100644 index 00000000..11f19905 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/log_msg.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">43</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">59.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntryLo">30.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="log_msg.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#156">log_msg</a></td> + <td class="coverFnHi">136881</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#54">free_logging</a></td> + <td class="coverFnHi">2609</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#211">log_set_verbosity</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#63">init_logging</a></td> + <td class="coverFnHi">795</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html new file mode 100644 index 00000000..a6a141f7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html @@ -0,0 +1,97 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/log_msg.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">43</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">59.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntryLo">30.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="log_msg.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#54">free_logging</a></td> + <td class="coverFnHi">2609</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#63">init_logging</a></td> + <td class="coverFnHi">795</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#156">log_msg</a></td> + <td class="coverFnHi">136881</td> + </tr> + <tr> + <td class="coverFn"><a href="log_msg.c.gcov.html#211">log_set_verbosity</a></td> + <td class="coverFnHi">795</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html new file mode 100644 index 00000000..5a78a9b8 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html @@ -0,0 +1,303 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/log_msg.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - log_msg.c<span style="font-size: 80%;"> (source / <a href="log_msg.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">43</td> + <td class="headerCovTableEntry">72</td> + <td class="headerCovTableEntryLo">59.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntry">4</td> + <td class="headerCovTableEntryHi">100.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">14</td> + <td class="headerCovTableEntry">46</td> + <td class="headerCovTableEntryLo">30.4 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: log_msg.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: General logging routine that can write to syslog and/or stderr +<span class="lineNum"> 7 </span> : : * and can take varibale number of args. +<span class="lineNum"> 8 </span> : : * +<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 12 </span> : : * +<span class="lineNum"> 13 </span> : : * License (GNU General Public License): +<span class="lineNum"> 14 </span> : : * +<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 19 </span> : : * +<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 24 </span> : : * +<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 28 </span> : : * USA +<span class="lineNum"> 29 </span> : : * +<span class="lineNum"> 30 </span> : : ***************************************************************************** +<span class="lineNum"> 31 </span> : : */ +<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 35 </span> : : +<span class="lineNum"> 36 </span> : : /* The default log facility (can be overridden via config file directive). +<span class="lineNum"> 37 </span> : : */ +<span class="lineNum"> 38 </span> : : static int syslog_fac = LOG_DAEMON; +<span class="lineNum"> 39 </span> : : +<span class="lineNum"> 40 </span> : : /* This value is or'ed with the log level on all logging calls. This allows +<span class="lineNum"> 41 </span> : : * for force log to stderr instead of syslog simply be setting this to the +<span class="lineNum"> 42 </span> : : * appropriate value (which is done at init_logging(). +<span class="lineNum"> 43 </span> : : */ +<span class="lineNum"> 44 </span> : : static int static_log_flag = LOG_STDERR_ONLY; +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : /* The name to use for ID in log messages. This defaults to fwknopd. +<span class="lineNum"> 47 </span> : : */ +<span class="lineNum"> 48 </span> : : static char *log_name = NULL; +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : /* The value of the default verbosity used by the log module */ +<span class="lineNum"> 51 </span> : : static int verbosity = LOG_DEFAULT_VERBOSITY; +<span class="lineNum"> 52 </span> : : +<span class="lineNum"> 53 </span> : : /* Free resources allocated for logging. +<a name="54"><span class="lineNum"> 54 </span> : : */</a> +<span class="lineNum"> 55 </span> : : void +<span class="lineNum"> 56 </span> :<span class="lineCov"> 2609 : free_logging(void)</span> +<span class="lineNum"> 57 </span> : : { +<span class="lineNum"> 58 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span>]:<span class="lineCov"> 2609 : if(log_name != NULL)</span> +<span class="lineNum"> 59 </span> :<span class="lineCov"> 795 : free(log_name);</span> +<span class="lineNum"> 60 </span> :<span class="lineCov"> 2609 : }</span> +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> : : /* Initialize logging sets the name used for syslog. +<a name="63"><span class="lineNum"> 63 </span> : : */</a> +<span class="lineNum"> 64 </span> : : void +<span class="lineNum"> 65 </span> :<span class="lineCov"> 795 : init_logging(fko_srv_options_t *opts) {</span> +<span class="lineNum"> 66 </span> :<span class="lineCov"> 795 : char *my_name = NULL;</span> +<span class="lineNum"> 67 </span> :<span class="lineCov"> 795 : int is_syslog = 0;</span> +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> : : /* In case this is a re-init. +<span class="lineNum"> 70 </span> : : */ +<span class="lineNum"> 71 </span> :<span class="lineCov"> 795 : free_logging();</span> +<span class="lineNum"> 72 </span> : : +<span class="lineNum"> 73 </span> : : /* Allocate memory for the log_name and set the my_name to point to the +<span class="lineNum"> 74 </span> : : * appropriate name. The name should already be set in the config struct +<span class="lineNum"> 75 </span> : : * but if it is not, fallback to the default as defined by 'MY_NAME'. +<span class="lineNum"> 76 </span> : : */ +<span class="lineNum"> 77 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_IDENTITY] != NULL</span> +<span class="lineNum"> 78 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : &amp;&amp; opts-&gt;config[CONF_SYSLOG_IDENTITY][0] != '\0')</span> +<span class="lineNum"> 79 </span> : : { +<span class="lineNum"> 80 </span> :<span class="lineCov"> 795 : my_name = opts-&gt;config[CONF_SYSLOG_IDENTITY];</span> +<span class="lineNum"> 81 </span> :<span class="lineCov"> 795 : log_name = calloc(1, strlen(opts-&gt;config[CONF_SYSLOG_IDENTITY])+1);</span> +<span class="lineNum"> 82 </span> :<span class="lineCov"> 795 : is_syslog = 1;</span> +<span class="lineNum"> 83 </span> : : } +<span class="lineNum"> 84 </span> : : else +<span class="lineNum"> 85 </span> : : { +<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : my_name = (char*)&amp;MY_NAME;</span> +<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : log_name = calloc(1, strlen(MY_NAME)+1);</span> +<span class="lineNum"> 88 </span> : : } +<span class="lineNum"> 89 </span> : : +<span class="lineNum"> 90 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(log_name == NULL)</span> +<span class="lineNum"> 91 </span> : : { +<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Memory allocation error setting log_name!\n&quot;);</span> +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 94 </span> : : } +<span class="lineNum"> 95 </span> : : +<span class="lineNum"> 96 </span> : : /* Set our name. +<span class="lineNum"> 97 </span> : : */ +<span class="lineNum"> 98 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if (is_syslog)</span> +<span class="lineNum"> 99 </span> :<span class="lineCov"> 795 : strlcpy(log_name, my_name, strlen(opts-&gt;config[CONF_SYSLOG_IDENTITY])+1);</span> +<span class="lineNum"> 100 </span> : : else +<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : strlcpy(log_name, my_name, strlen(MY_NAME)+1);</span> +<span class="lineNum"> 102 </span> : : +<span class="lineNum"> 103 </span> :<span class="lineCov"> 795 : static_log_flag = LOG_SYSLOG_ONLY;</span> +<span class="lineNum"> 104 </span> : : +<span class="lineNum"> 105 </span> : : /* If we are running in the foreground or performing firewall operations, +<span class="lineNum"> 106 </span> : : * all logging will go to stderr. +<span class="lineNum"> 107 </span> : : */ +<span class="lineNum"> 108 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;foreground != 0</span> +<span class="lineNum"> 109 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || opts-&gt;fw_flush != 0</span> +<span class="lineNum"> 110 </span> : : || opts-&gt;fw_list != 0 +<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || opts-&gt;fw_list_all != 0)</span> +<span class="lineNum"> 112 </span> :<span class="lineCov"> 795 : static_log_flag = LOG_STDERR_ONLY;</span> +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> : : /* If the user forces syslog using --syslog-enable, we remove the +<span class="lineNum"> 115 </span> : : * LOG_WITHOUT_SYSLOG flag. It means all messages will go through syslog */ +<span class="lineNum"> 116 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if (opts-&gt;syslog_enable != 0)</span> +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : static_log_flag &amp;= ~LOG_WITHOUT_SYSLOG;</span> +<span class="lineNum"> 118 </span> : : +<span class="lineNum"> 119 </span> : : /* Parse the log facility as specified in the config struct. If, for some +<span class="lineNum"> 120 </span> : : * reason, it is not, fac will already be set to LOG_DAEMON. +<span class="lineNum"> 121 </span> : : */ +<span class="lineNum"> 122 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_FACILITY] != NULL</span> +<span class="lineNum"> 123 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : &amp;&amp; opts-&gt;config[CONF_SYSLOG_FACILITY][0] != '\0')</span> +<span class="lineNum"> 124 </span> : : { +<span class="lineNum"> 125 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_DAEMON&quot;))</span> +<span class="lineNum"> 126 </span> :<span class="lineCov"> 795 : syslog_fac = LOG_DAEMON;</span> +<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL0&quot;))</span> +<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL0;</span> +<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL1&quot;))</span> +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL1;</span> +<span class="lineNum"> 131 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL2&quot;))</span> +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL2;</span> +<span class="lineNum"> 133 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL3&quot;))</span> +<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL3;</span> +<span class="lineNum"> 135 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL4&quot;))</span> +<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL4;</span> +<span class="lineNum"> 137 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL5&quot;))</span> +<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL5;</span> +<span class="lineNum"> 139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL6&quot;))</span> +<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL6;</span> +<span class="lineNum"> 141 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL7&quot;))</span> +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL7;</span> +<span class="lineNum"> 143 </span> : : else +<span class="lineNum"> 144 </span> : : { +<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Invalid SYSLOG_FACILITY setting '%s'\n&quot;,</span> +<span class="lineNum"> 146 </span> : : opts-&gt;config[CONF_SYSLOG_FACILITY]); +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 148 </span> : : } +<span class="lineNum"> 149 </span> : : } +<span class="lineNum"> 150 </span> : : +<span class="lineNum"> 151 </span> :<span class="lineCov"> 795 : verbosity = LOG_DEFAULT_VERBOSITY + opts-&gt;verbose;</span> +<span class="lineNum"> 152 </span> :<span class="lineCov"> 795 : }</span> +<span class="lineNum"> 153 </span> : : +<span class="lineNum"> 154 </span> : : /* Syslog message function. It uses default set at intialization, and also +<span class="lineNum"> 155 </span> : : * takes variable args to accomodate printf-like formatting and expansion. +<a name="156"><span class="lineNum"> 156 </span> : : */</a> +<span class="lineNum"> 157 </span> : : void +<span class="lineNum"> 158 </span> :<span class="lineCov"> 136881 : log_msg(int level, char* msg, ...)</span> +<span class="lineNum"> 159 </span> : : { +<span class="lineNum"> 160 </span> : : va_list ap, apse; +<span class="lineNum"> 161 </span> : : +<span class="lineNum"> 162 </span> : : /* Make sure the level is in the right range */ +<span class="lineNum"> 163 </span> [<span class="branchCov" title="Branch 0 was taken 136881 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 136881 : if ((level &amp; LOG_VERBOSITY_MASK) &gt; verbosity)</span> +<span class="lineNum"> 164 </span> :<span class="lineCov"> 136881 : return;</span> +<span class="lineNum"> 165 </span> : : +<span class="lineNum"> 166 </span> :<span class="lineCov"> 136881 : va_start(ap, msg);</span> +<span class="lineNum"> 167 </span> : : +<span class="lineNum"> 168 </span> :<span class="lineCov"> 136881 : level |= static_log_flag;</span> +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> : : /* Print msg to stderr if the level was or'ed with LOG_STDERR +<span class="lineNum"> 171 </span> : : */ +<span class="lineNum"> 172 </span> [<span class="branchCov" title="Branch 0 was taken 136881 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 136881 : if(LOG_STDERR &amp; level)</span> +<span class="lineNum"> 173 </span> : : { +<span class="lineNum"> 174 </span> : : /* Need to make a copy of our va_list so we don't screw +<span class="lineNum"> 175 </span> : : * up the message going to syslog after we print it to stderr. +<span class="lineNum"> 176 </span> : : */ +<span class="lineNum"> 177 </span> :<span class="lineCov"> 136881 : va_copy(apse, ap);</span> +<span class="lineNum"> 178 </span> : : +<span class="lineNum"> 179 </span> :<span class="lineCov"> 136881 : vfprintf(stderr, msg, apse);</span> +<span class="lineNum"> 180 </span> :<span class="lineCov"> 136881 : fprintf(stderr, &quot;\n&quot;);</span> +<span class="lineNum"> 181 </span> :<span class="lineCov"> 136881 : fflush(stderr);</span> +<span class="lineNum"> 182 </span> : : +<span class="lineNum"> 183 </span> :<span class="lineCov"> 136881 : va_end(apse);</span> +<span class="lineNum"> 184 </span> : : } +<span class="lineNum"> 185 </span> : : +<span class="lineNum"> 186 </span> : : /* If the message has not to be printed to the syslog, we return */ +<span class="lineNum"> 187 </span> [<span class="branchCov" title="Branch 0 was taken 136881 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 136881 : if (LOG_WITHOUT_SYSLOG &amp; level)</span> +<span class="lineNum"> 188 </span> : : { +<span class="lineNum"> 189 </span> :<span class="lineCov"> 136881 : va_end(ap);</span> +<span class="lineNum"> 190 </span> :<span class="lineCov"> 136881 : return;</span> +<span class="lineNum"> 191 </span> : : } +<span class="lineNum"> 192 </span> : : +<span class="lineNum"> 193 </span> : : /* Remove the static log flags from the level */ +<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : level &amp;= LOG_VERBOSITY_MASK;</span> +<span class="lineNum"> 195 </span> : : +<span class="lineNum"> 196 </span> : : /* Send the message to syslog. +<span class="lineNum"> 197 </span> : : */ +<span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : openlog(log_name, LOG_PID, syslog_fac);</span> +<span class="lineNum"> 199 </span> : : +<span class="lineNum"> 200 </span> : : vsyslog(level, msg, ap); +<span class="lineNum"> 201 </span> : : +<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : va_end(ap);</span> +<span class="lineNum"> 203 </span> : : } +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> : : /** +<span class="lineNum"> 206 </span> : : * Set the verbosity level for the current context of the log module. +<span class="lineNum"> 207 </span> : : * +<span class="lineNum"> 208 </span> : : * The verbosity levels used by the module are defined by the syslog module. +<span class="lineNum"> 209 </span> : : * +<span class="lineNum"> 210 </span> : : * @param level verbosity level to set (LOG_INFO, LOG_NOTICE ...) +<a name="211"><span class="lineNum"> 211 </span> : : */</a> +<span class="lineNum"> 212 </span> : : void +<span class="lineNum"> 213 </span> :<span class="lineCov"> 795 : log_set_verbosity(int level)</span> +<span class="lineNum"> 214 </span> : : { +<span class="lineNum"> 215 </span> :<span class="lineCov"> 795 : verbosity = level;</span> +<span class="lineNum"> 216 </span> :<span class="lineCov"> 795 : }</span> +<span class="lineNum"> 217 </span> : : +<span class="lineNum"> 218 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html new file mode 100644 index 00000000..429736dc --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/pcap_capture.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - pcap_capture.c<span style="font-size: 80%;"> (<a href="pcap_capture.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">103</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">70</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="pcap_capture.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="pcap_capture.c.gcov.html#52">pcap_capture</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html new file mode 100644 index 00000000..c1859b1c --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/pcap_capture.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - pcap_capture.c<span style="font-size: 80%;"> (<a href="pcap_capture.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">103</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">70</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="pcap_capture.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="pcap_capture.c.gcov.html#52">pcap_capture</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html new file mode 100644 index 00000000..f31b369b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html @@ -0,0 +1,427 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/pcap_capture.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - pcap_capture.c<span style="font-size: 80%;"> (source / <a href="pcap_capture.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">103</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">70</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: pcap_capture.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: The pcap capture routines for fwknopd. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : +<span class="lineNum"> 32 </span> : : #if USE_LIBPCAP +<span class="lineNum"> 33 </span> : : #include &lt;pcap.h&gt; +<span class="lineNum"> 34 </span> : : #endif +<span class="lineNum"> 35 </span> : : +<span class="lineNum"> 36 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 37 </span> : : #include &quot;pcap_capture.h&quot; +<span class="lineNum"> 38 </span> : : #include &quot;process_packet.h&quot; +<span class="lineNum"> 39 </span> : : #include &quot;fw_util.h&quot; +<span class="lineNum"> 40 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 41 </span> : : #include &quot;fwknopd_errors.h&quot; +<span class="lineNum"> 42 </span> : : #include &quot;sig_handler.h&quot; +<span class="lineNum"> 43 </span> : : #include &quot;tcp_server.h&quot; +<span class="lineNum"> 44 </span> : : +<span class="lineNum"> 45 </span> : : #if HAVE_SYS_WAIT_H +<span class="lineNum"> 46 </span> : : #include &lt;sys/wait.h&gt; +<span class="lineNum"> 47 </span> : : #endif +<span class="lineNum"> 48 </span> : : +<span class="lineNum"> 49 </span> : : #if USE_LIBPCAP +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> : : /* The pcap capture routine. +<a name="52"><span class="lineNum"> 52 </span> : : */</a> +<span class="lineNum"> 53 </span> : : int +<span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : pcap_capture(fko_srv_options_t *opts)</span> +<span class="lineNum"> 55 </span> : : { +<span class="lineNum"> 56 </span> : : pcap_t *pcap; +<span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : char errstr[PCAP_ERRBUF_SIZE] = {0};</span> +<span class="lineNum"> 58 </span> : : struct bpf_program fp; +<span class="lineNum"> 59 </span> : : int res; +<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : int pcap_errcnt = 0;</span> +<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : int pending_break = 0;</span> +<span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : int promisc = 0;</span> +<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : int set_direction = 1;</span> +<span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : int pcap_file_mode = 0;</span> +<span class="lineNum"> 65 </span> : : int status; +<span class="lineNum"> 66 </span> : : int useconds; +<span class="lineNum"> 67 </span> : : int pcap_dispatch_count; +<span class="lineNum"> 68 </span> : : int max_sniff_bytes; +<span class="lineNum"> 69 </span> : : int is_err; +<span class="lineNum"> 70 </span> : : pid_t child_pid; +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : #if FIREWALL_IPFW +<span class="lineNum"> 73 </span> : : time_t now; +<span class="lineNum"> 74 </span> : : #endif +<span class="lineNum"> 75 </span> : : +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : useconds = strtol_wrapper(opts-&gt;config[CONF_PCAP_LOOP_SLEEP],</span> +<span class="lineNum"> 77 </span> : : 0, RCHK_MAX_PCAP_LOOP_SLEEP, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 78 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 79 </span> : : { +<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid PCAP_LOOP_SLEEP_value&quot;);</span> +<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 82 </span> : : } +<span class="lineNum"> 83 </span> : : +<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : max_sniff_bytes = strtol_wrapper(opts-&gt;config[CONF_MAX_SNIFF_BYTES],</span> +<span class="lineNum"> 85 </span> : : 0, RCHK_MAX_SNIFF_BYTES, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 86 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 87 </span> : : { +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid MAX_SNIFF_BYTES&quot;);</span> +<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 90 </span> : : } +<span class="lineNum"> 91 </span> : : +<span class="lineNum"> 92 </span> : : /* Set promiscuous mode if ENABLE_PCAP_PROMISC is set to 'Y'. +<span class="lineNum"> 93 </span> : : */ +<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_PCAP_PROMISC], &quot;Y&quot;, 1) == 0)</span> +<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : promisc = 1;</span> +<span class="lineNum"> 96 </span> : : +<span class="lineNum"> 97 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;config[CONF_PCAP_FILE] != NULL</span> +<span class="lineNum"> 98 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; opts-&gt;config[CONF_PCAP_FILE][0] != '\0')</span> +<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : pcap_file_mode = 1;</span> +<span class="lineNum"> 100 </span> : : +<span class="lineNum"> 101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_file_mode == 1) {</span> +<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Reading pcap file: %s&quot;,</span> +<span class="lineNum"> 103 </span> : : opts-&gt;config[CONF_PCAP_FILE]); +<span class="lineNum"> 104 </span> : : +<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : pcap = pcap_open_offline(opts-&gt;config[CONF_PCAP_FILE], errstr);</span> +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap == NULL)</span> +<span class="lineNum"> 108 </span> : : { +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] pcap_open_offline() error: %s&quot;,</span> +<span class="lineNum"> 110 </span> : : errstr); +<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 112 </span> : : } +<span class="lineNum"> 113 </span> : : } +<span class="lineNum"> 114 </span> : : else +<span class="lineNum"> 115 </span> : : { +<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Sniffing interface: %s&quot;,</span> +<span class="lineNum"> 117 </span> : : opts-&gt;config[CONF_PCAP_INTF]); +<span class="lineNum"> 118 </span> : : +<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : pcap = pcap_open_live(opts-&gt;config[CONF_PCAP_INTF],</span> +<span class="lineNum"> 120 </span> : : max_sniff_bytes, promisc, 100, errstr +<span class="lineNum"> 121 </span> : : ); +<span class="lineNum"> 122 </span> : : +<span class="lineNum"> 123 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap == NULL)</span> +<span class="lineNum"> 124 </span> : : { +<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] pcap_open_live() error: %s&quot;, errstr);</span> +<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 127 </span> : : } +<span class="lineNum"> 128 </span> : : } +<span class="lineNum"> 129 </span> : : +<span class="lineNum"> 130 </span> : : /* Set pcap filters, if any. +<span class="lineNum"> 131 </span> : : */ +<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;config[CONF_PCAP_FILTER][0] != '\0')</span> +<span class="lineNum"> 133 </span> : : { +<span class="lineNum"> 134 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_compile(pcap, &amp;fp, opts-&gt;config[CONF_PCAP_FILTER], 1, 0) == -1)</span> +<span class="lineNum"> 135 </span> : : { +<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error compiling pcap filter: %s&quot;,</span> +<span class="lineNum"> 137 </span> : : pcap_geterr(pcap) +<span class="lineNum"> 138 </span> : : ); +<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 140 </span> : : } +<span class="lineNum"> 141 </span> : : +<span class="lineNum"> 142 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_setfilter(pcap, &amp;fp) == -1)</span> +<span class="lineNum"> 143 </span> : : { +<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error setting pcap filter: %s&quot;,</span> +<span class="lineNum"> 145 </span> : : pcap_geterr(pcap) +<span class="lineNum"> 146 </span> : : ); +<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 148 </span> : : } +<span class="lineNum"> 149 </span> : : +<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;PCAP filter is: '%s'&quot;, opts-&gt;config[CONF_PCAP_FILTER]);</span> +<span class="lineNum"> 151 </span> : : +<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : pcap_freecode(&amp;fp);</span> +<span class="lineNum"> 153 </span> : : } +<span class="lineNum"> 154 </span> : : +<span class="lineNum"> 155 </span> : : /* Determine and set the data link encapsulation offset. +<span class="lineNum"> 156 </span> : : */ +<span class="lineNum"> 157 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : switch(pcap_datalink(pcap)) {</span> +<span class="lineNum"> 158 </span> : : case DLT_EN10MB: +<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 14;</span> +<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 161 </span> : : #if defined(__linux__) +<span class="lineNum"> 162 </span> : : case DLT_LINUX_SLL: +<span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 16;</span> +<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 165 </span> : : #elif defined(__OpenBSD__) +<span class="lineNum"> 166 </span> : : case DLT_LOOP: +<span class="lineNum"> 167 </span> : : set_direction = 0; +<span class="lineNum"> 168 </span> : : opts-&gt;data_link_offset = 4; +<span class="lineNum"> 169 </span> : : break; +<span class="lineNum"> 170 </span> : : #endif +<span class="lineNum"> 171 </span> : : case DLT_NULL: +<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : set_direction = 0;</span> +<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 4;</span> +<span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 175 </span> : : default: +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 0;</span> +<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 178 </span> : : } +<span class="lineNum"> 179 </span> : : +<span class="lineNum"> 180 </span> : : /* We are only interested on seeing packets coming into the interface. +<span class="lineNum"> 181 </span> : : */ +<span class="lineNum"> 182 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((opts-&gt;pcap_any_direction == 0)</span> +<span class="lineNum"> 183 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (set_direction == 1) &amp;&amp; (pcap_file_mode == 0)</span> +<span class="lineNum"> 184 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (pcap_setdirection(pcap, PCAP_D_IN) &lt; 0))</span> +<span class="lineNum"> 185 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> +<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[*] Warning: pcap error on setdirection: %s.&quot;,</span> +<span class="lineNum"> 187 </span> : : pcap_geterr(pcap)); +<span class="lineNum"> 188 </span> : : +<span class="lineNum"> 189 </span> : : /* Set our pcap handle nonblocking mode. +<span class="lineNum"> 190 </span> : : * +<span class="lineNum"> 191 </span> : : * NOTE: This is simply set to 0 for now until we find a need +<span class="lineNum"> 192 </span> : : * to actually use this mode (which when set on a FreeBSD +<span class="lineNum"> 193 </span> : : * system, it silently breaks the packet capture). +<span class="lineNum"> 194 </span> : : */ +<span class="lineNum"> 195 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((pcap_file_mode == 0)</span> +<span class="lineNum"> 196 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (pcap_setnonblock(pcap, DEF_PCAP_NONBLOCK, errstr)) == -1)</span> +<span class="lineNum"> 197 </span> : : { +<span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error setting pcap nonblocking to %i: %s&quot;,</span> +<span class="lineNum"> 199 </span> : : 0, errstr +<span class="lineNum"> 200 </span> : : ); +<span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 202 </span> : : } +<span class="lineNum"> 203 </span> : : +<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : pcap_dispatch_count = strtol_wrapper(opts-&gt;config[CONF_PCAP_DISPATCH_COUNT],</span> +<span class="lineNum"> 205 </span> : : 0, RCHK_MAX_PCAP_DISPATCH_COUNT, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 206 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 207 </span> : : { +<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid PCAP_DISPATCH_COUNT&quot;);</span> +<span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 210 </span> : : } +<span class="lineNum"> 211 </span> : : +<span class="lineNum"> 212 </span> : : /* Initialize our signal handlers. You can check the return value for +<span class="lineNum"> 213 </span> : : * the number of signals that were *not* set. Those that were not set +<span class="lineNum"> 214 </span> : : * will be listed in the log/stderr output. +<span class="lineNum"> 215 </span> : : */ +<span class="lineNum"> 216 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_sig_handlers() &gt; 0)</span> +<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Errors encountered when setting signal handlers.&quot;);</span> +<span class="lineNum"> 218 </span> : : +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Starting fwknopd main event loop.&quot;);</span> +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> : : /* Jump into our home-grown packet cature loop. +<span class="lineNum"> 222 </span> : : */ +<span class="lineNum"> 223 </span> : : while(1) +<span class="lineNum"> 224 </span> : : { +<span class="lineNum"> 225 </span> : : /* If we got a SIGCHLD and it was the tcp server, then handle it here. +<span class="lineNum"> 226 </span> : : */ +<span class="lineNum"> 227 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_sigchld)</span> +<span class="lineNum"> 228 </span> : : { +<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;tcp_server_pid &gt; 0)</span> +<span class="lineNum"> 230 </span> : : { +<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : child_pid = waitpid(0, &amp;status, WNOHANG);</span> +<span class="lineNum"> 232 </span> : : +<span class="lineNum"> 233 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(child_pid == opts-&gt;tcp_server_pid)</span> +<span class="lineNum"> 234 </span> : : { +<span class="lineNum"> 235 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(WIFSIGNALED(status))</span> +<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;TCP server got signal: %i&quot;, WTERMSIG(status));</span> +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 239 </span> : : &quot;TCP server exited with status of %i. Attempting restart.&quot;, +<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : WEXITSTATUS(status)</span> +<span class="lineNum"> 241 </span> : : ); +<span class="lineNum"> 242 </span> : : +<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : opts-&gt;tcp_server_pid = 0;</span> +<span class="lineNum"> 244 </span> : : +<span class="lineNum"> 245 </span> : : /* Attempt to restart tcp server ? */ +<span class="lineNum"> 246 </span> :<span class="lineNoCov"> 0 : usleep(1000000);</span> +<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : run_tcp_server(opts);</span> +<span class="lineNum"> 248 </span> : : } +<span class="lineNum"> 249 </span> : : } +<span class="lineNum"> 250 </span> : : +<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : got_sigchld = 0;</span> +<span class="lineNum"> 252 </span> : : } +<span class="lineNum"> 253 </span> : : +<span class="lineNum"> 254 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig_do_stop())</span> +<span class="lineNum"> 255 </span> : : { +<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : pcap_breakloop(pcap);</span> +<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : pending_break = 1;</span> +<span class="lineNum"> 258 </span> : : } +<span class="lineNum"> 259 </span> : : +<span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : res = pcap_dispatch(pcap, pcap_dispatch_count,</span> +<span class="lineNum"> 261 </span> : : (pcap_handler)&amp;process_packet, (unsigned char *)opts); +<span class="lineNum"> 262 </span> : : +<span class="lineNum"> 263 </span> : : /* Count processed packets +<span class="lineNum"> 264 </span> : : */ +<span class="lineNum"> 265 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &gt; 0)</span> +<span class="lineNum"> 266 </span> : : { +<span class="lineNum"> 267 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;foreground == 1 &amp;&amp; opts-&gt;verbose &gt; 2)</span> +<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;pcap_dispatch() processed: %d packets&quot;, res);</span> +<span class="lineNum"> 269 </span> : : +<span class="lineNum"> 270 </span> : : /* Count the set of processed packets (pcap_dispatch() return +<span class="lineNum"> 271 </span> : : * value) - we use this as a comparison for --packet-limit regardless +<span class="lineNum"> 272 </span> : : * of SPA packet validity at this point. +<span class="lineNum"> 273 </span> : : */ +<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : opts-&gt;packet_ctr += res;</span> +<span class="lineNum"> 275 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;packet_ctr_limit &amp;&amp; opts-&gt;packet_ctr &gt;= opts-&gt;packet_ctr_limit)</span> +<span class="lineNum"> 276 </span> : : { +<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 278 </span> : : &quot;* Incoming packet count limit of %i reached&quot;, +<span class="lineNum"> 279 </span> : : opts-&gt;packet_ctr_limit +<span class="lineNum"> 280 </span> : : ); +<span class="lineNum"> 281 </span> : : +<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : pcap_breakloop(pcap);</span> +<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : pending_break = 1;</span> +<span class="lineNum"> 284 </span> : : } +<span class="lineNum"> 285 </span> : : } +<span class="lineNum"> 286 </span> : : /* If there was an error, complain and go on (to an extent before +<span class="lineNum"> 287 </span> : : * giving up). +<span class="lineNum"> 288 </span> : : */ +<span class="lineNum"> 289 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res == -1)</span> +<span class="lineNum"> 290 </span> : : { +<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error from pcap_dispatch: %s&quot;,</span> +<span class="lineNum"> 292 </span> : : pcap_geterr(pcap) +<span class="lineNum"> 293 </span> : : ); +<span class="lineNum"> 294 </span> : : +<span class="lineNum"> 295 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_errcnt++ &gt; MAX_PCAP_ERRORS_BEFORE_BAIL)</span> +<span class="lineNum"> 296 </span> : : { +<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] %i consecutive pcap errors. Giving up&quot;,</span> +<span class="lineNum"> 298 </span> : : pcap_errcnt +<span class="lineNum"> 299 </span> : : ); +<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 301 </span> : : } +<span class="lineNum"> 302 </span> : : } +<span class="lineNum"> 303 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pending_break == 1 || res == -2)</span> +<span class="lineNum"> 304 </span> : : { +<span class="lineNum"> 305 </span> : : /* pcap_breakloop was called, so we bail. */ +<span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Gracefully leaving the fwknopd event loop.&quot;);</span> +<span class="lineNum"> 307 </span> : : break; +<span class="lineNum"> 308 </span> : : } +<span class="lineNum"> 309 </span> : : else +<span class="lineNum"> 310 </span> : : pcap_errcnt = 0; +<span class="lineNum"> 311 </span> : : +<span class="lineNum"> 312 </span> : : /* Check for any expired firewall rules and deal with them. +<span class="lineNum"> 313 </span> : : */ +<span class="lineNum"> 314 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!opts-&gt;test)</span> +<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : check_firewall_rules(opts);</span> +<span class="lineNum"> 316 </span> : : +<span class="lineNum"> 317 </span> : : #if FIREWALL_IPFW +<span class="lineNum"> 318 </span> : : /* Purge expired rules that no longer have any corresponding +<span class="lineNum"> 319 </span> : : * dynamic rules. +<span class="lineNum"> 320 </span> : : */ +<span class="lineNum"> 321 </span> : : if(opts-&gt;fw_config-&gt;total_rules &gt; 0) +<span class="lineNum"> 322 </span> : : { +<span class="lineNum"> 323 </span> : : time(&amp;now); +<span class="lineNum"> 324 </span> : : if(opts-&gt;fw_config-&gt;last_purge &lt; (now - opts-&gt;fw_config-&gt;purge_interval)) +<span class="lineNum"> 325 </span> : : { +<span class="lineNum"> 326 </span> : : ipfw_purge_expired_rules(opts); +<span class="lineNum"> 327 </span> : : opts-&gt;fw_config-&gt;last_purge = now; +<span class="lineNum"> 328 </span> : : } +<span class="lineNum"> 329 </span> : : } +<span class="lineNum"> 330 </span> : : #endif +<span class="lineNum"> 331 </span> : : +<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : usleep(useconds);</span> +<span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : }</span> +<span class="lineNum"> 334 </span> : : +<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : pcap_close(pcap);</span> +<span class="lineNum"> 336 </span> : : +<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 338 </span> : : } +<span class="lineNum"> 339 </span> : : +<span class="lineNum"> 340 </span> : : #endif /* USE_LIBPCAP */ +<span class="lineNum"> 341 </span> : : +<span class="lineNum"> 342 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html new file mode 100644 index 00000000..90894255 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/process_packet.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - process_packet.c<span style="font-size: 80%;"> (<a href="process_packet.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">57</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">40</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="process_packet.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="process_packet.c.gcov.html#47">process_packet</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html new file mode 100644 index 00000000..11d8d63a --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/process_packet.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - process_packet.c<span style="font-size: 80%;"> (<a href="process_packet.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">57</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">40</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="process_packet.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="process_packet.c.gcov.html#47">process_packet</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html new file mode 100644 index 00000000..2d3ff5e8 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html @@ -0,0 +1,323 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/process_packet.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - process_packet.c<span style="font-size: 80%;"> (source / <a href="process_packet.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">57</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">40</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: process_packet.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Packet parser/decoder for fwknopd server. Takes the raw packet +<span class="lineNum"> 7 </span> : : * data from libpcap and parses/extracts the packet data payload, +<span class="lineNum"> 8 </span> : : * then creates an FKO context with that data. If the context +<span class="lineNum"> 9 </span> : : * creation is successful, it is queued for processing. +<span class="lineNum"> 10 </span> : : * +<span class="lineNum"> 11 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 12 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 13 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 14 </span> : : * +<span class="lineNum"> 15 </span> : : * License (GNU General Public License): +<span class="lineNum"> 16 </span> : : * +<span class="lineNum"> 17 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 18 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 19 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 20 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 21 </span> : : * +<span class="lineNum"> 22 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 23 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 24 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 25 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 26 </span> : : * +<span class="lineNum"> 27 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 28 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 29 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 30 </span> : : * USA +<span class="lineNum"> 31 </span> : : * +<span class="lineNum"> 32 </span> : : ***************************************************************************** +<span class="lineNum"> 33 </span> : : */ +<span class="lineNum"> 34 </span> : : +<span class="lineNum"> 35 </span> : : #if USE_LIBPCAP +<span class="lineNum"> 36 </span> : : #include &lt;pcap.h&gt; +<span class="lineNum"> 37 </span> : : #endif +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 40 </span> : : #include &quot;netinet_common.h&quot; +<span class="lineNum"> 41 </span> : : #include &quot;process_packet.h&quot; +<span class="lineNum"> 42 </span> : : #include &quot;incoming_spa.h&quot; +<span class="lineNum"> 43 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 44 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 45 </span> : : +<span class="lineNum"> 46 </span> : : #if USE_LIBPCAP +<a name="47"><span class="lineNum"> 47 </span> : : </a> +<span class="lineNum"> 48 </span> : : void +<span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : process_packet(unsigned char *args, const struct pcap_pkthdr *packet_header,</span> +<span class="lineNum"> 50 </span> : : const unsigned char *packet) +<span class="lineNum"> 51 </span> : : { +<span class="lineNum"> 52 </span> : : struct ether_header *eth_p; +<span class="lineNum"> 53 </span> : : struct iphdr *iph_p; +<span class="lineNum"> 54 </span> : : struct tcphdr *tcph_p; +<span class="lineNum"> 55 </span> : : struct udphdr *udph_p; +<span class="lineNum"> 56 </span> : : struct icmphdr *icmph_p; +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> : : unsigned char *pkt_data; +<span class="lineNum"> 59 </span> : : unsigned short pkt_data_len; +<span class="lineNum"> 60 </span> : : unsigned char *pkt_end; +<span class="lineNum"> 61 </span> : : +<span class="lineNum"> 62 </span> : : unsigned int ip_hdr_words; +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> : : unsigned char proto; +<span class="lineNum"> 65 </span> : : unsigned int src_ip; +<span class="lineNum"> 66 </span> : : unsigned int dst_ip; +<span class="lineNum"> 67 </span> : : +<span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : unsigned short src_port = 0;</span> +<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : unsigned short dst_port = 0;</span> +<span class="lineNum"> 70 </span> : : +<span class="lineNum"> 71 </span> : : unsigned short eth_type; +<span class="lineNum"> 72 </span> : : +<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : fko_srv_options_t *opts = (fko_srv_options_t *)args;</span> +<span class="lineNum"> 74 </span> : : +<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : int offset = opts-&gt;data_link_offset;</span> +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : unsigned short pkt_len = packet_header-&gt;len;</span> +<span class="lineNum"> 78 </span> : : +<span class="lineNum"> 79 </span> : : /* This is a hack to determine if we are using the linux cooked +<span class="lineNum"> 80 </span> : : * interface. We base it on the offset being 16 which is the +<span class="lineNum"> 81 </span> : : * value it would be if the datalink is DLT_LINUX_SLL. I don't +<span class="lineNum"> 82 </span> : : * know if this is the correct way to do this, but it seems to work. +<span class="lineNum"> 83 </span> : : */ +<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : unsigned char assume_cooked = (offset == 16 ? 1 : 0);</span> +<span class="lineNum"> 85 </span> : : +<span class="lineNum"> 86 </span> : : /* Determine packet end. +<span class="lineNum"> 87 </span> : : */ +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : pkt_end = (unsigned char *) packet + packet_header-&gt;caplen;</span> +<span class="lineNum"> 89 </span> : : +<span class="lineNum"> 90 </span> : : /* The ethernet header. +<span class="lineNum"> 91 </span> : : */ +<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : eth_p = (struct ether_header*) packet;</span> +<span class="lineNum"> 93 </span> : : +<span class="lineNum"> 94 </span> : : /* Gotta have a complete ethernet header. +<span class="lineNum"> 95 </span> : : */ +<span class="lineNum"> 96 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (packet_header-&gt;caplen &lt; ETHER_HDR_LEN)</span> +<span class="lineNum"> 97 </span> : : return; +<span class="lineNum"> 98 </span> : : +<span class="lineNum"> 99 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : eth_type = ntohs(*((unsigned short*)&amp;eth_p-&gt;ether_type));</span> +<span class="lineNum"> 100 </span> : : +<span class="lineNum"> 101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(eth_type == 0x8100) /* 802.1q encapsulated */</span> +<span class="lineNum"> 102 </span> : : { +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : offset += 4;</span> +<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : eth_type = ntohs(*(((unsigned short*)&amp;eth_p-&gt;ether_type)+2));</span> +<span class="lineNum"> 105 </span> : : } +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> : : /* When using libpcap, pkthdr-&gt;len for 802.3 frames include CRC_LEN, +<span class="lineNum"> 108 </span> : : * but Ethenet_II frames do not. +<span class="lineNum"> 109 </span> : : */ +<span class="lineNum"> 110 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (eth_type &gt; 1500 || assume_cooked == 1)</span> +<span class="lineNum"> 111 </span> : : { +<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : pkt_len += ETHER_CRC_LEN;</span> +<span class="lineNum"> 113 </span> : : +<span class="lineNum"> 114 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(eth_type == 0xAAAA) /* 802.2 SNAP */</span> +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : offset += 5;</span> +<span class="lineNum"> 116 </span> : : } +<span class="lineNum"> 117 </span> : : else /* 802.3 Frame */ +<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : offset += 3;</span> +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> : : /* Make sure the packet length is still valid. +<span class="lineNum"> 121 </span> : : */ +<span class="lineNum"> 122 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! ETHER_IS_VALID_LEN(pkt_len) )</span> +<span class="lineNum"> 123 </span> : : return; +<span class="lineNum"> 124 </span> : : +<span class="lineNum"> 125 </span> : : /* Pull the IP header. +<span class="lineNum"> 126 </span> : : */ +<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : iph_p = (struct iphdr*)(packet + offset);</span> +<span class="lineNum"> 128 </span> : : +<span class="lineNum"> 129 </span> : : /* If IP header is past calculated packet end, bail. +<span class="lineNum"> 130 </span> : : */ +<span class="lineNum"> 131 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((unsigned char*)(iph_p + 1) &gt; pkt_end)</span> +<span class="lineNum"> 132 </span> : : return; +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> : : /* ip_hdr_words is the number of 32 bit words in the IP header. After +<span class="lineNum"> 135 </span> : : * masking of the IPV4 version bits, the number *must* be at least +<span class="lineNum"> 136 </span> : : * 5, even without options. +<span class="lineNum"> 137 </span> : : */ +<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : ip_hdr_words = iph_p-&gt;ihl &amp; IPV4_VER_MASK;</span> +<span class="lineNum"> 139 </span> : : +<span class="lineNum"> 140 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ip_hdr_words &lt; MIN_IPV4_WORDS)</span> +<span class="lineNum"> 141 </span> : : return; +<span class="lineNum"> 142 </span> : : +<span class="lineNum"> 143 </span> : : /* Support for the cases where libpcap returns the Ethernet Frame Check +<span class="lineNum"> 144 </span> : : * Sequence (4 bytes at the end of the Ethernet frame) as part of the +<span class="lineNum"> 145 </span> : : * capture. libpcap returning the FCS is fairly rare. Default settings on +<span class="lineNum"> 146 </span> : : * the following system included an Ethernet FCS in the libpcap capture: +<span class="lineNum"> 147 </span> : : * BeagleBone Black rev C running 3.8.13-bone50 #1 SMP Tue May 13 +<span class="lineNum"> 148 </span> : : * 13:24:52 UTC 2014 armv7l GNU/Linux +<span class="lineNum"> 149 </span> : : * +<span class="lineNum"> 150 </span> : : * Calculate the new pkt_end from the length in the ip header. +<span class="lineNum"> 151 </span> : : */ +<span class="lineNum"> 152 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(((unsigned char*)iph_p)+ntohs(iph_p-&gt;tot_len) == pkt_end-FCS_HEADER_LEN) {</span> +<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;Adjusting packet end to account for FCS header on Ethernet frame&quot;);</span> +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : pkt_end -= FCS_HEADER_LEN;</span> +<span class="lineNum"> 155 </span> : : } +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> : : /* Now, find the packet data payload (depending on IPPROTO). +<span class="lineNum"> 158 </span> : : */ +<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : src_ip = iph_p-&gt;saddr;</span> +<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : dst_ip = iph_p-&gt;daddr;</span> +<span class="lineNum"> 161 </span> : : +<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : proto = iph_p-&gt;protocol;</span> +<span class="lineNum"> 163 </span> : : +<span class="lineNum"> 164 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (proto == IPPROTO_TCP)</span> +<span class="lineNum"> 165 </span> : : { +<span class="lineNum"> 166 </span> : : /* Process TCP packet +<span class="lineNum"> 167 </span> : : */ +<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : tcph_p = (struct tcphdr*)((unsigned char*)iph_p + (ip_hdr_words &lt;&lt; 2));</span> +<span class="lineNum"> 169 </span> : : +<span class="lineNum"> 170 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : src_port = ntohs(tcph_p-&gt;source);</span> +<span class="lineNum"> 171 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : dst_port = ntohs(tcph_p-&gt;dest);</span> +<span class="lineNum"> 172 </span> : : +<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : pkt_data = ((unsigned char*)(tcph_p+1))+((tcph_p-&gt;doff)&lt;&lt;2)-sizeof(struct tcphdr);</span> +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : pkt_data_len = (pkt_end-(unsigned char*)iph_p)-(pkt_data-(unsigned char*)iph_p);</span> +<span class="lineNum"> 176 </span> : : } +<span class="lineNum"> 177 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (proto == IPPROTO_UDP)</span> +<span class="lineNum"> 178 </span> : : { +<span class="lineNum"> 179 </span> : : /* Process UDP packet +<span class="lineNum"> 180 </span> : : */ +<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : udph_p = (struct udphdr*)((unsigned char*)iph_p + (ip_hdr_words &lt;&lt; 2));</span> +<span class="lineNum"> 182 </span> : : +<span class="lineNum"> 183 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : src_port = ntohs(udph_p-&gt;source);</span> +<span class="lineNum"> 184 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : dst_port = ntohs(udph_p-&gt;dest);</span> +<span class="lineNum"> 185 </span> : : +<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : pkt_data = ((unsigned char*)(udph_p + 1));</span> +<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : pkt_data_len = (pkt_end-(unsigned char*)iph_p)-(pkt_data-(unsigned char*)iph_p);</span> +<span class="lineNum"> 188 </span> : : } +<span class="lineNum"> 189 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (proto == IPPROTO_ICMP)</span> +<span class="lineNum"> 190 </span> : : { +<span class="lineNum"> 191 </span> : : /* Process ICMP packet +<span class="lineNum"> 192 </span> : : */ +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : icmph_p = (struct icmphdr*)((unsigned char*)iph_p + (ip_hdr_words &lt;&lt; 2));</span> +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : pkt_data = ((unsigned char*)(icmph_p + 1));</span> +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : pkt_data_len = (pkt_end-(unsigned char*)iph_p)-(pkt_data-(unsigned char*)iph_p);</span> +<span class="lineNum"> 197 </span> : : } +<span class="lineNum"> 198 </span> : : +<span class="lineNum"> 199 </span> : : else +<span class="lineNum"> 200 </span> : : return; +<span class="lineNum"> 201 </span> : : +<span class="lineNum"> 202 </span> : : /* +<span class="lineNum"> 203 </span> : : * Now we have data. For now, we are not checking IP or port values. We +<span class="lineNum"> 204 </span> : : * are relying on the pcap filter. This may change so we do retain the IP +<span class="lineNum"> 205 </span> : : * addresses and ports just in case. We just go ahead and queue the +<span class="lineNum"> 206 </span> : : * data. +<span class="lineNum"> 207 </span> : : */ +<span class="lineNum"> 208 </span> : : +<span class="lineNum"> 209 </span> : : /* Expect the data to be at least the minimum required size. This check +<span class="lineNum"> 210 </span> : : * will weed out a lot of things like small TCP ACK's if the user has a +<span class="lineNum"> 211 </span> : : * permissive pcap filter +<span class="lineNum"> 212 </span> : : */ +<span class="lineNum"> 213 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &lt; MIN_SPA_DATA_SIZE)</span> +<span class="lineNum"> 214 </span> : : return; +<span class="lineNum"> 215 </span> : : +<span class="lineNum"> 216 </span> : : /* Expect the data to not be too large +<span class="lineNum"> 217 </span> : : */ +<span class="lineNum"> 218 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &gt; MAX_SPA_PACKET_LEN)</span> +<span class="lineNum"> 219 </span> : : return; +<span class="lineNum"> 220 </span> : : +<span class="lineNum"> 221 </span> : : /* Copy the packet for SPA processing +<span class="lineNum"> 222 </span> : : */ +<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy((char *)opts-&gt;spa_pkt.packet_data, (char *)pkt_data, pkt_data_len+1);</span> +<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_data_len = pkt_data_len;</span> +<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_proto = proto;</span> +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_ip = src_ip;</span> +<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_ip = dst_ip;</span> +<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_port = src_port;</span> +<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_port = dst_port;</span> +<span class="lineNum"> 230 </span> : : +<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : incoming_spa(opts);</span> +<span class="lineNum"> 232 </span> : : +<span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 234 </span> : : } +<span class="lineNum"> 235 </span> : : +<span class="lineNum"> 236 </span> : : #endif /* USE_LIBPCAP */ +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html new file mode 100644 index 00000000..d2a466a1 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html @@ -0,0 +1,117 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/replay_cache.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - replay_cache.c<span style="font-size: 80%;"> (<a href="replay_cache.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntry">157</td> + <td class="headerCovTableEntryLo">35.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntry">60</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="replay_cache.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#676">free_replay_list</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#210">replay_file_cache_init</a></td> + <td class="coverFnHi">71</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#710">replay_cache_init</a></td> + <td class="coverFnHi">71</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#83">rotate_digest_cache_file</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#755">is_replay</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#731">add_replay</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#451">add_replay_file_cache</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#140">replay_warning</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#425">is_replay_file_cache</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html new file mode 100644 index 00000000..3b1b3114 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html @@ -0,0 +1,117 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/replay_cache.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - replay_cache.c<span style="font-size: 80%;"> (<a href="replay_cache.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntry">157</td> + <td class="headerCovTableEntryLo">35.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntry">60</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="replay_cache.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#731">add_replay</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#451">add_replay_file_cache</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#676">free_replay_list</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#755">is_replay</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#425">is_replay_file_cache</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#710">replay_cache_init</a></td> + <td class="coverFnHi">71</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#210">replay_file_cache_init</a></td> + <td class="coverFnHi">71</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#140">replay_warning</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="replay_cache.c.gcov.html#83">rotate_digest_cache_file</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html new file mode 100644 index 00000000..ac221adc --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html @@ -0,0 +1,857 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/replay_cache.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - replay_cache.c<span style="font-size: 80%;"> (source / <a href="replay_cache.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">56</td> + <td class="headerCovTableEntry">157</td> + <td class="headerCovTableEntryLo">35.7 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntry">9</td> + <td class="headerCovTableEntryLo">33.3 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntry">60</td> + <td class="headerCovTableEntryLo">50.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: replay_cache.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Provides the functions to check for possible replay attacks +<span class="lineNum"> 7 </span> : : * by using a cache of previously seen digests. This cache is a +<span class="lineNum"> 8 </span> : : * simple file by default, but can be made to use a dbm solution +<span class="lineNum"> 9 </span> : : * (ndbm or gdbm in ndbm compatibility mode) file to store the digest +<span class="lineNum"> 10 </span> : : * of a previously received SPA packets. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 13 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 14 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 15 </span> : : * +<span class="lineNum"> 16 </span> : : * License (GNU General Public License): +<span class="lineNum"> 17 </span> : : * +<span class="lineNum"> 18 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 19 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 20 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 21 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 22 </span> : : * +<span class="lineNum"> 23 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 24 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 25 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 26 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 27 </span> : : * +<span class="lineNum"> 28 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 29 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 30 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 31 </span> : : * USA +<span class="lineNum"> 32 </span> : : * +<span class="lineNum"> 33 </span> : : ***************************************************************************** +<span class="lineNum"> 34 </span> : : */ +<span class="lineNum"> 35 </span> : : #include &quot;replay_cache.h&quot; +<span class="lineNum"> 36 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 37 </span> : : #include &quot;fwknopd_errors.h&quot; +<span class="lineNum"> 38 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 39 </span> : : +<span class="lineNum"> 40 </span> : : #include &lt;sys/stat.h&gt; +<span class="lineNum"> 41 </span> : : #include &lt;fcntl.h&gt; +<span class="lineNum"> 42 </span> : : #include &lt;time.h&gt; +<span class="lineNum"> 43 </span> : : +<span class="lineNum"> 44 </span> : : #if HAVE_LIBGDBM +<span class="lineNum"> 45 </span> : : #include &lt;gdbm.h&gt; +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> : : #define MY_DBM_FETCH(d, k) gdbm_fetch(d, k) +<span class="lineNum"> 48 </span> : : #define MY_DBM_STORE(d, k, v, m) gdbm_store(d, k, v, m) +<span class="lineNum"> 49 </span> : : #define MY_DBM_STRERROR(x) gdbm_strerror(x) +<span class="lineNum"> 50 </span> : : #define MY_DBM_CLOSE(d) gdbm_close(d) +<span class="lineNum"> 51 </span> : : +<span class="lineNum"> 52 </span> : : #define MY_DBM_REPLACE GDBM_REPLACE +<span class="lineNum"> 53 </span> : : #define MY_DBM_INSERT GDBM_INSERT +<span class="lineNum"> 54 </span> : : +<span class="lineNum"> 55 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 56 </span> : : #include &lt;ndbm.h&gt; +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> : : #define MY_DBM_FETCH(d, k) dbm_fetch(d, k) +<span class="lineNum"> 59 </span> : : #define MY_DBM_STORE(d, k, v, m) dbm_store(d, k, v, m) +<span class="lineNum"> 60 </span> : : #define MY_DBM_STRERROR(x) strerror(x) +<span class="lineNum"> 61 </span> : : #define MY_DBM_CLOSE(d) dbm_close(d) +<span class="lineNum"> 62 </span> : : +<span class="lineNum"> 63 </span> : : #define MY_DBM_REPLACE DBM_REPLACE +<span class="lineNum"> 64 </span> : : #define MY_DBM_INSERT DBM_INSERT +<span class="lineNum"> 65 </span> : : +<span class="lineNum"> 66 </span> : : #else +<span class="lineNum"> 67 </span> : : #if ! USE_FILE_CACHE +<span class="lineNum"> 68 </span> : : #error &quot;File cache method disabled, and No GDBM or NDBM header file found. WTF?&quot; +<span class="lineNum"> 69 </span> : : #endif +<span class="lineNum"> 70 </span> : : #endif +<span class="lineNum"> 71 </span> : : +<span class="lineNum"> 72 </span> : : #if HAVE_SYS_SOCKET_H +<span class="lineNum"> 73 </span> : : #include &lt;sys/socket.h&gt; +<span class="lineNum"> 74 </span> : : #endif +<span class="lineNum"> 75 </span> : : #include &lt;arpa/inet.h&gt; +<span class="lineNum"> 76 </span> : : +<span class="lineNum"> 77 </span> : : #include &lt;fcntl.h&gt; +<span class="lineNum"> 78 </span> : : +<span class="lineNum"> 79 </span> : : #define DATE_LEN 18 +<span class="lineNum"> 80 </span> : : #define MAX_DIGEST_SIZE 64 +<span class="lineNum"> 81 </span> : : +<span class="lineNum"> 82 </span> : : /* Rotate the digest file by simply renaming it. +<a name="83"><span class="lineNum"> 83 </span> : : */</a> +<span class="lineNum"> 84 </span> : : static void +<span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : rotate_digest_cache_file(fko_srv_options_t *opts)</span> +<span class="lineNum"> 86 </span> : : { +<span class="lineNum"> 87 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 88 </span> : : log_msg(LOG_WARNING, &quot;Digest cache not supported. Nothing to rotate.&quot;); +<span class="lineNum"> 89 </span> : : #else +<span class="lineNum"> 90 </span> : : int res; +<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : char *new_file = NULL;</span> +<span class="lineNum"> 92 </span> : : +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Rotating digest cache file.&quot;);</span> +<span class="lineNum"> 94 </span> : : +<span class="lineNum"> 95 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : new_file = calloc(1, strlen(opts-&gt;config[CONF_DIGEST_FILE])+5);</span> +<span class="lineNum"> 97 </span> : : #else +<span class="lineNum"> 98 </span> : : new_file = calloc(1, strlen(opts-&gt;config[CONF_DIGEST_DB_FILE])+5); +<span class="lineNum"> 99 </span> : : #endif +<span class="lineNum"> 100 </span> : : +<span class="lineNum"> 101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(new_file == NULL)</span> +<span class="lineNum"> 102 </span> : : { +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;rotate_digest_cache_file: Memory allocation error.&quot;);</span> +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> +<span class="lineNum"> 105 </span> : : } +<span class="lineNum"> 106 </span> : : +<span class="lineNum"> 107 </span> : : /* The new filename is just the original with a trailing '-old'. +<span class="lineNum"> 108 </span> : : */ +<span class="lineNum"> 109 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : strlcpy(new_file, opts-&gt;config[CONF_DIGEST_FILE],</span> +<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : strlen(opts-&gt;config[CONF_DIGEST_FILE])+5);</span> +<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : strlcat(new_file, &quot;-old&quot;,</span> +<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : strlen(opts-&gt;config[CONF_DIGEST_FILE])+5);</span> +<span class="lineNum"> 114 </span> : : #else +<span class="lineNum"> 115 </span> : : strlcpy(new_file, opts-&gt;config[CONF_DIGEST_DB_FILE], +<span class="lineNum"> 116 </span> : : strlen(opts-&gt;config[CONF_DIGEST_DB_FILE])+5); +<span class="lineNum"> 117 </span> : : strlcat(new_file, &quot;-old&quot;, +<span class="lineNum"> 118 </span> : : strlen(opts-&gt;config[CONF_DIGEST_DB_FILE])+5); +<span class="lineNum"> 119 </span> : : #endif +<span class="lineNum"> 120 </span> : : +<span class="lineNum"> 121 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : res = rename(opts-&gt;config[CONF_DIGEST_FILE], new_file);</span> +<span class="lineNum"> 123 </span> : : #else +<span class="lineNum"> 124 </span> : : res = rename(opts-&gt;config[CONF_DIGEST_DB_FILE], new_file); +<span class="lineNum"> 125 </span> : : #endif +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> +<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Unable to rename digest file: %s to %s: %s&quot;,</span> +<span class="lineNum"> 129 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_DIGEST_FILE], new_file, strerror(errno)</span> +<span class="lineNum"> 131 </span> : : #else +<span class="lineNum"> 132 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], new_file, strerror(errno) +<span class="lineNum"> 133 </span> : : #endif +<span class="lineNum"> 134 </span> : : ); +<span class="lineNum"> 135 </span> : : #endif /* NO_DIGEST_CACHE */ +<span class="lineNum"> 136 </span> : : +<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : free(new_file);</span> +<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 139 </span> : : } +<a name="140"><span class="lineNum"> 140 </span> : : </a> +<span class="lineNum"> 141 </span> : : static void +<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : replay_warning(fko_srv_options_t *opts, digest_cache_info_t *digest_info)</span> +<span class="lineNum"> 143 </span> : : { +<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : char src_ip[INET_ADDRSTRLEN+1] = {0};</span> +<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : char orig_src_ip[INET_ADDRSTRLEN+1] = {0};</span> +<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : char created[DATE_LEN] = {0};</span> +<span class="lineNum"> 147 </span> : : +<span class="lineNum"> 148 </span> : : #if ! USE_FILE_CACHE +<span class="lineNum"> 149 </span> : : char first[DATE_LEN] = {0}, last[DATE_LEN] = {0}; +<span class="lineNum"> 150 </span> : : #endif +<span class="lineNum"> 151 </span> : : +<span class="lineNum"> 152 </span> : : /* Convert the IPs to a human readable form +<span class="lineNum"> 153 </span> : : */ +<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(opts-&gt;spa_pkt.packet_src_ip),</span> +<span class="lineNum"> 155 </span> : : src_ip, INET_ADDRSTRLEN); +<span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(digest_info-&gt;src_ip), orig_src_ip, INET_ADDRSTRLEN);</span> +<span class="lineNum"> 157 </span> : : +<span class="lineNum"> 158 </span> : : #if ! USE_FILE_CACHE +<span class="lineNum"> 159 </span> : : /* Mark the last_replay time. +<span class="lineNum"> 160 </span> : : */ +<span class="lineNum"> 161 </span> : : digest_info-&gt;last_replay = time(NULL); +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> : : /* Increment the replay count and check to see if it is the first one. +<span class="lineNum"> 164 </span> : : */ +<span class="lineNum"> 165 </span> : : if(++(digest_info-&gt;replay_count) == 1) +<span class="lineNum"> 166 </span> : : { +<span class="lineNum"> 167 </span> : : /* This is the first replay so make it the same as last_replay +<span class="lineNum"> 168 </span> : : */ +<span class="lineNum"> 169 </span> : : digest_info-&gt;first_replay = digest_info-&gt;last_replay; +<span class="lineNum"> 170 </span> : : } +<span class="lineNum"> 171 </span> : : +<span class="lineNum"> 172 </span> : : strftime(first, DATE_LEN, &quot;%D %H:%M:%S&quot;, localtime(&amp;(digest_info-&gt;first_replay))); +<span class="lineNum"> 173 </span> : : strftime(last, DATE_LEN, &quot;%D %H:%M:%S&quot;, localtime(&amp;(digest_info-&gt;last_replay))); +<span class="lineNum"> 174 </span> : : #endif +<span class="lineNum"> 175 </span> : : +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : strftime(created, DATE_LEN, &quot;%D %H:%M:%S&quot;, localtime(&amp;(digest_info-&gt;created)));</span> +<span class="lineNum"> 177 </span> : : +<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 179 </span> : : &quot;Replay detected from source IP: %s, &quot; +<span class="lineNum"> 180 </span> : : &quot;Destination proto/port: %d/%d, &quot; +<span class="lineNum"> 181 </span> : : &quot;Original source IP: %s, &quot; +<span class="lineNum"> 182 </span> : : &quot;Original dst proto/port: %d/%d, &quot; +<span class="lineNum"> 183 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 184 </span> : : &quot;Entry created: %s&quot;, +<span class="lineNum"> 185 </span> : : #else +<span class="lineNum"> 186 </span> : : &quot;Entry created: %s, &quot; +<span class="lineNum"> 187 </span> : : &quot;First replay: %s, &quot; +<span class="lineNum"> 188 </span> : : &quot;Last replay: %s, &quot; +<span class="lineNum"> 189 </span> : : &quot;Replay count: %i&quot;, +<span class="lineNum"> 190 </span> : : #endif +<span class="lineNum"> 191 </span> : : src_ip, +<span class="lineNum"> 192 </span> : : opts-&gt;spa_pkt.packet_proto, +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_port,</span> +<span class="lineNum"> 194 </span> : : orig_src_ip, +<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : digest_info-&gt;proto,</span> +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : digest_info-&gt;dst_port,</span> +<span class="lineNum"> 197 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 198 </span> : : created +<span class="lineNum"> 199 </span> : : #else +<span class="lineNum"> 200 </span> : : created, +<span class="lineNum"> 201 </span> : : first, +<span class="lineNum"> 202 </span> : : last, +<span class="lineNum"> 203 </span> : : digest_info-&gt;replay_count +<span class="lineNum"> 204 </span> : : #endif +<span class="lineNum"> 205 </span> : : ); +<span class="lineNum"> 206 </span> : : +<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 208 </span> : : } +<span class="lineNum"> 209 </span> : : +<a name="210"><span class="lineNum"> 210 </span> : : #if USE_FILE_CACHE</a> +<span class="lineNum"> 211 </span> : : static int +<span class="lineNum"> 212 </span> :<span class="lineCov"> 71 : replay_file_cache_init(fko_srv_options_t *opts)</span> +<span class="lineNum"> 213 </span> : : { +<span class="lineNum"> 214 </span> :<span class="lineCov"> 71 : FILE *digest_file_ptr = NULL;</span> +<span class="lineNum"> 215 </span> :<span class="lineCov"> 71 : unsigned int num_lines = 0, digest_ctr = 0;</span> +<span class="lineNum"> 216 </span> :<span class="lineCov"> 71 : char line_buf[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 217 </span> :<span class="lineCov"> 71 : char src_ip[INET_ADDRSTRLEN+1] = {0};</span> +<span class="lineNum"> 218 </span> :<span class="lineCov"> 71 : char dst_ip[INET_ADDRSTRLEN+1] = {0};</span> +<span class="lineNum"> 219 </span> : : long int time_tmp; +<span class="lineNum"> 220 </span> :<span class="lineCov"> 71 : int digest_file_fd = -1;</span> +<span class="lineNum"> 221 </span> :<span class="lineCov"> 71 : char digest_header[] = &quot;# &lt;digest&gt; &lt;proto&gt; &lt;src_ip&gt; &lt;src_port&gt; &lt;dst_ip&gt; &lt;dst_port&gt; &lt;time&gt;\n&quot;;</span> +<span class="lineNum"> 222 </span> : : +<span class="lineNum"> 223 </span> :<span class="lineCov"> 71 : struct digest_cache_list *digest_elm = NULL;</span> +<span class="lineNum"> 224 </span> : : +<span class="lineNum"> 225 </span> : : /* if the file exists, import the previous SPA digests into +<span class="lineNum"> 226 </span> : : * the cache list +<span class="lineNum"> 227 </span> : : */ +<span class="lineNum"> 228 </span> [<span class="branchCov" title="Branch 1 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 71 : if (access(opts-&gt;config[CONF_DIGEST_FILE], F_OK) == 0)</span> +<span class="lineNum"> 229 </span> : : { +<span class="lineNum"> 230 </span> : : /* Check permissions +<span class="lineNum"> 231 </span> : : */ +<span class="lineNum"> 232 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 71 times"> + </span>]:<span class="lineCov"> 71 : if (access(opts-&gt;config[CONF_DIGEST_FILE], R_OK|W_OK) != 0)</span> +<span class="lineNum"> 233 </span> : : { +<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Digest file '%s' exists but: '%s'&quot;,</span> +<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_DIGEST_FILE], strerror(errno));</span> +<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 237 </span> : : } +<span class="lineNum"> 238 </span> : : } +<span class="lineNum"> 239 </span> : : else +<span class="lineNum"> 240 </span> : : { +<span class="lineNum"> 241 </span> : : /* the file does not exist yet, so it will be created when the first +<span class="lineNum"> 242 </span> : : * successful SPA packet digest is written to disk +<span class="lineNum"> 243 </span> : : */ +<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : digest_file_fd = open(opts-&gt;config[CONF_DIGEST_FILE],</span> +<span class="lineNum"> 245 </span> : : O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (digest_file_fd == -1)</span> +<span class="lineNum"> 248 </span> : : { +<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Could not create digest cache: %s: %s&quot;,</span> +<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_DIGEST_FILE], strerror(errno));</span> +<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 252 </span> : : } +<span class="lineNum"> 253 </span> : : else +<span class="lineNum"> 254 </span> : : { +<span class="lineNum"> 255 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(digest_file_fd, digest_header, strlen(digest_header))</span> +<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : != strlen(digest_header)) {</span> +<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 258 </span> : : &quot;Did not write expected number of bytes to digest cache: %s&quot;, +<span class="lineNum"> 259 </span> : : opts-&gt;config[CONF_DIGEST_FILE]); +<span class="lineNum"> 260 </span> : : } +<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : close(digest_file_fd);</span> +<span class="lineNum"> 262 </span> : : +<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 264 </span> : : } +<span class="lineNum"> 265 </span> : : } +<span class="lineNum"> 266 </span> : : +<span class="lineNum"> 267 </span> [<span class="branchCov" title="Branch 1 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 71 : if(verify_file_perms_ownership(opts-&gt;config[CONF_DIGEST_FILE]) != 1)</span> +<span class="lineNum"> 268 </span> : : return(-1); +<span class="lineNum"> 269 </span> : : +<span class="lineNum"> 270 </span> : : /* File exists, and we have access - create in-memory digest cache +<span class="lineNum"> 271 </span> : : */ +<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 1 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 71 : if ((digest_file_ptr = fopen(opts-&gt;config[CONF_DIGEST_FILE], &quot;r&quot;)) == NULL)</span> +<span class="lineNum"> 273 </span> : : { +<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Could not open digest cache: %s&quot;,</span> +<span class="lineNum"> 275 </span> : : opts-&gt;config[CONF_DIGEST_FILE]); +<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : return(-1);</span> +<span class="lineNum"> 277 </span> : : } +<span class="lineNum"> 278 </span> : : +<span class="lineNum"> 279 </span> : : /* Line format: +<span class="lineNum"> 280 </span> : : * &lt;digest&gt; &lt;proto&gt; &lt;src_ip&gt; &lt;src_port&gt; &lt;dst_ip&gt; &lt;dst_port&gt; &lt;time&gt; +<span class="lineNum"> 281 </span> : : * Example: +<span class="lineNum"> 282 </span> : : * 7XgadOyqv0tF5xG8uhg2iIrheeNKglCWKmxQDgYP1dY 17 127.0.0.1 40305 127.0.0.1 62201 1313283481 +<span class="lineNum"> 283 </span> : : */ +<span class="lineNum"> 284 </span> [<span class="branchCov" title="Branch 0 was taken 8167 times"> + </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 8238 : while ((fgets(line_buf, MAX_LINE_LEN, digest_file_ptr)) != NULL)</span> +<span class="lineNum"> 285 </span> : : { +<span class="lineNum"> 286 </span> :<span class="lineCov"> 8167 : num_lines++;</span> +<span class="lineNum"> 287 </span> :<span class="lineCov"> 8167 : line_buf[MAX_LINE_LEN-1] = '\0';</span> +<span class="lineNum"> 288 </span> : : +<span class="lineNum"> 289 </span>[<span class="branchCov" title="Branch 0 was taken 7859 times"> + </span><span class="branchCov" title="Branch 1 was taken 308 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 7855 times"> + </span><span class="branchCov" title="Branch 3 was taken 4 times"> + </span>]:<span class="lineCov"> 8167 : if(IS_EMPTY_LINE(line_buf[0]))</span> +<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 7851 times"> + </span><span class="branchCov" title="Branch 5 was taken 4 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 965 times"> + </span><span class="branchCov" title="Branch 7 was taken 6886 times"> + </span>] +<span class="lineNum"> 290 </span> :<span class="lineCov"> 1281 : continue;</span> +<span class="lineNum"> 291 </span> : : +<span class="lineNum"> 292 </span> : : /* Initialize a digest cache list element, and add it into the list if +<span class="lineNum"> 293 </span> : : * valid. +<span class="lineNum"> 294 </span> : : */ +<span class="lineNum"> 295 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 6886 times"> + </span>]:<span class="lineCov"> 6886 : if ((digest_elm = calloc(1, sizeof(struct digest_cache_list))) == NULL)</span> +<span class="lineNum"> 296 </span> : : { +<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not allocate digest list element&quot;);</span> +<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 299 </span> : : } +<span class="lineNum"> 300 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 6886 times"> + </span>]:<span class="lineCov"> 6886 : if ((digest_elm-&gt;cache_info.digest = calloc(1, MAX_DIGEST_SIZE+1)) == NULL)</span> +<span class="lineNum"> 301 </span> : : { +<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : free(digest_elm);</span> +<span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not allocate digest string&quot;);</span> +<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 305 </span> : : } +<span class="lineNum"> 306 </span> :<span class="lineCov"> 6886 : src_ip[0] = '\0';</span> +<span class="lineNum"> 307 </span> :<span class="lineCov"> 6886 : dst_ip[0] = '\0';</span> +<span class="lineNum"> 308 </span> : : +<span class="lineNum"> 309 </span> [<span class="branchCov" title="Branch 0 was taken 5388 times"> + </span><span class="branchCov" title="Branch 1 was taken 1498 times"> + </span>]:<span class="lineCov"> 6886 : if(sscanf(line_buf, &quot;%64s %hhu %16s %hu %16s %hu %ld&quot;,</span> +<span class="lineNum"> 310 </span> : : digest_elm-&gt;cache_info.digest, /* %64s, buffer size is MAX_DIGEST_SIZE+1 */ +<span class="lineNum"> 311 </span> : : &amp;(digest_elm-&gt;cache_info.proto), +<span class="lineNum"> 312 </span> : : src_ip, /* %16s, buffer size is INET_ADDRSTRLEN+1 */ +<span class="lineNum"> 313 </span> : : &amp;(digest_elm-&gt;cache_info.src_port), +<span class="lineNum"> 314 </span> : : dst_ip, /* %16s, buffer size is INET_ADDRSTRLEN+1 */ +<span class="lineNum"> 315 </span> : : &amp;(digest_elm-&gt;cache_info.dst_port), +<span class="lineNum"> 316 </span> : : &amp;time_tmp) != 7) +<span class="lineNum"> 317 </span> : : { +<span class="lineNum"> 318 </span> :<span class="lineCov"> 5388 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 319 </span> : : &quot;*Skipping invalid digest file entry in %s at line %i.\n - %s&quot;, +<span class="lineNum"> 320 </span> : : opts-&gt;config[CONF_DIGEST_FILE], num_lines, line_buf +<span class="lineNum"> 321 </span> : : ); +<span class="lineNum"> 322 </span> :<span class="lineCov"> 5388 : free(digest_elm-&gt;cache_info.digest);</span> +<span class="lineNum"> 323 </span> :<span class="lineCov"> 5388 : free(digest_elm);</span> +<span class="lineNum"> 324 </span> :<span class="lineCov"> 5388 : continue;</span> +<span class="lineNum"> 325 </span> : : } +<span class="lineNum"> 326 </span> :<span class="lineCov"> 1498 : digest_elm-&gt;cache_info.created = time_tmp;</span> +<span class="lineNum"> 327 </span> : : +<span class="lineNum"> 328 </span> : : +<span class="lineNum"> 329 </span> [<span class="branchCov" title="Branch 1 was taken 521 times"> + </span><span class="branchCov" title="Branch 2 was taken 977 times"> + </span>]:<span class="lineCov"> 1498 : if (inet_pton(AF_INET, src_ip, &amp;(digest_elm-&gt;cache_info.src_ip)) != 1)</span> +<span class="lineNum"> 330 </span> : : { +<span class="lineNum"> 331 </span> :<span class="lineCov"> 521 : free(digest_elm-&gt;cache_info.digest);</span> +<span class="lineNum"> 332 </span> :<span class="lineCov"> 521 : free(digest_elm);</span> +<span class="lineNum"> 333 </span> :<span class="lineCov"> 521 : continue;</span> +<span class="lineNum"> 334 </span> : : } +<span class="lineNum"> 335 </span> : : +<span class="lineNum"> 336 </span> [<span class="branchCov" title="Branch 1 was taken 469 times"> + </span><span class="branchCov" title="Branch 2 was taken 508 times"> + </span>]:<span class="lineCov"> 977 : if (inet_pton(AF_INET, dst_ip, &amp;(digest_elm-&gt;cache_info.dst_ip)) != 1)</span> +<span class="lineNum"> 337 </span> : : { +<span class="lineNum"> 338 </span> :<span class="lineCov"> 469 : free(digest_elm-&gt;cache_info.digest);</span> +<span class="lineNum"> 339 </span> :<span class="lineCov"> 469 : free(digest_elm);</span> +<span class="lineNum"> 340 </span> :<span class="lineCov"> 469 : continue;</span> +<span class="lineNum"> 341 </span> : : } +<span class="lineNum"> 342 </span> : : +<span class="lineNum"> 343 </span> :<span class="lineCov"> 508 : digest_elm-&gt;next = opts-&gt;digest_cache;</span> +<span class="lineNum"> 344 </span> :<span class="lineCov"> 508 : opts-&gt;digest_cache = digest_elm;</span> +<span class="lineNum"> 345 </span> :<span class="lineCov"> 508 : digest_ctr++;</span> +<span class="lineNum"> 346 </span> : : +<span class="lineNum"> 347 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 508 times"> + </span>]:<span class="lineCov"> 508 : if(opts-&gt;verbose &gt; 3)</span> +<span class="lineNum"> 348 </span> :<span class="lineCov"> 8167 : log_msg(LOG_DEBUG,</span> +<span class="lineNum"> 349 </span> : : &quot;DIGEST FILE: %s, VALID LINE: %s&quot;, +<span class="lineNum"> 350 </span> : : opts-&gt;config[CONF_DIGEST_FILE], line_buf +<span class="lineNum"> 351 </span> : : ); +<span class="lineNum"> 352 </span> : : +<span class="lineNum"> 353 </span> : : } +<span class="lineNum"> 354 </span> : : +<span class="lineNum"> 355 </span> :<span class="lineCov"> 71 : fclose(digest_file_ptr);</span> +<span class="lineNum"> 356 </span> : : +<span class="lineNum"> 357 </span> :<span class="lineCov"> 71 : return(digest_ctr);</span> +<span class="lineNum"> 358 </span> : : } +<span class="lineNum"> 359 </span> : : +<span class="lineNum"> 360 </span> : : #else /* USE_FILE_CACHE */ +<span class="lineNum"> 361 </span> : : +<span class="lineNum"> 362 </span> : : /* Check for the existence of the replay dbm file, and create it if it does +<span class="lineNum"> 363 </span> : : * not exist. Returns the number of db entries or -1 on error. +<span class="lineNum"> 364 </span> : : */ +<span class="lineNum"> 365 </span> : : static int +<span class="lineNum"> 366 </span> : : replay_db_cache_init(fko_srv_options_t *opts) +<span class="lineNum"> 367 </span> : : { +<span class="lineNum"> 368 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 369 </span> : : return(-1); +<span class="lineNum"> 370 </span> : : #else +<span class="lineNum"> 371 </span> : : +<span class="lineNum"> 372 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 373 </span> : : GDBM_FILE rpdb; +<span class="lineNum"> 374 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 375 </span> : : DBM *rpdb; +<span class="lineNum"> 376 </span> : : datum db_ent; +<span class="lineNum"> 377 </span> : : #endif +<span class="lineNum"> 378 </span> : : +<span class="lineNum"> 379 </span> : : datum db_key, db_next_key; +<span class="lineNum"> 380 </span> : : int db_count = 0; +<span class="lineNum"> 381 </span> : : +<span class="lineNum"> 382 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 383 </span> : : rpdb = gdbm_open( +<span class="lineNum"> 384 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], 512, GDBM_WRCREAT, S_IRUSR|S_IWUSR, 0 +<span class="lineNum"> 385 </span> : : ); +<span class="lineNum"> 386 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 387 </span> : : rpdb = dbm_open( +<span class="lineNum"> 388 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], O_RDWR|O_CREAT, S_IRUSR|S_IWUSR +<span class="lineNum"> 389 </span> : : ); +<span class="lineNum"> 390 </span> : : #endif +<span class="lineNum"> 391 </span> : : +<span class="lineNum"> 392 </span> : : if(!rpdb) +<span class="lineNum"> 393 </span> : : { +<span class="lineNum"> 394 </span> : : log_msg(LOG_ERR, +<span class="lineNum"> 395 </span> : : &quot;Unable to open digest cache file: '%s': %s&quot;, +<span class="lineNum"> 396 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], +<span class="lineNum"> 397 </span> : : MY_DBM_STRERROR(errno) +<span class="lineNum"> 398 </span> : : ); +<span class="lineNum"> 399 </span> : : +<span class="lineNum"> 400 </span> : : return(-1); +<span class="lineNum"> 401 </span> : : } +<span class="lineNum"> 402 </span> : : +<span class="lineNum"> 403 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 404 </span> : : db_key = gdbm_firstkey(rpdb); +<span class="lineNum"> 405 </span> : : +<span class="lineNum"> 406 </span> : : while (db_key.dptr != NULL) +<span class="lineNum"> 407 </span> : : { +<span class="lineNum"> 408 </span> : : db_count++; +<span class="lineNum"> 409 </span> : : db_next_key = gdbm_nextkey(rpdb, db_key); +<span class="lineNum"> 410 </span> : : free(db_key.dptr); +<span class="lineNum"> 411 </span> : : db_key = db_next_key; +<span class="lineNum"> 412 </span> : : } +<span class="lineNum"> 413 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 414 </span> : : for (db_key = dbm_firstkey(rpdb); db_ent.dptr != NULL; db_key = dbm_nextkey(rpdb)) +<span class="lineNum"> 415 </span> : : db_count++; +<span class="lineNum"> 416 </span> : : #endif +<span class="lineNum"> 417 </span> : : +<span class="lineNum"> 418 </span> : : MY_DBM_CLOSE(rpdb); +<span class="lineNum"> 419 </span> : : +<span class="lineNum"> 420 </span> : : return(db_count); +<span class="lineNum"> 421 </span> : : #endif /* NO_DIGEST_CACHE */ +<span class="lineNum"> 422 </span> : : } +<span class="lineNum"> 423 </span> : : #endif /* USE_FILE_CACHE */ +<span class="lineNum"> 424 </span> : : +<a name="425"><span class="lineNum"> 425 </span> : : #if USE_FILE_CACHE</a> +<span class="lineNum"> 426 </span> : : static int +<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : is_replay_file_cache(fko_srv_options_t *opts, char *digest)</span> +<span class="lineNum"> 428 </span> : : { +<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : int digest_len = 0;</span> +<span class="lineNum"> 430 </span> : : +<span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : struct digest_cache_list *digest_list_ptr = NULL;</span> +<span class="lineNum"> 432 </span> : : +<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : digest_len = strlen(digest);</span> +<span class="lineNum"> 434 </span> : : +<span class="lineNum"> 435 </span> : : /* Check the cache for the SPA packet digest +<span class="lineNum"> 436 </span> : : */ +<span class="lineNum"> 437 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (digest_list_ptr = opts-&gt;digest_cache;</span> +<span class="lineNum"> 438 </span> : : digest_list_ptr != NULL; +<span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : digest_list_ptr = digest_list_ptr-&gt;next) {</span> +<span class="lineNum"> 440 </span> : : +<span class="lineNum"> 441 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (constant_runtime_cmp(digest_list_ptr-&gt;cache_info.digest,</span> +<span class="lineNum"> 442 </span> : : digest, digest_len) == 0) { +<span class="lineNum"> 443 </span> : : +<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : replay_warning(opts, &amp;(digest_list_ptr-&gt;cache_info));</span> +<span class="lineNum"> 445 </span> : : +<span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_REPLAY);</span> +<span class="lineNum"> 447 </span> : : } +<span class="lineNum"> 448 </span> : : } +<span class="lineNum"> 449 </span> : : return(SPA_MSG_SUCCESS); +<span class="lineNum"> 450 </span> : : } +<a name="451"><span class="lineNum"> 451 </span> : : </a> +<span class="lineNum"> 452 </span> : : static int +<span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : add_replay_file_cache(fko_srv_options_t *opts, char *digest)</span> +<span class="lineNum"> 454 </span> : : { +<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : FILE *digest_file_ptr = NULL;</span> +<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : int digest_len = 0;</span> +<span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : char src_ip[INET_ADDRSTRLEN+1] = {0};</span> +<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : char dst_ip[INET_ADDRSTRLEN+1] = {0};</span> +<span class="lineNum"> 459 </span> : : +<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : struct digest_cache_list *digest_elm = NULL;</span> +<span class="lineNum"> 461 </span> : : +<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : digest_len = strlen(digest);</span> +<span class="lineNum"> 463 </span> : : +<span class="lineNum"> 464 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((digest_elm = calloc(1, sizeof(struct digest_cache_list))) == NULL)</span> +<span class="lineNum"> 465 </span> : : { +<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error calloc() returned NULL for digest cache element&quot;,</span> +<span class="lineNum"> 467 </span> : : fko_errstr(SPA_MSG_ERROR)); +<span class="lineNum"> 468 </span> : : +<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_ERROR);</span> +<span class="lineNum"> 470 </span> : : } +<span class="lineNum"> 471 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((digest_elm-&gt;cache_info.digest = calloc(1, digest_len+1)) == NULL)</span> +<span class="lineNum"> 472 </span> : : { +<span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error calloc() returned NULL for digest cache string&quot;,</span> +<span class="lineNum"> 474 </span> : : fko_errstr(SPA_MSG_ERROR)); +<span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : free(digest_elm);</span> +<span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_ERROR);</span> +<span class="lineNum"> 477 </span> : : } +<span class="lineNum"> 478 </span> : : +<span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_elm-&gt;cache_info.digest, digest, digest_len+1);</span> +<span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.proto = opts-&gt;spa_pkt.packet_proto;</span> +<span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.src_ip = opts-&gt;spa_pkt.packet_src_ip;</span> +<span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.dst_ip = opts-&gt;spa_pkt.packet_dst_ip;</span> +<span class="lineNum"> 483 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.src_port = opts-&gt;spa_pkt.packet_src_port;</span> +<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.dst_port = opts-&gt;spa_pkt.packet_dst_port;</span> +<span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.created = time(NULL);</span> +<span class="lineNum"> 486 </span> : : +<span class="lineNum"> 487 </span> : : /* First, add the digest at the head of the in-memory list +<span class="lineNum"> 488 </span> : : */ +<span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;next = opts-&gt;digest_cache;</span> +<span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : opts-&gt;digest_cache = digest_elm;</span> +<span class="lineNum"> 491 </span> : : +<span class="lineNum"> 492 </span> : : /* Now, write the digest to disk +<span class="lineNum"> 493 </span> : : */ +<span class="lineNum"> 494 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((digest_file_ptr = fopen(opts-&gt;config[CONF_DIGEST_FILE], &quot;a&quot;)) == NULL)</span> +<span class="lineNum"> 495 </span> : : { +<span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Could not open digest cache: %s&quot;,</span> +<span class="lineNum"> 497 </span> : : opts-&gt;config[CONF_DIGEST_FILE]); +<span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_CACHE_ERROR);</span> +<span class="lineNum"> 499 </span> : : } +<span class="lineNum"> 500 </span> : : +<span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(digest_elm-&gt;cache_info.src_ip),</span> +<span class="lineNum"> 502 </span> : : src_ip, INET_ADDRSTRLEN); +<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(digest_elm-&gt;cache_info.dst_ip),</span> +<span class="lineNum"> 504 </span> : : dst_ip, INET_ADDRSTRLEN); +<span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : fprintf(digest_file_ptr, &quot;%s %d %s %d %s %d %d\n&quot;,</span> +<span class="lineNum"> 506 </span> : : digest, +<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.proto,</span> +<span class="lineNum"> 508 </span> : : src_ip, +<span class="lineNum"> 509 </span> :<span class="lineNoCov"> 0 : (int) digest_elm-&gt;cache_info.src_port,</span> +<span class="lineNum"> 510 </span> : : dst_ip, +<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.dst_port,</span> +<span class="lineNum"> 512 </span> :<span class="lineNoCov"> 0 : (int) digest_elm-&gt;cache_info.created);</span> +<span class="lineNum"> 513 </span> : : +<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : fclose(digest_file_ptr);</span> +<span class="lineNum"> 515 </span> : : +<span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_SUCCESS);</span> +<span class="lineNum"> 517 </span> : : } +<span class="lineNum"> 518 </span> : : #endif /* USE_FILE_CACHE */ +<span class="lineNum"> 519 </span> : : +<span class="lineNum"> 520 </span> : : #if !USE_FILE_CACHE +<span class="lineNum"> 521 </span> : : static int +<span class="lineNum"> 522 </span> : : is_replay_dbm_cache(fko_srv_options_t *opts, char *digest) +<span class="lineNum"> 523 </span> : : { +<span class="lineNum"> 524 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 525 </span> : : return 0; +<span class="lineNum"> 526 </span> : : #else +<span class="lineNum"> 527 </span> : : +<span class="lineNum"> 528 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 529 </span> : : GDBM_FILE rpdb; +<span class="lineNum"> 530 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 531 </span> : : DBM *rpdb; +<span class="lineNum"> 532 </span> : : #endif +<span class="lineNum"> 533 </span> : : datum db_key, db_ent; +<span class="lineNum"> 534 </span> : : +<span class="lineNum"> 535 </span> : : int digest_len, res = SPA_MSG_SUCCESS; +<span class="lineNum"> 536 </span> : : +<span class="lineNum"> 537 </span> : : digest_len = strlen(digest); +<span class="lineNum"> 538 </span> : : +<span class="lineNum"> 539 </span> : : db_key.dptr = digest; +<span class="lineNum"> 540 </span> : : db_key.dsize = digest_len; +<span class="lineNum"> 541 </span> : : +<span class="lineNum"> 542 </span> : : /* Check the db for the key +<span class="lineNum"> 543 </span> : : */ +<span class="lineNum"> 544 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 545 </span> : : rpdb = gdbm_open( +<span class="lineNum"> 546 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], 512, GDBM_WRCREAT, S_IRUSR|S_IWUSR, 0 +<span class="lineNum"> 547 </span> : : ); +<span class="lineNum"> 548 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 549 </span> : : rpdb = dbm_open(opts-&gt;config[CONF_DIGEST_DB_FILE], O_RDWR, 0); +<span class="lineNum"> 550 </span> : : #endif +<span class="lineNum"> 551 </span> : : +<span class="lineNum"> 552 </span> : : if(!rpdb) +<span class="lineNum"> 553 </span> : : { +<span class="lineNum"> 554 </span> : : log_msg(LOG_WARNING, &quot;Error opening digest_cache: '%s': %s&quot;, +<span class="lineNum"> 555 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], +<span class="lineNum"> 556 </span> : : MY_DBM_STRERROR(errno) +<span class="lineNum"> 557 </span> : : ); +<span class="lineNum"> 558 </span> : : +<span class="lineNum"> 559 </span> : : return(SPA_MSG_DIGEST_CACHE_ERROR); +<span class="lineNum"> 560 </span> : : } +<span class="lineNum"> 561 </span> : : +<span class="lineNum"> 562 </span> : : db_ent = MY_DBM_FETCH(rpdb, db_key); +<span class="lineNum"> 563 </span> : : +<span class="lineNum"> 564 </span> : : /* If the datum is not null, we have a match. Otherwise, we add +<span class="lineNum"> 565 </span> : : * this entry to the cache. +<span class="lineNum"> 566 </span> : : */ +<span class="lineNum"> 567 </span> : : if(db_ent.dptr != NULL) +<span class="lineNum"> 568 </span> : : { +<span class="lineNum"> 569 </span> : : replay_warning(opts, (digest_cache_info_t *)db_ent.dptr); +<span class="lineNum"> 570 </span> : : +<span class="lineNum"> 571 </span> : : /* Save it back to the digest cache +<span class="lineNum"> 572 </span> : : */ +<span class="lineNum"> 573 </span> : : if(MY_DBM_STORE(rpdb, db_key, db_ent, MY_DBM_REPLACE) != 0) +<span class="lineNum"> 574 </span> : : log_msg(LOG_WARNING, &quot;Error updating entry in digest_cache: '%s': %s&quot;, +<span class="lineNum"> 575 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], +<span class="lineNum"> 576 </span> : : MY_DBM_STRERROR(errno) +<span class="lineNum"> 577 </span> : : ); +<span class="lineNum"> 578 </span> : : +<span class="lineNum"> 579 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 580 </span> : : free(db_ent.dptr); +<span class="lineNum"> 581 </span> : : #endif +<span class="lineNum"> 582 </span> : : res = SPA_MSG_REPLAY; +<span class="lineNum"> 583 </span> : : } +<span class="lineNum"> 584 </span> : : +<span class="lineNum"> 585 </span> : : MY_DBM_CLOSE(rpdb); +<span class="lineNum"> 586 </span> : : +<span class="lineNum"> 587 </span> : : return(res); +<span class="lineNum"> 588 </span> : : #endif /* NO_DIGEST_CACHE */ +<span class="lineNum"> 589 </span> : : } +<span class="lineNum"> 590 </span> : : +<span class="lineNum"> 591 </span> : : static int +<span class="lineNum"> 592 </span> : : add_replay_dbm_cache(fko_srv_options_t *opts, char *digest) +<span class="lineNum"> 593 </span> : : { +<span class="lineNum"> 594 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 595 </span> : : return 0; +<span class="lineNum"> 596 </span> : : #else +<span class="lineNum"> 597 </span> : : +<span class="lineNum"> 598 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 599 </span> : : GDBM_FILE rpdb; +<span class="lineNum"> 600 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 601 </span> : : DBM *rpdb; +<span class="lineNum"> 602 </span> : : #endif +<span class="lineNum"> 603 </span> : : datum db_key, db_ent; +<span class="lineNum"> 604 </span> : : +<span class="lineNum"> 605 </span> : : int digest_len, res = SPA_MSG_SUCCESS; +<span class="lineNum"> 606 </span> : : +<span class="lineNum"> 607 </span> : : digest_cache_info_t dc_info; +<span class="lineNum"> 608 </span> : : +<span class="lineNum"> 609 </span> : : digest_len = strlen(digest); +<span class="lineNum"> 610 </span> : : +<span class="lineNum"> 611 </span> : : db_key.dptr = digest; +<span class="lineNum"> 612 </span> : : db_key.dsize = digest_len; +<span class="lineNum"> 613 </span> : : +<span class="lineNum"> 614 </span> : : /* Check the db for the key +<span class="lineNum"> 615 </span> : : */ +<span class="lineNum"> 616 </span> : : #ifdef HAVE_LIBGDBM +<span class="lineNum"> 617 </span> : : rpdb = gdbm_open( +<span class="lineNum"> 618 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], 512, GDBM_WRCREAT, S_IRUSR|S_IWUSR, 0 +<span class="lineNum"> 619 </span> : : ); +<span class="lineNum"> 620 </span> : : #elif HAVE_LIBNDBM +<span class="lineNum"> 621 </span> : : rpdb = dbm_open(opts-&gt;config[CONF_DIGEST_DB_FILE], O_RDWR, 0); +<span class="lineNum"> 622 </span> : : #endif +<span class="lineNum"> 623 </span> : : +<span class="lineNum"> 624 </span> : : if(!rpdb) +<span class="lineNum"> 625 </span> : : { +<span class="lineNum"> 626 </span> : : log_msg(LOG_WARNING, &quot;Error opening digest_cache: '%s': %s&quot;, +<span class="lineNum"> 627 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], +<span class="lineNum"> 628 </span> : : MY_DBM_STRERROR(errno) +<span class="lineNum"> 629 </span> : : ); +<span class="lineNum"> 630 </span> : : +<span class="lineNum"> 631 </span> : : return(SPA_MSG_DIGEST_CACHE_ERROR); +<span class="lineNum"> 632 </span> : : } +<span class="lineNum"> 633 </span> : : +<span class="lineNum"> 634 </span> : : db_ent = MY_DBM_FETCH(rpdb, db_key); +<span class="lineNum"> 635 </span> : : +<span class="lineNum"> 636 </span> : : /* If the datum is null, we have a new entry. +<span class="lineNum"> 637 </span> : : */ +<span class="lineNum"> 638 </span> : : if(db_ent.dptr == NULL) +<span class="lineNum"> 639 </span> : : { +<span class="lineNum"> 640 </span> : : /* This is a new SPA packet that needs to be added to the cache. +<span class="lineNum"> 641 </span> : : */ +<span class="lineNum"> 642 </span> : : dc_info.src_ip = opts-&gt;spa_pkt.packet_src_ip; +<span class="lineNum"> 643 </span> : : dc_info.dst_ip = opts-&gt;spa_pkt.packet_dst_ip; +<span class="lineNum"> 644 </span> : : dc_info.src_port = opts-&gt;spa_pkt.packet_src_port; +<span class="lineNum"> 645 </span> : : dc_info.dst_port = opts-&gt;spa_pkt.packet_dst_port; +<span class="lineNum"> 646 </span> : : dc_info.proto = opts-&gt;spa_pkt.packet_proto; +<span class="lineNum"> 647 </span> : : dc_info.created = time(NULL); +<span class="lineNum"> 648 </span> : : dc_info.first_replay = dc_info.last_replay = dc_info.replay_count = 0; +<span class="lineNum"> 649 </span> : : +<span class="lineNum"> 650 </span> : : db_ent.dsize = sizeof(digest_cache_info_t); +<span class="lineNum"> 651 </span> : : db_ent.dptr = (char*)&amp;(dc_info); +<span class="lineNum"> 652 </span> : : +<span class="lineNum"> 653 </span> : : if(MY_DBM_STORE(rpdb, db_key, db_ent, MY_DBM_INSERT) != 0) +<span class="lineNum"> 654 </span> : : { +<span class="lineNum"> 655 </span> : : log_msg(LOG_WARNING, &quot;Error adding entry digest_cache: %s&quot;, +<span class="lineNum"> 656 </span> : : MY_DBM_STRERROR(errno) +<span class="lineNum"> 657 </span> : : ); +<span class="lineNum"> 658 </span> : : +<span class="lineNum"> 659 </span> : : res = SPA_MSG_DIGEST_CACHE_ERROR; +<span class="lineNum"> 660 </span> : : } +<span class="lineNum"> 661 </span> : : +<span class="lineNum"> 662 </span> : : res = SPA_MSG_SUCCESS; +<span class="lineNum"> 663 </span> : : } +<span class="lineNum"> 664 </span> : : else +<span class="lineNum"> 665 </span> : : res = SPA_MSG_DIGEST_CACHE_ERROR; +<span class="lineNum"> 666 </span> : : +<span class="lineNum"> 667 </span> : : MY_DBM_CLOSE(rpdb); +<span class="lineNum"> 668 </span> : : +<span class="lineNum"> 669 </span> : : return(res); +<span class="lineNum"> 670 </span> : : #endif /* NO_DIGEST_CACHE */ +<span class="lineNum"> 671 </span> : : } +<span class="lineNum"> 672 </span> : : #endif /* USE_FILE_CACHE */ +<span class="lineNum"> 673 </span> : : +<span class="lineNum"> 674 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 675 </span> : : /* Free replay list memory +<a name="676"><span class="lineNum"> 676 </span> : : */</a> +<span class="lineNum"> 677 </span> : : void +<span class="lineNum"> 678 </span> :<span class="lineCov"> 1814 : free_replay_list(fko_srv_options_t *opts)</span> +<span class="lineNum"> 679 </span> : : { +<span class="lineNum"> 680 </span> :<span class="lineCov"> 1814 : struct digest_cache_list *digest_list_ptr = NULL, *digest_tmp = NULL;</span> +<span class="lineNum"> 681 </span> : : +<span class="lineNum"> 682 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 683 </span> : : return; +<span class="lineNum"> 684 </span> : : #endif +<span class="lineNum"> 685 </span> : : +<span class="lineNum"> 686 </span> : : #if AFL_FUZZING +<span class="lineNum"> 687 </span> : : if(opts-&gt;afl_fuzzing) +<span class="lineNum"> 688 </span> : : return; +<span class="lineNum"> 689 </span> : : #endif +<span class="lineNum"> 690 </span> : : +<span class="lineNum"> 691 </span> [<span class="branchCov" title="Branch 0 was taken 34 times"> + </span><span class="branchCov" title="Branch 1 was taken 1780 times"> + </span>]:<span class="lineCov"> 1814 : if (opts-&gt;digest_cache == NULL)</span> +<span class="lineNum"> 692 </span> : : return; +<span class="lineNum"> 693 </span> : : +<span class="lineNum"> 694 </span> : : digest_list_ptr = opts-&gt;digest_cache; +<span class="lineNum"> 695 </span> [<span class="branchCov" title="Branch 0 was taken 508 times"> + </span><span class="branchCov" title="Branch 1 was taken 34 times"> + </span>]:<span class="lineCov"> 542 : while (digest_list_ptr != NULL)</span> +<span class="lineNum"> 696 </span> : : { +<span class="lineNum"> 697 </span> :<span class="lineCov"> 508 : digest_tmp = digest_list_ptr-&gt;next;</span> +<span class="lineNum"> 698 </span> [<span class="branchCov" title="Branch 0 was taken 508 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 508 : if (digest_list_ptr-&gt;cache_info.digest != NULL</span> +<span class="lineNum"> 699 </span> [<span class="branchCov" title="Branch 0 was taken 508 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 508 : &amp;&amp; digest_list_ptr-&gt;cache_info.digest[0] != '\0')</span> +<span class="lineNum"> 700 </span> : : { +<span class="lineNum"> 701 </span> :<span class="lineCov"> 508 : free(digest_list_ptr-&gt;cache_info.digest);</span> +<span class="lineNum"> 702 </span> : : } +<span class="lineNum"> 703 </span> :<span class="lineCov"> 508 : free(digest_list_ptr);</span> +<span class="lineNum"> 704 </span> :<span class="lineCov"> 508 : digest_list_ptr = digest_tmp;</span> +<span class="lineNum"> 705 </span> : : } +<span class="lineNum"> 706 </span> : : +<span class="lineNum"> 707 </span> : : return; +<span class="lineNum"> 708 </span> : : } +<span class="lineNum"> 709 </span> : : #endif +<a name="710"><span class="lineNum"> 710 </span> : : </a> +<span class="lineNum"> 711 </span> : : int +<span class="lineNum"> 712 </span> :<span class="lineCov"> 71 : replay_cache_init(fko_srv_options_t *opts)</span> +<span class="lineNum"> 713 </span> : : { +<span class="lineNum"> 714 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 715 </span> : : return(-1); +<span class="lineNum"> 716 </span> : : #else +<span class="lineNum"> 717 </span> : : +<span class="lineNum"> 718 </span> : : /* If rotation was specified, do it. +<span class="lineNum"> 719 </span> : : */ +<span class="lineNum"> 720 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 71 : if(opts-&gt;rotate_digest_cache)</span> +<span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : rotate_digest_cache_file(opts);</span> +<span class="lineNum"> 722 </span> : : +<span class="lineNum"> 723 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 724 </span> :<span class="lineCov"> 71 : return replay_file_cache_init(opts);</span> +<span class="lineNum"> 725 </span> : : #else +<span class="lineNum"> 726 </span> : : return replay_db_cache_init(opts); +<span class="lineNum"> 727 </span> : : #endif +<span class="lineNum"> 728 </span> : : +<span class="lineNum"> 729 </span> : : #endif /* NO_DIGEST_CACHE */ +<span class="lineNum"> 730 </span> : : } +<a name="731"><span class="lineNum"> 731 </span> : : </a> +<span class="lineNum"> 732 </span> : : int +<span class="lineNum"> 733 </span> :<span class="lineNoCov"> 0 : add_replay(fko_srv_options_t *opts, char *digest)</span> +<span class="lineNum"> 734 </span> : : { +<span class="lineNum"> 735 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 736 </span> : : return(-1); +<span class="lineNum"> 737 </span> : : #else +<span class="lineNum"> 738 </span> : : +<span class="lineNum"> 739 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(digest == NULL)</span> +<span class="lineNum"> 740 </span> : : { +<span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;NULL digest passed into add_replay()&quot;);</span> +<span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_CACHE_ERROR);</span> +<span class="lineNum"> 743 </span> : : } +<span class="lineNum"> 744 </span> : : +<span class="lineNum"> 745 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 746 </span> :<span class="lineNoCov"> 0 : return add_replay_file_cache(opts, digest);</span> +<span class="lineNum"> 747 </span> : : #else +<span class="lineNum"> 748 </span> : : return add_replay_dbm_cache(opts, digest); +<span class="lineNum"> 749 </span> : : #endif +<span class="lineNum"> 750 </span> : : #endif /* NO_DIGEST_CACHE */ +<span class="lineNum"> 751 </span> : : } +<span class="lineNum"> 752 </span> : : +<span class="lineNum"> 753 </span> : : /* Take an fko context, pull the digest and use it as the key to check the +<span class="lineNum"> 754 </span> : : * replay db (digest cache). +<a name="755"><span class="lineNum"> 755 </span> : : */</a> +<span class="lineNum"> 756 </span> : : int +<span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : is_replay(fko_srv_options_t *opts, char *digest)</span> +<span class="lineNum"> 758 </span> : : { +<span class="lineNum"> 759 </span> : : #ifdef NO_DIGEST_CACHE +<span class="lineNum"> 760 </span> : : return(-1); +<span class="lineNum"> 761 </span> : : #else +<span class="lineNum"> 762 </span> : : +<span class="lineNum"> 763 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 764 </span> :<span class="lineNoCov"> 0 : return is_replay_file_cache(opts, digest);</span> +<span class="lineNum"> 765 </span> : : #else +<span class="lineNum"> 766 </span> : : return is_replay_dbm_cache(opts, digest); +<span class="lineNum"> 767 </span> : : #endif +<span class="lineNum"> 768 </span> : : #endif /* NO_DIGEST_CACHE */ +<span class="lineNum"> 769 </span> : : } +<span class="lineNum"> 770 </span> : : +<span class="lineNum"> 771 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html new file mode 100644 index 00000000..ae4288a7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/sig_handler.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - sig_handler.c<span style="font-size: 80%;"> (<a href="sig_handler.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">61</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">31</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="sig_handler.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="sig_handler.c.gcov.html#51">sig_handler</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sig_handler.c.gcov.html#84">set_sig_handlers</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sig_handler.c.gcov.html#150">sig_do_stop</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html new file mode 100644 index 00000000..3b95ff54 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html @@ -0,0 +1,93 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/sig_handler.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - sig_handler.c<span style="font-size: 80%;"> (<a href="sig_handler.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">61</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">31</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="sig_handler.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="sig_handler.c.gcov.html#84">set_sig_handlers</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sig_handler.c.gcov.html#150">sig_do_stop</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="sig_handler.c.gcov.html#51">sig_handler</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html new file mode 100644 index 00000000..ae1fb952 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html @@ -0,0 +1,262 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/sig_handler.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - sig_handler.c<span style="font-size: 80%;"> (source / <a href="sig_handler.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">61</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">3</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">31</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: sig_handler.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Signal handling dta and routines for fwknopd. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;sig_handler.h&quot; +<span class="lineNum"> 34 </span> : : +<span class="lineNum"> 35 </span> : : #if HAVE_SYS_WAIT_H +<span class="lineNum"> 36 </span> : : #include &lt;sys/wait.h&gt; +<span class="lineNum"> 37 </span> : : #endif +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : sig_atomic_t got_signal = 0; /* General signal flag (break capture) */ +<span class="lineNum"> 40 </span> : : +<span class="lineNum"> 41 </span> : : sig_atomic_t got_sighup = 0; /* SIGHUP flag */ +<span class="lineNum"> 42 </span> : : sig_atomic_t got_sigint = 0; /* SIGINT flag */ +<span class="lineNum"> 43 </span> : : sig_atomic_t got_sigterm = 0; /* SIGTERM flag */ +<span class="lineNum"> 44 </span> : : sig_atomic_t got_sigusr1 = 0; /* SIGUSR1 flag */ +<span class="lineNum"> 45 </span> : : sig_atomic_t got_sigusr2 = 0; /* SIGUSR2 flag */ +<span class="lineNum"> 46 </span> : : sig_atomic_t got_sigchld = 0; /* SIGCHLD flag */ +<span class="lineNum"> 47 </span> : : +<span class="lineNum"> 48 </span> : : sigset_t *csmask; +<span class="lineNum"> 49 </span> : : +<span class="lineNum"> 50 </span> : : /* SIGHUP Handler +<a name="51"><span class="lineNum"> 51 </span> : : */</a> +<span class="lineNum"> 52 </span> : : void +<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : sig_handler(int sig)</span> +<span class="lineNum"> 54 </span> : : { +<span class="lineNum"> 55 </span> : : int o_errno; +<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : got_signal = sig;</span> +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span> :<span class="lineNoCov"> 0 : switch(sig) {</span> +<span class="lineNum"> </span> <span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span>] +<span class="lineNum"> 59 </span> : : case SIGHUP: +<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : got_sighup = 1;</span> +<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 62 </span> : : case SIGINT: +<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : got_sigint = 1;</span> +<span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 65 </span> : : case SIGTERM: +<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : got_sigterm = 1;</span> +<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 68 </span> : : case SIGUSR1: +<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : got_sigusr1 = 1;</span> +<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 71 </span> : : case SIGUSR2: +<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : got_sigusr2 = 1;</span> +<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 74 </span> : : case SIGCHLD: +<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : o_errno = errno; /* Save errno */</span> +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : got_sigchld = 1;</span> +<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : waitpid(-1, NULL, WNOHANG);</span> +<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : errno = o_errno; /* restore errno (in case reset by waitpid) */</span> +<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 80 </span> : : } +<span class="lineNum"> 81 </span> : : } +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> : : /* Setup signal handlers +<a name="84"><span class="lineNum"> 84 </span> : : */</a> +<span class="lineNum"> 85 </span> : : int +<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : set_sig_handlers(void)</span> +<span class="lineNum"> 87 </span> : : { +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : int err = 0;</span> +<span class="lineNum"> 89 </span> : : struct sigaction act; +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> : : /* Clear the signal flags. +<span class="lineNum"> 92 </span> : : */ +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> +<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : got_sighup = 0;</span> +<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : got_sigint = 0;</span> +<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : got_sigterm = 0;</span> +<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : got_sigusr1 = 0;</span> +<span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : got_sigusr2 = 0;</span> +<span class="lineNum"> 99 </span> : : +<span class="lineNum"> 100 </span> : : /* Setup the handlers +<span class="lineNum"> 101 </span> : : */ +<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : act.sa_handler = sig_handler;</span> +<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : sigemptyset(&amp;act.sa_mask);</span> +<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : act.sa_flags = SA_RESTART;</span> +<span class="lineNum"> 105 </span> : : +<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGHUP, &amp;act, NULL) &lt; 0)</span> +<span class="lineNum"> 107 </span> : : { +<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGHUP handler: %s&quot;,</span> +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 111 </span> : : } +<span class="lineNum"> 112 </span> : : +<span class="lineNum"> 113 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGINT, &amp;act, NULL) &lt; 0)</span> +<span class="lineNum"> 114 </span> : : { +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGINT handler: %s&quot;,</span> +<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 118 </span> : : } +<span class="lineNum"> 119 </span> : : +<span class="lineNum"> 120 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGTERM, &amp;act, NULL) &lt; 0)</span> +<span class="lineNum"> 121 </span> : : { +<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGTERM handler: %s&quot;,</span> +<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 125 </span> : : } +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGUSR1, &amp;act, NULL) &lt; 0)</span> +<span class="lineNum"> 128 </span> : : { +<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGUSR1 handler: %s&quot;,</span> +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 132 </span> : : } +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGUSR2, &amp;act, NULL) &lt; 0)</span> +<span class="lineNum"> 135 </span> : : { +<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGUSR2 handler: %s&quot;,</span> +<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 139 </span> : : } +<span class="lineNum"> 140 </span> : : +<span class="lineNum"> 141 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGCHLD, &amp;act, NULL) &lt; 0)</span> +<span class="lineNum"> 142 </span> : : { +<span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGCHLD handler: %s&quot;,</span> +<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : err++;</span> +<span class="lineNum"> 146 </span> : : } +<span class="lineNum"> 147 </span> : : +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : return(err);</span> +<span class="lineNum"> 149 </span> : : } +<a name="150"><span class="lineNum"> 150 </span> : : </a> +<span class="lineNum"> 151 </span> : : int +<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : sig_do_stop(void)</span> +<span class="lineNum"> 153 </span> : : { +<span class="lineNum"> 154 </span> : : /* Any signal except USR1, USR2, and SIGCHLD mean break the loop. +<span class="lineNum"> 155 </span> : : */ +<span class="lineNum"> 156 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_signal != 0)</span> +<span class="lineNum"> 157 </span> : : { +<span class="lineNum"> 158 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_sigint || got_sigterm || got_sighup)</span> +<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] +<span class="lineNum"> 159 </span> : : { +<span class="lineNum"> 160 </span> : : return 1; +<span class="lineNum"> 161 </span> : : } +<span class="lineNum"> 162 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(got_sigusr1 || got_sigusr2)</span> +<span class="lineNum"> 163 </span> : : { +<span class="lineNum"> 164 </span> : : /* Not doing anything with these yet. +<span class="lineNum"> 165 </span> : : */ +<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : got_sigusr1 = got_sigusr2 = 0;</span> +<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> +<span class="lineNum"> 168 </span> : : } +<span class="lineNum"> 169 </span> : : else +<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> +<span class="lineNum"> 171 </span> : : } +<span class="lineNum"> 172 </span> : : return 0; +<span class="lineNum"> 173 </span> : : } +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html new file mode 100644 index 00000000..aaddfae7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/tcp_server.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - tcp_server.c<span style="font-size: 80%;"> (<a href="tcp_server.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">63</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="tcp_server.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="tcp_server.c.gcov.html#53">run_tcp_server</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html new file mode 100644 index 00000000..9a27c919 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/tcp_server.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - tcp_server.c<span style="font-size: 80%;"> (<a href="tcp_server.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">63</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="tcp_server.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="tcp_server.c.gcov.html#53">run_tcp_server</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html new file mode 100644 index 00000000..931f08e8 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html @@ -0,0 +1,342 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/tcp_server.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - tcp_server.c<span style="font-size: 80%;"> (source / <a href="tcp_server.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">63</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">30</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: tcp_server.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Spawns off a dummy tcp server for fwknopd. Its purpose is +<span class="lineNum"> 7 </span> : : * to accept a tcp connection, then drop it after the first packet. +<span class="lineNum"> 8 </span> : : * +<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 12 </span> : : * +<span class="lineNum"> 13 </span> : : * License (GNU General Public License): +<span class="lineNum"> 14 </span> : : * +<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 19 </span> : : * +<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 24 </span> : : * +<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 28 </span> : : * USA +<span class="lineNum"> 29 </span> : : * +<span class="lineNum"> 30 </span> : : ***************************************************************************** +<span class="lineNum"> 31 </span> : : */ +<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;tcp_server.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 36 </span> : : #include &lt;errno.h&gt; +<span class="lineNum"> 37 </span> : : +<span class="lineNum"> 38 </span> : : #if HAVE_SYS_SOCKET_H +<span class="lineNum"> 39 </span> : : #include &lt;sys/socket.h&gt; +<span class="lineNum"> 40 </span> : : #endif +<span class="lineNum"> 41 </span> : : #if HAVE_ARPA_INET_H +<span class="lineNum"> 42 </span> : : #include &lt;arpa/inet.h&gt; +<span class="lineNum"> 43 </span> : : #endif +<span class="lineNum"> 44 </span> : : #if HAVE_NETDB +<span class="lineNum"> 45 </span> : : #include &lt;netdb.h&gt; +<span class="lineNum"> 46 </span> : : #endif +<span class="lineNum"> 47 </span> : : +<span class="lineNum"> 48 </span> : : #include &lt;fcntl.h&gt; +<span class="lineNum"> 49 </span> : : #include &lt;sys/select.h&gt; +<span class="lineNum"> 50 </span> : : +<span class="lineNum"> 51 </span> : : /* Fork off and run a &quot;dummy&quot; TCP server. The return value is the PID of +<span class="lineNum"> 52 </span> : : * the child process or -1 if there is a fork error. +<a name="53"><span class="lineNum"> 53 </span> : : */</a> +<span class="lineNum"> 54 </span> : : int +<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : run_tcp_server(fko_srv_options_t *opts)</span> +<span class="lineNum"> 56 </span> : : { +<span class="lineNum"> 57 </span> : : #if !CODE_COVERAGE +<span class="lineNum"> 58 </span> : : pid_t pid, ppid; +<span class="lineNum"> 59 </span> : : #endif +<span class="lineNum"> 60 </span> : : int s_sock, c_sock, sfd_flags, clen, selval; +<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : int reuse_addr = 1, is_err, rv=1;</span> +<span class="lineNum"> 62 </span> : : fd_set sfd_set; +<span class="lineNum"> 63 </span> : : struct sockaddr_in saddr, caddr; +<span class="lineNum"> 64 </span> : : struct timeval tv; +<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : char sipbuf[MAX_IPV4_STR_LEN] = {0};</span> +<span class="lineNum"> 66 </span> : : +<span class="lineNum"> 67 </span> : : unsigned short port; +<span class="lineNum"> 68 </span> : : +<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : port = strtol_wrapper(opts-&gt;config[CONF_TCPSERV_PORT],</span> +<span class="lineNum"> 70 </span> : : 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 71 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 72 </span> : : { +<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid max TCPSERV_PORT value.&quot;);</span> +<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 75 </span> : : } +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Kicking off TCP server to listen on port %i.&quot;, port);</span> +<span class="lineNum"> 77 </span> : : +<span class="lineNum"> 78 </span> : : #if !CODE_COVERAGE +<span class="lineNum"> 79 </span> : : /* Fork off a child process to run the command and provide its outputs. +<span class="lineNum"> 80 </span> : : */ +<span class="lineNum"> 81 </span> : : pid = fork(); +<span class="lineNum"> 82 </span> : : +<span class="lineNum"> 83 </span> : : /* Non-zero pid means we are the parent or there was a fork error. +<span class="lineNum"> 84 </span> : : * in either case we simply return that value to the caller. +<span class="lineNum"> 85 </span> : : */ +<span class="lineNum"> 86 </span> : : if (pid != 0) +<span class="lineNum"> 87 </span> : : { +<span class="lineNum"> 88 </span> : : opts-&gt;tcp_server_pid = pid; +<span class="lineNum"> 89 </span> : : return(pid); +<span class="lineNum"> 90 </span> : : } +<span class="lineNum"> 91 </span> : : +<span class="lineNum"> 92 </span> : : /* Get our parent PID so we can periodically check for it. We want to +<span class="lineNum"> 93 </span> : : * know when it goes away so we can too. +<span class="lineNum"> 94 </span> : : */ +<span class="lineNum"> 95 </span> : : ppid = getppid(); +<span class="lineNum"> 96 </span> : : +<span class="lineNum"> 97 </span> : : /* We are the child. The first thing to do is close our copy of the +<span class="lineNum"> 98 </span> : : * parent PID file so we don't end up holding the lock if the parent +<span class="lineNum"> 99 </span> : : * suffers a sudden death that doesn't take us out too. +<span class="lineNum"> 100 </span> : : */ +<span class="lineNum"> 101 </span> : : close(opts-&gt;lock_fd); +<span class="lineNum"> 102 </span> : : #endif +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> : : /* Now, let's make a TCP server +<span class="lineNum"> 105 </span> : : */ +<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((s_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) &lt; 0)</span> +<span class="lineNum"> 107 </span> : : { +<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: socket() failed: %s&quot;,</span> +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 111 </span> : : } +<span class="lineNum"> 112 </span> : : +<span class="lineNum"> 113 </span> : : /* So that we can re-bind to it without TIME_WAIT problems +<span class="lineNum"> 114 </span> : : */ +<span class="lineNum"> 115 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(setsockopt(s_sock, SOL_SOCKET, SO_REUSEADDR, &amp;reuse_addr, sizeof(reuse_addr)) == -1)</span> +<span class="lineNum"> 116 </span> : : { +<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: setsockopt error: %s&quot;,</span> +<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 121 </span> : : } +<span class="lineNum"> 122 </span> : : +<span class="lineNum"> 123 </span> : : /* Make our main socket non-blocking so we don't have to be stuck on +<span class="lineNum"> 124 </span> : : * listening for incoming connections. +<span class="lineNum"> 125 </span> : : */ +<span class="lineNum"> 126 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sfd_flags = fcntl(s_sock, F_GETFL, 0)) &lt; 0)</span> +<span class="lineNum"> 127 </span> : : { +<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: fcntl F_GETFL error: %s&quot;,</span> +<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 132 </span> : : } +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> : : #if !CODE_COVERAGE +<span class="lineNum"> 135 </span> : : sfd_flags |= O_NONBLOCK; +<span class="lineNum"> 136 </span> : : +<span class="lineNum"> 137 </span> : : if(fcntl(s_sock, F_SETFL, sfd_flags) &lt; 0) +<span class="lineNum"> 138 </span> : : { +<span class="lineNum"> 139 </span> : : log_msg(LOG_ERR, &quot;run_tcp_server: fcntl F_SETFL error setting O_NONBLOCK: %s&quot;, +<span class="lineNum"> 140 </span> : : strerror(errno)); +<span class="lineNum"> 141 </span> : : close(s_sock); +<span class="lineNum"> 142 </span> : : return -1; +<span class="lineNum"> 143 </span> : : } +<span class="lineNum"> 144 </span> : : #endif +<span class="lineNum"> 145 </span> : : +<span class="lineNum"> 146 </span> : : /* Construct local address structure */ +<span class="lineNum"> 147 </span> : : memset(&amp;saddr, 0, sizeof(saddr)); +<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : saddr.sin_family = AF_INET; /* Internet address family */</span> +<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : saddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */</span> +<span class="lineNum"> 150 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : saddr.sin_port = htons(port); /* Local port */</span> +<span class="lineNum"> 151 </span> : : +<span class="lineNum"> 152 </span> : : /* Bind to the local address */ +<span class="lineNum"> 153 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bind(s_sock, (struct sockaddr *) &amp;saddr, sizeof(saddr)) &lt; 0)</span> +<span class="lineNum"> 154 </span> : : { +<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: bind() failed: %s&quot;,</span> +<span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 159 </span> : : } +<span class="lineNum"> 160 </span> : : +<span class="lineNum"> 161 </span> : : /* Mark the socket so it will listen for incoming connections +<span class="lineNum"> 162 </span> : : * (but only one at a time) +<span class="lineNum"> 163 </span> : : */ +<span class="lineNum"> 164 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (listen(s_sock, 1) &lt; 0)</span> +<span class="lineNum"> 165 </span> : : { +<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: listen() failed: %s&quot;,</span> +<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 170 </span> : : } +<span class="lineNum"> 171 </span> : : +<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : FD_ZERO(&amp;sfd_set);</span> +<span class="lineNum"> 173 </span> : : +<span class="lineNum"> 174 </span> : : /* Now loop and accept and drop connections after the first packet or a +<span class="lineNum"> 175 </span> : : * short timeout. +<span class="lineNum"> 176 </span> : : */ +<span class="lineNum"> 177 </span> : : while(1) +<span class="lineNum"> 178 </span> : : { +<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : clen = sizeof(caddr);</span> +<span class="lineNum"> 180 </span> : : +<span class="lineNum"> 181 </span> : : /* Initialize and setup the socket for select. +<span class="lineNum"> 182 </span> : : */ +<span class="lineNum"> 183 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : FD_SET(s_sock, &amp;sfd_set);</span> +<span class="lineNum"> 184 </span> : : +<span class="lineNum"> 185 </span> : : /* Set our select timeout to 200 ms. +<span class="lineNum"> 186 </span> : : */ +<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : tv.tv_sec = 0;</span> +<span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : tv.tv_usec = 200000;</span> +<span class="lineNum"> 189 </span> : : +<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : selval = select(s_sock+1, &amp;sfd_set, NULL, NULL, &amp;tv);</span> +<span class="lineNum"> 191 </span> : : +<span class="lineNum"> 192 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(selval == -1)</span> +<span class="lineNum"> 193 </span> : : { +<span class="lineNum"> 194 </span> : : /* Select error - so kill the child and bail. +<span class="lineNum"> 195 </span> : : */ +<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: select error socket: %s&quot;,</span> +<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : rv = -1;</span> +<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 200 </span> : : } +<span class="lineNum"> 201 </span> : : +<span class="lineNum"> 202 </span> : : #if !CODE_COVERAGE +<span class="lineNum"> 203 </span> : : if(selval == 0) +<span class="lineNum"> 204 </span> : : { +<span class="lineNum"> 205 </span> : : /* Timeout - So we check to make sure our parent is still there by simply +<span class="lineNum"> 206 </span> : : * using kill(ppid, 0) and checking the return value. +<span class="lineNum"> 207 </span> : : */ +<span class="lineNum"> 208 </span> : : if(kill(ppid, 0) != 0 &amp;&amp; errno == ESRCH) +<span class="lineNum"> 209 </span> : : { +<span class="lineNum"> 210 </span> : : rv = -1; +<span class="lineNum"> 211 </span> : : break; +<span class="lineNum"> 212 </span> : : } +<span class="lineNum"> 213 </span> : : continue; +<span class="lineNum"> 214 </span> : : } +<span class="lineNum"> 215 </span> : : #endif +<span class="lineNum"> 216 </span> : : +<span class="lineNum"> 217 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! FD_ISSET(s_sock, &amp;sfd_set))</span> +<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] +<span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 219 </span> : : +<span class="lineNum"> 220 </span> : : /* Wait for a client to connect +<span class="lineNum"> 221 </span> : : */ +<span class="lineNum"> 222 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((c_sock = accept(s_sock, (struct sockaddr *) &amp;caddr, (socklen_t *)&amp;clen)) &lt; 0)</span> +<span class="lineNum"> 223 </span> : : { +<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: accept() failed: %s&quot;,</span> +<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : rv = -1;</span> +<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 228 </span> : : } +<span class="lineNum"> 229 </span> : : +<span class="lineNum"> 230 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> +<span class="lineNum"> 231 </span> : : { +<span class="lineNum"> 232 </span> : : memset(sipbuf, 0x0, MAX_IPV4_STR_LEN); +<span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(caddr.sin_addr.s_addr), sipbuf, MAX_IPV4_STR_LEN);</span> +<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;tcp_server: Got TCP connection from %s.&quot;, sipbuf);</span> +<span class="lineNum"> 235 </span> : : } +<span class="lineNum"> 236 </span> : : +<span class="lineNum"> 237 </span> : : /* Though hacky and clunky, we just sleep for a second then +<span class="lineNum"> 238 </span> : : * close the socket. No need to read or write anything. This +<span class="lineNum"> 239 </span> : : * just gives the client a sufficient window to send their +<span class="lineNum"> 240 </span> : : * request on this socket. In any case the socket is closed +<span class="lineNum"> 241 </span> : : * after that time. +<span class="lineNum"> 242 </span> : : */ +<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : usleep(1000000);</span> +<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : shutdown(c_sock, SHUT_RDWR);</span> +<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : close(c_sock);</span> +<span class="lineNum"> 246 </span> : : +<span class="lineNum"> 247 </span> : : #if CODE_COVERAGE +<span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 249 </span> : : #endif +<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : } /* infinite while loop */</span> +<span class="lineNum"> 251 </span> : : +<span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : return rv;</span> +<span class="lineNum"> 254 </span> : : } +<span class="lineNum"> 255 </span> : : +<span class="lineNum"> 256 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html new file mode 100644 index 00000000..e781a71b --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/udp_server.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - udp_server.c<span style="font-size: 80%;"> (<a href="udp_server.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">81</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">54</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="udp_server.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="udp_server.c.gcov.html#51">run_udp_server</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html new file mode 100644 index 00000000..807d0225 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html @@ -0,0 +1,85 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/udp_server.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - udp_server.c<span style="font-size: 80%;"> (<a href="udp_server.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">81</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">54</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="udp_server.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="udp_server.c.gcov.html#51">run_udp_server</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html new file mode 100644 index 00000000..4dd58d89 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html @@ -0,0 +1,330 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/udp_server.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - udp_server.c<span style="font-size: 80%;"> (source / <a href="udp_server.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">81</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">1</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">0</td> + <td class="headerCovTableEntry">54</td> + <td class="headerCovTableEntryLo">0.0 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /*</a> +<span class="lineNum"> 2 </span> : : ***************************************************************************** +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * File: udp_server.c +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Purpose: Collect SPA packets via a UDP server. +<span class="lineNum"> 7 </span> : : * +<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * License (GNU General Public License): +<span class="lineNum"> 13 </span> : : * +<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 18 </span> : : * +<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 23 </span> : : * +<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 27 </span> : : * USA +<span class="lineNum"> 28 </span> : : * +<span class="lineNum"> 29 </span> : : ***************************************************************************** +<span class="lineNum"> 30 </span> : : */ +<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;sig_handler.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;incoming_spa.h&quot; +<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 35 </span> : : #include &quot;fw_util.h&quot; +<span class="lineNum"> 36 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 37 </span> : : #include &lt;errno.h&gt; +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : #if HAVE_SYS_SOCKET_H +<span class="lineNum"> 40 </span> : : #include &lt;sys/socket.h&gt; +<span class="lineNum"> 41 </span> : : #endif +<span class="lineNum"> 42 </span> : : #if HAVE_ARPA_INET_H +<span class="lineNum"> 43 </span> : : #include &lt;arpa/inet.h&gt; +<span class="lineNum"> 44 </span> : : #endif +<span class="lineNum"> 45 </span> : : #if HAVE_NETDB +<span class="lineNum"> 46 </span> : : #include &lt;netdb.h&gt; +<span class="lineNum"> 47 </span> : : #endif +<span class="lineNum"> 48 </span> : : +<span class="lineNum"> 49 </span> : : #include &lt;fcntl.h&gt; +<span class="lineNum"> 50 </span> : : #include &lt;sys/select.h&gt; +<a name="51"><span class="lineNum"> 51 </span> : : </a> +<span class="lineNum"> 52 </span> : : int +<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : run_udp_server(fko_srv_options_t *opts)</span> +<span class="lineNum"> 54 </span> : : { +<span class="lineNum"> 55 </span> : : int s_sock, sfd_flags, selval, pkt_len; +<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : int is_err, s_timeout, rv=1;</span> +<span class="lineNum"> 57 </span> : : fd_set sfd_set; +<span class="lineNum"> 58 </span> : : struct sockaddr_in saddr, caddr; +<span class="lineNum"> 59 </span> : : struct timeval tv; +<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : char sipbuf[MAX_IPV4_STR_LEN] = {0};</span> +<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : char dgram_msg[MAX_SPA_PACKET_LEN+1] = {0};</span> +<span class="lineNum"> 62 </span> : : unsigned short port; +<span class="lineNum"> 63 </span> : : socklen_t clen; +<span class="lineNum"> 64 </span> : : +<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : port = strtol_wrapper(opts-&gt;config[CONF_UDPSERV_PORT],</span> +<span class="lineNum"> 66 </span> : : 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 67 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 68 </span> : : { +<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid max UDPSERV_PORT value.&quot;);</span> +<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 71 </span> : : } +<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : s_timeout = strtol_wrapper(opts-&gt;config[CONF_UDPSERV_SELECT_TIMEOUT],</span> +<span class="lineNum"> 73 </span> : : 1, RCHK_MAX_UDPSERV_SELECT_TIMEOUT, NO_EXIT_UPON_ERR, &amp;is_err); +<span class="lineNum"> 74 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> +<span class="lineNum"> 75 </span> : : { +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid max UDPSERV_SELECT_TIMEOUT value.&quot;);</span> +<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 78 </span> : : } +<span class="lineNum"> 79 </span> : : +<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Kicking off UDP server to listen on port %i.&quot;, port);</span> +<span class="lineNum"> 81 </span> : : +<span class="lineNum"> 82 </span> : : /* Now, let's make a UDP server +<span class="lineNum"> 83 </span> : : */ +<span class="lineNum"> 84 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((s_sock = socket(AF_INET, SOCK_DGRAM, 0)) &lt; 0)</span> +<span class="lineNum"> 85 </span> : : { +<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: socket() failed: %s&quot;,</span> +<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 89 </span> : : } +<span class="lineNum"> 90 </span> : : +<span class="lineNum"> 91 </span> : : /* Make our main socket non-blocking so we don't have to be stuck on +<span class="lineNum"> 92 </span> : : * listening for incoming datagrams. +<span class="lineNum"> 93 </span> : : */ +<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sfd_flags = fcntl(s_sock, F_GETFL, 0)) &lt; 0)</span> +<span class="lineNum"> 95 </span> : : { +<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: fcntl F_GETFL error: %s&quot;,</span> +<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 100 </span> : : } +<span class="lineNum"> 101 </span> : : +<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : sfd_flags |= O_NONBLOCK;</span> +<span class="lineNum"> 103 </span> : : +<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fcntl(s_sock, F_SETFL, sfd_flags) &lt; 0)</span> +<span class="lineNum"> 105 </span> : : { +<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: fcntl F_SETFL error setting O_NONBLOCK: %s&quot;,</span> +<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 110 </span> : : } +<span class="lineNum"> 111 </span> : : +<span class="lineNum"> 112 </span> : : /* Construct local address structure */ +<span class="lineNum"> 113 </span> : : memset(&amp;saddr, 0x0, sizeof(saddr)); +<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : saddr.sin_family = AF_INET; /* Internet address family */</span> +<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : saddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */</span> +<span class="lineNum"> 116 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : saddr.sin_port = htons(port); /* Local port */</span> +<span class="lineNum"> 117 </span> : : +<span class="lineNum"> 118 </span> : : /* Bind to the local address */ +<span class="lineNum"> 119 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bind(s_sock, (struct sockaddr *) &amp;saddr, sizeof(saddr)) &lt; 0)</span> +<span class="lineNum"> 120 </span> : : { +<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: bind() failed: %s&quot;,</span> +<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> +<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : return -1;</span> +<span class="lineNum"> 125 </span> : : } +<span class="lineNum"> 126 </span> : : +<span class="lineNum"> 127 </span> : : /* Initialize our signal handlers. You can check the return value for +<span class="lineNum"> 128 </span> : : * the number of signals that were *not* set. Those that were not set +<span class="lineNum"> 129 </span> : : * will be listed in the log/stderr output. +<span class="lineNum"> 130 </span> : : */ +<span class="lineNum"> 131 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_sig_handlers() &gt; 0)</span> +<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Errors encountered when setting signal handlers.&quot;);</span> +<span class="lineNum"> 133 </span> : : +<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : FD_ZERO(&amp;sfd_set);</span> +<span class="lineNum"> 135 </span> : : +<span class="lineNum"> 136 </span> : : /* Now loop and receive SPA packets +<span class="lineNum"> 137 </span> : : */ +<span class="lineNum"> 138 </span> : : while(1) +<span class="lineNum"> 139 </span> : : { +<span class="lineNum"> 140 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig_do_stop())</span> +<span class="lineNum"> 141 </span> : : { +<span class="lineNum"> 142 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> +<span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> +<span class="lineNum"> 144 </span> : : &quot;udp_server: terminating signal received, will stop.&quot;); +<span class="lineNum"> 145 </span> : : break; +<span class="lineNum"> 146 </span> : : } +<span class="lineNum"> 147 </span> : : +<span class="lineNum"> 148 </span> : : /* Check for any expired firewall rules and deal with them. +<span class="lineNum"> 149 </span> : : */ +<span class="lineNum"> 150 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!opts-&gt;test)</span> +<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : check_firewall_rules(opts);</span> +<span class="lineNum"> 152 </span> : : +<span class="lineNum"> 153 </span> : : /* Initialize and setup the socket for select. +<span class="lineNum"> 154 </span> : : */ +<span class="lineNum"> 155 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : FD_SET(s_sock, &amp;sfd_set);</span> +<span class="lineNum"> 156 </span> : : +<span class="lineNum"> 157 </span> : : /* Set our select timeout to (500ms by default). +<span class="lineNum"> 158 </span> : : */ +<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : tv.tv_sec = 0;</span> +<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : tv.tv_usec = s_timeout;</span> +<span class="lineNum"> 161 </span> : : +<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : selval = select(s_sock+1, &amp;sfd_set, NULL, NULL, &amp;tv);</span> +<span class="lineNum"> 163 </span> : : +<span class="lineNum"> 164 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(selval == -1)</span> +<span class="lineNum"> 165 </span> : : { +<span class="lineNum"> 166 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == EINTR)</span> +<span class="lineNum"> 167 </span> : : { +<span class="lineNum"> 168 </span> : : /* restart loop but only after we check for a terminating +<span class="lineNum"> 169 </span> : : * signal above in sig_do_stop() +<span class="lineNum"> 170 </span> : : */ +<span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 172 </span> : : } +<span class="lineNum"> 173 </span> : : else +<span class="lineNum"> 174 </span> : : { +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: select error socket: %s&quot;,</span> +<span class="lineNum"> 176 </span> : : strerror(errno)); +<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : rv = -1;</span> +<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 179 </span> : : } +<span class="lineNum"> 180 </span> : : } +<span class="lineNum"> 181 </span> : : +<span class="lineNum"> 182 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(selval == 0)</span> +<span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 184 </span> : : +<span class="lineNum"> 185 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! FD_ISSET(s_sock, &amp;sfd_set))</span> +<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] +<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : continue;</span> +<span class="lineNum"> 187 </span> : : +<span class="lineNum"> 188 </span> : : /* If we make it here then there is a datagram to process +<span class="lineNum"> 189 </span> : : */ +<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : clen = sizeof(caddr);</span> +<span class="lineNum"> 191 </span> : : +<span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : pkt_len = recvfrom(s_sock, dgram_msg, MAX_SPA_PACKET_LEN,</span> +<span class="lineNum"> 193 </span> : : 0, (struct sockaddr *)&amp;caddr, &amp;clen); +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : dgram_msg[pkt_len] = 0x0;</span> +<span class="lineNum"> 196 </span> : : +<span class="lineNum"> 197 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> +<span class="lineNum"> 198 </span> : : { +<span class="lineNum"> 199 </span> : : memset(sipbuf, 0x0, MAX_IPV4_STR_LEN); +<span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(caddr.sin_addr.s_addr), sipbuf, MAX_IPV4_STR_LEN);</span> +<span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;udp_server: Got UDP datagram (%d bytes) from: %s&quot;,</span> +<span class="lineNum"> 202 </span> : : pkt_len, sipbuf); +<span class="lineNum"> 203 </span> : : } +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> : : /* Expect the data to not be too large +<span class="lineNum"> 206 </span> : : */ +<span class="lineNum"> 207 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_len &lt;= MAX_SPA_PACKET_LEN)</span> +<span class="lineNum"> 208 </span> : : { +<span class="lineNum"> 209 </span> : : /* Copy the packet for SPA processing +<span class="lineNum"> 210 </span> : : */ +<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : strlcpy((char *)opts-&gt;spa_pkt.packet_data, dgram_msg, pkt_len+1);</span> +<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_data_len = pkt_len;</span> +<span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_proto = IPPROTO_UDP;</span> +<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_ip = caddr.sin_addr.s_addr;</span> +<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_ip = saddr.sin_addr.s_addr;</span> +<span class="lineNum"> 216 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_port = ntohs(caddr.sin_port);</span> +<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_port = ntohs(saddr.sin_port);</span> +<span class="lineNum"> 218 </span> : : +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : incoming_spa(opts);</span> +<span class="lineNum"> 220 </span> : : } +<span class="lineNum"> 221 </span> : : +<span class="lineNum"> 222 </span> : : memset(dgram_msg, 0x0, sizeof(dgram_msg)); +<span class="lineNum"> 223 </span> : : +<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : opts-&gt;packet_ctr += 1;</span> +<span class="lineNum"> 225 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;foreground == 1 &amp;&amp; opts-&gt;verbose &gt; 2)</span> +<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;run_udp_server() processed: %d packets&quot;,</span> +<span class="lineNum"> 227 </span> : : opts-&gt;packet_ctr); +<span class="lineNum"> 228 </span> : : +<span class="lineNum"> 229 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;packet_ctr_limit &amp;&amp; opts-&gt;packet_ctr &gt;= opts-&gt;packet_ctr_limit)</span> +<span class="lineNum"> 230 </span> : : { +<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 232 </span> : : &quot;* Incoming packet count limit of %i reached&quot;, +<span class="lineNum"> 233 </span> : : opts-&gt;packet_ctr_limit +<span class="lineNum"> 234 </span> : : ); +<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : break;</span> +<span class="lineNum"> 236 </span> : : } +<span class="lineNum"> 237 </span> : : +<span class="lineNum"> 238 </span> : : } /* infinite while loop */ +<span class="lineNum"> 239 </span> : : +<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> +<span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : return rv;</span> +<span class="lineNum"> 242 </span> : : } +<span class="lineNum"> 243 </span> : : +<span class="lineNum"> 244 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html new file mode 100644 index 00000000..10d8ab9d --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html @@ -0,0 +1,109 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/utils.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">75</td> + <td class="headerCovTableEntryLo">16.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntryLo">28.6 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">58</td> + <td class="headerCovTableEntryLo">13.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="utils.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#103">verify_file_perms_ownership</a></td> + <td class="coverFnHi">4743</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#258">clean_exit</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#165">add_argv.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#81">is_valid_dir</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#240">free_argv</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#40">hex_dump</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#197">strtoargv</a></td> + <td class="coverFnLo">0</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html new file mode 100644 index 00000000..21242af7 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html @@ -0,0 +1,109 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/utils.c - functions</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">75</td> + <td class="headerCovTableEntryLo">16.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntryLo">28.6 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">58</td> + <td class="headerCovTableEntryLo">13.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <center> + <table width="60%" cellpadding=1 cellspacing=1 border=0> + <tr><td><br></td></tr> + <tr> + <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> + <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="utils.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#165">add_argv.isra.0</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#258">clean_exit</a></td> + <td class="coverFnHi">1814</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#240">free_argv</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#40">hex_dump</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#81">is_valid_dir</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#197">strtoargv</a></td> + <td class="coverFnLo">0</td> + </tr> + <tr> + <td class="coverFn"><a href="utils.c.gcov.html#103">verify_file_perms_ownership</a></td> + <td class="coverFnHi">4743</td> + </tr> + </table> + <br> + </center> + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html new file mode 100644 index 00000000..fd54a049 --- /dev/null +++ b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html @@ -0,0 +1,366 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> + +<html lang="en"> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> + <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/utils.c</title> + <link rel="stylesheet" type="text/css" href="../gcov.css"> +</head> + +<body> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="title">LCOV - code coverage report</td></tr> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + + <tr> + <td width="100%"> + <table cellpadding=1 border=0 width="100%"> + <tr> + <td width="10%" class="headerItem">Current view:</td> + <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - utils.c<span style="font-size: 80%;"> (source / <a href="utils.c.func.html">functions</a>)</span></td> + <td width="5%"></td> + <td width="15%"></td> + <td width="10%" class="headerCovTableHead">Hit</td> + <td width="10%" class="headerCovTableHead">Total</td> + <td width="15%" class="headerCovTableHead">Coverage</td> + </tr> + <tr> + <td class="headerItem">Test:</td> + <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> + <td></td> + <td class="headerItem">Lines:</td> + <td class="headerCovTableEntry">12</td> + <td class="headerCovTableEntry">75</td> + <td class="headerCovTableEntryLo">16.0 %</td> + </tr> + <tr> + <td class="headerItem">Date:</td> + <td class="headerValue">2015-05-25</td> + <td></td> + <td class="headerItem">Functions:</td> + <td class="headerCovTableEntry">2</td> + <td class="headerCovTableEntry">7</td> + <td class="headerCovTableEntryLo">28.6 %</td> + </tr> + <tr> + <td></td> + <td></td> + <td></td> + <td class="headerItem">Branches:</td> + <td class="headerCovTableEntry">8</td> + <td class="headerCovTableEntry">58</td> + <td class="headerCovTableEntryLo">13.8 %</td> + </tr> + <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + </td> + </tr> + + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + </table> + + <table cellpadding=0 cellspacing=0 border=0> + <tr> + <td><br></td> + </tr> + <tr> + <td> +<pre class="sourceHeading"> Branch data Line data Source code</pre> +<pre class="source"> +<a name="1"><span class="lineNum"> 1 </span> : : /**</a> +<span class="lineNum"> 2 </span> : : * @file utils.c +<span class="lineNum"> 3 </span> : : * +<span class="lineNum"> 4 </span> : : * @brief General/Generic functions for the fwknop server. +<span class="lineNum"> 5 </span> : : * +<span class="lineNum"> 6 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. +<span class="lineNum"> 7 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full +<span class="lineNum"> 8 </span> : : * list of contributors, see the file 'CREDITS'. +<span class="lineNum"> 9 </span> : : * +<span class="lineNum"> 10 </span> : : * License (GNU General Public License): +<span class="lineNum"> 11 </span> : : * +<span class="lineNum"> 12 </span> : : * This program is free software; you can redistribute it and/or +<span class="lineNum"> 13 </span> : : * modify it under the terms of the GNU General Public License +<span class="lineNum"> 14 </span> : : * as published by the Free Software Foundation; either version 2 +<span class="lineNum"> 15 </span> : : * of the License, or (at your option) any later version. +<span class="lineNum"> 16 </span> : : * +<span class="lineNum"> 17 </span> : : * This program is distributed in the hope that it will be useful, +<span class="lineNum"> 18 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of +<span class="lineNum"> 19 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +<span class="lineNum"> 20 </span> : : * GNU General Public License for more details. +<span class="lineNum"> 21 </span> : : * +<span class="lineNum"> 22 </span> : : * You should have received a copy of the GNU General Public License +<span class="lineNum"> 23 </span> : : * along with this program; if not, write to the Free Software +<span class="lineNum"> 24 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +<span class="lineNum"> 25 </span> : : * USA +<span class="lineNum"> 26 </span> : : */ +<span class="lineNum"> 27 </span> : : +<span class="lineNum"> 28 </span> : : #include &quot;fwknopd_common.h&quot; +<span class="lineNum"> 29 </span> : : #include &quot;utils.h&quot; +<span class="lineNum"> 30 </span> : : #include &quot;log_msg.h&quot; +<span class="lineNum"> 31 </span> : : #include &quot;replay_cache.h&quot; +<span class="lineNum"> 32 </span> : : #include &quot;config_init.h&quot; +<span class="lineNum"> 33 </span> : : #include &quot;fw_util.h&quot; +<span class="lineNum"> 34 </span> : : +<span class="lineNum"> 35 </span> : : #include &lt;stdarg.h&gt; +<span class="lineNum"> 36 </span> : : +<span class="lineNum"> 37 </span> : : #define ASCII_LEN 16 +<span class="lineNum"> 38 </span> : : +<span class="lineNum"> 39 </span> : : /* Generic hex dump function. +<a name="40"><span class="lineNum"> 40 </span> : : */</a> +<span class="lineNum"> 41 </span> : : void +<span class="lineNum"> 42 </span> :<span class="lineNoCov"> 0 : hex_dump(const unsigned char *data, const int size)</span> +<span class="lineNum"> 43 </span> : : { +<span class="lineNum"> 44 </span> :<span class="lineNoCov"> 0 : int ln=0, i=0, j=0;</span> +<span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : char ascii_str[ASCII_LEN+1] = {0};</span> +<span class="lineNum"> 46 </span> : : +<span class="lineNum"> 47 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;size; i++)</span> +<span class="lineNum"> 48 </span> : : { +<span class="lineNum"> 49 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((i % ASCII_LEN) == 0)</span> +<span class="lineNum"> 50 </span> : : { +<span class="lineNum"> 51 </span> : : printf(&quot; %s\n 0x%.4x: &quot;, ascii_str, i); +<span class="lineNum"> 52 </span> : : memset(ascii_str, 0x0, ASCII_LEN-1); +<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : j = 0;</span> +<span class="lineNum"> 54 </span> : : } +<span class="lineNum"> 55 </span> : : +<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : printf(&quot;%.2x &quot;, data[i]);</span> +<span class="lineNum"> 57 </span> : : +<span class="lineNum"> 58 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ascii_str[j++] = (data[i] &lt; 0x20 || data[i] &gt; 0x7e) ? '.' : data[i];</span> +<span class="lineNum"> 59 </span> : : +<span class="lineNum"> 60 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(j == 8)</span> +<span class="lineNum"> 61 </span> : : printf(&quot; &quot;); +<span class="lineNum"> 62 </span> : : } +<span class="lineNum"> 63 </span> : : +<span class="lineNum"> 64 </span> : : /* Remainder... +<span class="lineNum"> 65 </span> : : */ +<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : ln = strlen(ascii_str);</span> +<span class="lineNum"> 67 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ln &gt; 0)</span> +<span class="lineNum"> 68 </span> : : { +<span class="lineNum"> 69 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; ASCII_LEN-ln; i++)</span> +<span class="lineNum"> 70 </span> : : printf(&quot; &quot;); +<span class="lineNum"> 71 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ln &lt; 8)</span> +<span class="lineNum"> 72 </span> : : printf(&quot; &quot;); +<span class="lineNum"> 73 </span> : : +<span class="lineNum"> 74 </span> : : printf(&quot; %s\n\n&quot;, ascii_str); +<span class="lineNum"> 75 </span> : : } +<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return;</span> +<span class="lineNum"> 77 </span> : : } +<span class="lineNum"> 78 </span> : : +<span class="lineNum"> 79 </span> : : /* Basic directory checks (stat() and whether the path is actually +<span class="lineNum"> 80 </span> : : * a directory). +<a name="81"><span class="lineNum"> 81 </span> : : */</a> +<span class="lineNum"> 82 </span> : : int +<span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : is_valid_dir(const char *path)</span> +<span class="lineNum"> 84 </span> : : { +<span class="lineNum"> 85 </span> : : #if HAVE_STAT +<span class="lineNum"> 86 </span> : : struct stat st; +<span class="lineNum"> 87 </span> : : +<span class="lineNum"> 88 </span> : : /* If we are unable to stat the given dir, then return with error. +<span class="lineNum"> 89 </span> : : */ +<span class="lineNum"> 90 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(path, &amp;st) != 0)</span> +<span class="lineNum"> 91 </span> : : { +<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[-] unable to stat() directory: %s: %s&quot;,</span> +<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : path, strerror(errno));</span> +<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : return(0);</span> +<span class="lineNum"> 95 </span> : : } +<span class="lineNum"> 96 </span> : : +<span class="lineNum"> 97 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!S_ISDIR(st.st_mode))</span> +<span class="lineNum"> 98 </span> : : return(0); +<span class="lineNum"> 99 </span> : : #endif /* HAVE_STAT */ +<span class="lineNum"> 100 </span> : : +<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : return(1);</span> +<span class="lineNum"> 102 </span> : : } +<a name="103"><span class="lineNum"> 103 </span> : : </a> +<span class="lineNum"> 104 </span> : : int +<span class="lineNum"> 105 </span> :<span class="lineCov"> 4743 : verify_file_perms_ownership(const char *file)</span> +<span class="lineNum"> 106 </span> : : { +<span class="lineNum"> 107 </span> : : #if HAVE_STAT +<span class="lineNum"> 108 </span> : : struct stat st; +<span class="lineNum"> 109 </span> : : +<span class="lineNum"> 110 </span> : : /* Every file that fwknopd deals with should be owned +<span class="lineNum"> 111 </span> : : * by the user and permissions set to 600 (user read/write) +<span class="lineNum"> 112 </span> : : */ +<span class="lineNum"> 113 </span> [<span class="branchCov" title="Branch 1 was taken 4743 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 4743 : if((stat(file, &amp;st)) == 0)</span> +<span class="lineNum"> 114 </span> : : { +<span class="lineNum"> 115 </span> : : /* Make sure it is a regular file +<span class="lineNum"> 116 </span> : : */ +<span class="lineNum"> 117 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4743 times"> + </span>]:<span class="lineCov"> 4743 : if(S_ISREG(st.st_mode) != 1 &amp;&amp; S_ISLNK(st.st_mode) != 1)</span> +<span class="lineNum"> 118 </span> : : { +<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 120 </span> : : &quot;[-] file: %s is not a regular file or symbolic link.&quot;, +<span class="lineNum"> 121 </span> : : file +<span class="lineNum"> 122 </span> : : ); +<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 124 </span> : : } +<span class="lineNum"> 125 </span> : : +<span class="lineNum"> 126 </span> [<span class="branchCov" title="Branch 0 was taken 2161 times"> + </span><span class="branchCov" title="Branch 1 was taken 2582 times"> + </span>]:<span class="lineCov"> 4743 : if((st.st_mode &amp; (S_IRWXU|S_IRWXG|S_IRWXO)) != (S_IRUSR|S_IWUSR))</span> +<span class="lineNum"> 127 </span> : : { +<span class="lineNum"> 128 </span> :<span class="lineCov"> 2161 : log_msg(LOG_WARNING,</span> +<span class="lineNum"> 129 </span> : : &quot;[-] file: %s permissions should only be user read/write (0600, -rw-------)&quot;, +<span class="lineNum"> 130 </span> : : file +<span class="lineNum"> 131 </span> : : ); +<span class="lineNum"> 132 </span> : : /* when we start in enforcing this instead of just warning +<span class="lineNum"> 133 </span> : : * the user +<span class="lineNum"> 134 </span> : : res = 0; +<span class="lineNum"> 135 </span> : : */ +<span class="lineNum"> 136 </span> : : } +<span class="lineNum"> 137 </span> : : +<span class="lineNum"> 138 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 4743 times"> + </span>]:<span class="lineCov"> 4743 : if(st.st_uid != getuid())</span> +<span class="lineNum"> 139 </span> : : { +<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[-] file: %s not owned by current effective user id&quot;,</span> +<span class="lineNum"> 141 </span> : : file); +<span class="lineNum"> 142 </span> : : /* when we start in enforcing this instead of just warning +<span class="lineNum"> 143 </span> : : * the user +<span class="lineNum"> 144 </span> : : res = 0; +<span class="lineNum"> 145 </span> : : */ +<span class="lineNum"> 146 </span> : : } +<span class="lineNum"> 147 </span> : : } +<span class="lineNum"> 148 </span> : : else +<span class="lineNum"> 149 </span> : : { +<span class="lineNum"> 150 </span> : : /* if the path doesn't exist, just return, but otherwise something +<span class="lineNum"> 151 </span> : : * went wrong +<span class="lineNum"> 152 </span> : : */ +<span class="lineNum"> 153 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno != ENOENT)</span> +<span class="lineNum"> 154 </span> : : { +<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[-] stat() against file: %s returned: %s&quot;,</span> +<span class="lineNum"> 156 </span> : : file, strerror(errno)); +<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 158 </span> : : } +<span class="lineNum"> 159 </span> : : } +<span class="lineNum"> 160 </span> : : +<span class="lineNum"> 161 </span> : : #endif +<span class="lineNum"> 162 </span> : : +<span class="lineNum"> 163 </span> : : return 1; +<span class="lineNum"> 164 </span> : : } +<a name="165"><span class="lineNum"> 165 </span> : : </a> +<span class="lineNum"> 166 </span> : : static int +<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : add_argv(char **argv_new, int *argc_new,</span> +<span class="lineNum"> 168 </span> : : const char *new_arg, const fko_srv_options_t * const opts) +<span class="lineNum"> 169 </span> : : { +<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : int buf_size = 0;</span> +<span class="lineNum"> 171 </span> : : +<span class="lineNum"> 172 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 3)</span> +<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[+] add_argv() + arg: %s&quot;, new_arg);</span> +<span class="lineNum"> 174 </span> : : +<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : buf_size = strlen(new_arg) + 1;</span> +<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = calloc(1, buf_size);</span> +<span class="lineNum"> 177 </span> : : +<span class="lineNum"> 178 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[*argc_new] == NULL)</span> +<span class="lineNum"> 179 </span> : : { +<span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[*] Memory allocation error.&quot;);</span> +<span class="lineNum"> 181 </span> : : return 0; +<span class="lineNum"> 182 </span> : : } +<span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : strlcpy(argv_new[*argc_new], new_arg, buf_size);</span> +<span class="lineNum"> 184 </span> : : +<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : *argc_new += 1;</span> +<span class="lineNum"> 186 </span> : : +<span class="lineNum"> 187 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*argc_new &gt;= MAX_CMDLINE_ARGS-1)</span> +<span class="lineNum"> 188 </span> : : { +<span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] max command line args exceeded.&quot;);</span> +<span class="lineNum"> 190 </span> : : return 0; +<span class="lineNum"> 191 </span> : : } +<span class="lineNum"> 192 </span> : : +<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = NULL;</span> +<span class="lineNum"> 194 </span> : : +<span class="lineNum"> 195 </span> : : return 1; +<span class="lineNum"> 196 </span> : : } +<a name="197"><span class="lineNum"> 197 </span> : : </a> +<span class="lineNum"> 198 </span> : : int +<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : strtoargv(const char * const args_str, char **argv_new, int *argc_new,</span> +<span class="lineNum"> 200 </span> : : const fko_srv_options_t * const opts) +<span class="lineNum"> 201 </span> : : { +<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : int current_arg_ctr = 0, i;</span> +<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : char arg_tmp[MAX_LINE_LEN] = {0};</span> +<span class="lineNum"> 204 </span> : : +<span class="lineNum"> 205 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; (int)strlen(args_str); i++)</span> +<span class="lineNum"> 206 </span> : : { +<span class="lineNum"> 207 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!isspace(args_str[i]))</span> +<span class="lineNum"> 208 </span> : : { +<span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = args_str[i];</span> +<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : current_arg_ctr++;</span> +<span class="lineNum"> 211 </span> : : } +<span class="lineNum"> 212 </span> : : else +<span class="lineNum"> 213 </span> : : { +<span class="lineNum"> 214 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> +<span class="lineNum"> 215 </span> : : { +<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> +<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> +<span class="lineNum"> 218 </span> : : { +<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> +<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 221 </span> : : } +<span class="lineNum"> 222 </span> : : current_arg_ctr = 0; +<span class="lineNum"> 223 </span> : : } +<span class="lineNum"> 224 </span> : : } +<span class="lineNum"> 225 </span> : : } +<span class="lineNum"> 226 </span> : : +<span class="lineNum"> 227 </span> : : /* pick up the last argument in the string +<span class="lineNum"> 228 </span> : : */ +<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> +<span class="lineNum"> 230 </span> : : { +<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> +<span class="lineNum"> 232 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> +<span class="lineNum"> 233 </span> : : { +<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> +<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return 0;</span> +<span class="lineNum"> 236 </span> : : } +<span class="lineNum"> 237 </span> : : } +<span class="lineNum"> 238 </span> : : return 1; +<span class="lineNum"> 239 </span> : : } +<a name="240"><span class="lineNum"> 240 </span> : : </a> +<span class="lineNum"> 241 </span> : : void +<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : free_argv(char **argv_new, int *argc_new)</span> +<span class="lineNum"> 243 </span> : : { +<span class="lineNum"> 244 </span> : : int i; +<span class="lineNum"> 245 </span> : : +<span class="lineNum"> 246 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new == NULL || *argv_new == NULL)</span> +<span class="lineNum"> 247 </span> : : return; +<span class="lineNum"> 248 </span> : : +<span class="lineNum"> 249 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; *argc_new; i++)</span> +<span class="lineNum"> 250 </span> : : { +<span class="lineNum"> 251 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[i] == NULL)</span> +<span class="lineNum"> 252 </span> : : break; +<span class="lineNum"> 253 </span> : : else +<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : free(argv_new[i]);</span> +<span class="lineNum"> 255 </span> : : } +<span class="lineNum"> 256 </span> : : return; +<span class="lineNum"> 257 </span> : : } +<a name="258"><span class="lineNum"> 258 </span> : : </a> +<span class="lineNum"> 259 </span> : : void +<span class="lineNum"> 260 </span> :<span class="lineCov"> 1814 : clean_exit(fko_srv_options_t *opts, unsigned int fw_cleanup_flag, unsigned int exit_status)</span> +<span class="lineNum"> 261 </span> : : { +<span class="lineNum"> 262 </span> : : #if HAVE_LIBFIU +<span class="lineNum"> 263 </span> : : if(opts-&gt;config[CONF_FAULT_INJECTION_TAG] != NULL) +<span class="lineNum"> 264 </span> : : { +<span class="lineNum"> 265 </span> : : fiu_disable(opts-&gt;config[CONF_FAULT_INJECTION_TAG]); +<span class="lineNum"> 266 </span> : : } +<span class="lineNum"> 267 </span> : : #endif +<span class="lineNum"> 268 </span> : : +<span class="lineNum"> 269 </span>[<span class="branchCov" title="Branch 0 was taken 1019 times"> + </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 1019 times"> + </span>]:<span class="lineCov"> 1814 : if(!opts-&gt;test &amp;&amp; (fw_cleanup_flag == FW_CLEANUP))</span> +<span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : fw_cleanup(opts);</span> +<span class="lineNum"> 271 </span> : : +<span class="lineNum"> 272 </span> : : #if USE_FILE_CACHE +<span class="lineNum"> 273 </span> :<span class="lineCov"> 1814 : free_replay_list(opts);</span> +<span class="lineNum"> 274 </span> : : #endif +<span class="lineNum"> 275 </span> : : +<span class="lineNum"> 276 </span> :<span class="lineCov"> 1814 : free_logging();</span> +<span class="lineNum"> 277 </span> :<span class="lineCov"> 1814 : free_configs(opts);</span> +<span class="lineNum"> 278 </span> :<span class="lineCov"> 1814 : exit(exit_status);</span> +<span class="lineNum"> 279 </span> : : } +<span class="lineNum"> 280 </span> : : +<span class="lineNum"> 281 </span> : : /***EOF***/ +</pre> + </td> + </tr> + </table> + <br> + + <table width="100%" border=0 cellspacing=0 cellpadding=0> + <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> + <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> + </table> + <br> + +</body> +</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/snow.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/snow.png new file mode 100644 index 0000000000000000000000000000000000000000..2cdae107fceec6e7f02ac7acb4a34a82a540caa5 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^MM<OZU7F1qyK% zctjR6FmMZjFyp1Wb$@_@Ea{HEjtmSN`?>!lvI6;R0X`wF|Ns97GD8ntt^-nBo-U3d c6}OTTfNUlP#;5A{K>8RwUHx3vIVCg!071?oo&W#< literal 0 HcmV?d00001 diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/updown.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/updown.png new file mode 100644 index 0000000000000000000000000000000000000000..aa56a238b3e6c435265250f9266cd1b8caba0f20 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`*?77*hG?8mPH<rUzmOqzj$o`{ zmx{8oa+_1mG6n6lBg;7=4V4vL4GtVJNND(#r(##(!Bvp7XhP!+7e<DcG5TL0&E@|I PG>5^{)z4*}Q$iB}huR`+ literal 0 HcmV?d00001 From 0388baa6653ff41bb37eb8eab768d5758a7010f8 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 28 May 2015 18:50:33 -0700 Subject: [PATCH 114/219] replaced raw lcov results with a link --- .../136d017/cumulative-afl-cov-web/amber.png | Bin 141 -> 0 bytes .../client/config_init.c.func-sort-c.html | 185 -- .../client/config_init.c.func.html | 185 -- .../client/config_init.c.gcov.html | 2757 ----------------- .../client/fwknop.c.func-sort-c.html | 153 - .../client/fwknop.c.func.html | 153 - .../client/fwknop.c.gcov.html | 1440 --------- .../client/getpasswd.c.func-sort-c.html | 93 - .../client/getpasswd.c.func.html | 93 - .../client/getpasswd.c.gcov.html | 382 --- .../http_resolve_host.c.func-sort-c.html | 97 - .../client/http_resolve_host.c.func.html | 97 - .../client/http_resolve_host.c.gcov.html | 649 ---- .../client/index-sort-b.html | 179 -- .../client/index-sort-f.html | 179 -- .../client/index-sort-l.html | 179 -- .../cumulative-afl-cov-web/client/index.html | 179 -- .../client/log_msg.c.func-sort-c.html | 93 - .../client/log_msg.c.func.html | 93 - .../client/log_msg.c.gcov.html | 201 -- .../client/spa_comm.c.func-sort-c.html | 117 - .../client/spa_comm.c.func.html | 117 - .../client/spa_comm.c.gcov.html | 869 ------ .../client/utils.c.func-sort-c.html | 113 - .../client/utils.c.func.html | 113 - .../client/utils.c.gcov.html | 456 --- .../cumulative-afl-cov-web/emerald.png | Bin 141 -> 0 bytes .../136d017/cumulative-afl-cov-web/gcov.css | 519 ---- .../136d017/cumulative-afl-cov-web/glass.png | Bin 167 -> 0 bytes .../cumulative-afl-cov-web/index-sort-b.html | 131 - .../cumulative-afl-cov-web/index-sort-f.html | 131 - .../cumulative-afl-cov-web/index-sort-l.html | 131 - .../136d017/cumulative-afl-cov-web/index.html | 131 - .../lib/base64.c.func-sort-c.html | 93 - .../lib/base64.c.func.html | 93 - .../lib/base64.c.gcov.html | 224 -- .../lib/cipher_funcs.c.func-sort-c.html | 109 - .../lib/cipher_funcs.c.func.html | 109 - .../lib/cipher_funcs.c.gcov.html | 502 --- .../lib/digest.c.func-sort-c.html | 121 - .../lib/digest.c.func.html | 121 - .../lib/digest.c.gcov.html | 242 -- .../lib/fko_client_timeout.c.func-sort-c.html | 89 - .../lib/fko_client_timeout.c.func.html | 89 - .../lib/fko_client_timeout.c.gcov.html | 215 -- .../lib/fko_decode.c.func-sort-c.html | 137 - .../lib/fko_decode.c.func.html | 137 - .../lib/fko_decode.c.gcov.html | 743 ----- .../lib/fko_digest.c.func-sort-c.html | 121 - .../lib/fko_digest.c.func.html | 121 - .../lib/fko_digest.c.gcov.html | 383 --- .../lib/fko_encode.c.func-sort-c.html | 93 - .../lib/fko_encode.c.func.html | 93 - .../lib/fko_encode.c.gcov.html | 411 --- .../lib/fko_encryption.c.func-sort-c.html | 197 -- .../lib/fko_encryption.c.func.html | 197 -- .../lib/fko_encryption.c.gcov.html | 1280 -------- .../lib/fko_error.c.func-sort-c.html | 89 - .../lib/fko_error.c.func.html | 89 - .../lib/fko_error.c.gcov.html | 606 ---- .../lib/fko_funcs.c.func-sort-c.html | 121 - .../lib/fko_funcs.c.func.html | 121 - .../lib/fko_funcs.c.gcov.html | 720 ----- .../lib/fko_hmac.c.func-sort-c.html | 101 - .../lib/fko_hmac.c.func.html | 101 - .../lib/fko_hmac.c.gcov.html | 416 --- .../lib/fko_message.c.func-sort-c.html | 121 - .../lib/fko_message.c.func.html | 121 - .../lib/fko_message.c.gcov.html | 449 --- .../lib/fko_nat_access.c.func-sort-c.html | 89 - .../lib/fko_nat_access.c.func.html | 89 - .../lib/fko_nat_access.c.gcov.html | 214 -- .../lib/fko_rand_value.c.func-sort-c.html | 89 - .../lib/fko_rand_value.c.func.html | 89 - .../lib/fko_rand_value.c.gcov.html | 266 -- .../lib/fko_server_auth.c.func-sort-c.html | 89 - .../lib/fko_server_auth.c.func.html | 89 - .../lib/fko_server_auth.c.gcov.html | 200 -- .../lib/fko_timestamp.c.func-sort-c.html | 89 - .../lib/fko_timestamp.c.func.html | 89 - .../lib/fko_timestamp.c.gcov.html | 179 -- .../lib/fko_user.c.func-sort-c.html | 93 - .../lib/fko_user.c.func.html | 93 - .../lib/fko_user.c.gcov.html | 295 -- .../lib/fko_util.c.func-sort-c.html | 153 - .../lib/fko_util.c.func.html | 153 - .../lib/fko_util.c.gcov.html | 872 ------ .../lib/gpgme_funcs.c.func-sort-c.html | 105 - .../lib/gpgme_funcs.c.func.html | 105 - .../lib/gpgme_funcs.c.gcov.html | 627 ---- .../lib/hmac.c.func-sort-c.html | 165 - .../lib/hmac.c.func.html | 165 - .../lib/hmac.c.gcov.html | 517 ---- .../lib/index-sort-b.html | 407 --- .../lib/index-sort-f.html | 407 --- .../lib/index-sort-l.html | 407 --- .../cumulative-afl-cov-web/lib/index.html | 407 --- .../lib/md5.c.func-sort-c.html | 97 - .../lib/md5.c.func.html | 97 - .../lib/md5.c.gcov.html | 363 --- .../lib/rijndael.c.func-sort-c.html | 125 - .../lib/rijndael.c.func.html | 125 - .../lib/rijndael.c.gcov.html | 702 ----- .../lib/sha1.c.func-sort-c.html | 101 - .../lib/sha1.c.func.html | 101 - .../lib/sha1.c.gcov.html | 376 --- .../lib/sha2.c.func-sort-c.html | 129 - .../lib/sha2.c.func.html | 129 - .../lib/sha2.c.gcov.html | 1069 ------- .../lib/strlcat.c.func-sort-c.html | 85 - .../lib/strlcat.c.func.html | 85 - .../lib/strlcat.c.gcov.html | 159 - .../lib/strlcpy.c.func-sort-c.html | 85 - .../lib/strlcpy.c.func.html | 85 - .../lib/strlcpy.c.gcov.html | 155 - .../136d017/cumulative-afl-cov-web/ruby.png | Bin 141 -> 0 bytes .../server/access.c.func-sort-c.html | 201 -- .../server/access.c.func.html | 201 -- .../server/access.c.gcov.html | 2153 ------------- .../server/config_init.c.func-sort-c.html | 125 - .../server/config_init.c.func.html | 125 - .../server/config_init.c.gcov.html | 1384 --------- .../server/extcmd.c.func-sort-c.html | 105 - .../server/extcmd.c.func.html | 105 - .../server/extcmd.c.gcov.html | 779 ----- .../fw_util_firewalld.c.func-sort-c.html | 197 -- .../server/fw_util_firewalld.c.func.html | 197 -- .../server/fw_util_firewalld.c.gcov.html | 1702 ---------- .../server/fwknopd.c.func-sort-c.html | 133 - .../server/fwknopd.c.func.html | 133 - .../server/fwknopd.c.gcov.html | 1102 ------- .../server/fwknopd_errors.c.func-sort-c.html | 93 - .../server/fwknopd_errors.c.func.html | 93 - .../server/fwknopd_errors.c.gcov.html | 217 -- .../server/incoming_spa.c.func-sort-c.html | 101 - .../server/incoming_spa.c.func.html | 101 - .../server/incoming_spa.c.gcov.html | 1063 ------- .../server/index-sort-b.html | 275 -- .../server/index-sort-f.html | 275 -- .../server/index-sort-l.html | 275 -- .../cumulative-afl-cov-web/server/index.html | 275 -- .../server/log_msg.c.func-sort-c.html | 97 - .../server/log_msg.c.func.html | 97 - .../server/log_msg.c.gcov.html | 303 -- .../server/pcap_capture.c.func-sort-c.html | 85 - .../server/pcap_capture.c.func.html | 85 - .../server/pcap_capture.c.gcov.html | 427 --- .../server/process_packet.c.func-sort-c.html | 85 - .../server/process_packet.c.func.html | 85 - .../server/process_packet.c.gcov.html | 323 -- .../server/replay_cache.c.func-sort-c.html | 117 - .../server/replay_cache.c.func.html | 117 - .../server/replay_cache.c.gcov.html | 857 ----- .../server/sig_handler.c.func-sort-c.html | 93 - .../server/sig_handler.c.func.html | 93 - .../server/sig_handler.c.gcov.html | 262 -- .../server/tcp_server.c.func-sort-c.html | 85 - .../server/tcp_server.c.func.html | 85 - .../server/tcp_server.c.gcov.html | 342 -- .../server/udp_server.c.func-sort-c.html | 85 - .../server/udp_server.c.func.html | 85 - .../server/udp_server.c.gcov.html | 330 -- .../server/utils.c.func-sort-c.html | 109 - .../server/utils.c.func.html | 109 - .../server/utils.c.gcov.html | 366 --- .../136d017/cumulative-afl-cov-web/snow.png | Bin 141 -> 0 bytes .../136d017/cumulative-afl-cov-web/updown.png | Bin 117 -> 0 bytes test/afl/results/2.6.7/136d017/web-results | 1 + 168 files changed, 1 insertion(+), 45932 deletions(-) delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/amber.png delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/emerald.png delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/glass.png delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/ruby.png delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/snow.png delete mode 100644 test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/updown.png create mode 100644 test/afl/results/2.6.7/136d017/web-results diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/amber.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/amber.png deleted file mode 100644 index 2cab170d8359081983a4e343848dfe06bc490f12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^G2tW}LqE04T&+ z;1OBOz`!j8!i<;h*8KqrvZOouIx;Y9?C1WI$O`1M1^9%x{(levWG<?@RR^TFJY5_^ cDsCkw0NG3oj8E0?f%GwWy85}Sb4q9e09Jz{aR2}S diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html deleted file mode 100644 index 8f880a65..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func-sort-c.html +++ /dev/null @@ -1,185 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/config_init.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">310</td> - <td class="headerCovTableEntry">917</td> - <td class="headerCovTableEntryLo">33.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">26</td> - <td class="headerCovTableEntryLo">53.8 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">222</td> - <td class="headerCovTableEntry">582</td> - <td class="headerCovTableEntryLo">38.1 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="config_init.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#500">is_rc_section</a></td> - <td class="coverFnHi">152374</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#547">is_rc_param</a></td> - <td class="coverFnHi">109180</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#898">parse_rc_param</a></td> - <td class="coverFnHi">108412</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#399">lookup_var_by_name</a></td> - <td class="coverFnHi">108412</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#474">is_yes_str</a></td> - <td class="coverFnHi">12210</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#742">parse_time_offset</a></td> - <td class="coverFnHi">9046</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#638">set_rc_file</a></td> - <td class="coverFnHi">2890</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1498">process_rc_section</a></td> - <td class="coverFnHi">2890</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1920">set_defaults</a></td> - <td class="coverFnHi">2085</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1942">config_init</a></td> - <td class="coverFnHi">2085</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1769">validate_options</a></td> - <td class="coverFnHi">609</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#277">add_var_to_bitmask</a></td> - <td class="coverFnHi">609</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#205">generate_keys</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#695">keys_status</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#2440">usage</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#248">var_is_critical</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#364">ask_overwrite_var</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1471">add_multiple_vars_to_rc</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1596">update_rc</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#458">bool_to_yesno</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#330">bitmask_has_var</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#303">remove_var_from_bitmask</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#428">lookup_var_by_position</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1300">add_single_var_to_rc</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#590">dump_configured_stanzas_from_rcfile</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#788">create_fwknoprc</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html deleted file mode 100644 index 5e3cf207..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.func.html +++ /dev/null @@ -1,185 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/config_init.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">310</td> - <td class="headerCovTableEntry">917</td> - <td class="headerCovTableEntryLo">33.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">26</td> - <td class="headerCovTableEntryLo">53.8 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">222</td> - <td class="headerCovTableEntry">582</td> - <td class="headerCovTableEntryLo">38.1 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="config_init.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1471">add_multiple_vars_to_rc</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1300">add_single_var_to_rc</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#277">add_var_to_bitmask</a></td> - <td class="coverFnHi">609</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#364">ask_overwrite_var</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#330">bitmask_has_var</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#458">bool_to_yesno</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1942">config_init</a></td> - <td class="coverFnHi">2085</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#788">create_fwknoprc</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#590">dump_configured_stanzas_from_rcfile</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#205">generate_keys</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#547">is_rc_param</a></td> - <td class="coverFnHi">109180</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#500">is_rc_section</a></td> - <td class="coverFnHi">152374</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#474">is_yes_str</a></td> - <td class="coverFnHi">12210</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#695">keys_status</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#399">lookup_var_by_name</a></td> - <td class="coverFnHi">108412</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#428">lookup_var_by_position</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#898">parse_rc_param</a></td> - <td class="coverFnHi">108412</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#742">parse_time_offset</a></td> - <td class="coverFnHi">9046</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1498">process_rc_section</a></td> - <td class="coverFnHi">2890</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#303">remove_var_from_bitmask</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1920">set_defaults</a></td> - <td class="coverFnHi">2085</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#638">set_rc_file</a></td> - <td class="coverFnHi">2890</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1596">update_rc</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#2440">usage</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1769">validate_options</a></td> - <td class="coverFnHi">609</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#248">var_is_critical</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html deleted file mode 100644 index 883a0845..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/config_init.c.gcov.html +++ /dev/null @@ -1,2757 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/config_init.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - config_init.c<span style="font-size: 80%;"> (source / <a href="config_init.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">310</td> - <td class="headerCovTableEntry">917</td> - <td class="headerCovTableEntryLo">33.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">26</td> - <td class="headerCovTableEntryLo">53.8 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">222</td> - <td class="headerCovTableEntry">582</td> - <td class="headerCovTableEntryLo">38.1 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /**</a> -<span class="lineNum"> 2 </span> : : ****************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * \file config_init.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * \brief Command-line and config file processing for fwknop client. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ****************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : -<span class="lineNum"> 32 </span> : : #include &quot;fwknop_common.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;netinet_common.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;config_init.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;cmd_opts.h&quot; -<span class="lineNum"> 36 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 37 </span> : : #include &lt;sys/stat.h&gt; -<span class="lineNum"> 38 </span> : : #include &lt;fcntl.h&gt; -<span class="lineNum"> 39 </span> : : -<span class="lineNum"> 40 </span> : : #ifdef WIN32 -<span class="lineNum"> 41 </span> : : #define STDIN_FILENO 0 -<span class="lineNum"> 42 </span> : : #endif -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : #define RC_PARAM_TEMPLATE &quot;%-24s %s\n&quot; /*!&lt; Template to define param = val in a rc file */ -<span class="lineNum"> 45 </span> : : #define RC_SECTION_DEFAULT &quot;default&quot; /*!&lt; Name of the default section in fwknoprc */ -<span class="lineNum"> 46 </span> : : #define RC_SECTION_TEMPLATE &quot;[%s]\n&quot; /*!&lt; Template to define a section in a rc file */ -<span class="lineNum"> 47 </span> : : #define FWKNOPRC_OFLAGS (O_WRONLY|O_CREAT|O_EXCL) /*!&lt; O_flags used to create an fwknoprc file with the open function */ -<span class="lineNum"> 48 </span> : : #define FWKNOPRC_MODE (S_IRUSR|S_IWUSR) /*!&lt; mode used to create an fwknoprc file with the open function */ -<span class="lineNum"> 49 </span> : : #define PARAM_YES_VALUE &quot;Y&quot; /*!&lt; String which represents a YES value for a parameter in fwknoprc */ -<span class="lineNum"> 50 </span> : : #define PARAM_NO_VALUE &quot;N&quot; /*!&lt; String which represents a NO value for a parameter in fwknoprc */ -<span class="lineNum"> 51 </span> : : #define POSITION_TO_BITMASK(x) ((uint32_t)(1) &lt;&lt; ((x) % 32)) /*!&lt; Macro do get a bitmask from a position */ -<span class="lineNum"> 52 </span> : : #define BITMASK_ARRAY_SIZE 2 /*!&lt; Number of 32bits integer used to handle bitmask in the fko_var_bitmask_t structure */ -<span class="lineNum"> 53 </span> : : #define LF_CHAR 0x0A /*!&lt; Hexadecimal value associated to the LF char */ -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : #ifdef HAVE_C_UNIT_TESTS -<span class="lineNum"> 56 </span> : : #include &quot;cunit_common.h&quot; -<span class="lineNum"> 57 </span> : : DECLARE_TEST_SUITE(config_init, &quot;Config init test suite&quot;); -<span class="lineNum"> 58 </span> : : #endif -<span class="lineNum"> 59 </span> : : -<span class="lineNum"> 60 </span> : : /** -<span class="lineNum"> 61 </span> : : * Structure to handle long bitmask. -<span class="lineNum"> 62 </span> : : * -<span class="lineNum"> 63 </span> : : * The structure is built as an array of unsigned 32 bits integer to be able to -<span class="lineNum"> 64 </span> : : * easily increase the size of the bitmask. -<span class="lineNum"> 65 </span> : : * This bitmask can contains at most (BITMASK_ARRAY_SIZE * 32) values. -<span class="lineNum"> 66 </span> : : */ -<span class="lineNum"> 67 </span> : : typedef struct fko_var_bitmask -<span class="lineNum"> 68 </span> : : { -<span class="lineNum"> 69 </span> : : uint32_t dw[BITMASK_ARRAY_SIZE]; /*!&lt; Array of bitmasks */ -<span class="lineNum"> 70 </span> : : } fko_var_bitmask_t; -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : /** -<span class="lineNum"> 73 </span> : : * Structure to handle a variable in an rcfile (name and value) -<span class="lineNum"> 74 </span> : : */ -<span class="lineNum"> 75 </span> : : typedef struct rc_file_param -<span class="lineNum"> 76 </span> : : { -<span class="lineNum"> 77 </span> : : char name[MAX_LINE_LEN]; /*!&lt; Variable name */ -<span class="lineNum"> 78 </span> : : char val[MAX_LINE_LEN]; /*!&lt; Variable value */ -<span class="lineNum"> 79 </span> : : } rc_file_param_t; -<span class="lineNum"> 80 </span> : : -<span class="lineNum"> 81 </span> : : /** -<span class="lineNum"> 82 </span> : : * Structure to identify a configuration variable (name and position) -<span class="lineNum"> 83 </span> : : */ -<span class="lineNum"> 84 </span> : : typedef struct fko_var -<span class="lineNum"> 85 </span> : : { -<span class="lineNum"> 86 </span> : : const char name[32]; /*!&lt; Variable name in fwknoprc */ -<span class="lineNum"> 87 </span> : : unsigned int pos; /*!&lt; Variable position from the fwknop_cli_arg_t enumeration */ -<span class="lineNum"> 88 </span> : : } fko_var_t; -<span class="lineNum"> 89 </span> : : -<span class="lineNum"> 90 </span> : : enum -<span class="lineNum"> 91 </span> : : { -<span class="lineNum"> 92 </span> : : FWKNOP_CLI_FIRST_ARG = 0, -<span class="lineNum"> 93 </span> : : FWKNOP_CLI_ARG_DIGEST_TYPE = 0, -<span class="lineNum"> 94 </span> : : FWKNOP_CLI_ARG_SPA_SERVER_PROTO, -<span class="lineNum"> 95 </span> : : FWKNOP_CLI_ARG_SPA_SERVER_PORT, -<span class="lineNum"> 96 </span> : : FWKNOP_CLI_ARG_SPA_SOURCE_PORT, -<span class="lineNum"> 97 </span> : : FWKNOP_CLI_ARG_FW_TIMEOUT, -<span class="lineNum"> 98 </span> : : FWKNOP_CLI_ARG_ALLOW_IP, -<span class="lineNum"> 99 </span> : : FWKNOP_CLI_ARG_TIME_OFFSET, -<span class="lineNum"> 100 </span> : : FWKNOP_CLI_ARG_ENCRYPTION_MODE, -<span class="lineNum"> 101 </span> : : FWKNOP_CLI_ARG_USE_GPG, -<span class="lineNum"> 102 </span> : : FWKNOP_CLI_ARG_USE_GPG_AGENT, -<span class="lineNum"> 103 </span> : : FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW, -<span class="lineNum"> 104 </span> : : FWKNOP_CLI_ARG_GPG_RECIPIENT, -<span class="lineNum"> 105 </span> : : FWKNOP_CLI_ARG_GPG_SIGNER, -<span class="lineNum"> 106 </span> : : FWKNOP_CLI_ARG_GPG_HOMEDIR, -<span class="lineNum"> 107 </span> : : FWKNOP_CLI_ARG_GPG_EXE_PATH, -<span class="lineNum"> 108 </span> : : FWKNOP_CLI_ARG_SPOOF_USER, -<span class="lineNum"> 109 </span> : : FWKNOP_CLI_ARG_SPOOF_SOURCE_IP, -<span class="lineNum"> 110 </span> : : FWKNOP_CLI_ARG_ACCESS, -<span class="lineNum"> 111 </span> : : FWKNOP_CLI_ARG_SPA_SERVER, -<span class="lineNum"> 112 </span> : : FWKNOP_CLI_ARG_RAND_PORT, -<span class="lineNum"> 113 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL, -<span class="lineNum"> 114 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, -<span class="lineNum"> 115 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW, -<span class="lineNum"> 116 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64, -<span class="lineNum"> 117 </span> : : FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE, -<span class="lineNum"> 118 </span> : : FWKNOP_CLI_ARG_KEY_HMAC_BASE64, -<span class="lineNum"> 119 </span> : : FWKNOP_CLI_ARG_KEY_HMAC, -<span class="lineNum"> 120 </span> : : FWKNOP_CLI_ARG_USE_HMAC, -<span class="lineNum"> 121 </span> : : FWKNOP_CLI_ARG_USE_WGET_USER_AGENT, -<span class="lineNum"> 122 </span> : : FWKNOP_CLI_ARG_KEY_FILE, -<span class="lineNum"> 123 </span> : : FWKNOP_CLI_ARG_HMAC_KEY_FILE, -<span class="lineNum"> 124 </span> : : FWKNOP_CLI_ARG_NAT_ACCESS, -<span class="lineNum"> 125 </span> : : FWKNOP_CLI_ARG_HTTP_USER_AGENT, -<span class="lineNum"> 126 </span> : : FWKNOP_CLI_ARG_RESOLVE_URL, -<span class="lineNum"> 127 </span> : : FWKNOP_CLI_ARG_NAT_LOCAL, -<span class="lineNum"> 128 </span> : : FWKNOP_CLI_ARG_NAT_RAND_PORT, -<span class="lineNum"> 129 </span> : : FWKNOP_CLI_ARG_NAT_PORT, -<span class="lineNum"> 130 </span> : : FWKNOP_CLI_ARG_VERBOSE, -<span class="lineNum"> 131 </span> : : FWKNOP_CLI_ARG_RESOLVE_IP_HTTP, -<span class="lineNum"> 132 </span> : : FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS, -<span class="lineNum"> 133 </span> : : FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY, -<span class="lineNum"> 134 </span> : : FWKNOP_CLI_ARG_WGET_CMD, -<span class="lineNum"> 135 </span> : : FWKNOP_CLI_ARG_NO_SAVE_ARGS, -<span class="lineNum"> 136 </span> : : FWKNOP_CLI_LAST_ARG -<span class="lineNum"> 137 </span> : : } fwknop_cli_arg_t; -<span class="lineNum"> 138 </span> : : -<span class="lineNum"> 139 </span> : : static fko_var_t fko_var_array[FWKNOP_CLI_LAST_ARG] = -<span class="lineNum"> 140 </span> : : { -<span class="lineNum"> 141 </span> : : { &quot;DIGEST_TYPE&quot;, FWKNOP_CLI_ARG_DIGEST_TYPE }, -<span class="lineNum"> 142 </span> : : { &quot;SPA_SERVER_PROTO&quot;, FWKNOP_CLI_ARG_SPA_SERVER_PROTO }, -<span class="lineNum"> 143 </span> : : { &quot;SPA_SERVER_PORT&quot;, FWKNOP_CLI_ARG_SPA_SERVER_PORT }, -<span class="lineNum"> 144 </span> : : { &quot;SPA_SOURCE_PORT&quot;, FWKNOP_CLI_ARG_SPA_SOURCE_PORT }, -<span class="lineNum"> 145 </span> : : { &quot;FW_TIMEOUT&quot;, FWKNOP_CLI_ARG_FW_TIMEOUT }, -<span class="lineNum"> 146 </span> : : { &quot;ALLOW_IP&quot;, FWKNOP_CLI_ARG_ALLOW_IP }, -<span class="lineNum"> 147 </span> : : { &quot;TIME_OFFSET&quot;, FWKNOP_CLI_ARG_TIME_OFFSET }, -<span class="lineNum"> 148 </span> : : { &quot;ENCRYPTION_MODE&quot;, FWKNOP_CLI_ARG_ENCRYPTION_MODE }, -<span class="lineNum"> 149 </span> : : { &quot;USE_GPG&quot;, FWKNOP_CLI_ARG_USE_GPG }, -<span class="lineNum"> 150 </span> : : { &quot;USE_GPG_AGENT&quot;, FWKNOP_CLI_ARG_USE_GPG_AGENT }, -<span class="lineNum"> 151 </span> : : { &quot;GPG_RECIPIENT&quot;, FWKNOP_CLI_ARG_GPG_RECIPIENT }, -<span class="lineNum"> 152 </span> : : { &quot;GPG_SIGNER&quot;, FWKNOP_CLI_ARG_GPG_SIGNER }, -<span class="lineNum"> 153 </span> : : { &quot;GPG_HOMEDIR&quot;, FWKNOP_CLI_ARG_GPG_HOMEDIR }, -<span class="lineNum"> 154 </span> : : { &quot;GPG_EXE&quot;, FWKNOP_CLI_ARG_GPG_EXE_PATH }, -<span class="lineNum"> 155 </span> : : { &quot;GPG_SIGNING_PW&quot;, FWKNOP_CLI_ARG_GPG_SIGNING_PW }, -<span class="lineNum"> 156 </span> : : { &quot;GPG_SIGNING_PW_BASE64&quot;, FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64 }, -<span class="lineNum"> 157 </span> : : { &quot;GPG_NO_SIGNING_PW&quot;, FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW }, -<span class="lineNum"> 158 </span> : : { &quot;SPOOF_USER&quot;, FWKNOP_CLI_ARG_SPOOF_USER }, -<span class="lineNum"> 159 </span> : : { &quot;SPOOF_SOURCE_IP&quot;, FWKNOP_CLI_ARG_SPOOF_SOURCE_IP }, -<span class="lineNum"> 160 </span> : : { &quot;ACCESS&quot;, FWKNOP_CLI_ARG_ACCESS }, -<span class="lineNum"> 161 </span> : : { &quot;SPA_SERVER&quot;, FWKNOP_CLI_ARG_SPA_SERVER }, -<span class="lineNum"> 162 </span> : : { &quot;RAND_PORT&quot;, FWKNOP_CLI_ARG_RAND_PORT }, -<span class="lineNum"> 163 </span> : : { &quot;KEY&quot;, FWKNOP_CLI_ARG_KEY_RIJNDAEL }, -<span class="lineNum"> 164 </span> : : { &quot;KEY_BASE64&quot;, FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64 }, -<span class="lineNum"> 165 </span> : : { &quot;HMAC_DIGEST_TYPE&quot;, FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE }, -<span class="lineNum"> 166 </span> : : { &quot;HMAC_KEY_BASE64&quot;, FWKNOP_CLI_ARG_KEY_HMAC_BASE64 }, -<span class="lineNum"> 167 </span> : : { &quot;HMAC_KEY&quot;, FWKNOP_CLI_ARG_KEY_HMAC }, -<span class="lineNum"> 168 </span> : : { &quot;USE_HMAC&quot;, FWKNOP_CLI_ARG_USE_HMAC }, -<span class="lineNum"> 169 </span> : : { &quot;USE_WGET_USER_AGENT&quot;, FWKNOP_CLI_ARG_USE_WGET_USER_AGENT }, -<span class="lineNum"> 170 </span> : : { &quot;KEY_FILE&quot;, FWKNOP_CLI_ARG_KEY_FILE }, -<span class="lineNum"> 171 </span> : : { &quot;HMAC_KEY_FILE&quot;, FWKNOP_CLI_ARG_HMAC_KEY_FILE }, -<span class="lineNum"> 172 </span> : : { &quot;NAT_ACCESS&quot;, FWKNOP_CLI_ARG_NAT_ACCESS }, -<span class="lineNum"> 173 </span> : : { &quot;HTTP_USER_AGENT&quot;, FWKNOP_CLI_ARG_HTTP_USER_AGENT }, -<span class="lineNum"> 174 </span> : : { &quot;RESOLVE_URL&quot;, FWKNOP_CLI_ARG_RESOLVE_URL }, -<span class="lineNum"> 175 </span> : : { &quot;NAT_LOCAL&quot;, FWKNOP_CLI_ARG_NAT_LOCAL }, -<span class="lineNum"> 176 </span> : : { &quot;NAT_RAND_PORT&quot;, FWKNOP_CLI_ARG_NAT_RAND_PORT }, -<span class="lineNum"> 177 </span> : : { &quot;NAT_PORT&quot;, FWKNOP_CLI_ARG_NAT_PORT }, -<span class="lineNum"> 178 </span> : : { &quot;VERBOSE&quot;, FWKNOP_CLI_ARG_VERBOSE }, -<span class="lineNum"> 179 </span> : : { &quot;RESOLVE_IP_HTTP&quot;, FWKNOP_CLI_ARG_RESOLVE_IP_HTTP }, -<span class="lineNum"> 180 </span> : : { &quot;RESOLVE_IP_HTTPS&quot;, FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS }, -<span class="lineNum"> 181 </span> : : { &quot;RESOLVE_HTTP_ONLY&quot;, FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY }, -<span class="lineNum"> 182 </span> : : { &quot;WGET_CMD&quot;, FWKNOP_CLI_ARG_WGET_CMD }, -<span class="lineNum"> 183 </span> : : { &quot;NO_SAVE_ARGS&quot;, FWKNOP_CLI_ARG_NO_SAVE_ARGS } -<span class="lineNum"> 184 </span> : : }; -<span class="lineNum"> 185 </span> : : -<span class="lineNum"> 186 </span> : : /* Array to define which conf. variables are critical and should not be -<span class="lineNum"> 187 </span> : : * overwritten when a stanza is updated using the --save-rc-stanza arg -<span class="lineNum"> 188 </span> : : * without the user validation */ -<span class="lineNum"> 189 </span> : : static int critical_var_array[] = -<span class="lineNum"> 190 </span> : : { -<span class="lineNum"> 191 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL, -<span class="lineNum"> 192 </span> : : FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, -<span class="lineNum"> 193 </span> : : FWKNOP_CLI_ARG_KEY_HMAC, -<span class="lineNum"> 194 </span> : : FWKNOP_CLI_ARG_KEY_HMAC_BASE64, -<span class="lineNum"> 195 </span> : : FWKNOP_CLI_ARG_GPG_RECIPIENT, -<span class="lineNum"> 196 </span> : : FWKNOP_CLI_ARG_GPG_SIGNER, -<span class="lineNum"> 197 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW, -<span class="lineNum"> 198 </span> : : FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64 -<span class="lineNum"> 199 </span> : : }; -<span class="lineNum"> 200 </span> : : -<span class="lineNum"> 201 </span> : : /** -<span class="lineNum"> 202 </span> : : * @brief Generate Rijndael + HMAC keys from /dev/random (base64 encoded) and exit. -<span class="lineNum"> 203 </span> : : * -<span class="lineNum"> 204 </span> : : * @param options FKO command line option structure -<a name="205"><span class="lineNum"> 205 </span> : : */</a> -<span class="lineNum"> 206 </span> : : static void -<span class="lineNum"> 207 </span> :<span class="lineCov"> 566 : generate_keys(fko_cli_options_t *options)</span> -<span class="lineNum"> 208 </span> : : { -<span class="lineNum"> 209 </span> : : int res; -<span class="lineNum"> 210 </span> : : -<span class="lineNum"> 211 </span> : : /* If asked, we have to generate the keys */ -<span class="lineNum"> 212 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;key_gen)</span> -<span class="lineNum"> 213 </span> : : { -<span class="lineNum"> 214 </span> : : /* Zero out the key buffers */ -<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : memset(&amp;(options-&gt;key_base64), 0x00, sizeof(options-&gt;key_base64));</span> -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : memset(&amp;(options-&gt;hmac_key_base64), 0x00, sizeof(options-&gt;hmac_key_base64));</span> -<span class="lineNum"> 217 </span> : : -<span class="lineNum"> 218 </span> : : /* Generate the key through libfko */ -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : res = fko_key_gen(options-&gt;key_base64, options-&gt;key_len,</span> -<span class="lineNum"> 220 </span> : : options-&gt;hmac_key_base64, options-&gt;hmac_key_len, -<span class="lineNum"> 221 </span> : : options-&gt;hmac_type); -<span class="lineNum"> 222 </span> : : -<span class="lineNum"> 223 </span> : : /* Exit upon key generation failure*/ -<span class="lineNum"> 224 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 225 </span> : : { -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;%s: fko_key_gen: Error %i - %s&quot;,</span> -<span class="lineNum"> 227 </span> : : MY_NAME, res, fko_errstr(res)); -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 229 </span> : : } -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> : : /* Everything is ok - nothing to do */ -<span class="lineNum"> 232 </span> : : else; -<span class="lineNum"> 233 </span> : : } -<span class="lineNum"> 234 </span> : : -<span class="lineNum"> 235 </span> : : /* No key generation asked - nothing to do */ -<span class="lineNum"> 236 </span> : : else; -<span class="lineNum"> 237 </span> :<span class="lineCov"> 566 : }</span> -<span class="lineNum"> 238 </span> : : -<span class="lineNum"> 239 </span> : : /** -<span class="lineNum"> 240 </span> : : * @brief Check if a variable is a critical var. -<span class="lineNum"> 241 </span> : : * -<span class="lineNum"> 242 </span> : : * This function check the critical_var_array table to find if the variable -<span class="lineNum"> 243 </span> : : * position is available. -<span class="lineNum"> 244 </span> : : * -<span class="lineNum"> 245 </span> : : * @param var_pos Fwknop configuration variable position -<span class="lineNum"> 246 </span> : : * -<span class="lineNum"> 247 </span> : : * @return 1 the variable is critical, 0 otherwise -<a name="248"><span class="lineNum"> 248 </span> : : */</a> -<span class="lineNum"> 249 </span> : : static int -<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : var_is_critical(short var_pos)</span> -<span class="lineNum"> 251 </span> : : { -<span class="lineNum"> 252 </span> : : int ndx; /* Index on the critical_var_array array */ -<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : int var_found = 0;</span> -<span class="lineNum"> 254 </span> : : -<span class="lineNum"> 255 </span> : : /* Go through the array of critical vars */ -<span class="lineNum"> 256 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(critical_var_array) ; ndx++)</span> -<span class="lineNum"> 257 </span> : : { -<span class="lineNum"> 258 </span> : : /* and check if we find it */ -<span class="lineNum"> 259 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (var_pos == critical_var_array[ndx])</span> -<span class="lineNum"> 260 </span> : : { -<span class="lineNum"> 261 </span> : : var_found = 1; -<span class="lineNum"> 262 </span> : : break; -<span class="lineNum"> 263 </span> : : } -<span class="lineNum"> 264 </span> : : } -<span class="lineNum"> 265 </span> : : -<span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : return var_found;</span> -<span class="lineNum"> 267 </span> : : } -<span class="lineNum"> 268 </span> : : -<span class="lineNum"> 269 </span> : : /** -<span class="lineNum"> 270 </span> : : * @brief Add a variable to a bitmask -<span class="lineNum"> 271 </span> : : * -<span class="lineNum"> 272 </span> : : * This function adds the bitmask associated to a variable position, to a -<span class="lineNum"> 273 </span> : : * bitmask. -<span class="lineNum"> 274 </span> : : * -<span class="lineNum"> 275 </span> : : * @param var_pos Fwknop configuration variable position -<span class="lineNum"> 276 </span> : : * @param bm fko_var_bitmask_t variable to update -<a name="277"><span class="lineNum"> 277 </span> : : */</a> -<span class="lineNum"> 278 </span> : : static void -<span class="lineNum"> 279 </span> :<span class="lineCov"> 609 : add_var_to_bitmask(short var_pos, fko_var_bitmask_t *bm)</span> -<span class="lineNum"> 280 </span> : : { -<span class="lineNum"> 281 </span> : : unsigned int bitmask_ndx; -<span class="lineNum"> 282 </span> : : -<span class="lineNum"> 283 </span> : : /* Look for the index on the uint32_t array we have to process */ -<span class="lineNum"> 284 </span> :<span class="lineCov"> 609 : bitmask_ndx = var_pos / 32;</span> -<span class="lineNum"> 285 </span> : : -<span class="lineNum"> 286 </span> : : /* Set the bitmask according to the index found */ -<span class="lineNum"> 287 </span> [<span class="branchCov" title="Branch 0 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 609 : if (bitmask_ndx &lt; BITMASK_ARRAY_SIZE)</span> -<span class="lineNum"> 288 </span> :<span class="lineCov"> 609 : bm-&gt;dw[bitmask_ndx] |= POSITION_TO_BITMASK(var_pos);</span> -<span class="lineNum"> 289 </span> : : -<span class="lineNum"> 290 </span> : : /* The index on the uint32_t bitmask is invalid */ -<span class="lineNum"> 291 </span> : : else -<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;add_var_to_bitmask() : Bad variable position %u&quot;, var_pos);</span> -<span class="lineNum"> 293 </span> :<span class="lineCov"> 609 : }</span> -<span class="lineNum"> 294 </span> : : -<span class="lineNum"> 295 </span> : : /** -<span class="lineNum"> 296 </span> : : * @brief Remove a variable from a bitmask -<span class="lineNum"> 297 </span> : : * -<span class="lineNum"> 298 </span> : : * This function removes the bitmask associated to the variable position from a -<span class="lineNum"> 299 </span> : : * bitmask. -<span class="lineNum"> 300 </span> : : * -<span class="lineNum"> 301 </span> : : * @param var_pos Fwknop configuration variable position -<span class="lineNum"> 302 </span> : : * @param bm fko_var_bitmask_t structure to update -<a name="303"><span class="lineNum"> 303 </span> : : */</a> -<span class="lineNum"> 304 </span> : : static void -<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : remove_var_from_bitmask(short var_pos, fko_var_bitmask_t *bm)</span> -<span class="lineNum"> 306 </span> : : { -<span class="lineNum"> 307 </span> : : unsigned int bitmask_ndx; -<span class="lineNum"> 308 </span> : : -<span class="lineNum"> 309 </span> : : /* Look for the index on the uint32_t array we have to process */ -<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : bitmask_ndx = var_pos / 32;</span> -<span class="lineNum"> 311 </span> : : -<span class="lineNum"> 312 </span> : : /* Set the bitmask according to the index found */ -<span class="lineNum"> 313 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bitmask_ndx &lt; BITMASK_ARRAY_SIZE)</span> -<span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : bm-&gt;dw[bitmask_ndx] &amp;= ~POSITION_TO_BITMASK(var_pos);</span> -<span class="lineNum"> 315 </span> : : -<span class="lineNum"> 316 </span> : : /* The index on the uint32_t bitmask is invalid */ -<span class="lineNum"> 317 </span> : : else -<span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;remove_from_bitmask() : Bad variable position %u&quot;, var_pos);</span> -<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 320 </span> : : -<span class="lineNum"> 321 </span> : : /** -<span class="lineNum"> 322 </span> : : * @brief Return whether a variable is available in a bitmask -<span class="lineNum"> 323 </span> : : * -<span class="lineNum"> 324 </span> : : * The variable bitmask is looked for in the bitmask. -<span class="lineNum"> 325 </span> : : * -<span class="lineNum"> 326 </span> : : * @param var_pos Fwknop configuration variable position -<span class="lineNum"> 327 </span> : : * @param bm fko_var_bitmask_t structure to check -<span class="lineNum"> 328 </span> : : * -<span class="lineNum"> 329 </span> : : * @return 1 if the bitmsk contains the variable, 0 otherwise. -<a name="330"><span class="lineNum"> 330 </span> : : */</a> -<span class="lineNum"> 331 </span> : : static int -<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : bitmask_has_var(short var_pos, fko_var_bitmask_t *bm)</span> -<span class="lineNum"> 333 </span> : : { -<span class="lineNum"> 334 </span> : : unsigned int bitmask_ndx; -<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : int var_found = 0;</span> -<span class="lineNum"> 336 </span> : : -<span class="lineNum"> 337 </span> : : /* Look for the index on the uint32_t array we have to process */ -<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : bitmask_ndx = var_pos / 32;</span> -<span class="lineNum"> 339 </span> : : -<span class="lineNum"> 340 </span> : : /* Check the bitmask according to the index found */ -<span class="lineNum"> 341 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bitmask_ndx &lt; BITMASK_ARRAY_SIZE)</span> -<span class="lineNum"> 342 </span> : : { -<span class="lineNum"> 343 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( bm-&gt;dw[bitmask_ndx] &amp; POSITION_TO_BITMASK(var_pos) )</span> -<span class="lineNum"> 344 </span> :<span class="lineNoCov"> 0 : var_found = 1;</span> -<span class="lineNum"> 345 </span> : : } -<span class="lineNum"> 346 </span> : : -<span class="lineNum"> 347 </span> : : /* The index on the uint32_t bitmask is invalid */ -<span class="lineNum"> 348 </span> : : else -<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;bitmask_has_var_ndx() : Bad variable position %u&quot;, var_pos);</span> -<span class="lineNum"> 350 </span> : : -<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : return var_found;</span> -<span class="lineNum"> 352 </span> : : } -<span class="lineNum"> 353 </span> : : -<span class="lineNum"> 354 </span> : : /** -<span class="lineNum"> 355 </span> : : * @brief Ask the user if a variable must be overwritten or not for a specific stanza -<span class="lineNum"> 356 </span> : : * -<span class="lineNum"> 357 </span> : : * If the user sets other chars than a 'y' char, we assume he does not want to -<span class="lineNum"> 358 </span> : : * overwrite the variable. -<span class="lineNum"> 359 </span> : : * -<span class="lineNum"> 360 </span> : : * @param var Variable which should be overwritten -<span class="lineNum"> 361 </span> : : * @param stanza Stanza where the variable should be overwritten -<span class="lineNum"> 362 </span> : : * -<span class="lineNum"> 363 </span> : : * @return 1 if the user wants to overwrite the variable, 0 otherwise -<a name="364"><span class="lineNum"> 364 </span> : : */</a> -<span class="lineNum"> 365 </span> : : static int -<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : ask_overwrite_var(const char *var, const char *stanza)</span> -<span class="lineNum"> 367 </span> : : { -<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : char user_input = 'N';</span> -<span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : int overwrite = 0;</span> -<span class="lineNum"> 370 </span> : : int c; -<span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : int first_char = 1;;</span> -<span class="lineNum"> 372 </span> : : -<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 374 </span> : : &quot;Variable '%s' found in stanza '%s'. Overwrite [N/y] ? &quot;, -<span class="lineNum"> 375 </span> : : var, stanza); -<span class="lineNum"> 376 </span> : : -<span class="lineNum"> 377 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ((c=getchar()) != LF_CHAR)</span> -<span class="lineNum"> 378 </span> : : { -<span class="lineNum"> 379 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (first_char)</span> -<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : user_input = c;</span> -<span class="lineNum"> 381 </span> : : first_char = 0; -<span class="lineNum"> 382 </span> : : } -<span class="lineNum"> 383 </span> : : -<span class="lineNum"> 384 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (user_input == 'y')</span> -<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : overwrite = 1;</span> -<span class="lineNum"> 386 </span> : : -<span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : return overwrite;</span> -<span class="lineNum"> 388 </span> : : } -<span class="lineNum"> 389 </span> : : -<span class="lineNum"> 390 </span> : : /** -<span class="lineNum"> 391 </span> : : * @brief Lookup a variable in the variable array according to its name -<span class="lineNum"> 392 </span> : : * -<span class="lineNum"> 393 </span> : : * This function parses the fko_var_array table and try to find a match -<span class="lineNum"> 394 </span> : : * for the user string, which indicates we have found a configuration variable. -<span class="lineNum"> 395 </span> : : * -<span class="lineNum"> 396 </span> : : * @param str String to compare against every fwknop conf variables -<span class="lineNum"> 397 </span> : : * -<span class="lineNum"> 398 </span> : : * @return A pointer on the variable structure, or NULL if not found -<a name="399"><span class="lineNum"> 399 </span> : : */</a> -<span class="lineNum"> 400 </span> : : static fko_var_t * -<span class="lineNum"> 401 </span> :<span class="lineCov"> 108412 : lookup_var_by_name(const char *var_name)</span> -<span class="lineNum"> 402 </span> : : { -<span class="lineNum"> 403 </span> : : short ndx; /* Index on the the fko_var_array table */ -<span class="lineNum"> 404 </span> :<span class="lineCov"> 108412 : fko_var_t *var = NULL;</span> -<span class="lineNum"> 405 </span> : : -<span class="lineNum"> 406 </span> : : /* Check str against each variable available in fko_var_array */ -<span class="lineNum"> 407 </span> [<span class="branchCov" title="Branch 0 was taken 2851125 times"> + </span><span class="branchCov" title="Branch 1 was taken 42775 times"> + </span>]:<span class="lineCov"> 2893900 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(fko_var_array) ; ndx++)</span> -<span class="lineNum"> 408 </span> : : { -<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 65637 times"> + </span><span class="branchCov" title="Branch 1 was taken 2785488 times"> + </span>]:<span class="lineCov"> 2851125 : if (CONF_VAR_IS(var_name, fko_var_array[ndx].name))</span> -<span class="lineNum"> 410 </span> : : { -<span class="lineNum"> 411 </span> :<span class="lineCov"> 65637 : var = &amp;(fko_var_array[ndx]);</span> -<span class="lineNum"> 412 </span> :<span class="lineCov"> 65637 : break;</span> -<span class="lineNum"> 413 </span> : : } -<span class="lineNum"> 414 </span> : : } -<span class="lineNum"> 415 </span> : : -<span class="lineNum"> 416 </span> :<span class="lineCov"> 108412 : return var;</span> -<span class="lineNum"> 417 </span> : : } -<span class="lineNum"> 418 </span> : : -<span class="lineNum"> 419 </span> : : /** -<span class="lineNum"> 420 </span> : : * @brief Lookup a variable in the variable array according to its position -<span class="lineNum"> 421 </span> : : * -<span class="lineNum"> 422 </span> : : * This function parses the fko_var_array table and try to find a match -<span class="lineNum"> 423 </span> : : * for the position, which indicates we have found a configuration variable. -<span class="lineNum"> 424 </span> : : * -<span class="lineNum"> 425 </span> : : * @param var_pos Position to compare against every fwknop conf variables -<span class="lineNum"> 426 </span> : : * -<span class="lineNum"> 427 </span> : : * @return A pointer on the variable structure, or NULL if not found -<a name="428"><span class="lineNum"> 428 </span> : : */</a> -<span class="lineNum"> 429 </span> : : static fko_var_t * -<span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : lookup_var_by_position(short var_pos)</span> -<span class="lineNum"> 431 </span> : : { -<span class="lineNum"> 432 </span> : : short ndx; /* Index on the the fko_var_array table */ -<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : fko_var_t *var = NULL;</span> -<span class="lineNum"> 434 </span> : : -<span class="lineNum"> 435 </span> : : /* Check str against each variable available in fko_var_array */ -<span class="lineNum"> 436 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(fko_var_array) ; ndx++)</span> -<span class="lineNum"> 437 </span> : : { -<span class="lineNum"> 438 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (var_pos == fko_var_array[ndx].pos)</span> -<span class="lineNum"> 439 </span> : : { -<span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : var = &amp;(fko_var_array[ndx]);</span> -<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 442 </span> : : } -<span class="lineNum"> 443 </span> : : } -<span class="lineNum"> 444 </span> : : -<span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : return var;</span> -<span class="lineNum"> 446 </span> : : } -<span class="lineNum"> 447 </span> : : -<span class="lineNum"> 448 </span> : : /** -<span class="lineNum"> 449 </span> : : * @brief Set a string as a Yes or No value according to a boolean (0 or 1). -<span class="lineNum"> 450 </span> : : * -<span class="lineNum"> 451 </span> : : * This function checks whether a value is set to zero or not, and updates a -<span class="lineNum"> 452 </span> : : * string to a YES_NO parameter value. -<span class="lineNum"> 453 </span> : : * The string must be zeroed before being passed to the function. -<span class="lineNum"> 454 </span> : : * -<span class="lineNum"> 455 </span> : : * @param val Variable to check -<span class="lineNum"> 456 </span> : : * @param s String where to store the YES_NO value. -<span class="lineNum"> 457 </span> : : * @param len Number of bytes avaialble for the s buffer. -<a name="458"><span class="lineNum"> 458 </span> : : */</a> -<span class="lineNum"> 459 </span> : : static void -<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(int val, char* s, size_t len)</span> -<span class="lineNum"> 461 </span> : : { -<span class="lineNum"> 462 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (val == 0)</span> -<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : strlcpy(s, PARAM_NO_VALUE, len);</span> -<span class="lineNum"> 464 </span> : : else -<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : strlcpy(s, PARAM_YES_VALUE, len);</span> -<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> : : /** -<span class="lineNum"> 469 </span> : : * @brief Is a string formatted as YES string. -<span class="lineNum"> 470 </span> : : * -<span class="lineNum"> 471 </span> : : * @param s String to check for a YES string -<span class="lineNum"> 472 </span> : : * -<span class="lineNum"> 473 </span> : : * @return 1 if the string match the YES pattern, 0 otherwise -<a name="474"><span class="lineNum"> 474 </span> : : */</a> -<span class="lineNum"> 475 </span> : : static int -<span class="lineNum"> 476 </span> :<span class="lineCov"> 12210 : is_yes_str(const char *s)</span> -<span class="lineNum"> 477 </span> : : { -<span class="lineNum"> 478 </span> : : int valid; -<span class="lineNum"> 479 </span> : : -<span class="lineNum"> 480 </span> [<span class="branchCov" title="Branch 0 was taken 8849 times"> + </span><span class="branchCov" title="Branch 1 was taken 3361 times"> + </span>]:<span class="lineCov"> 12210 : if (strcasecmp(PARAM_YES_VALUE, s) == 0)</span> -<span class="lineNum"> 481 </span> : : valid = 1; -<span class="lineNum"> 482 </span> : : else -<span class="lineNum"> 483 </span> :<span class="lineCov"> 8849 : valid = 0;</span> -<span class="lineNum"> 484 </span> : : -<span class="lineNum"> 485 </span> :<span class="lineCov"> 12210 : return valid;</span> -<span class="lineNum"> 486 </span> : : } -<span class="lineNum"> 487 </span> : : -<span class="lineNum"> 488 </span> : : /** -<span class="lineNum"> 489 </span> : : * @brief Check if a section is in a line and fetch it. -<span class="lineNum"> 490 </span> : : * -<span class="lineNum"> 491 </span> : : * This function parses a NULL terminated string in order to find a section, -<span class="lineNum"> 492 </span> : : * something like [mysection]. If it succeeds, the stanza is retrieved. -<span class="lineNum"> 493 </span> : : * -<span class="lineNum"> 494 </span> : : * @param line String containing a line from the rc file to check for a section -<span class="lineNum"> 495 </span> : : * @param line_size size of the line buffer -<span class="lineNum"> 496 </span> : : * @param rc_section String to store the section found -<span class="lineNum"> 497 </span> : : * @param rc_section_size Size of the rc_section buffer -<span class="lineNum"> 498 </span> : : * -<span class="lineNum"> 499 </span> : : * @return 1 if a section was found, 0 otherwise -<a name="500"><span class="lineNum"> 500 </span> : : */</a> -<span class="lineNum"> 501 </span> : : static int -<span class="lineNum"> 502 </span> :<span class="lineCov"> 152374 : is_rc_section(const char* line, uint16_t line_size, char* rc_section, uint16_t rc_section_size)</span> -<span class="lineNum"> 503 </span> : : { -<span class="lineNum"> 504 </span> : : char *ndx, *emark; -<span class="lineNum"> 505 </span> :<span class="lineCov"> 152374 : char buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 506 </span> :<span class="lineCov"> 152374 : int section_found = 0;</span> -<span class="lineNum"> 507 </span> : : -<span class="lineNum"> 508 </span> [<span class="branchCov" title="Branch 0 was taken 152374 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 152374 : if (line_size &lt; sizeof(buf))</span> -<span class="lineNum"> 509 </span> : : { -<span class="lineNum"> 510 </span> :<span class="lineCov"> 152374 : strlcpy(buf, line, sizeof(buf));</span> -<span class="lineNum"> 511 </span> : : -<span class="lineNum"> 512 </span> :<span class="lineCov"> 152374 : ndx = buf;</span> -<span class="lineNum"> 513 </span> : : -<span class="lineNum"> 514 </span> [<span class="branchCov" title="Branch 1 was taken 4214 times"> + </span><span class="branchCov" title="Branch 2 was taken 152374 times"> + </span>]:<span class="lineCov"> 156588 : while(isspace(*ndx))</span> -<span class="lineNum"> 515 </span> :<span class="lineCov"> 4214 : ndx++;</span> -<span class="lineNum"> 516 </span> : : -<span class="lineNum"> 517 </span> [<span class="branchCov" title="Branch 0 was taken 12545 times"> + </span><span class="branchCov" title="Branch 1 was taken 139829 times"> + </span>]:<span class="lineCov"> 152374 : if(*ndx == '[')</span> -<span class="lineNum"> 518 </span> : : { -<span class="lineNum"> 519 </span> :<span class="lineCov"> 12545 : ndx++;</span> -<span class="lineNum"> 520 </span> :<span class="lineCov"> 12545 : emark = strchr(ndx, ']');</span> -<span class="lineNum"> 521 </span> [<span class="branchCov" title="Branch 0 was taken 8786 times"> + </span><span class="branchCov" title="Branch 1 was taken 3759 times"> + </span>]:<span class="lineCov"> 12545 : if(emark != NULL)</span> -<span class="lineNum"> 522 </span> : : { -<span class="lineNum"> 523 </span> :<span class="lineCov"> 8786 : *emark = '\0';</span> -<span class="lineNum"> 524 </span> :<span class="lineCov"> 8786 : memset(rc_section, 0, rc_section_size);</span> -<span class="lineNum"> 525 </span> :<span class="lineCov"> 8786 : strlcpy(rc_section, ndx, rc_section_size);</span> -<span class="lineNum"> 526 </span> :<span class="lineCov"> 8786 : section_found = 1;</span> -<span class="lineNum"> 527 </span> : : } -<span class="lineNum"> 528 </span> : : else -<span class="lineNum"> 529 </span> : : { -<span class="lineNum"> 530 </span> : : } -<span class="lineNum"> 531 </span> : : } -<span class="lineNum"> 532 </span> : : } -<span class="lineNum"> 533 </span> : : else -<span class="lineNum"> 534 </span> : : { -<span class="lineNum"> 535 </span> : : } -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> :<span class="lineCov"> 152374 : return section_found;</span> -<span class="lineNum"> 538 </span> : : } -<span class="lineNum"> 539 </span> : : -<span class="lineNum"> 540 </span> : : /** -<span class="lineNum"> 541 </span> : : * @brief Grab a variable and its value from a rc line. -<span class="lineNum"> 542 </span> : : * -<span class="lineNum"> 543 </span> : : * @param line Line to parse for a variable -<span class="lineNum"> 544 </span> : : * @param param Parameter structure where to store the variable name and its value -<span class="lineNum"> 545 </span> : : * -<span class="lineNum"> 546 </span> : : * @return 0 if no variable has been found, 1 otherwise. -<a name="547"><span class="lineNum"> 547 </span> : : */</a> -<span class="lineNum"> 548 </span> : : static int -<span class="lineNum"> 549 </span> :<span class="lineCov"> 109180 : is_rc_param(const char *line, rc_file_param_t *param)</span> -<span class="lineNum"> 550 </span> : : { -<span class="lineNum"> 551 </span> :<span class="lineCov"> 109180 : char var[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 552 </span> :<span class="lineCov"> 109180 : char val[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 553 </span> : : char *ndx; -<span class="lineNum"> 554 </span> : : -<span class="lineNum"> 555 </span> : : memset(param, 0, sizeof(*param)); -<span class="lineNum"> 556 </span> : : -<span class="lineNum"> 557 </span> : : /* Fetch the variable and its value */ -<span class="lineNum"> 558 </span> [<span class="branchCov" title="Branch 0 was taken 768 times"> + </span><span class="branchCov" title="Branch 1 was taken 108412 times"> + </span>]:<span class="lineCov"> 109180 : if(sscanf(line, &quot;%s %[^ ;\t\n\r#]&quot;, var, val) != 2)</span> -<span class="lineNum"> 559 </span> : : { -<span class="lineNum"> 560 </span> :<span class="lineCov"> 768 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 561 </span> : : &quot;*Invalid entry in '%s'&quot;, line); -<span class="lineNum"> 562 </span> :<span class="lineCov"> 768 : return 0;</span> -<span class="lineNum"> 563 </span> : : } -<span class="lineNum"> 564 </span> : : -<span class="lineNum"> 565 </span> : : /* Remove any colon that may be on the end of the var */ -<span class="lineNum"> 566 </span> [<span class="branchCov" title="Branch 0 was taken 1331 times"> + </span><span class="branchCov" title="Branch 1 was taken 107081 times"> + </span>]:<span class="lineCov"> 108412 : if((ndx = strrchr(var, ':')) != NULL)</span> -<span class="lineNum"> 567 </span> :<span class="lineCov"> 1331 : *ndx = '\0';</span> -<span class="lineNum"> 568 </span> : : -<span class="lineNum"> 569 </span> : : /* Even though sscanf should automatically add a terminating -<span class="lineNum"> 570 </span> : : * NULL byte, an assumption is made that the input arrays are -<span class="lineNum"> 571 </span> : : * big enough, so we'll force a terminating NULL byte regardless -<span class="lineNum"> 572 </span> : : */ -<span class="lineNum"> 573 </span> :<span class="lineCov"> 108412 : var[MAX_LINE_LEN-1] = 0x0;</span> -<span class="lineNum"> 574 </span> :<span class="lineCov"> 108412 : val[MAX_LINE_LEN-1] = 0x0;</span> -<span class="lineNum"> 575 </span> : : -<span class="lineNum"> 576 </span> : : /* Copy back the val and var in the structure */ -<span class="lineNum"> 577 </span> :<span class="lineCov"> 108412 : strlcpy(param-&gt;name, var, sizeof(param-&gt;name));</span> -<span class="lineNum"> 578 </span> :<span class="lineCov"> 108412 : strlcpy(param-&gt;val, val, sizeof(param-&gt;val));</span> -<span class="lineNum"> 579 </span> : : -<span class="lineNum"> 580 </span> :<span class="lineCov"> 108412 : return 1;</span> -<span class="lineNum"> 581 </span> : : } -<span class="lineNum"> 582 </span> : : -<span class="lineNum"> 583 </span> : : /** -<span class="lineNum"> 584 </span> : : * @brief Dump available stanzas from a fwknoprc file -<span class="lineNum"> 585 </span> : : * -<span class="lineNum"> 586 </span> : : * This function parses a rcfile and looks for configured stanzas. -<span class="lineNum"> 587 </span> : : * They are all displayed except the default stanza. -<span class="lineNum"> 588 </span> : : * -<span class="lineNum"> 589 </span> : : * @param rcfile full path to the rcfile to parse -<a name="590"><span class="lineNum"> 590 </span> : : */</a> -<span class="lineNum"> 591 </span> : : static int -<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : dump_configured_stanzas_from_rcfile(const char* rcfile)</span> -<span class="lineNum"> 593 </span> : : { -<span class="lineNum"> 594 </span> : : FILE *rc; -<span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : char line[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 596 </span> :<span class="lineNoCov"> 0 : char curr_stanza[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 597 </span> : : -<span class="lineNum"> 598 </span> : : /* Open the rcfile in read mode */ -<span class="lineNum"> 599 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc = fopen(rcfile, &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 600 </span> : : { -<span class="lineNum"> 601 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to open rc file: %s: %s&quot;,</span> -<span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> -<span class="lineNum"> 603 </span> : : -<span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> -<span class="lineNum"> 605 </span> : : } -<span class="lineNum"> 606 </span> : : -<span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;The following stanzas are configured in %s :&quot;, rcfile);</span> -<span class="lineNum"> 608 </span> : : -<span class="lineNum"> 609 </span> : : /* Parse the rcfile line by line to find stanza */ -<span class="lineNum"> 610 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ((fgets(line, MAX_LINE_LEN, rc)) != NULL)</span> -<span class="lineNum"> 611 </span> : : { -<span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : line[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 613 </span> : : -<span class="lineNum"> 614 </span> : : /* Get past comments and empty lines (note: we only look at the first -<span class="lineNum"> 615 </span> : : * character. */ -<span class="lineNum"> 616 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_EMPTY_LINE(line[0]))</span> -<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] -<span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 618 </span> : : -<span class="lineNum"> 619 </span> : : /* Check which section we are working on */ -<span class="lineNum"> 620 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (is_rc_section(line, strlen(line), curr_stanza, sizeof(curr_stanza)))</span> -<span class="lineNum"> 621 </span> : : { -<span class="lineNum"> 622 </span> : : /* Print the stanza and continue - we exclude the default stanza */ -<span class="lineNum"> 623 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (strcasecmp(curr_stanza, RC_SECTION_DEFAULT) != 0)</span> -<span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot; - %s&quot;, curr_stanza);</span> -<span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 626 </span> : : } -<span class="lineNum"> 627 </span> : : -<span class="lineNum"> 628 </span> : : /* Nothing we care about */ -<span class="lineNum"> 629 </span> : : else; -<span class="lineNum"> 630 </span> : : } -<span class="lineNum"> 631 </span> : : -<span class="lineNum"> 632 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> -<span class="lineNum"> 633 </span> : : -<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> -<span class="lineNum"> 635 </span> : : } -<span class="lineNum"> 636 </span> : : -<span class="lineNum"> 637 </span> : : /* Assign path to fwknop rc file -<a name="638"><span class="lineNum"> 638 </span> : : */</a> -<span class="lineNum"> 639 </span> : : static void -<span class="lineNum"> 640 </span> :<span class="lineCov"> 2890 : set_rc_file(char *rcfile, fko_cli_options_t *options)</span> -<span class="lineNum"> 641 </span> : : { -<span class="lineNum"> 642 </span> : : int rcf_offset; -<span class="lineNum"> 643 </span> : : char *homedir; -<span class="lineNum"> 644 </span> : : -<span class="lineNum"> 645 </span> : : memset(rcfile, 0x0, MAX_PATH_LEN); -<span class="lineNum"> 646 </span> : : -<span class="lineNum"> 647 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(options-&gt;rc_file[0] == 0x0)</span> -<span class="lineNum"> 648 </span> : : { -<span class="lineNum"> 649 </span> : : #ifdef WIN32 -<span class="lineNum"> 650 </span> : : homedir = getenv(&quot;USERPROFILE&quot;); -<span class="lineNum"> 651 </span> : : #else -<span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : homedir = getenv(&quot;HOME&quot;);</span> -<span class="lineNum"> 653 </span> : : #endif -<span class="lineNum"> 654 </span> : : -<span class="lineNum"> 655 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(homedir == NULL)</span> -<span class="lineNum"> 656 </span> : : { -<span class="lineNum"> 657 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Warning: Unable to determine HOME directory.\n&quot;</span> -<span class="lineNum"> 658 </span> : : &quot; No .fwknoprc file processed.&quot;); -<span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 660 </span> : : } -<span class="lineNum"> 661 </span> : : -<span class="lineNum"> 662 </span> :<span class="lineNoCov"> 0 : strlcpy(rcfile, homedir, MAX_PATH_LEN);</span> -<span class="lineNum"> 663 </span> : : -<span class="lineNum"> 664 </span> :<span class="lineNoCov"> 0 : rcf_offset = strlen(rcfile);</span> -<span class="lineNum"> 665 </span> : : -<span class="lineNum"> 666 </span> : : /* Sanity check the path to .fwknoprc. -<span class="lineNum"> 667 </span> : : * The preceeding path plus the path separator and '.fwknoprc' = 11 -<span class="lineNum"> 668 </span> : : * cannot exceed MAX_PATH_LEN. -<span class="lineNum"> 669 </span> : : */ -<span class="lineNum"> 670 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rcf_offset &gt; (MAX_PATH_LEN - 11))</span> -<span class="lineNum"> 671 </span> : : { -<span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Warning: Path to .fwknoprc file is too long.\n&quot;</span> -<span class="lineNum"> 673 </span> : : &quot; No .fwknoprc file processed.&quot;); -<span class="lineNum"> 674 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 675 </span> : : } -<span class="lineNum"> 676 </span> : : -<span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : rcfile[rcf_offset] = PATH_SEP;</span> -<span class="lineNum"> 678 </span> :<span class="lineNoCov"> 0 : strlcat(rcfile, &quot;.fwknoprc&quot;, MAX_PATH_LEN);</span> -<span class="lineNum"> 679 </span> : : } -<span class="lineNum"> 680 </span> : : else -<span class="lineNum"> 681 </span> : : { -<span class="lineNum"> 682 </span> :<span class="lineCov"> 2890 : strlcpy(rcfile, options-&gt;rc_file, MAX_PATH_LEN);</span> -<span class="lineNum"> 683 </span> : : } -<span class="lineNum"> 684 </span> : : -<span class="lineNum"> 685 </span> : : /* Check rc file permissions - if anything other than user read/write, -<span class="lineNum"> 686 </span> : : * then throw a warning. This change was made to help ensure that the -<span class="lineNum"> 687 </span> : : * client consumes a proper rc file with strict permissions set (thanks -<span class="lineNum"> 688 </span> : : * to Fernando Arnaboldi from IOActive for pointing this out). -<span class="lineNum"> 689 </span> : : */ -<span class="lineNum"> 690 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(verify_file_perms_ownership(rcfile) != 1)</span> -<span class="lineNum"> 691 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 692 </span> : : -<span class="lineNum"> 693 </span> :<span class="lineCov"> 2890 : return;</span> -<span class="lineNum"> 694 </span> : : } -<a name="695"><span class="lineNum"> 695 </span> : : </a> -<span class="lineNum"> 696 </span> : : static void -<span class="lineNum"> 697 </span> :<span class="lineCov"> 566 : keys_status(fko_cli_options_t *options)</span> -<span class="lineNum"> 698 </span> : : { -<span class="lineNum"> 699 </span> :<span class="lineCov"> 566 : FILE *key_gen_file_ptr = NULL;</span> -<span class="lineNum"> 700 </span> :<span class="lineCov"> 566 : char rcfile[MAX_PATH_LEN] = {0};</span> -<span class="lineNum"> 701 </span> : : -<span class="lineNum"> 702 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;key_gen == 1)</span> -<span class="lineNum"> 703 </span> : : { -<span class="lineNum"> 704 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;key_gen_file[0] != '\0')</span> -<span class="lineNum"> 705 </span> : : { -<span class="lineNum"> 706 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((key_gen_file_ptr = fopen(options-&gt;key_gen_file, &quot;w&quot;)) == NULL)</span> -<span class="lineNum"> 707 </span> : : { -<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Unable to create key gen file: %s: %s&quot;,</span> -<span class="lineNum"> 709 </span> :<span class="lineNoCov"> 0 : options-&gt;key_gen_file, strerror(errno));</span> -<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 711 </span> : : } -<span class="lineNum"> 712 </span> : : fprintf(key_gen_file_ptr, &quot;KEY_BASE64: %s\nHMAC_KEY_BASE64: %s\n&quot;, -<span class="lineNum"> 713 </span> :<span class="lineNoCov"> 0 : options-&gt;key_base64, options-&gt;hmac_key_base64);</span> -<span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : fclose(key_gen_file_ptr);</span> -<span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 716 </span> : : &quot;[+] Wrote Rijndael and HMAC keys to: %s&quot;, -<span class="lineNum"> 717 </span> : : options-&gt;key_gen_file); -<span class="lineNum"> 718 </span> : : } -<span class="lineNum"> 719 </span> : : else -<span class="lineNum"> 720 </span> : : { -<span class="lineNum"> 721 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;save_rc_stanza == 1)</span> -<span class="lineNum"> 722 </span> : : { -<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : set_rc_file(rcfile, options);</span> -<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 725 </span> : : &quot;[+] Wrote Rijndael and HMAC keys to rc file: %s&quot;, rcfile); -<span class="lineNum"> 726 </span> : : } -<span class="lineNum"> 727 </span> : : else -<span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 729 </span> : : &quot;KEY_BASE64: %s\nHMAC_KEY_BASE64: %s&quot;, -<span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : options-&gt;key_base64, options-&gt;hmac_key_base64);</span> -<span class="lineNum"> 731 </span> : : } -<span class="lineNum"> 732 </span> : : -<span class="lineNum"> 733 </span> : : /* Always exit out in --key-gen mode since the fwknopd server -<span class="lineNum"> 734 </span> : : * has no way to know what the new keys are -<span class="lineNum"> 735 </span> : : */ -<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : exit(EXIT_SUCCESS);</span> -<span class="lineNum"> 737 </span> : : } -<span class="lineNum"> 738 </span> :<span class="lineCov"> 566 : }</span> -<span class="lineNum"> 739 </span> : : -<span class="lineNum"> 740 </span> : : -<span class="lineNum"> 741 </span> : : /* Parse any time offset from the command line -<a name="742"><span class="lineNum"> 742 </span> : : */</a> -<span class="lineNum"> 743 </span> : : static int -<span class="lineNum"> 744 </span> :<span class="lineCov"> 9046 : parse_time_offset(const char *offset_str, int *offset)</span> -<span class="lineNum"> 745 </span> : : { -<span class="lineNum"> 746 </span> : : int i, j; -<span class="lineNum"> 747 </span> :<span class="lineCov"> 9046 : int offset_type = TIME_OFFSET_SECONDS;</span> -<span class="lineNum"> 748 </span> :<span class="lineCov"> 9046 : int os_len = strlen(offset_str);</span> -<span class="lineNum"> 749 </span> :<span class="lineCov"> 9046 : int is_err = 0;</span> -<span class="lineNum"> 750 </span> : : -<span class="lineNum"> 751 </span> :<span class="lineCov"> 9046 : char offset_digits[MAX_TIME_STR_LEN] = {0};</span> -<span class="lineNum"> 752 </span> : : -<span class="lineNum"> 753 </span> :<span class="lineCov"> 9046 : j=0;</span> -<span class="lineNum"> 754 </span> [<span class="branchCov" title="Branch 0 was taken 66192 times"> + </span><span class="branchCov" title="Branch 1 was taken 3941 times"> + </span>]:<span class="lineCov"> 70133 : for (i=0; i &lt; os_len; i++) {</span> -<span class="lineNum"> 755 </span> [<span class="branchCov" title="Branch 1 was taken 26111 times"> + </span><span class="branchCov" title="Branch 2 was taken 40081 times"> + </span>]:<span class="lineCov"> 66192 : if (isdigit(offset_str[i])) {</span> -<span class="lineNum"> 756 </span> :<span class="lineCov"> 26111 : offset_digits[j] = offset_str[i];</span> -<span class="lineNum"> 757 </span> :<span class="lineCov"> 26111 : j++;</span> -<span class="lineNum"> 758 </span> [<span class="branchCov" title="Branch 0 was taken 25020 times"> + </span><span class="branchCov" title="Branch 1 was taken 1091 times"> + </span>]:<span class="lineCov"> 26111 : if(j &gt;= MAX_TIME_STR_LEN)</span> -<span class="lineNum"> 759 </span> : : { -<span class="lineNum"> 760 </span> : : return 0; -<span class="lineNum"> 761 </span> : : } -<span class="lineNum"> 762 </span> [<span class="branchCov" title="Branch 0 was taken 38707 times"> + </span><span class="branchCov" title="Branch 1 was taken 1374 times"> + </span>]:<span class="lineCov"> 40081 : } else if (offset_str[i] == 'm' || offset_str[i] == 'M') {</span> -<span class="lineNum"> 763 </span> : : offset_type = TIME_OFFSET_MINUTES; -<span class="lineNum"> 764 </span> : : break; -<span class="lineNum"> 765 </span> [<span class="branchCov" title="Branch 0 was taken 38070 times"> + </span><span class="branchCov" title="Branch 1 was taken 637 times"> + </span>]:<span class="lineCov"> 38707 : } else if (offset_str[i] == 'h' || offset_str[i] == 'H') {</span> -<span class="lineNum"> 766 </span> : : offset_type = TIME_OFFSET_HOURS; -<span class="lineNum"> 767 </span> : : break; -<span class="lineNum"> 768 </span> [<span class="branchCov" title="Branch 0 was taken 36067 times"> + </span><span class="branchCov" title="Branch 1 was taken 2003 times"> + </span>]:<span class="lineCov"> 38070 : } else if (offset_str[i] == 'd' || offset_str[i] == 'D') {</span> -<span class="lineNum"> 769 </span> : : offset_type = TIME_OFFSET_DAYS; -<span class="lineNum"> 770 </span> : : break; -<span class="lineNum"> 771 </span> : : } -<span class="lineNum"> 772 </span> : : } -<span class="lineNum"> 773 </span> : : -<span class="lineNum"> 774 </span> :<span class="lineCov"> 7955 : offset_digits[j] = '\0';</span> -<span class="lineNum"> 775 </span> : : -<span class="lineNum"> 776 </span> [<span class="branchCov" title="Branch 0 was taken 4925 times"> + </span><span class="branchCov" title="Branch 1 was taken 3030 times"> + </span>]:<span class="lineCov"> 7955 : if (j &lt; 1)</span> -<span class="lineNum"> 777 </span> : : return 0; -<span class="lineNum"> 778 </span> : : -<span class="lineNum"> 779 </span> :<span class="lineCov"> 4925 : *offset = strtol_wrapper(offset_digits, 0, (2 &lt;&lt; 15),</span> -<span class="lineNum"> 780 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 781 </span> : : -<span class="lineNum"> 782 </span> : : /* Apply the offset_type multiplier -<span class="lineNum"> 783 </span> : : */ -<span class="lineNum"> 784 </span> :<span class="lineCov"> 4925 : *offset *= offset_type;</span> -<span class="lineNum"> 785 </span> : : -<span class="lineNum"> 786 </span> :<span class="lineCov"> 4925 : return is_err == 0 ? 1 : 0;</span> -<span class="lineNum"> 787 </span> : : } -<a name="788"><span class="lineNum"> 788 </span> : : </a> -<span class="lineNum"> 789 </span> : : static int -<span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : create_fwknoprc(const char *rcfile)</span> -<span class="lineNum"> 791 </span> : : { -<span class="lineNum"> 792 </span> :<span class="lineNoCov"> 0 : FILE *rc = NULL;</span> -<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : int rcfile_fd = -1;</span> -<span class="lineNum"> 794 </span> : : -<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;[*] Creating initial rc file: %s.&quot;, rcfile);</span> -<span class="lineNum"> 796 </span> : : -<span class="lineNum"> 797 </span> : : /* Try to create the initial rcfile with user read/write rights only. -<span class="lineNum"> 798 </span> : : * If the rcfile already exists, an error is returned */ -<span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : rcfile_fd = open(rcfile, FWKNOPRC_OFLAGS ,FWKNOPRC_MODE);</span> -<span class="lineNum"> 800 </span> : : -<span class="lineNum"> 801 </span> : : // If an error occured ... -<span class="lineNum"> 802 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (rcfile_fd == -1) {</span> -<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to create initial rc file: %s: %s&quot;,</span> -<span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> -<span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 806 </span> : : } -<span class="lineNum"> 807 </span> : : -<span class="lineNum"> 808 </span> : : // Free the rcfile descriptor -<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : close(rcfile_fd);</span> -<span class="lineNum"> 810 </span> : : -<span class="lineNum"> 811 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc = fopen(rcfile, &quot;w&quot;)) == NULL)</span> -<span class="lineNum"> 812 </span> : : { -<span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to write default setup to rcfile: %s: %s&quot;,</span> -<span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> -<span class="lineNum"> 815 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 816 </span> : : } -<span class="lineNum"> 817 </span> : : -<span class="lineNum"> 818 </span> : : fprintf(rc, -<span class="lineNum"> 819 </span> : : &quot;# .fwknoprc\n&quot; -<span class="lineNum"> 820 </span> : : &quot;##############################################################################\n&quot; -<span class="lineNum"> 821 </span> : : &quot;#\n&quot; -<span class="lineNum"> 822 </span> : : &quot;# Firewall Knock Operator (fwknop) client rc file.\n&quot; -<span class="lineNum"> 823 </span> : : &quot;#\n&quot; -<span class="lineNum"> 824 </span> : : &quot;# This file contains user-specific fwknop client configuration default\n&quot; -<span class="lineNum"> 825 </span> : : &quot;# and named parameter sets for specific invocations of the fwknop client.\n&quot; -<span class="lineNum"> 826 </span> : : &quot;#\n&quot; -<span class="lineNum"> 827 </span> : : &quot;# Each section (or stanza) is identified and started by a line in this\n&quot; -<span class="lineNum"> 828 </span> : : &quot;# file that contains a single identifier surrounded by square brackets.\n&quot; -<span class="lineNum"> 829 </span> : : &quot;# It is this identifier (or name) that is used from the fwknop command line\n&quot; -<span class="lineNum"> 830 </span> : : &quot;# via the '-n &lt;name&gt;' argument to reference the corresponding stanza.\n&quot; -<span class="lineNum"> 831 </span> : : &quot;#\n&quot; -<span class="lineNum"> 832 </span> : : &quot;# The parameters within the stanza typically match corresponding client \n&quot; -<span class="lineNum"> 833 </span> : : &quot;# command-line parameters.\n&quot; -<span class="lineNum"> 834 </span> : : &quot;#\n&quot; -<span class="lineNum"> 835 </span> : : &quot;# The first one should always be `[default]' as it defines the global\n&quot; -<span class="lineNum"> 836 </span> : : &quot;# default settings for the user. These override the program defaults\n&quot; -<span class="lineNum"> 837 </span> : : &quot;# for these parameters. If a named stanza is used, its entries will\n&quot; -<span class="lineNum"> 838 </span> : : &quot;# override any of the default values. Command-line options will trump them\n&quot; -<span class="lineNum"> 839 </span> : : &quot;# all.\n&quot; -<span class="lineNum"> 840 </span> : : &quot;#\n&quot; -<span class="lineNum"> 841 </span> : : &quot;# Subsequent stanzas will have only the overriding and destination\n&quot; -<span class="lineNum"> 842 </span> : : &quot;# specific parameters.\n&quot; -<span class="lineNum"> 843 </span> : : &quot;#\n&quot; -<span class="lineNum"> 844 </span> : : &quot;# Lines starting with `#' and empty lines are ignored.\n&quot; -<span class="lineNum"> 845 </span> : : &quot;#\n&quot; -<span class="lineNum"> 846 </span> : : &quot;# See the fwknop.8 man page for a complete list of valid parameters\n&quot; -<span class="lineNum"> 847 </span> : : &quot;# and their values.\n&quot; -<span class="lineNum"> 848 </span> : : &quot;#\n&quot; -<span class="lineNum"> 849 </span> : : &quot;##############################################################################\n&quot; -<span class="lineNum"> 850 </span> : : &quot;#\n&quot; -<span class="lineNum"> 851 </span> : : &quot;# We start with the 'default' stanza. Uncomment and edit for your\n&quot; -<span class="lineNum"> 852 </span> : : &quot;# preferences. The client will use its built-in default for those items\n&quot; -<span class="lineNum"> 853 </span> : : &quot;# that are commented out.\n&quot; -<span class="lineNum"> 854 </span> : : &quot;#\n&quot; -<span class="lineNum"> 855 </span> : : &quot;[default]\n&quot; -<span class="lineNum"> 856 </span> : : &quot;\n&quot; -<span class="lineNum"> 857 </span> : : &quot;#DIGEST_TYPE sha256\n&quot; -<span class="lineNum"> 858 </span> : : &quot;#FW_TIMEOUT 30\n&quot; -<span class="lineNum"> 859 </span> : : &quot;#SPA_SERVER_PORT 62201\n&quot; -<span class="lineNum"> 860 </span> : : &quot;#SPA_SERVER_PROTO udp\n&quot; -<span class="lineNum"> 861 </span> : : &quot;#ALLOW_IP &lt;ip addr&gt;\n&quot; -<span class="lineNum"> 862 </span> : : &quot;#SPOOF_USER &lt;username&gt;\n&quot; -<span class="lineNum"> 863 </span> : : &quot;#SPOOF_SOURCE_IP &lt;IPaddr&gt;\n&quot; -<span class="lineNum"> 864 </span> : : &quot;#TIME_OFFSET 0\n&quot; -<span class="lineNum"> 865 </span> : : &quot;#USE_GPG N\n&quot; -<span class="lineNum"> 866 </span> : : &quot;#GPG_HOMEDIR /path/to/.gnupg\n&quot; -<span class="lineNum"> 867 </span> : : &quot;#GPG_EXE /path/to/gpg\n&quot; -<span class="lineNum"> 868 </span> : : &quot;#GPG_SIGNER &lt;signer ID&gt;\n&quot; -<span class="lineNum"> 869 </span> : : &quot;#GPG_RECIPIENT &lt;recipient ID&gt;\n&quot; -<span class="lineNum"> 870 </span> : : &quot;#NO_SAVE_ARGS N\n&quot; -<span class="lineNum"> 871 </span> : : &quot;\n&quot; -<span class="lineNum"> 872 </span> : : &quot;# User-provided named stanzas:\n&quot; -<span class="lineNum"> 873 </span> : : &quot;\n&quot; -<span class="lineNum"> 874 </span> : : &quot;# Example for a destination server of 192.168.1.20 to open access to\n&quot; -<span class="lineNum"> 875 </span> : : &quot;# SSH for an IP that is resolved externally, and one with a NAT request\n&quot; -<span class="lineNum"> 876 </span> : : &quot;# for a specific source IP that maps port 8088 on the server\n&quot; -<span class="lineNum"> 877 </span> : : &quot;# to port 88 on 192.168.1.55 with timeout.\n&quot; -<span class="lineNum"> 878 </span> : : &quot;#\n&quot; -<span class="lineNum"> 879 </span> : : &quot;#[myssh]\n&quot; -<span class="lineNum"> 880 </span> : : &quot;#SPA_SERVER 192.168.1.20\n&quot; -<span class="lineNum"> 881 </span> : : &quot;#ACCESS tcp/22\n&quot; -<span class="lineNum"> 882 </span> : : &quot;#ALLOW_IP resolve\n&quot; -<span class="lineNum"> 883 </span> : : &quot;#\n&quot; -<span class="lineNum"> 884 </span> : : &quot;#[mynatreq]\n&quot; -<span class="lineNum"> 885 </span> : : &quot;#SPA_SERVER 192.168.1.20\n&quot; -<span class="lineNum"> 886 </span> : : &quot;#ACCESS tcp/8088\n&quot; -<span class="lineNum"> 887 </span> : : &quot;#ALLOW_IP 10.21.2.6\n&quot; -<span class="lineNum"> 888 </span> : : &quot;#NAT_ACCESS 192.168.1.55,88\n&quot; -<span class="lineNum"> 889 </span> : : &quot;#CLIENT_TIMEOUT 60\n&quot; -<span class="lineNum"> 890 </span> : : &quot;#\n&quot; -<span class="lineNum"> 891 </span> : : &quot;\n&quot; -<span class="lineNum"> 892 </span> : : ); -<span class="lineNum"> 893 </span> : : -<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> -<span class="lineNum"> 895 </span> : : -<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 897 </span> : : } -<a name="898"><span class="lineNum"> 898 </span> : : </a> -<span class="lineNum"> 899 </span> : : static int -<span class="lineNum"> 900 </span> :<span class="lineCov"> 108412 : parse_rc_param(fko_cli_options_t *options, const char *var_name, char * val)</span> -<span class="lineNum"> 901 </span> : : { -<span class="lineNum"> 902 </span> : : int tmpint, is_err; -<span class="lineNum"> 903 </span> :<span class="lineCov"> 108412 : int parse_error = 0; /* 0 if the variable has been successfully processed, &lt; 0 otherwise */</span> -<span class="lineNum"> 904 </span> : : fko_var_t *var; /* Pointer on an fwknop variable structure */ -<span class="lineNum"> 905 </span> : : -<span class="lineNum"> 906 </span> :<span class="lineCov"> 108412 : log_msg(LOG_VERBOSITY_DEBUG, &quot;parse_rc_param() : Parsing variable %s...&quot;, var_name);</span> -<span class="lineNum"> 907 </span> : : -<span class="lineNum"> 908 </span> : : /* Lookup the variable according to its name. */ -<span class="lineNum"> 909 </span> :<span class="lineCov"> 108412 : var = lookup_var_by_name(var_name);</span> -<span class="lineNum"> 910 </span> : : -<span class="lineNum"> 911 </span> : : /* The variable is not handled if its pointer is NULL */ -<span class="lineNum"> 912 </span> [<span class="branchCov" title="Branch 0 was taken 65637 times"> + </span><span class="branchCov" title="Branch 1 was taken 42775 times"> + </span>]:<span class="lineCov"> 108412 : if (var == NULL)</span> -<span class="lineNum"> 913 </span> : : parse_error = -1; -<span class="lineNum"> 914 </span> : : -<span class="lineNum"> 915 </span> : : /* Digest Type */ -<span class="lineNum"> 916 </span> [<span class="branchCov" title="Branch 0 was taken 4540 times"> + </span><span class="branchCov" title="Branch 1 was taken 61097 times"> + </span>]:<span class="lineCov"> 65637 : else if (var-&gt;pos == FWKNOP_CLI_ARG_DIGEST_TYPE)</span> -<span class="lineNum"> 917 </span> : : { -<span class="lineNum"> 918 </span> :<span class="lineCov"> 4540 : tmpint = digest_strtoint(val);</span> -<span class="lineNum"> 919 </span> [<span class="branchCov" title="Branch 0 was taken 2279 times"> + </span><span class="branchCov" title="Branch 1 was taken 2261 times"> + </span>]:<span class="lineCov"> 4540 : if(tmpint &lt; 0)</span> -<span class="lineNum"> 920 </span> : : parse_error = -1; -<span class="lineNum"> 921 </span> : : else -<span class="lineNum"> 922 </span> :<span class="lineCov"> 2279 : options-&gt;digest_type = tmpint;</span> -<span class="lineNum"> 923 </span> : : } -<span class="lineNum"> 924 </span> : : /* Server protocol */ -<span class="lineNum"> 925 </span> [<span class="branchCov" title="Branch 0 was taken 3306 times"> + </span><span class="branchCov" title="Branch 1 was taken 57791 times"> + </span>]:<span class="lineCov"> 61097 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SERVER_PROTO)</span> -<span class="lineNum"> 926 </span> : : { -<span class="lineNum"> 927 </span> :<span class="lineCov"> 3306 : tmpint = proto_strtoint(val);</span> -<span class="lineNum"> 928 </span> [<span class="branchCov" title="Branch 0 was taken 2427 times"> + </span><span class="branchCov" title="Branch 1 was taken 879 times"> + </span>]:<span class="lineCov"> 3306 : if(tmpint &lt; 0)</span> -<span class="lineNum"> 929 </span> : : parse_error = -1; -<span class="lineNum"> 930 </span> : : else -<span class="lineNum"> 931 </span> :<span class="lineCov"> 2427 : options-&gt;spa_proto = tmpint;</span> -<span class="lineNum"> 932 </span> : : } -<span class="lineNum"> 933 </span> : : /* Server port */ -<span class="lineNum"> 934 </span> [<span class="branchCov" title="Branch 0 was taken 1485 times"> + </span><span class="branchCov" title="Branch 1 was taken 56306 times"> + </span>]:<span class="lineCov"> 57791 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SERVER_PORT)</span> -<span class="lineNum"> 935 </span> : : { -<span class="lineNum"> 936 </span> :<span class="lineCov"> 1485 : tmpint = strtol_wrapper(val, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 937 </span> [<span class="branchCov" title="Branch 0 was taken 1391 times"> + </span><span class="branchCov" title="Branch 1 was taken 94 times"> + </span>]:<span class="lineCov"> 1485 : if(is_err == FKO_SUCCESS)</span> -<span class="lineNum"> 938 </span> :<span class="lineCov"> 1391 : options-&gt;spa_dst_port = tmpint;</span> -<span class="lineNum"> 939 </span> : : else -<span class="lineNum"> 940 </span> : : parse_error = -1; -<span class="lineNum"> 941 </span> : : } -<span class="lineNum"> 942 </span> : : /* Source port */ -<span class="lineNum"> 943 </span> [<span class="branchCov" title="Branch 0 was taken 201 times"> + </span><span class="branchCov" title="Branch 1 was taken 56105 times"> + </span>]:<span class="lineCov"> 56306 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SOURCE_PORT)</span> -<span class="lineNum"> 944 </span> : : { -<span class="lineNum"> 945 </span> :<span class="lineCov"> 201 : tmpint = strtol_wrapper(val, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 946 </span> [<span class="branchCov" title="Branch 0 was taken 87 times"> + </span><span class="branchCov" title="Branch 1 was taken 114 times"> + </span>]:<span class="lineCov"> 201 : if(is_err == FKO_SUCCESS)</span> -<span class="lineNum"> 947 </span> :<span class="lineCov"> 87 : options-&gt;spa_src_port = tmpint;</span> -<span class="lineNum"> 948 </span> : : else -<span class="lineNum"> 949 </span> : : parse_error = -1; -<span class="lineNum"> 950 </span> : : } -<span class="lineNum"> 951 </span> : : /* Firewall rule timeout */ -<span class="lineNum"> 952 </span> [<span class="branchCov" title="Branch 0 was taken 192 times"> + </span><span class="branchCov" title="Branch 1 was taken 55913 times"> + </span>]:<span class="lineCov"> 56105 : else if (var-&gt;pos == FWKNOP_CLI_ARG_FW_TIMEOUT)</span> -<span class="lineNum"> 953 </span> : : { -<span class="lineNum"> 954 </span> :<span class="lineCov"> 192 : tmpint = strtol_wrapper(val, 0, (2 &lt;&lt; 15), NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 955 </span> [<span class="branchCov" title="Branch 0 was taken 87 times"> + </span><span class="branchCov" title="Branch 1 was taken 105 times"> + </span>]:<span class="lineCov"> 192 : if(is_err == FKO_SUCCESS)</span> -<span class="lineNum"> 956 </span> :<span class="lineCov"> 87 : options-&gt;fw_timeout = tmpint;</span> -<span class="lineNum"> 957 </span> : : else -<span class="lineNum"> 958 </span> : : parse_error = -1; -<span class="lineNum"> 959 </span> : : } -<span class="lineNum"> 960 </span> : : /* Allow IP */ -<span class="lineNum"> 961 </span> [<span class="branchCov" title="Branch 0 was taken 6803 times"> + </span><span class="branchCov" title="Branch 1 was taken 49110 times"> + </span>]:<span class="lineCov"> 55913 : else if (var-&gt;pos == FWKNOP_CLI_ARG_ALLOW_IP)</span> -<span class="lineNum"> 962 </span> : : { -<span class="lineNum"> 963 </span> : : /* In case this was set previously -<span class="lineNum"> 964 </span> : : */ -<span class="lineNum"> 965 </span> :<span class="lineCov"> 6803 : options-&gt;resolve_ip_http_https = 0;</span> -<span class="lineNum"> 966 </span> : : -<span class="lineNum"> 967 </span> : : /* use source, resolve, or an actual IP -<span class="lineNum"> 968 </span> : : */ -<span class="lineNum"> 969 </span> [<span class="branchCov" title="Branch 0 was taken 72 times"> + </span><span class="branchCov" title="Branch 1 was taken 6731 times"> + </span>]:<span class="lineCov"> 6803 : if(strcasecmp(val, &quot;source&quot;) == 0)</span> -<span class="lineNum"> 970 </span> :<span class="lineCov"> 72 : strlcpy(options-&gt;allow_ip_str, &quot;0.0.0.0&quot;, sizeof(options-&gt;allow_ip_str));</span> -<span class="lineNum"> 971 </span> [<span class="branchCov" title="Branch 0 was taken 35 times"> + </span><span class="branchCov" title="Branch 1 was taken 6696 times"> + </span>]:<span class="lineCov"> 6731 : else if(strcasecmp(val, &quot;resolve&quot;) == 0)</span> -<span class="lineNum"> 972 </span> :<span class="lineCov"> 35 : options-&gt;resolve_ip_http_https = 1;</span> -<span class="lineNum"> 973 </span> : : else /* Assume IP address and validate */ -<span class="lineNum"> 974 </span> : : { -<span class="lineNum"> 975 </span> :<span class="lineCov"> 6696 : strlcpy(options-&gt;allow_ip_str, val, sizeof(options-&gt;allow_ip_str));</span> -<span class="lineNum"> 976 </span> [<span class="branchCov" title="Branch 1 was taken 4218 times"> + </span><span class="branchCov" title="Branch 2 was taken 2478 times"> + </span>]:<span class="lineCov"> 6696 : if(! is_valid_ipv4_addr(options-&gt;allow_ip_str))</span> -<span class="lineNum"> 977 </span> :<span class="lineCov"> 4218 : parse_error = -1;</span> -<span class="lineNum"> 978 </span> : : } -<span class="lineNum"> 979 </span> : : } -<span class="lineNum"> 980 </span> : : /* Time Offset */ -<span class="lineNum"> 981 </span> [<span class="branchCov" title="Branch 0 was taken 9046 times"> + </span><span class="branchCov" title="Branch 1 was taken 40064 times"> + </span>]:<span class="lineCov"> 49110 : else if (var-&gt;pos == FWKNOP_CLI_ARG_TIME_OFFSET)</span> -<span class="lineNum"> 982 </span> : : { -<span class="lineNum"> 983 </span> [<span class="branchCov" title="Branch 0 was taken 1522 times"> + </span><span class="branchCov" title="Branch 1 was taken 7524 times"> + </span>]:<span class="lineCov"> 9046 : if(val[0] == '-')</span> -<span class="lineNum"> 984 </span> : : { -<span class="lineNum"> 985 </span> :<span class="lineCov"> 1522 : val++;</span> -<span class="lineNum"> 986 </span> [<span class="branchCov" title="Branch 1 was taken 190 times"> + </span><span class="branchCov" title="Branch 2 was taken 1332 times"> + </span>]:<span class="lineCov"> 1522 : if(! parse_time_offset(val, &amp;options-&gt;time_offset_minus))</span> -<span class="lineNum"> 987 </span> :<span class="lineCov"> 190 : parse_error = -1;</span> -<span class="lineNum"> 988 </span> : : } -<span class="lineNum"> 989 </span> : : else -<span class="lineNum"> 990 </span> [<span class="branchCov" title="Branch 1 was taken 5656 times"> + </span><span class="branchCov" title="Branch 2 was taken 1868 times"> + </span>]:<span class="lineCov"> 7524 : if (! parse_time_offset(val, &amp;options-&gt;time_offset_plus))</span> -<span class="lineNum"> 991 </span> :<span class="lineCov"> 5656 : parse_error = -1;</span> -<span class="lineNum"> 992 </span> : : -<span class="lineNum"> 993 </span> [<span class="branchCov" title="Branch 0 was taken 5846 times"> + </span><span class="branchCov" title="Branch 1 was taken 3200 times"> + </span>]:<span class="lineCov"> 9046 : if(parse_error == -1)</span> -<span class="lineNum"> 994 </span> :<span class="lineCov"> 5846 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 995 </span> : : &quot;TIME_OFFSET argument '%s' invalid.&quot;, val); -<span class="lineNum"> 996 </span> : : } -<span class="lineNum"> 997 </span> : : /* symmetric encryption mode */ -<span class="lineNum"> 998 </span> [<span class="branchCov" title="Branch 0 was taken 4826 times"> + </span><span class="branchCov" title="Branch 1 was taken 35238 times"> + </span>]:<span class="lineCov"> 40064 : else if (var-&gt;pos == FWKNOP_CLI_ARG_ENCRYPTION_MODE)</span> -<span class="lineNum"> 999 </span> : : { -<span class="lineNum"> 1000 </span> :<span class="lineCov"> 4826 : tmpint = enc_mode_strtoint(val);</span> -<span class="lineNum"> 1001 </span> [<span class="branchCov" title="Branch 0 was taken 2017 times"> + </span><span class="branchCov" title="Branch 1 was taken 2809 times"> + </span>]:<span class="lineCov"> 4826 : if(tmpint &lt; 0)</span> -<span class="lineNum"> 1002 </span> : : parse_error = -1; -<span class="lineNum"> 1003 </span> : : else -<span class="lineNum"> 1004 </span> :<span class="lineCov"> 2017 : options-&gt;encryption_mode = tmpint;</span> -<span class="lineNum"> 1005 </span> : : } -<span class="lineNum"> 1006 </span> : : /* Use GPG ? */ -<span class="lineNum"> 1007 </span> [<span class="branchCov" title="Branch 0 was taken 2094 times"> + </span><span class="branchCov" title="Branch 1 was taken 33144 times"> + </span>]:<span class="lineCov"> 35238 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_GPG)</span> -<span class="lineNum"> 1008 </span> : : { -<span class="lineNum"> 1009 </span> [<span class="branchCov" title="Branch 1 was taken 152 times"> + </span><span class="branchCov" title="Branch 2 was taken 1942 times"> + </span>]:<span class="lineCov"> 2094 : if (is_yes_str(val))</span> -<span class="lineNum"> 1010 </span> :<span class="lineCov"> 152 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 1011 </span> : : else; -<span class="lineNum"> 1012 </span> : : } -<span class="lineNum"> 1013 </span> : : /* Use GPG Agent ? */ -<span class="lineNum"> 1014 </span> [<span class="branchCov" title="Branch 0 was taken 1314 times"> + </span><span class="branchCov" title="Branch 1 was taken 31830 times"> + </span>]:<span class="lineCov"> 33144 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_GPG_AGENT)</span> -<span class="lineNum"> 1015 </span> : : { -<span class="lineNum"> 1016 </span> [<span class="branchCov" title="Branch 1 was taken 102 times"> + </span><span class="branchCov" title="Branch 2 was taken 1212 times"> + </span>]:<span class="lineCov"> 1314 : if (is_yes_str(val))</span> -<span class="lineNum"> 1017 </span> :<span class="lineCov"> 102 : options-&gt;use_gpg_agent = 1;</span> -<span class="lineNum"> 1018 </span> : : else; -<span class="lineNum"> 1019 </span> : : } -<span class="lineNum"> 1020 </span> : : /* No GPG signing passphrase ? */ -<span class="lineNum"> 1021 </span> [<span class="branchCov" title="Branch 0 was taken 170 times"> + </span><span class="branchCov" title="Branch 1 was taken 31660 times"> + </span>]:<span class="lineCov"> 31830 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW)</span> -<span class="lineNum"> 1022 </span> : : { -<span class="lineNum"> 1023 </span> [<span class="branchCov" title="Branch 1 was taken 68 times"> + </span><span class="branchCov" title="Branch 2 was taken 102 times"> + </span>]:<span class="lineCov"> 170 : if (is_yes_str(val))</span> -<span class="lineNum"> 1024 </span> :<span class="lineCov"> 68 : options-&gt;gpg_no_signing_pw = 1;</span> -<span class="lineNum"> 1025 </span> : : else; -<span class="lineNum"> 1026 </span> : : } -<span class="lineNum"> 1027 </span> : : /* GPG Recipient */ -<span class="lineNum"> 1028 </span> [<span class="branchCov" title="Branch 0 was taken 129 times"> + </span><span class="branchCov" title="Branch 1 was taken 31531 times"> + </span>]:<span class="lineCov"> 31660 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_RECIPIENT)</span> -<span class="lineNum"> 1029 </span> : : { -<span class="lineNum"> 1030 </span> :<span class="lineCov"> 129 : strlcpy(options-&gt;gpg_recipient_key, val, sizeof(options-&gt;gpg_recipient_key));</span> -<span class="lineNum"> 1031 </span> : : } -<span class="lineNum"> 1032 </span> : : /* GPG Signer */ -<span class="lineNum"> 1033 </span> [<span class="branchCov" title="Branch 0 was taken 87 times"> + </span><span class="branchCov" title="Branch 1 was taken 31444 times"> + </span>]:<span class="lineCov"> 31531 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_SIGNER)</span> -<span class="lineNum"> 1034 </span> : : { -<span class="lineNum"> 1035 </span> :<span class="lineCov"> 87 : strlcpy(options-&gt;gpg_signer_key, val, sizeof(options-&gt;gpg_signer_key));</span> -<span class="lineNum"> 1036 </span> : : } -<span class="lineNum"> 1037 </span> : : /* GPG Homedir */ -<span class="lineNum"> 1038 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 31444 times"> + </span>]:<span class="lineCov"> 31444 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_HOMEDIR)</span> -<span class="lineNum"> 1039 </span> : : { -<span class="lineNum"> 1040 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_home_dir, val, sizeof(options-&gt;gpg_home_dir));</span> -<span class="lineNum"> 1041 </span> : : } -<span class="lineNum"> 1042 </span> : : /* GPG path */ -<span class="lineNum"> 1043 </span> [<span class="branchCov" title="Branch 0 was taken 80 times"> + </span><span class="branchCov" title="Branch 1 was taken 31364 times"> + </span>]:<span class="lineCov"> 31444 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_EXE_PATH)</span> -<span class="lineNum"> 1044 </span> : : { -<span class="lineNum"> 1045 </span> :<span class="lineCov"> 80 : strlcpy(options-&gt;gpg_exe, val, sizeof(options-&gt;gpg_exe));</span> -<span class="lineNum"> 1046 </span> : : } -<span class="lineNum"> 1047 </span> : : /* Spoof User */ -<span class="lineNum"> 1048 </span> [<span class="branchCov" title="Branch 0 was taken 2977 times"> + </span><span class="branchCov" title="Branch 1 was taken 28387 times"> + </span>]:<span class="lineCov"> 31364 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPOOF_USER)</span> -<span class="lineNum"> 1049 </span> : : { -<span class="lineNum"> 1050 </span> :<span class="lineCov"> 2977 : strlcpy(options-&gt;spoof_user, val, sizeof(options-&gt;spoof_user));</span> -<span class="lineNum"> 1051 </span> : : } -<span class="lineNum"> 1052 </span> : : /* Spoof Source IP */ -<span class="lineNum"> 1053 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 28387 times"> + </span>]:<span class="lineCov"> 28387 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPOOF_SOURCE_IP)</span> -<span class="lineNum"> 1054 </span> : : { -<span class="lineNum"> 1055 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spoof_ip_src_str, val, sizeof(options-&gt;spoof_ip_src_str));</span> -<span class="lineNum"> 1056 </span> : : } -<span class="lineNum"> 1057 </span> : : /* ACCESS request */ -<span class="lineNum"> 1058 </span> [<span class="branchCov" title="Branch 0 was taken 1930 times"> + </span><span class="branchCov" title="Branch 1 was taken 26457 times"> + </span>]:<span class="lineCov"> 28387 : else if (var-&gt;pos == FWKNOP_CLI_ARG_ACCESS)</span> -<span class="lineNum"> 1059 </span> : : { -<span class="lineNum"> 1060 </span> :<span class="lineCov"> 1930 : strlcpy(options-&gt;access_str, val, sizeof(options-&gt;access_str));</span> -<span class="lineNum"> 1061 </span> : : } -<span class="lineNum"> 1062 </span> : : /* SPA Server (destination) */ -<span class="lineNum"> 1063 </span> [<span class="branchCov" title="Branch 0 was taken 2026 times"> + </span><span class="branchCov" title="Branch 1 was taken 24431 times"> + </span>]:<span class="lineCov"> 26457 : else if (var-&gt;pos == FWKNOP_CLI_ARG_SPA_SERVER)</span> -<span class="lineNum"> 1064 </span> : : { -<span class="lineNum"> 1065 </span> :<span class="lineCov"> 2026 : strlcpy(options-&gt;spa_server_str, val, sizeof(options-&gt;spa_server_str));</span> -<span class="lineNum"> 1066 </span> : : } -<span class="lineNum"> 1067 </span> : : /* Rand port ? */ -<span class="lineNum"> 1068 </span> [<span class="branchCov" title="Branch 0 was taken 147 times"> + </span><span class="branchCov" title="Branch 1 was taken 24284 times"> + </span>]:<span class="lineCov"> 24431 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RAND_PORT)</span> -<span class="lineNum"> 1069 </span> : : { -<span class="lineNum"> 1070 </span> [<span class="branchCov" title="Branch 1 was taken 76 times"> + </span><span class="branchCov" title="Branch 2 was taken 71 times"> + </span>]:<span class="lineCov"> 147 : if (is_yes_str(val))</span> -<span class="lineNum"> 1071 </span> :<span class="lineCov"> 76 : options-&gt;rand_port = 1;</span> -<span class="lineNum"> 1072 </span> : : else; -<span class="lineNum"> 1073 </span> : : } -<span class="lineNum"> 1074 </span> : : /* Rijndael key */ -<span class="lineNum"> 1075 </span> [<span class="branchCov" title="Branch 0 was taken 1879 times"> + </span><span class="branchCov" title="Branch 1 was taken 22405 times"> + </span>]:<span class="lineCov"> 24284 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_RIJNDAEL)</span> -<span class="lineNum"> 1076 </span> : : { -<span class="lineNum"> 1077 </span> :<span class="lineCov"> 1879 : strlcpy(options-&gt;key, val, sizeof(options-&gt;key));</span> -<span class="lineNum"> 1078 </span> :<span class="lineCov"> 1879 : options-&gt;have_key = 1;</span> -<span class="lineNum"> 1079 </span> : : } -<span class="lineNum"> 1080 </span> : : /* Rijndael key (base-64 encoded) */ -<span class="lineNum"> 1081 </span> [<span class="branchCov" title="Branch 0 was taken 5377 times"> + </span><span class="branchCov" title="Branch 1 was taken 17028 times"> + </span>]:<span class="lineCov"> 22405 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64)</span> -<span class="lineNum"> 1082 </span> : : { -<span class="lineNum"> 1083 </span> [<span class="branchCov" title="Branch 1 was taken 2308 times"> + </span><span class="branchCov" title="Branch 2 was taken 3069 times"> + </span>]:<span class="lineCov"> 5377 : if (! is_base64((unsigned char *) val, strlen(val)))</span> -<span class="lineNum"> 1084 </span> : : { -<span class="lineNum"> 1085 </span> :<span class="lineCov"> 2308 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1086 </span> : : &quot;KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, -<span class="lineNum"> 1087 </span> : : val); -<span class="lineNum"> 1088 </span> :<span class="lineCov"> 2308 : parse_error = -1;</span> -<span class="lineNum"> 1089 </span> : : } -<span class="lineNum"> 1090 </span> :<span class="lineCov"> 5377 : strlcpy(options-&gt;key_base64, val, sizeof(options-&gt;key_base64));</span> -<span class="lineNum"> 1091 </span> :<span class="lineCov"> 5377 : options-&gt;have_base64_key = 1;</span> -<span class="lineNum"> 1092 </span> : : } -<span class="lineNum"> 1093 </span> : : /* GnuPG signing passphrase */ -<span class="lineNum"> 1094 </span> [<span class="branchCov" title="Branch 0 was taken 103 times"> + </span><span class="branchCov" title="Branch 1 was taken 16925 times"> + </span>]:<span class="lineCov"> 17028 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_SIGNING_PW)</span> -<span class="lineNum"> 1095 </span> : : { -<span class="lineNum"> 1096 </span> :<span class="lineCov"> 103 : strlcpy(options-&gt;key, val, sizeof(options-&gt;key));</span> -<span class="lineNum"> 1097 </span> :<span class="lineCov"> 103 : options-&gt;have_key = 1;</span> -<span class="lineNum"> 1098 </span> : : } -<span class="lineNum"> 1099 </span> : : /* GnuPG signing passphrase (base-64 encoded) */ -<span class="lineNum"> 1100 </span> [<span class="branchCov" title="Branch 0 was taken 143 times"> + </span><span class="branchCov" title="Branch 1 was taken 16782 times"> + </span>]:<span class="lineCov"> 16925 : else if (var-&gt;pos == FWKNOP_CLI_ARG_GPG_SIGNING_PW_BASE64)</span> -<span class="lineNum"> 1101 </span> : : { -<span class="lineNum"> 1102 </span> [<span class="branchCov" title="Branch 1 was taken 97 times"> + </span><span class="branchCov" title="Branch 2 was taken 46 times"> + </span>]:<span class="lineCov"> 143 : if (! is_base64((unsigned char *) val, strlen(val)))</span> -<span class="lineNum"> 1103 </span> : : { -<span class="lineNum"> 1104 </span> :<span class="lineCov"> 97 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1105 </span> : : &quot;GPG_SIGNING_KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, -<span class="lineNum"> 1106 </span> : : val); -<span class="lineNum"> 1107 </span> :<span class="lineCov"> 97 : parse_error = -1;</span> -<span class="lineNum"> 1108 </span> : : } -<span class="lineNum"> 1109 </span> :<span class="lineCov"> 143 : strlcpy(options-&gt;key_base64, val, sizeof(options-&gt;key_base64));</span> -<span class="lineNum"> 1110 </span> :<span class="lineCov"> 143 : options-&gt;have_base64_key = 1;</span> -<span class="lineNum"> 1111 </span> : : } -<span class="lineNum"> 1112 </span> : : /* HMAC digest type */ -<span class="lineNum"> 1113 </span> [<span class="branchCov" title="Branch 0 was taken 5471 times"> + </span><span class="branchCov" title="Branch 1 was taken 11311 times"> + </span>]:<span class="lineCov"> 16782 : else if (var-&gt;pos == FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE)</span> -<span class="lineNum"> 1114 </span> : : { -<span class="lineNum"> 1115 </span> :<span class="lineCov"> 5471 : tmpint = hmac_digest_strtoint(val);</span> -<span class="lineNum"> 1116 </span> [<span class="branchCov" title="Branch 0 was taken 2597 times"> + </span><span class="branchCov" title="Branch 1 was taken 2874 times"> + </span>]:<span class="lineCov"> 5471 : if(tmpint &lt; 0)</span> -<span class="lineNum"> 1117 </span> : : { -<span class="lineNum"> 1118 </span> :<span class="lineCov"> 2597 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1119 </span> : : &quot;HMAC_DIGEST_TYPE argument '%s' must be one of {md5,sha1,sha256,sha384,sha512}&quot;, -<span class="lineNum"> 1120 </span> : : val); -<span class="lineNum"> 1121 </span> :<span class="lineCov"> 2597 : parse_error = -1;</span> -<span class="lineNum"> 1122 </span> : : } -<span class="lineNum"> 1123 </span> : : else -<span class="lineNum"> 1124 </span> : : { -<span class="lineNum"> 1125 </span> :<span class="lineCov"> 2874 : options-&gt;hmac_type = tmpint;</span> -<span class="lineNum"> 1126 </span> : : } -<span class="lineNum"> 1127 </span> : : } -<span class="lineNum"> 1128 </span> : : /* HMAC key (base64 encoded) */ -<span class="lineNum"> 1129 </span> [<span class="branchCov" title="Branch 0 was taken 1742 times"> + </span><span class="branchCov" title="Branch 1 was taken 9569 times"> + </span>]:<span class="lineCov"> 11311 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_HMAC_BASE64)</span> -<span class="lineNum"> 1130 </span> : : { -<span class="lineNum"> 1131 </span> [<span class="branchCov" title="Branch 1 was taken 875 times"> + </span><span class="branchCov" title="Branch 2 was taken 867 times"> + </span>]:<span class="lineCov"> 1742 : if (! is_base64((unsigned char *) val, strlen(val)))</span> -<span class="lineNum"> 1132 </span> : : { -<span class="lineNum"> 1133 </span> :<span class="lineCov"> 875 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1134 </span> : : &quot;HMAC_KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, -<span class="lineNum"> 1135 </span> : : val); -<span class="lineNum"> 1136 </span> :<span class="lineCov"> 875 : parse_error = -1;</span> -<span class="lineNum"> 1137 </span> : : } -<span class="lineNum"> 1138 </span> :<span class="lineCov"> 1742 : strlcpy(options-&gt;hmac_key_base64, val, sizeof(options-&gt;hmac_key_base64));</span> -<span class="lineNum"> 1139 </span> :<span class="lineCov"> 1742 : options-&gt;have_hmac_base64_key = 1;</span> -<span class="lineNum"> 1140 </span> :<span class="lineCov"> 1742 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 1141 </span> : : } -<span class="lineNum"> 1142 </span> : : -<span class="lineNum"> 1143 </span> : : /* HMAC key */ -<span class="lineNum"> 1144 </span> [<span class="branchCov" title="Branch 0 was taken 1008 times"> + </span><span class="branchCov" title="Branch 1 was taken 8561 times"> + </span>]:<span class="lineCov"> 9569 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_HMAC)</span> -<span class="lineNum"> 1145 </span> : : { -<span class="lineNum"> 1146 </span> :<span class="lineCov"> 1008 : strlcpy(options-&gt;hmac_key, val, sizeof(options-&gt;hmac_key));</span> -<span class="lineNum"> 1147 </span> :<span class="lineCov"> 1008 : options-&gt;have_hmac_key = 1;</span> -<span class="lineNum"> 1148 </span> :<span class="lineCov"> 1008 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 1149 </span> : : } -<span class="lineNum"> 1150 </span> : : -<span class="lineNum"> 1151 </span> : : /* --use-hmac */ -<span class="lineNum"> 1152 </span> [<span class="branchCov" title="Branch 0 was taken 3682 times"> + </span><span class="branchCov" title="Branch 1 was taken 4879 times"> + </span>]:<span class="lineCov"> 8561 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_HMAC)</span> -<span class="lineNum"> 1153 </span> : : { -<span class="lineNum"> 1154 </span> [<span class="branchCov" title="Branch 1 was taken 1716 times"> + </span><span class="branchCov" title="Branch 2 was taken 1966 times"> + </span>]:<span class="lineCov"> 3682 : if (is_yes_str(val))</span> -<span class="lineNum"> 1155 </span> :<span class="lineCov"> 1716 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 1156 </span> : : } -<span class="lineNum"> 1157 </span> : : /* --use-wget-user-agent */ -<span class="lineNum"> 1158 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4879 times"> + </span>]:<span class="lineCov"> 4879 : else if (var-&gt;pos == FWKNOP_CLI_ARG_USE_WGET_USER_AGENT)</span> -<span class="lineNum"> 1159 </span> : : { -<span class="lineNum"> 1160 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> -<span class="lineNum"> 1161 </span> :<span class="lineNoCov"> 0 : options-&gt;use_wget_user_agent = 1;</span> -<span class="lineNum"> 1162 </span> : : } -<span class="lineNum"> 1163 </span> : : /* Key file */ -<span class="lineNum"> 1164 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4879 times"> + </span>]:<span class="lineCov"> 4879 : else if (var-&gt;pos == FWKNOP_CLI_ARG_KEY_FILE)</span> -<span class="lineNum"> 1165 </span> : : { -<span class="lineNum"> 1166 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;get_key_file, val, sizeof(options-&gt;get_key_file));</span> -<span class="lineNum"> 1167 </span> : : } -<span class="lineNum"> 1168 </span> : : /* HMAC key file */ -<span class="lineNum"> 1169 </span> [<span class="branchCov" title="Branch 0 was taken 76 times"> + </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4879 : else if (var-&gt;pos == FWKNOP_CLI_ARG_HMAC_KEY_FILE)</span> -<span class="lineNum"> 1170 </span> : : { -<span class="lineNum"> 1171 </span> :<span class="lineCov"> 76 : strlcpy(options-&gt;get_key_file, val,</span> -<span class="lineNum"> 1172 </span> : : sizeof(options-&gt;get_hmac_key_file)); -<span class="lineNum"> 1173 </span> : : } -<span class="lineNum"> 1174 </span> : : /* NAT Access Request */ -<span class="lineNum"> 1175 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_ACCESS)</span> -<span class="lineNum"> 1176 </span> : : { -<span class="lineNum"> 1177 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;nat_access_str, val, sizeof(options-&gt;nat_access_str));</span> -<span class="lineNum"> 1178 </span> : : } -<span class="lineNum"> 1179 </span> : : /* HTTP User Agent */ -<span class="lineNum"> 1180 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_HTTP_USER_AGENT)</span> -<span class="lineNum"> 1181 </span> : : { -<span class="lineNum"> 1182 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;http_user_agent, val, sizeof(options-&gt;http_user_agent));</span> -<span class="lineNum"> 1183 </span> : : } -<span class="lineNum"> 1184 </span> : : /* Resolve URL */ -<span class="lineNum"> 1185 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_URL)</span> -<span class="lineNum"> 1186 </span> : : { -<span class="lineNum"> 1187 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> -<span class="lineNum"> 1188 </span> :<span class="lineNoCov"> 0 : free(options-&gt;resolve_url);</span> -<span class="lineNum"> 1189 </span> :<span class="lineNoCov"> 0 : tmpint = strlen(val)+1;</span> -<span class="lineNum"> 1190 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_url = calloc(1, tmpint);</span> -<span class="lineNum"> 1191 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url == NULL)</span> -<span class="lineNum"> 1192 </span> : : { -<span class="lineNum"> 1193 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,&quot;Memory allocation error for resolve URL.&quot;);</span> -<span class="lineNum"> 1194 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1195 </span> : : } -<span class="lineNum"> 1196 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;resolve_url, val, tmpint);</span> -<span class="lineNum"> 1197 </span> : : } -<span class="lineNum"> 1198 </span> : : /* wget command */ -<span class="lineNum"> 1199 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_WGET_CMD)</span> -<span class="lineNum"> 1200 </span> : : { -<span class="lineNum"> 1201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin != NULL)</span> -<span class="lineNum"> 1202 </span> :<span class="lineNoCov"> 0 : free(options-&gt;wget_bin);</span> -<span class="lineNum"> 1203 </span> :<span class="lineNoCov"> 0 : tmpint = strlen(val)+1;</span> -<span class="lineNum"> 1204 </span> :<span class="lineNoCov"> 0 : options-&gt;wget_bin = calloc(1, tmpint);</span> -<span class="lineNum"> 1205 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin == NULL)</span> -<span class="lineNum"> 1206 </span> : : { -<span class="lineNum"> 1207 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,&quot;Memory allocation error for wget command path.&quot;);</span> -<span class="lineNum"> 1208 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1209 </span> : : } -<span class="lineNum"> 1210 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;wget_bin, val, tmpint);</span> -<span class="lineNum"> 1211 </span> : : } -<span class="lineNum"> 1212 </span> : : /* NAT Local ? */ -<span class="lineNum"> 1213 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_LOCAL)</span> -<span class="lineNum"> 1214 </span> : : { -<span class="lineNum"> 1215 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> -<span class="lineNum"> 1216 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_local = 1;</span> -<span class="lineNum"> 1217 </span> : : else; -<span class="lineNum"> 1218 </span> : : } -<span class="lineNum"> 1219 </span> : : /* NAT rand port ? */ -<span class="lineNum"> 1220 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_RAND_PORT)</span> -<span class="lineNum"> 1221 </span> : : { -<span class="lineNum"> 1222 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> -<span class="lineNum"> 1223 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_rand_port = 1;</span> -<span class="lineNum"> 1224 </span> : : else; -<span class="lineNum"> 1225 </span> : : } -<span class="lineNum"> 1226 </span> : : /* NAT port */ -<span class="lineNum"> 1227 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4803 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NAT_PORT)</span> -<span class="lineNum"> 1228 </span> : : { -<span class="lineNum"> 1229 </span> :<span class="lineNoCov"> 0 : tmpint = strtol_wrapper(val, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 1230 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err == FKO_SUCCESS)</span> -<span class="lineNum"> 1231 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_port = tmpint;</span> -<span class="lineNum"> 1232 </span> : : else -<span class="lineNum"> 1233 </span> : : parse_error = -1; -<span class="lineNum"> 1234 </span> : : } -<span class="lineNum"> 1235 </span> : : /* VERBOSE level */ -<span class="lineNum"> 1236 </span> [<span class="branchCov" title="Branch 0 was taken 2894 times"> + </span><span class="branchCov" title="Branch 1 was taken 1909 times"> + </span>]:<span class="lineCov"> 4803 : else if (var-&gt;pos == FWKNOP_CLI_ARG_VERBOSE)</span> -<span class="lineNum"> 1237 </span> : : { -<span class="lineNum"> 1238 </span> [<span class="branchCov" title="Branch 1 was taken 1174 times"> + </span><span class="branchCov" title="Branch 2 was taken 1720 times"> + </span>]:<span class="lineCov"> 2894 : if (is_yes_str(val))</span> -<span class="lineNum"> 1239 </span> :<span class="lineCov"> 1174 : options-&gt;verbose = 1;</span> -<span class="lineNum"> 1240 </span> : : else -<span class="lineNum"> 1241 </span> : : { -<span class="lineNum"> 1242 </span> :<span class="lineCov"> 1720 : tmpint = strtol_wrapper(val, 0, LOG_LAST_VERBOSITY - 1, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 1243 </span> [<span class="branchCov" title="Branch 0 was taken 1558 times"> + </span><span class="branchCov" title="Branch 1 was taken 162 times"> + </span>]:<span class="lineCov"> 1720 : if(is_err == FKO_SUCCESS)</span> -<span class="lineNum"> 1244 </span> :<span class="lineCov"> 1558 : options-&gt;verbose = tmpint;</span> -<span class="lineNum"> 1245 </span> : : else -<span class="lineNum"> 1246 </span> : : parse_error = -1; -<span class="lineNum"> 1247 </span> : : } -<span class="lineNum"> 1248 </span> : : -<span class="lineNum"> 1249 </span> [<span class="branchCov" title="Branch 0 was taken 2732 times"> + </span><span class="branchCov" title="Branch 1 was taken 162 times"> + </span>]:<span class="lineCov"> 2894 : if (parse_error == 0)</span> -<span class="lineNum"> 1250 </span> :<span class="lineCov"> 2732 : log_set_verbosity(LOG_DEFAULT_VERBOSITY + options-&gt;verbose);</span> -<span class="lineNum"> 1251 </span> : : } -<span class="lineNum"> 1252 </span> : : /* RESOLVE_IP_HTTPS ? */ -<span class="lineNum"> 1253 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1909 times"> + </span>]:<span class="lineCov"> 1909 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS)</span> -<span class="lineNum"> 1254 </span> : : { -<span class="lineNum"> 1255 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> -<span class="lineNum"> 1256 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> -<span class="lineNum"> 1257 </span> : : else; -<span class="lineNum"> 1258 </span> : : } -<span class="lineNum"> 1259 </span> : : /* RESOLVE_IP_HTTP ? This actually results in HTTPS resolution by default -<span class="lineNum"> 1260 </span> : : * unless --resolve-http-only is also given -<span class="lineNum"> 1261 </span> : : */ -<span class="lineNum"> 1262 </span> [<span class="branchCov" title="Branch 0 was taken 1909 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1909 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_IP_HTTP)</span> -<span class="lineNum"> 1263 </span> : : { -<span class="lineNum"> 1264 </span> [<span class="branchCov" title="Branch 1 was taken 73 times"> + </span><span class="branchCov" title="Branch 2 was taken 1836 times"> + </span>]:<span class="lineCov"> 1909 : if (is_yes_str(val))</span> -<span class="lineNum"> 1265 </span> :<span class="lineCov"> 73 : options-&gt;resolve_ip_http_https = 1;</span> -<span class="lineNum"> 1266 </span> : : else; -<span class="lineNum"> 1267 </span> : : } -<span class="lineNum"> 1268 </span> : : /* RESOLVE_HTTP_ONLY ? Force HTTP instead of HTTPS IP resolution. -<span class="lineNum"> 1269 </span> : : */ -<span class="lineNum"> 1270 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (var-&gt;pos == FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY)</span> -<span class="lineNum"> 1271 </span> : : { -<span class="lineNum"> 1272 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> -<span class="lineNum"> 1273 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_http_only = 1;</span> -<span class="lineNum"> 1274 </span> : : else; -<span class="lineNum"> 1275 </span> : : } -<span class="lineNum"> 1276 </span> : : /* avoid saving .fwknop.run by default */ -<span class="lineNum"> 1277 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (var-&gt;pos == FWKNOP_CLI_ARG_NO_SAVE_ARGS)</span> -<span class="lineNum"> 1278 </span> : : { -<span class="lineNum"> 1279 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_yes_str(val))</span> -<span class="lineNum"> 1280 </span> :<span class="lineNoCov"> 0 : options-&gt;no_save_args = 1;</span> -<span class="lineNum"> 1281 </span> : : else; -<span class="lineNum"> 1282 </span> : : } -<span class="lineNum"> 1283 </span> : : /* The variable is not a configuration variable */ -<span class="lineNum"> 1284 </span> : : else -<span class="lineNum"> 1285 </span> : : { -<span class="lineNum"> 1286 </span> : : parse_error = -1; -<span class="lineNum"> 1287 </span> : : } -<span class="lineNum"> 1288 </span> : : -<span class="lineNum"> 1289 </span> :<span class="lineCov"> 108412 : return(parse_error);</span> -<span class="lineNum"> 1290 </span> : : } -<span class="lineNum"> 1291 </span> : : -<span class="lineNum"> 1292 </span> : : /** -<span class="lineNum"> 1293 </span> : : * @brief Write a cli parameter to a file handle -<span class="lineNum"> 1294 </span> : : * -<span class="lineNum"> 1295 </span> : : * This function writes into a file handle a command line parameter -<span class="lineNum"> 1296 </span> : : * -<span class="lineNum"> 1297 </span> : : * @param fhandle File handle to write the new parameter to -<span class="lineNum"> 1298 </span> : : * @param var_pos Variable position -<span class="lineNum"> 1299 </span> : : * @param options FKO command line option structure -<a name="1300"><span class="lineNum"> 1300 </span> : : */</a> -<span class="lineNum"> 1301 </span> : : static void -<span class="lineNum"> 1302 </span> :<span class="lineNoCov"> 0 : add_single_var_to_rc(FILE* fhandle, short var_pos, fko_cli_options_t *options)</span> -<span class="lineNum"> 1303 </span> : : { -<span class="lineNum"> 1304 </span> :<span class="lineNoCov"> 0 : char val[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1305 </span> : : fko_var_t *var; -<span class="lineNum"> 1306 </span> : : -<span class="lineNum"> 1307 </span> :<span class="lineNoCov"> 0 : var = lookup_var_by_position(var_pos);</span> -<span class="lineNum"> 1308 </span> : : -<span class="lineNum"> 1309 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (var == NULL)</span> -<span class="lineNum"> 1310 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1311 </span> : : -<span class="lineNum"> 1312 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (fhandle == NULL)</span> -<span class="lineNum"> 1313 </span> : : return; -<span class="lineNum"> 1314 </span> : : -<span class="lineNum"> 1315 </span> : : /* Select the argument to add and store its string value into val */ -<span class="lineNum"> 1316 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span> :<span class="lineNoCov"> 0 : switch (var-&gt;pos)</span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span><span class="branchNoExec" title="Branch 8 was not executed"> # </span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 9 was not executed"> # </span><span class="branchNoExec" title="Branch 10 was not executed"> # </span><span class="branchNoExec" title="Branch 11 was not executed"> # </span><span class="branchNoExec" title="Branch 12 was not executed"> # </span><span class="branchNoExec" title="Branch 13 was not executed"> # </span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 14 was not executed"> # </span><span class="branchNoExec" title="Branch 15 was not executed"> # </span><span class="branchNoExec" title="Branch 16 was not executed"> # </span><span class="branchNoExec" title="Branch 17 was not executed"> # </span><span class="branchNoExec" title="Branch 18 was not executed"> # </span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 19 was not executed"> # </span><span class="branchNoExec" title="Branch 20 was not executed"> # </span><span class="branchNoExec" title="Branch 21 was not executed"> # </span><span class="branchNoExec" title="Branch 22 was not executed"> # </span><span class="branchNoExec" title="Branch 23 was not executed"> # </span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 24 was not executed"> # </span><span class="branchNoExec" title="Branch 25 was not executed"> # </span><span class="branchNoExec" title="Branch 26 was not executed"> # </span><span class="branchNoExec" title="Branch 27 was not executed"> # </span><span class="branchNoExec" title="Branch 28 was not executed"> # </span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 29 was not executed"> # </span><span class="branchNoExec" title="Branch 30 was not executed"> # </span><span class="branchNoExec" title="Branch 31 was not executed"> # </span><span class="branchNoExec" title="Branch 32 was not executed"> # </span><span class="branchNoExec" title="Branch 33 was not executed"> # </span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 34 was not executed"> # </span><span class="branchNoExec" title="Branch 35 was not executed"> # </span><span class="branchNoExec" title="Branch 36 was not executed"> # </span><span class="branchNoExec" title="Branch 37 was not executed"> # </span><span class="branchNoExec" title="Branch 38 was not executed"> # </span> -<span class="lineNum"> </span> <span class="branchNoExec" title="Branch 39 was not executed"> # </span><span class="branchNoExec" title="Branch 40 was not executed"> # </span><span class="branchNoExec" title="Branch 41 was not executed"> # </span>] -<span class="lineNum"> 1317 </span> : : { -<span class="lineNum"> 1318 </span> : : case FWKNOP_CLI_ARG_DIGEST_TYPE : -<span class="lineNum"> 1319 </span> :<span class="lineNoCov"> 0 : digest_inttostr(options-&gt;digest_type, val, sizeof(val));</span> -<span class="lineNum"> 1320 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1321 </span> : : case FWKNOP_CLI_ARG_SPA_SERVER_PROTO : -<span class="lineNum"> 1322 </span> :<span class="lineNoCov"> 0 : proto_inttostr(options-&gt;spa_proto, val, sizeof(val));</span> -<span class="lineNum"> 1323 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1324 </span> : : case FWKNOP_CLI_ARG_SPA_SERVER_PORT : -<span class="lineNum"> 1325 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;spa_dst_port);</span> -<span class="lineNum"> 1326 </span> : : break; -<span class="lineNum"> 1327 </span> : : case FWKNOP_CLI_ARG_SPA_SOURCE_PORT : -<span class="lineNum"> 1328 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;spa_src_port);</span> -<span class="lineNum"> 1329 </span> : : break; -<span class="lineNum"> 1330 </span> : : case FWKNOP_CLI_ARG_FW_TIMEOUT : -<span class="lineNum"> 1331 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;fw_timeout);</span> -<span class="lineNum"> 1332 </span> : : break; -<span class="lineNum"> 1333 </span> : : case FWKNOP_CLI_ARG_ALLOW_IP : -<span class="lineNum"> 1334 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;allow_ip_str, sizeof(val));</span> -<span class="lineNum"> 1335 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1336 </span> : : case FWKNOP_CLI_ARG_TIME_OFFSET : -<span class="lineNum"> 1337 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;time_offset_minus != 0)</span> -<span class="lineNum"> 1338 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;-%d&quot;, options-&gt;time_offset_minus);</span> -<span class="lineNum"> 1339 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (options-&gt;time_offset_plus != 0)</span> -<span class="lineNum"> 1340 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;time_offset_plus);</span> -<span class="lineNum"> 1341 </span> : : else; -<span class="lineNum"> 1342 </span> : : break; -<span class="lineNum"> 1343 </span> : : case FWKNOP_CLI_ARG_ENCRYPTION_MODE : -<span class="lineNum"> 1344 </span> :<span class="lineNoCov"> 0 : enc_mode_inttostr(options-&gt;encryption_mode, val, sizeof(val));</span> -<span class="lineNum"> 1345 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1346 </span> : : case FWKNOP_CLI_ARG_USE_GPG : -<span class="lineNum"> 1347 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_gpg, val, sizeof(val));</span> -<span class="lineNum"> 1348 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1349 </span> : : case FWKNOP_CLI_ARG_USE_GPG_AGENT : -<span class="lineNum"> 1350 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_gpg_agent, val, sizeof(val));</span> -<span class="lineNum"> 1351 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1352 </span> : : case FWKNOP_CLI_ARG_GPG_RECIPIENT : -<span class="lineNum"> 1353 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_recipient_key, sizeof(val));</span> -<span class="lineNum"> 1354 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1355 </span> : : case FWKNOP_CLI_ARG_GPG_SIGNER : -<span class="lineNum"> 1356 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_signer_key, sizeof(val));</span> -<span class="lineNum"> 1357 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1358 </span> : : case FWKNOP_CLI_ARG_GPG_HOMEDIR : -<span class="lineNum"> 1359 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_home_dir, sizeof(val));</span> -<span class="lineNum"> 1360 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1361 </span> : : case FWKNOP_CLI_ARG_GPG_EXE_PATH : -<span class="lineNum"> 1362 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;gpg_exe, sizeof(val));</span> -<span class="lineNum"> 1363 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1364 </span> : : case FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW : -<span class="lineNum"> 1365 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;gpg_no_signing_pw, val, sizeof(val));</span> -<span class="lineNum"> 1366 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1367 </span> : : case FWKNOP_CLI_ARG_SPOOF_USER : -<span class="lineNum"> 1368 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;spoof_user, sizeof(val));</span> -<span class="lineNum"> 1369 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1370 </span> : : case FWKNOP_CLI_ARG_SPOOF_SOURCE_IP : -<span class="lineNum"> 1371 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;spoof_ip_src_str, sizeof(val));</span> -<span class="lineNum"> 1372 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1373 </span> : : case FWKNOP_CLI_ARG_ACCESS : -<span class="lineNum"> 1374 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;access_str, sizeof(val));</span> -<span class="lineNum"> 1375 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1376 </span> : : case FWKNOP_CLI_ARG_SPA_SERVER : -<span class="lineNum"> 1377 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;spa_server_str, sizeof(val));</span> -<span class="lineNum"> 1378 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1379 </span> : : case FWKNOP_CLI_ARG_RAND_PORT : -<span class="lineNum"> 1380 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;rand_port, val, sizeof(val));</span> -<span class="lineNum"> 1381 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1382 </span> : : case FWKNOP_CLI_ARG_KEY_FILE : -<span class="lineNum"> 1383 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;get_key_file, sizeof(val));</span> -<span class="lineNum"> 1384 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1385 </span> : : case FWKNOP_CLI_ARG_HMAC_KEY_FILE : -<span class="lineNum"> 1386 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;get_hmac_key_file, sizeof(val));</span> -<span class="lineNum"> 1387 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1388 </span> : : case FWKNOP_CLI_ARG_KEY_RIJNDAEL: -<span class="lineNum"> 1389 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;key, sizeof(val));</span> -<span class="lineNum"> 1390 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1391 </span> : : case FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64: -<span class="lineNum"> 1392 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;key_base64, sizeof(val));</span> -<span class="lineNum"> 1393 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1394 </span> : : case FWKNOP_CLI_ARG_KEY_HMAC_BASE64: -<span class="lineNum"> 1395 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;hmac_key_base64, sizeof(val));</span> -<span class="lineNum"> 1396 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1397 </span> : : case FWKNOP_CLI_ARG_KEY_HMAC: -<span class="lineNum"> 1398 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;hmac_key, sizeof(val));</span> -<span class="lineNum"> 1399 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1400 </span> : : case FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE : -<span class="lineNum"> 1401 </span> :<span class="lineNoCov"> 0 : hmac_digest_inttostr(options-&gt;hmac_type, val, sizeof(val));</span> -<span class="lineNum"> 1402 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1403 </span> : : case FWKNOP_CLI_ARG_USE_HMAC : -<span class="lineNum"> 1404 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_hmac, val, sizeof(val));</span> -<span class="lineNum"> 1405 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1406 </span> : : case FWKNOP_CLI_ARG_USE_WGET_USER_AGENT : -<span class="lineNum"> 1407 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;use_wget_user_agent, val, sizeof(val));</span> -<span class="lineNum"> 1408 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1409 </span> : : case FWKNOP_CLI_ARG_NAT_ACCESS : -<span class="lineNum"> 1410 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;nat_access_str, sizeof(val));</span> -<span class="lineNum"> 1411 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1412 </span> : : case FWKNOP_CLI_ARG_HTTP_USER_AGENT : -<span class="lineNum"> 1413 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;http_user_agent, sizeof(val));</span> -<span class="lineNum"> 1414 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1415 </span> : : case FWKNOP_CLI_ARG_RESOLVE_URL : -<span class="lineNum"> 1416 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;resolve_url != NULL)</span> -<span class="lineNum"> 1417 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;resolve_url, sizeof(val));</span> -<span class="lineNum"> 1418 </span> : : else; -<span class="lineNum"> 1419 </span> : : break; -<span class="lineNum"> 1420 </span> : : case FWKNOP_CLI_ARG_NAT_LOCAL : -<span class="lineNum"> 1421 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;nat_local, val, sizeof(val));</span> -<span class="lineNum"> 1422 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1423 </span> : : case FWKNOP_CLI_ARG_NAT_RAND_PORT : -<span class="lineNum"> 1424 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;nat_rand_port, val, sizeof(val));</span> -<span class="lineNum"> 1425 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1426 </span> : : case FWKNOP_CLI_ARG_NAT_PORT : -<span class="lineNum"> 1427 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;nat_port);</span> -<span class="lineNum"> 1428 </span> : : break; -<span class="lineNum"> 1429 </span> : : case FWKNOP_CLI_ARG_VERBOSE: -<span class="lineNum"> 1430 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;verbose == 0) || (options-&gt;verbose == 1))</span> -<span class="lineNum"> 1431 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;verbose, val, sizeof(val));</span> -<span class="lineNum"> 1432 </span> : : else -<span class="lineNum"> 1433 </span> :<span class="lineNoCov"> 0 : snprintf(val, sizeof(val)-1, &quot;%d&quot;, options-&gt;verbose);</span> -<span class="lineNum"> 1434 </span> : : break; -<span class="lineNum"> 1435 </span> : : case FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS: -<span class="lineNum"> 1436 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;resolve_ip_http_https, val, sizeof(val));</span> -<span class="lineNum"> 1437 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1438 </span> : : case FWKNOP_CLI_ARG_RESOLVE_IP_HTTP: -<span class="lineNum"> 1439 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;resolve_ip_http_https, val, sizeof(val));</span> -<span class="lineNum"> 1440 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1441 </span> : : case FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY: -<span class="lineNum"> 1442 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;resolve_http_only, val, sizeof(val));</span> -<span class="lineNum"> 1443 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1444 </span> : : case FWKNOP_CLI_ARG_WGET_CMD : -<span class="lineNum"> 1445 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;wget_bin != NULL)</span> -<span class="lineNum"> 1446 </span> :<span class="lineNoCov"> 0 : strlcpy(val, options-&gt;wget_bin, sizeof(val));</span> -<span class="lineNum"> 1447 </span> : : break; -<span class="lineNum"> 1448 </span> : : case FWKNOP_CLI_ARG_NO_SAVE_ARGS : -<span class="lineNum"> 1449 </span> :<span class="lineNoCov"> 0 : bool_to_yesno(options-&gt;no_save_args, val, sizeof(val));</span> -<span class="lineNum"> 1450 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1451 </span> : : default: -<span class="lineNum"> 1452 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Warning from add_single_var_to_rc() : Bad variable position %u&quot;, var-&gt;pos);</span> -<span class="lineNum"> 1453 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1454 </span> : : } -<span class="lineNum"> 1455 </span> : : -<span class="lineNum"> 1456 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;add_single_var_to_rc() : Updating param (%u) %s to %s&quot;,</span> -<span class="lineNum"> 1457 </span> :<span class="lineNoCov"> 0 : var-&gt;pos, var-&gt;name, val);</span> -<span class="lineNum"> 1458 </span> : : -<span class="lineNum"> 1459 </span> :<span class="lineNoCov"> 0 : fprintf(fhandle, RC_PARAM_TEMPLATE, var-&gt;name, val);</span> -<span class="lineNum"> 1460 </span> : : } -<span class="lineNum"> 1461 </span> : : -<span class="lineNum"> 1462 </span> : : /** -<span class="lineNum"> 1463 </span> : : * @brief Add configuration variables in a file -<span class="lineNum"> 1464 </span> : : * -<span class="lineNum"> 1465 </span> : : * The parameters are selected by a bitmask and extracted from the -<span class="lineNum"> 1466 </span> : : * fko_cli_options_t structure. -<span class="lineNum"> 1467 </span> : : * -<span class="lineNum"> 1468 </span> : : * @param rc File handle on the file to write to -<span class="lineNum"> 1469 </span> : : * @param options fko_cli_options_t structure containing the values of the parameters -<span class="lineNum"> 1470 </span> : : * @param bitmask Bitmask used to select the parameters to add -<a name="1471"><span class="lineNum"> 1471 </span> : : */</a> -<span class="lineNum"> 1472 </span> : : static void -<span class="lineNum"> 1473 </span> :<span class="lineNoCov"> 0 : add_multiple_vars_to_rc(FILE* rc, fko_cli_options_t *options, fko_var_bitmask_t *bitmask)</span> -<span class="lineNum"> 1474 </span> : : { -<span class="lineNum"> 1475 </span> :<span class="lineNoCov"> 0 : short ndx = 0; /* Index of a configuration variable in fko_var_array table */</span> -<span class="lineNum"> 1476 </span> : : short position; /* Position of the configuration variable */ -<span class="lineNum"> 1477 </span> : : -<span class="lineNum"> 1478 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (ndx=0 ; ndx&lt;ARRAY_SIZE(fko_var_array) ; ndx++)</span> -<span class="lineNum"> 1479 </span> : : { -<span class="lineNum"> 1480 </span> :<span class="lineNoCov"> 0 : position = fko_var_array[ndx].pos;</span> -<span class="lineNum"> 1481 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bitmask_has_var(position, bitmask))</span> -<span class="lineNum"> 1482 </span> :<span class="lineNoCov"> 0 : add_single_var_to_rc(rc, position, options);</span> -<span class="lineNum"> 1483 </span> : : } -<span class="lineNum"> 1484 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 1485 </span> : : -<span class="lineNum"> 1486 </span> : : /** -<span class="lineNum"> 1487 </span> : : * @brief Process the fwknoprc file and lookup a section to extract its settings. -<span class="lineNum"> 1488 </span> : : * -<span class="lineNum"> 1489 </span> : : * This function aims at loading the settings for a specific section in -<span class="lineNum"> 1490 </span> : : * a fwknoprc file. -<span class="lineNum"> 1491 </span> : : * -<span class="lineNum"> 1492 </span> : : * @param section_name Name of the section to lookup. -<span class="lineNum"> 1493 </span> : : * @param options Fwknop option structure where settings have to -<span class="lineNum"> 1494 </span> : : * be stored. -<span class="lineNum"> 1495 </span> : : * -<span class="lineNum"> 1496 </span> : : * @return 0 if the section has been found and processed successfully -<span class="lineNum"> 1497 </span> : : * a negative value if one or more errors occured -<a name="1498"><span class="lineNum"> 1498 </span> : : */</a> -<span class="lineNum"> 1499 </span> : : static int -<span class="lineNum"> 1500 </span> :<span class="lineCov"> 2890 : process_rc_section(char *section_name, fko_cli_options_t *options)</span> -<span class="lineNum"> 1501 </span> : : { -<span class="lineNum"> 1502 </span> : : FILE *rc; -<span class="lineNum"> 1503 </span> :<span class="lineCov"> 2890 : int line_num = 0, do_exit = 0;</span> -<span class="lineNum"> 1504 </span> :<span class="lineCov"> 2890 : char line[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1505 </span> :<span class="lineCov"> 2890 : char rcfile[MAX_PATH_LEN] = {0};</span> -<span class="lineNum"> 1506 </span> :<span class="lineCov"> 2890 : char curr_stanza[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1507 </span> : : rc_file_param_t param; -<span class="lineNum"> 1508 </span> :<span class="lineCov"> 2890 : int rc_section_found = 0;</span> -<span class="lineNum"> 1509 </span> : : -<span class="lineNum"> 1510 </span> :<span class="lineCov"> 2890 : set_rc_file(rcfile, options);</span> -<span class="lineNum"> 1511 </span> : : -<span class="lineNum"> 1512 </span> : : /* Open the rc file for reading, if it does not exist, then create -<span class="lineNum"> 1513 </span> : : * an initial .fwknoprc file with defaults and go on. -<span class="lineNum"> 1514 </span> : : */ -<span class="lineNum"> 1515 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if ((rc = fopen(rcfile, &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 1516 </span> : : { -<span class="lineNum"> 1517 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == ENOENT)</span> -<span class="lineNum"> 1518 </span> : : { -<span class="lineNum"> 1519 </span> :<span class="lineNoCov"> 0 : if(create_fwknoprc(rcfile) != 0)</span> -<span class="lineNum"> 1520 </span> : : return -1; -<span class="lineNum"> 1521 </span> : : } -<span class="lineNum"> 1522 </span> : : else -<span class="lineNum"> 1523 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to open rc file: %s: %s&quot;,</span> -<span class="lineNum"> 1524 </span> : : rcfile, strerror(errno)); -<span class="lineNum"> 1525 </span> : : -<span class="lineNum"> 1526 </span> : : return -1; -<span class="lineNum"> 1527 </span> : : } -<span class="lineNum"> 1528 </span> : : -<span class="lineNum"> 1529 </span> :<span class="lineCov"> 2890 : log_msg(LOG_VERBOSITY_DEBUG, &quot;process_rc_section() : Parsing section '%s' ...&quot;,</span> -<span class="lineNum"> 1530 </span> : : section_name); -<span class="lineNum"> 1531 </span> : : -<span class="lineNum"> 1532 </span> [<span class="branchCov" title="Branch 0 was taken 193333 times"> + </span><span class="branchCov" title="Branch 1 was taken 2122 times"> + </span>]:<span class="lineCov"> 198345 : while ((fgets(line, MAX_LINE_LEN, rc)) != NULL)</span> -<span class="lineNum"> 1533 </span> : : { -<span class="lineNum"> 1534 </span> :<span class="lineCov"> 193333 : line_num++;</span> -<span class="lineNum"> 1535 </span> :<span class="lineCov"> 193333 : line[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 1536 </span> : : -<span class="lineNum"> 1537 </span> : : /* Get past comments and empty lines (note: we only look at the -<span class="lineNum"> 1538 </span> : : * first character. -<span class="lineNum"> 1539 </span> : : */ -<span class="lineNum"> 1540 </span>[<span class="branchCov" title="Branch 0 was taken 154338 times"> + </span><span class="branchCov" title="Branch 1 was taken 38995 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 154338 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 193333 : if(IS_EMPTY_LINE(line[0]))</span> -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 153359 times"> + </span><span class="branchCov" title="Branch 5 was taken 979 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 985 times"> + </span><span class="branchCov" title="Branch 7 was taken 152374 times"> + </span>] -<span class="lineNum"> 1541 </span> :<span class="lineCov"> 40959 : continue;</span> -<span class="lineNum"> 1542 </span> : : -<span class="lineNum"> 1543 </span> : : /* Check which section we are working on */ -<span class="lineNum"> 1544 </span> [<span class="branchCov" title="Branch 1 was taken 8786 times"> + </span><span class="branchCov" title="Branch 2 was taken 143588 times"> + </span>]:<span class="lineCov"> 152374 : if (is_rc_section(line, strlen(line), curr_stanza, sizeof(curr_stanza)))</span> -<span class="lineNum"> 1545 </span> : : { -<span class="lineNum"> 1546 </span> :<span class="lineCov"> 8786 : rc_section_found = (strcasecmp(curr_stanza, section_name) == 0) ? 1 : 0;</span> -<span class="lineNum"> 1547 </span> : : -<span class="lineNum"> 1548 </span> [<span class="branchCov" title="Branch 0 was taken 3063 times"> + </span><span class="branchCov" title="Branch 1 was taken 5723 times"> + </span>]:<span class="lineCov"> 8786 : if (strcasecmp(curr_stanza, options-&gt;use_rc_stanza) == 0)</span> -<span class="lineNum"> 1549 </span> :<span class="lineCov"> 3063 : options-&gt;got_named_stanza = 1;</span> -<span class="lineNum"> 1550 </span> : : -<span class="lineNum"> 1551 </span> :<span class="lineCov"> 8786 : continue;</span> -<span class="lineNum"> 1552 </span> : : } -<span class="lineNum"> 1553 </span> : : -<span class="lineNum"> 1554 </span> : : /* We are not in the good section */ -<span class="lineNum"> 1555 </span> [<span class="branchCov" title="Branch 0 was taken 34408 times"> + </span><span class="branchCov" title="Branch 1 was taken 109180 times"> + </span>]:<span class="lineCov"> 143588 : else if (rc_section_found == 0)</span> -<span class="lineNum"> 1556 </span> :<span class="lineCov"> 34408 : continue;</span> -<span class="lineNum"> 1557 </span> : : -<span class="lineNum"> 1558 </span> : : /* We have not found a valid parameter */ -<span class="lineNum"> 1559 </span> [<span class="branchCov" title="Branch 1 was taken 108412 times"> + </span><span class="branchCov" title="Branch 2 was taken 768 times"> + </span>]:<span class="lineCov"> 109180 : else if (is_rc_param(line, &amp;param) == 0)</span> -<span class="lineNum"> 1560 </span> : : { -<span class="lineNum"> 1561 </span> : : do_exit = 1; /* We don't allow improperly formatted lines */ -<span class="lineNum"> 1562 </span> : : break; -<span class="lineNum"> 1563 </span> : : } -<span class="lineNum"> 1564 </span> : : -<span class="lineNum"> 1565 </span> : : /* We have a valid parameter */ -<span class="lineNum"> 1566 </span> : : else -<span class="lineNum"> 1567 </span> : : { -<span class="lineNum"> 1568 </span> [<span class="branchCov" title="Branch 1 was taken 65140 times"> + </span><span class="branchCov" title="Branch 2 was taken 43272 times"> + </span>]:<span class="lineCov"> 108412 : if(parse_rc_param(options, param.name, param.val) &lt; 0)</span> -<span class="lineNum"> 1569 </span> : : { -<span class="lineNum"> 1570 </span> :<span class="lineCov"> 65140 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1571 </span> : : &quot;Parameter error in %s, line %i: var=%s, val=%s&quot;, -<span class="lineNum"> 1572 </span> : : rcfile, line_num, param.name, param.val); -<span class="lineNum"> 1573 </span> :<span class="lineCov"> 192565 : do_exit = 1;</span> -<span class="lineNum"> 1574 </span> : : } -<span class="lineNum"> 1575 </span> : : } -<span class="lineNum"> 1576 </span> : : } -<span class="lineNum"> 1577 </span> : : -<span class="lineNum"> 1578 </span> :<span class="lineCov"> 2890 : fclose(rc);</span> -<span class="lineNum"> 1579 </span> : : -<span class="lineNum"> 1580 </span> [<span class="branchCov" title="Branch 0 was taken 1476 times"> + </span><span class="branchCov" title="Branch 1 was taken 1414 times"> + </span>]:<span class="lineCov"> 2890 : if (do_exit)</span> -<span class="lineNum"> 1581 </span> :<span class="lineCov"> 1476 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1582 </span> : : -<span class="lineNum"> 1583 </span> : : return 0; -<span class="lineNum"> 1584 </span> : : } -<span class="lineNum"> 1585 </span> : : -<span class="lineNum"> 1586 </span> : : /** -<span class="lineNum"> 1587 </span> : : * @brief Update the user rc file with the new parameters for a selected stanza. -<span class="lineNum"> 1588 </span> : : * -<span class="lineNum"> 1589 </span> : : * This function writes the new configuration in a temporary file and renames it -<span class="lineNum"> 1590 </span> : : * as the new rc file afterwards. All of the previous parameters for the -<span class="lineNum"> 1591 </span> : : * selected stanza are removed and replaced by the arguments from the command -<span class="lineNum"> 1592 </span> : : * line. -<span class="lineNum"> 1593 </span> : : * -<span class="lineNum"> 1594 </span> : : * @param options structure containing all of the fko settings -<span class="lineNum"> 1595 </span> : : * @param args_bitmask command line argument bitmask -<a name="1596"><span class="lineNum"> 1596 </span> : : */</a> -<span class="lineNum"> 1597 </span> : : static void -<span class="lineNum"> 1598 </span> :<span class="lineNoCov"> 0 : update_rc(fko_cli_options_t *options, fko_var_bitmask_t *bitmask)</span> -<span class="lineNum"> 1599 </span> : : { -<span class="lineNum"> 1600 </span> : : FILE *rc; -<span class="lineNum"> 1601 </span> : : FILE *rc_update; -<span class="lineNum"> 1602 </span> :<span class="lineNoCov"> 0 : int rcfile_fd = -1;</span> -<span class="lineNum"> 1603 </span> :<span class="lineNoCov"> 0 : int stanza_found = 0;</span> -<span class="lineNum"> 1604 </span> :<span class="lineNoCov"> 0 : int stanza_updated = 0;</span> -<span class="lineNum"> 1605 </span> :<span class="lineNoCov"> 0 : char line[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1606 </span> :<span class="lineNoCov"> 0 : char rcfile[MAX_PATH_LEN] = {0};</span> -<span class="lineNum"> 1607 </span> :<span class="lineNoCov"> 0 : char rcfile_update[MAX_PATH_LEN] = {0};</span> -<span class="lineNum"> 1608 </span> :<span class="lineNoCov"> 0 : char curr_stanza[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1609 </span> : : rc_file_param_t param; /* Structure to contain a conf. variable name with its value */ -<span class="lineNum"> 1610 </span> : : fko_var_t *var; -<span class="lineNum"> 1611 </span> : : -<span class="lineNum"> 1612 </span> :<span class="lineNoCov"> 0 : set_rc_file(rcfile, options);</span> -<span class="lineNum"> 1613 </span> : : -<span class="lineNum"> 1614 </span> :<span class="lineNoCov"> 0 : strlcpy(rcfile_update, rcfile, sizeof(rcfile_update));</span> -<span class="lineNum"> 1615 </span> :<span class="lineNoCov"> 0 : strlcat(rcfile_update, &quot;.updated&quot;, sizeof(rcfile_update));</span> -<span class="lineNum"> 1616 </span> : : -<span class="lineNum"> 1617 </span> : : /* Create a new temporary rc file */ -<span class="lineNum"> 1618 </span> :<span class="lineNoCov"> 0 : rcfile_fd = open(rcfile_update, FWKNOPRC_OFLAGS, FWKNOPRC_MODE);</span> -<span class="lineNum"> 1619 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (rcfile_fd == -1)</span> -<span class="lineNum"> 1620 </span> : : { -<span class="lineNum"> 1621 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1622 </span> : : &quot;update_rc() : Unable to create temporary rc file: %s: %s&quot;, -<span class="lineNum"> 1623 </span> :<span class="lineNoCov"> 0 : rcfile_update, strerror(errno));</span> -<span class="lineNum"> 1624 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1625 </span> : : } -<span class="lineNum"> 1626 </span> :<span class="lineNoCov"> 0 : close(rcfile_fd);</span> -<span class="lineNum"> 1627 </span> : : -<span class="lineNum"> 1628 </span> : : /* Open the current rcfile and a temporary one respectively in read and -<span class="lineNum"> 1629 </span> : : * write mode */ -<span class="lineNum"> 1630 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc = fopen(rcfile, &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 1631 </span> : : { -<span class="lineNum"> 1632 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1633 </span> : : &quot;update_rc() : Unable to open rc file: %s: %s&quot;, -<span class="lineNum"> 1634 </span> :<span class="lineNoCov"> 0 : rcfile, strerror(errno));</span> -<span class="lineNum"> 1635 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1636 </span> : : } -<span class="lineNum"> 1637 </span> : : -<span class="lineNum"> 1638 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((rc_update = fopen(rcfile_update, &quot;w&quot;)) == NULL)</span> -<span class="lineNum"> 1639 </span> : : { -<span class="lineNum"> 1640 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1641 </span> : : &quot;update_rc() : Unable to open rc file: %s: %s&quot;, -<span class="lineNum"> 1642 </span> :<span class="lineNoCov"> 0 : rcfile_update, strerror(errno));</span> -<span class="lineNum"> 1643 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> -<span class="lineNum"> 1644 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1645 </span> : : } -<span class="lineNum"> 1646 </span> : : -<span class="lineNum"> 1647 </span> : : /* Go through the file line by line */ -<span class="lineNum"> 1648 </span> : : stanza_found = 0; -<span class="lineNum"> 1649 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ((fgets(line, MAX_LINE_LEN, rc)) != NULL)</span> -<span class="lineNum"> 1650 </span> : : { -<span class="lineNum"> 1651 </span> :<span class="lineNoCov"> 0 : line[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 1652 </span> : : -<span class="lineNum"> 1653 </span> : : /* Get past comments and empty lines (note: we only look at the -<span class="lineNum"> 1654 </span> : : * first character. -<span class="lineNum"> 1655 </span> : : */ -<span class="lineNum"> 1656 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_EMPTY_LINE(line[0]))</span> -<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] -<span class="lineNum"> 1657 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 1658 </span> : : -<span class="lineNum"> 1659 </span> : : /* If we find a section... */ -<span class="lineNum"> 1660 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_rc_section(line, strlen(line), curr_stanza, sizeof(curr_stanza)) == 1)</span> -<span class="lineNum"> 1661 </span> : : { -<span class="lineNum"> 1662 </span> : : /* and we have already parsed the section we wanted to save, we -<span class="lineNum"> 1663 </span> : : * can update our parameters */ -<span class="lineNum"> 1664 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (stanza_found)</span> -<span class="lineNum"> 1665 </span> : : { -<span class="lineNum"> 1666 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;update_rc() : Updating %s stanza&quot;, options-&gt;use_rc_stanza);</span> -<span class="lineNum"> 1667 </span> :<span class="lineNoCov"> 0 : add_multiple_vars_to_rc(rc_update, options, bitmask);</span> -<span class="lineNum"> 1668 </span> : : fprintf(rc_update, &quot;\n&quot;); -<span class="lineNum"> 1669 </span> :<span class="lineNoCov"> 0 : stanza_found = 0;</span> -<span class="lineNum"> 1670 </span> :<span class="lineNoCov"> 0 : stanza_updated = 1;</span> -<span class="lineNum"> 1671 </span> : : } -<span class="lineNum"> 1672 </span> : : -<span class="lineNum"> 1673 </span> : : /* and this is the one we are looking for, we set the stanza -<span class="lineNum"> 1674 </span> : : * as found */ -<span class="lineNum"> 1675 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (strncasecmp(curr_stanza, options-&gt;use_rc_stanza, MAX_LINE_LEN) == 0)</span> -<span class="lineNum"> 1676 </span> : : stanza_found = 1; -<span class="lineNum"> 1677 </span> : : -<span class="lineNum"> 1678 </span> : : /* otherwise we disable the stanza */ -<span class="lineNum"> 1679 </span> : : else -<span class="lineNum"> 1680 </span> :<span class="lineNoCov"> 0 : stanza_found = 0;</span> -<span class="lineNum"> 1681 </span> : : } -<span class="lineNum"> 1682 </span> : : -<span class="lineNum"> 1683 </span> : : /* If we are processing a parameter for our stanza */ -<span class="lineNum"> 1684 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (stanza_found)</span> -<span class="lineNum"> 1685 </span> : : { -<span class="lineNum"> 1686 </span> : : /* and the user has specified a force option, there is no need to -<span class="lineNum"> 1687 </span> : : * check for critical variables */ -<span class="lineNum"> 1688 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;force_save_rc_stanza)</span> -<span class="lineNum"> 1689 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 1690 </span> : : -<span class="lineNum"> 1691 </span> : : /* ask the user what to do with the critical var found in the -<span class="lineNum"> 1692 </span> : : * rcfile */ -<span class="lineNum"> 1693 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (is_rc_param(line, &amp;param))</span> -<span class="lineNum"> 1694 </span> : : { -<span class="lineNum"> 1695 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( ((var=lookup_var_by_name(param.name)) != NULL)</span> -<span class="lineNum"> 1696 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; var_is_critical(var-&gt;pos) )</span> -<span class="lineNum"> 1697 </span> : : { -<span class="lineNum"> 1698 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ask_overwrite_var(var-&gt;name, curr_stanza))</span> -<span class="lineNum"> 1699 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 1700 </span> : : else -<span class="lineNum"> 1701 </span> :<span class="lineNoCov"> 0 : remove_var_from_bitmask(var-&gt;pos, bitmask);</span> -<span class="lineNum"> 1702 </span> : : } -<span class="lineNum"> 1703 </span> : : else -<span class="lineNum"> 1704 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 1705 </span> : : } -<span class="lineNum"> 1706 </span> : : else -<span class="lineNum"> 1707 </span> : : { -<span class="lineNum"> 1708 </span> : : /* is_rc_param() returns false only when there is an -<span class="lineNum"> 1709 </span> : : * improperly formatted line - bail -<span class="lineNum"> 1710 </span> : : */ -<span class="lineNum"> 1711 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> -<span class="lineNum"> 1712 </span> :<span class="lineNoCov"> 0 : fclose(rc_update);</span> -<span class="lineNum"> 1713 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1714 </span> : : } -<span class="lineNum"> 1715 </span> : : } -<span class="lineNum"> 1716 </span> : : -<span class="lineNum"> 1717 </span> : : /* We're not processing any important variables from our stanza and no new -<span class="lineNum"> 1718 </span> : : * stanza */ -<span class="lineNum"> 1719 </span> : : else; -<span class="lineNum"> 1720 </span> : : -<span class="lineNum"> 1721 </span> : : /* Add the line to the new rcfile */ -<span class="lineNum"> 1722 </span> : : fprintf(rc_update, &quot;%s&quot;, line); -<span class="lineNum"> 1723 </span> : : } -<span class="lineNum"> 1724 </span> : : -<span class="lineNum"> 1725 </span> : : /* The configuration has not been updated yet */ -<span class="lineNum"> 1726 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (stanza_updated == 0)</span> -<span class="lineNum"> 1727 </span> : : { -<span class="lineNum"> 1728 </span> : : /* but the stanza has been found, We update it now. */ -<span class="lineNum"> 1729 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (stanza_found == 1)</span> -<span class="lineNum"> 1730 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;update_rc() : Updating %s stanza&quot;,</span> -<span class="lineNum"> 1731 </span> :<span class="lineNoCov"> 0 : options-&gt;use_rc_stanza);</span> -<span class="lineNum"> 1732 </span> : : -<span class="lineNum"> 1733 </span> : : /* otherwise we append the new settings to the file */ -<span class="lineNum"> 1734 </span> : : else -<span class="lineNum"> 1735 </span> : : { -<span class="lineNum"> 1736 </span> : : fprintf(rc_update, &quot;\n&quot;); -<span class="lineNum"> 1737 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;update_rc() : Inserting new %s stanza&quot;,</span> -<span class="lineNum"> 1738 </span> :<span class="lineNoCov"> 0 : options-&gt;use_rc_stanza);</span> -<span class="lineNum"> 1739 </span> :<span class="lineNoCov"> 0 : fprintf(rc_update, RC_SECTION_TEMPLATE, options-&gt;use_rc_stanza);</span> -<span class="lineNum"> 1740 </span> : : } -<span class="lineNum"> 1741 </span> : : -<span class="lineNum"> 1742 </span> :<span class="lineNoCov"> 0 : add_multiple_vars_to_rc(rc_update, options, bitmask);</span> -<span class="lineNum"> 1743 </span> : : } -<span class="lineNum"> 1744 </span> : : -<span class="lineNum"> 1745 </span> : : /* otherwise we have already done everything. Nothing to do. */ -<span class="lineNum"> 1746 </span> : : else; -<span class="lineNum"> 1747 </span> : : -<span class="lineNum"> 1748 </span> : : /* Close file handles */ -<span class="lineNum"> 1749 </span> :<span class="lineNoCov"> 0 : fclose(rc);</span> -<span class="lineNum"> 1750 </span> :<span class="lineNoCov"> 0 : fclose(rc_update);</span> -<span class="lineNum"> 1751 </span> : : -<span class="lineNum"> 1752 </span> : : /* Renamed the temporary file as the new rc file */ -<span class="lineNum"> 1753 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (remove(rcfile) != 0)</span> -<span class="lineNum"> 1754 </span> : : { -<span class="lineNum"> 1755 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1756 </span> : : &quot;update_rc() : Unable to remove %s to %s : %s&quot;, -<span class="lineNum"> 1757 </span> :<span class="lineNoCov"> 0 : rcfile_update, rcfile, strerror(errno));</span> -<span class="lineNum"> 1758 </span> : : } -<span class="lineNum"> 1759 </span> : : -<span class="lineNum"> 1760 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (rename(rcfile_update, rcfile) != 0)</span> -<span class="lineNum"> 1761 </span> : : { -<span class="lineNum"> 1762 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1763 </span> : : &quot;update_rc() : Unable to rename %s to %s&quot;, -<span class="lineNum"> 1764 </span> : : rcfile_update, rcfile); -<span class="lineNum"> 1765 </span> : : } -<span class="lineNum"> 1766 </span> : : } -<span class="lineNum"> 1767 </span> : : -<span class="lineNum"> 1768 </span> : : /* Sanity and bounds checks for the various options. -<a name="1769"><span class="lineNum"> 1769 </span> : : */</a> -<span class="lineNum"> 1770 </span> : : static void -<span class="lineNum"> 1771 </span> :<span class="lineCov"> 609 : validate_options(fko_cli_options_t *options)</span> -<span class="lineNum"> 1772 </span> : : { -<span class="lineNum"> 1773 </span> : : -<span class="lineNum"> 1774 </span> [<span class="branchCov" title="Branch 0 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 609 : if ( (options-&gt;use_rc_stanza[0] != 0x0)</span> -<span class="lineNum"> 1775 </span> : : &amp;&amp; (options-&gt;got_named_stanza == 0) -<span class="lineNum"> 1776 </span> [<span class="branchCov" title="Branch 0 was taken 39 times"> + </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>]:<span class="lineCov"> 609 : &amp;&amp; (options-&gt;save_rc_stanza == 0) )</span> -<span class="lineNum"> 1777 </span> : : { -<span class="lineNum"> 1778 </span> :<span class="lineCov"> 39 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1779 </span> : : &quot;Named configuration stanza: [%s] was not found.&quot;, -<span class="lineNum"> 1780 </span> :<span class="lineCov"> 39 : options-&gt;use_rc_stanza);</span> -<span class="lineNum"> 1781 </span> : : -<span class="lineNum"> 1782 </span> :<span class="lineCov"> 39 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1783 </span> : : } -<span class="lineNum"> 1784 </span> : : -<span class="lineNum"> 1785 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 570 : if ( (options-&gt;save_rc_stanza == 1) &amp;&amp; (options-&gt;use_rc_stanza[0] == 0) )</span> -<span class="lineNum"> 1786 </span> : : { -<span class="lineNum"> 1787 </span> : : /* Set the stanza name to the -D arg value -<span class="lineNum"> 1788 </span> : : */ -<span class="lineNum"> 1789 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_server_str[0] == 0x0)</span> -<span class="lineNum"> 1790 </span> : : { -<span class="lineNum"> 1791 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1792 </span> : : &quot;Must use --destination unless --test mode is used&quot;); -<span class="lineNum"> 1793 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1794 </span> : : } -<span class="lineNum"> 1795 </span> : : -<span class="lineNum"> 1796 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;use_rc_stanza, options-&gt;spa_server_str, sizeof(options-&gt;use_rc_stanza));</span> -<span class="lineNum"> 1797 </span> : : } -<span class="lineNum"> 1798 </span> : : -<span class="lineNum"> 1799 </span> : : /* Must have a destination unless we are just testing or getting the -<span class="lineNum"> 1800 </span> : : * the version, and must use one of [-s|-R|-a]. -<span class="lineNum"> 1801 </span> : : */ -<span class="lineNum"> 1802 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>]:<span class="lineCov"> 570 : if(!options-&gt;test</span> -<span class="lineNum"> 1803 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;key_gen</span> -<span class="lineNum"> 1804 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;version</span> -<span class="lineNum"> 1805 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;show_last_command</span> -<span class="lineNum"> 1806 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options-&gt;run_last_command)</span> -<span class="lineNum"> 1807 </span> : : { -<span class="lineNum"> 1808 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_server_str[0] == 0x0)</span> -<span class="lineNum"> 1809 </span> : : { -<span class="lineNum"> 1810 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1811 </span> : : &quot;Must use --destination unless --test mode is used&quot;); -<span class="lineNum"> 1812 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1813 </span> : : } -<span class="lineNum"> 1814 </span> : : -<span class="lineNum"> 1815 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;resolve_url != NULL)</span> -<span class="lineNum"> 1816 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> -<span class="lineNum"> 1817 </span> : : -<span class="lineNum"> 1818 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!options-&gt;resolve_ip_http_https)</span> -<span class="lineNum"> 1819 </span> : : { -<span class="lineNum"> 1820 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;allow_ip_str[0] == 0x0)</span> -<span class="lineNum"> 1821 </span> : : { -<span class="lineNum"> 1822 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1823 </span> : : &quot;Must use one of [-s|-R|-a] to specify IP for SPA access.&quot;); -<span class="lineNum"> 1824 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1825 </span> : : } -<span class="lineNum"> 1826 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(options-&gt;verbose</span> -<span class="lineNum"> 1827 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncmp(options-&gt;allow_ip_str, &quot;0.0.0.0&quot;, strlen(&quot;0.0.0.0&quot;)) == 0)</span> -<span class="lineNum"> 1828 </span> : : { -<span class="lineNum"> 1829 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1830 </span> : : &quot;[-] WARNING: Should use -a or -R to harden SPA against potential MITM attacks&quot;); -<span class="lineNum"> 1831 </span> : : } -<span class="lineNum"> 1832 </span> : : } -<span class="lineNum"> 1833 </span> : : } -<span class="lineNum"> 1834 </span> : : -<span class="lineNum"> 1835 </span> : : /* Make sure -a overrides IP resolution -<span class="lineNum"> 1836 </span> : : */ -<span class="lineNum"> 1837 </span> [<span class="branchCov" title="Branch 0 was taken 570 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 570 : if(options-&gt;allow_ip_str[0] != 0x0</span> -<span class="lineNum"> 1838 </span> [<span class="branchCov" title="Branch 0 was taken 570 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 570 : &amp;&amp; strncasecmp(options-&gt;allow_ip_str, &quot;resolve&quot;, strlen(&quot;resolve&quot;)) != 0)</span> -<span class="lineNum"> 1839 </span> : : { -<span class="lineNum"> 1840 </span> :<span class="lineCov"> 570 : options-&gt;resolve_ip_http_https = 0;</span> -<span class="lineNum"> 1841 </span> : : -<span class="lineNum"> 1842 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 570 times"> + </span>]:<span class="lineCov"> 570 : if(! is_valid_ipv4_addr(options-&gt;allow_ip_str))</span> -<span class="lineNum"> 1843 </span> : : { -<span class="lineNum"> 1844 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1845 </span> : : &quot;Invalid allow IP specified for SPA access&quot;); -<span class="lineNum"> 1846 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1847 </span> : : } -<span class="lineNum"> 1848 </span> : : } -<span class="lineNum"> 1849 </span> : : -<span class="lineNum"> 1850 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>]:<span class="lineCov"> 570 : if (options-&gt;spoof_ip_src_str[0] != 0x00)</span> -<span class="lineNum"> 1851 </span> : : { -<span class="lineNum"> 1852 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(options-&gt;spoof_ip_src_str))</span> -<span class="lineNum"> 1853 </span> : : { -<span class="lineNum"> 1854 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Invalid spoof IP&quot;);</span> -<span class="lineNum"> 1855 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1856 </span> : : } -<span class="lineNum"> 1857 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;spa_proto != FKO_PROTO_TCP_RAW</span> -<span class="lineNum"> 1858 </span> :<span class="lineNoCov"> 0 : &amp;&amp; options-&gt;spa_proto != FKO_PROTO_UDP_RAW</span> -<span class="lineNum"> 1859 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; options-&gt;spa_proto != FKO_PROTO_ICMP)</span> -<span class="lineNum"> 1860 </span> : : { -<span class="lineNum"> 1861 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1862 </span> : : &quot;Must set -P &lt;udpraw|tcpraw|icmp&gt; with a spoofed source IP&quot;); -<span class="lineNum"> 1863 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1864 </span> : : } -<span class="lineNum"> 1865 </span> : : } -<span class="lineNum"> 1866 </span> : : -<span class="lineNum"> 1867 </span>[<span class="branchCov" title="Branch 0 was taken 570 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 68 times"> + </span><span class="branchCov" title="Branch 3 was taken 502 times"> + </span>]:<span class="lineCov"> 570 : if(options-&gt;resolve_ip_http_https || options-&gt;spa_proto == FKO_PROTO_HTTP)</span> -<span class="lineNum"> 1868 </span> [<span class="branchCov" title="Branch 0 was taken 68 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 68 : if (options-&gt;http_user_agent[0] == '\0')</span> -<span class="lineNum"> 1869 </span> :<span class="lineCov"> 68 : snprintf(options-&gt;http_user_agent, HTTP_MAX_USER_AGENT_LEN,</span> -<span class="lineNum"> 1870 </span> : : &quot;%s%s&quot;, &quot;Fwknop/&quot;, MY_VERSION); -<span class="lineNum"> 1871 </span> : : -<span class="lineNum"> 1872 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 570 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 570 : if(options-&gt;http_proxy[0] != 0x0 &amp;&amp; options-&gt;spa_proto != FKO_PROTO_HTTP)</span> -<span class="lineNum"> 1873 </span> : : { -<span class="lineNum"> 1874 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1875 </span> : : &quot;Cannot set --http-proxy with a non-HTTP protocol.&quot;); -<span class="lineNum"> 1876 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1877 </span> : : } -<span class="lineNum"> 1878 </span> : : -<span class="lineNum"> 1879 </span> : : /* If we are using gpg, we must at least have the recipient set. -<span class="lineNum"> 1880 </span> : : */ -<span class="lineNum"> 1881 </span> [<span class="branchCov" title="Branch 0 was taken 8 times"> + </span><span class="branchCov" title="Branch 1 was taken 562 times"> + </span>]:<span class="lineCov"> 570 : if(options-&gt;use_gpg)</span> -<span class="lineNum"> 1882 </span> : : { -<span class="lineNum"> 1883 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 8 : if(strlen(options-&gt;gpg_recipient_key) == 0)</span> -<span class="lineNum"> 1884 </span> : : { -<span class="lineNum"> 1885 </span> :<span class="lineCov"> 4 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1886 </span> : : &quot;Must specify --gpg-recipient-key when GPG is used.&quot;); -<span class="lineNum"> 1887 </span> :<span class="lineCov"> 4 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1888 </span> : : } -<span class="lineNum"> 1889 </span> : : } -<span class="lineNum"> 1890 </span> : : -<span class="lineNum"> 1891 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;encryption_mode == FKO_ENC_MODE_ASYMMETRIC</span> -<span class="lineNum"> 1892 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; ! options-&gt;use_gpg)</span> -<span class="lineNum"> 1893 </span> : : { -<span class="lineNum"> 1894 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1895 </span> : : &quot;Must specify GPG recipient/signing keys when Asymmetric encryption mode is used.&quot;); -<span class="lineNum"> 1896 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1897 </span> : : } -<span class="lineNum"> 1898 </span> : : -<span class="lineNum"> 1899 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV</span> -<span class="lineNum"> 1900 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; options-&gt;use_hmac)</span> -<span class="lineNum"> 1901 </span> : : { -<span class="lineNum"> 1902 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1903 </span> : : &quot;Legacy encryption mode is incompatible with HMAC usage.&quot;); -<span class="lineNum"> 1904 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 1905 </span> : : } -<span class="lineNum"> 1906 </span> : : -<span class="lineNum"> 1907 </span> : : /* Validate HMAC digest type -<span class="lineNum"> 1908 </span> : : */ -<span class="lineNum"> 1909 </span>[<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchCov" title="Branch 1 was taken 99 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 66 times"> + </span><span class="branchCov" title="Branch 3 was taken 401 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;use_hmac &amp;&amp; options-&gt;hmac_type == FKO_HMAC_UNKNOWN)</span> -<span class="lineNum"> 1910 </span> :<span class="lineCov"> 66 : options-&gt;hmac_type = FKO_DEFAULT_HMAC_MODE;</span> -<span class="lineNum"> 1911 </span> : : -<span class="lineNum"> 1912 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 566 : if(options-&gt;key_gen &amp;&amp; options-&gt;hmac_type == FKO_HMAC_UNKNOWN)</span> -<span class="lineNum"> 1913 </span> :<span class="lineNoCov"> 0 : options-&gt;hmac_type = FKO_DEFAULT_HMAC_MODE;</span> -<span class="lineNum"> 1914 </span> : : -<span class="lineNum"> 1915 </span> :<span class="lineCov"> 566 : return;</span> -<span class="lineNum"> 1916 </span> : : } -<span class="lineNum"> 1917 </span> : : -<span class="lineNum"> 1918 </span> : : /* Establish a few defaults such as UDP/62201 for sending the SPA -<span class="lineNum"> 1919 </span> : : * packet (can be changed with --server-proto/--server-port) -<a name="1920"><span class="lineNum"> 1920 </span> : : */</a> -<span class="lineNum"> 1921 </span> : : static void -<span class="lineNum"> 1922 </span> :<span class="lineCov"> 2085 : set_defaults(fko_cli_options_t *options)</span> -<span class="lineNum"> 1923 </span> : : { -<span class="lineNum"> 1924 </span> :<span class="lineCov"> 2085 : options-&gt;spa_proto = FKO_DEFAULT_PROTO;</span> -<span class="lineNum"> 1925 </span> :<span class="lineCov"> 2085 : options-&gt;spa_dst_port = FKO_DEFAULT_PORT;</span> -<span class="lineNum"> 1926 </span> :<span class="lineCov"> 2085 : options-&gt;fw_timeout = -1;</span> -<span class="lineNum"> 1927 </span> : : -<span class="lineNum"> 1928 </span> :<span class="lineCov"> 2085 : options-&gt;key_len = FKO_DEFAULT_KEY_LEN;</span> -<span class="lineNum"> 1929 </span> :<span class="lineCov"> 2085 : options-&gt;hmac_key_len = FKO_DEFAULT_HMAC_KEY_LEN;</span> -<span class="lineNum"> 1930 </span> :<span class="lineCov"> 2085 : options-&gt;hmac_type = FKO_HMAC_UNKNOWN; /* updated when HMAC key is used */</span> -<span class="lineNum"> 1931 </span> : : -<span class="lineNum"> 1932 </span> :<span class="lineCov"> 2085 : options-&gt;spa_icmp_type = ICMP_ECHOREPLY; /* only used in '-P icmp' mode */</span> -<span class="lineNum"> 1933 </span> :<span class="lineCov"> 2085 : options-&gt;spa_icmp_code = 0; /* only used in '-P icmp' mode */</span> -<span class="lineNum"> 1934 </span> : : -<span class="lineNum"> 1935 </span> :<span class="lineCov"> 2085 : options-&gt;input_fd = FD_INVALID;</span> -<span class="lineNum"> 1936 </span> : : -<span class="lineNum"> 1937 </span> :<span class="lineCov"> 2085 : return;</span> -<span class="lineNum"> 1938 </span> : : } -<span class="lineNum"> 1939 </span> : : -<span class="lineNum"> 1940 </span> : : /* Initialize program configuration via config file and/or command-line -<span class="lineNum"> 1941 </span> : : * switches. -<a name="1942"><span class="lineNum"> 1942 </span> : : */</a> -<span class="lineNum"> 1943 </span> : : void -<span class="lineNum"> 1944 </span> :<span class="lineCov"> 2085 : config_init(fko_cli_options_t *options, int argc, char **argv)</span> -<span class="lineNum"> 1945 </span> : : { -<span class="lineNum"> 1946 </span> :<span class="lineCov"> 2085 : int cmd_arg, index, is_err, rlen=0;</span> -<span class="lineNum"> 1947 </span> : : fko_var_bitmask_t var_bitmask; -<span class="lineNum"> 1948 </span> :<span class="lineCov"> 2085 : char rcfile[MAX_PATH_LEN] = {0};</span> -<span class="lineNum"> 1949 </span> : : -<span class="lineNum"> 1950 </span> : : /* Zero out options, opts_track and bitmask. -<span class="lineNum"> 1951 </span> : : */ -<span class="lineNum"> 1952 </span> : : memset(options, 0x00, sizeof(fko_cli_options_t)); -<span class="lineNum"> 1953 </span> : : memset(&amp;var_bitmask, 0x00, sizeof(fko_var_bitmask_t)); -<span class="lineNum"> 1954 </span> : : -<span class="lineNum"> 1955 </span> : : /* Make sure a few reasonable defaults are set -<span class="lineNum"> 1956 </span> : : */ -<span class="lineNum"> 1957 </span> :<span class="lineCov"> 2085 : set_defaults(options);</span> -<span class="lineNum"> 1958 </span> : : -<span class="lineNum"> 1959 </span> : : /* First pass over cmd_line args to see if a named-stanza in the -<span class="lineNum"> 1960 </span> : : * rc file is used. -<span class="lineNum"> 1961 </span> : : */ -<span class="lineNum"> 1962 </span> [<span class="branchCov" title="Branch 1 was taken 8340 times"> + </span><span class="branchCov" title="Branch 2 was taken 2085 times"> + </span>]:<span class="lineCov"> 12510 : while ((cmd_arg = getopt_long(argc, argv,</span> -<span class="lineNum"> 1963 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { -<span class="lineNum"> 1964 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2085 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 8340 : switch(cmd_arg) {</span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchCov" title="Branch 6 was taken 2085 times"> + </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span> -<span class="lineNum"> </span> <span class="branchCov" title="Branch 8 was taken 4170 times"> + </span>] -<span class="lineNum"> 1965 </span> : : case 'h': -<span class="lineNum"> 1966 </span> :<span class="lineNoCov"> 0 : usage();</span> -<span class="lineNum"> 1967 </span> :<span class="lineNoCov"> 0 : exit(EXIT_SUCCESS);</span> -<span class="lineNum"> 1968 </span> : : case NO_SAVE_ARGS: -<span class="lineNum"> 1969 </span> :<span class="lineNoCov"> 0 : options-&gt;no_save_args = 1;</span> -<span class="lineNum"> 1970 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1971 </span> : : case 'n': -<span class="lineNum"> 1972 </span> :<span class="lineCov"> 2085 : strlcpy(options-&gt;use_rc_stanza, optarg, sizeof(options-&gt;use_rc_stanza));</span> -<span class="lineNum"> 1973 </span> :<span class="lineCov"> 2085 : break;</span> -<span class="lineNum"> 1974 </span> : : case SAVE_RC_STANZA: -<span class="lineNum"> 1975 </span> :<span class="lineNoCov"> 0 : options-&gt;save_rc_stanza = 1;</span> -<span class="lineNum"> 1976 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1977 </span> : : case STANZA_LIST: -<span class="lineNum"> 1978 </span> :<span class="lineNoCov"> 0 : options-&gt;stanza_list = 1;</span> -<span class="lineNum"> 1979 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1980 </span> : : case 'E': -<span class="lineNum"> 1981 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;args_save_file, optarg, sizeof(options-&gt;args_save_file));</span> -<span class="lineNum"> 1982 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1983 </span> : : case RC_FILE_PATH: -<span class="lineNum"> 1984 </span> :<span class="lineCov"> 2085 : strlcpy(options-&gt;rc_file, optarg, sizeof(options-&gt;rc_file));</span> -<span class="lineNum"> 1985 </span> :<span class="lineCov"> 2085 : break;</span> -<span class="lineNum"> 1986 </span> : : case 'v': -<span class="lineNum"> 1987 </span> :<span class="lineNoCov"> 0 : options-&gt;verbose++;</span> -<span class="lineNum"> 1988 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_VERBOSE, &amp;var_bitmask);</span> -<span class="lineNum"> 1989 </span> :<span class="lineCov"> 6255 : break;</span> -<span class="lineNum"> 1990 </span> : : } -<span class="lineNum"> 1991 </span> : : } -<span class="lineNum"> 1992 </span> : : -<span class="lineNum"> 1993 </span> : : /* Update the verbosity level for the log module */ -<span class="lineNum"> 1994 </span> :<span class="lineCov"> 2085 : log_set_verbosity(LOG_DEFAULT_VERBOSITY + options-&gt;verbose);</span> -<span class="lineNum"> 1995 </span> : : -<span class="lineNum"> 1996 </span> : : /* Dump the configured stanzas from an rcfile */ -<span class="lineNum"> 1997 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2085 times"> + </span>]:<span class="lineCov"> 2085 : if (options-&gt;stanza_list == 1)</span> -<span class="lineNum"> 1998 </span> : : { -<span class="lineNum"> 1999 </span> :<span class="lineNoCov"> 0 : set_rc_file(rcfile, options);</span> -<span class="lineNum"> 2000 </span> :<span class="lineNoCov"> 0 : exit(dump_configured_stanzas_from_rcfile(rcfile));</span> -<span class="lineNum"> 2001 </span> : : } -<span class="lineNum"> 2002 </span> : : -<span class="lineNum"> 2003 </span> : : /* First process the .fwknoprc file. -<span class="lineNum"> 2004 </span> : : */ -<span class="lineNum"> 2005 </span> :<span class="lineCov"> 2085 : process_rc_section(RC_SECTION_DEFAULT, options);</span> -<span class="lineNum"> 2006 </span> : : -<span class="lineNum"> 2007 </span> : : /* Load the user specified stanza from .fwknoprc file */ -<span class="lineNum"> 2008 </span>[<span class="branchCov" title="Branch 0 was taken 805 times"> + </span><span class="branchCov" title="Branch 1 was taken 39 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 805 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 844 : if ( (options-&gt;got_named_stanza) &amp;&amp; (options-&gt;save_rc_stanza == 0) )</span> -<span class="lineNum"> 2009 </span> :<span class="lineCov"> 805 : process_rc_section(options-&gt;use_rc_stanza, options);</span> -<span class="lineNum"> 2010 </span> : : -<span class="lineNum"> 2011 </span> : : /* Reset the options index so we can run through them again. -<span class="lineNum"> 2012 </span> : : */ -<span class="lineNum"> 2013 </span> :<span class="lineCov"> 609 : optind = 0;</span> -<span class="lineNum"> 2014 </span> : : -<span class="lineNum"> 2015 </span> [<span class="branchCov" title="Branch 1 was taken 2436 times"> + </span><span class="branchCov" title="Branch 2 was taken 609 times"> + </span>]:<span class="lineCov"> 3654 : while ((cmd_arg = getopt_long(argc, argv,</span> -<span class="lineNum"> 2016 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { -<span class="lineNum"> 2017 </span> : : -<span class="lineNum"> 2018 </span> [<span class="branchCov" title="Branch 0 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 2436 : switch(cmd_arg) {</span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchNoCov" title="Branch 6 was not taken"> - </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span><span class="branchNoCov" title="Branch 8 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 9 was not taken"> - </span><span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchNoCov" title="Branch 11 was not taken"> - </span><span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchNoCov" title="Branch 13 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchNoCov" title="Branch 15 was not taken"> - </span><span class="branchNoCov" title="Branch 16 was not taken"> - </span><span class="branchNoCov" title="Branch 17 was not taken"> - </span><span class="branchNoCov" title="Branch 18 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 19 was not taken"> - </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span><span class="branchNoCov" title="Branch 21 was not taken"> - </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span><span class="branchNoCov" title="Branch 23 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span><span class="branchNoCov" title="Branch 25 was not taken"> - </span><span class="branchNoCov" title="Branch 26 was not taken"> - </span><span class="branchNoCov" title="Branch 27 was not taken"> - </span><span class="branchNoCov" title="Branch 28 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 29 was not taken"> - </span><span class="branchNoCov" title="Branch 30 was not taken"> - </span><span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchCov" title="Branch 32 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 33 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 34 was not taken"> - </span><span class="branchNoCov" title="Branch 35 was not taken"> - </span><span class="branchNoCov" title="Branch 36 was not taken"> - </span><span class="branchNoCov" title="Branch 37 was not taken"> - </span><span class="branchNoCov" title="Branch 38 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 39 was not taken"> - </span><span class="branchNoCov" title="Branch 40 was not taken"> - </span><span class="branchCov" title="Branch 41 was taken 609 times"> + </span><span class="branchNoCov" title="Branch 42 was not taken"> - </span><span class="branchNoCov" title="Branch 43 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 44 was not taken"> - </span><span class="branchNoCov" title="Branch 45 was not taken"> - </span><span class="branchNoCov" title="Branch 46 was not taken"> - </span><span class="branchNoCov" title="Branch 47 was not taken"> - </span><span class="branchNoCov" title="Branch 48 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 49 was not taken"> - </span><span class="branchNoCov" title="Branch 50 was not taken"> - </span><span class="branchNoCov" title="Branch 51 was not taken"> - </span><span class="branchNoCov" title="Branch 52 was not taken"> - </span><span class="branchNoCov" title="Branch 53 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 54 was not taken"> - </span><span class="branchNoCov" title="Branch 55 was not taken"> - </span><span class="branchNoCov" title="Branch 56 was not taken"> - </span><span class="branchNoCov" title="Branch 57 was not taken"> - </span><span class="branchNoCov" title="Branch 58 was not taken"> - </span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 59 was not taken"> - </span><span class="branchNoCov" title="Branch 60 was not taken"> - </span><span class="branchNoCov" title="Branch 61 was not taken"> - </span><span class="branchCov" title="Branch 62 was taken 609 times"> + </span>] -<span class="lineNum"> 2019 </span> : : case 'a': -<span class="lineNum"> 2020 </span> :<span class="lineCov"> 609 : strlcpy(options-&gt;allow_ip_str, optarg, sizeof(options-&gt;allow_ip_str));</span> -<span class="lineNum"> 2021 </span> :<span class="lineCov"> 609 : add_var_to_bitmask(FWKNOP_CLI_ARG_ALLOW_IP, &amp;var_bitmask);</span> -<span class="lineNum"> 2022 </span> :<span class="lineCov"> 2436 : break;</span> -<span class="lineNum"> 2023 </span> : : case 'A': -<span class="lineNum"> 2024 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;access_str, optarg, sizeof(options-&gt;access_str));</span> -<span class="lineNum"> 2025 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_ACCESS, &amp;var_bitmask);</span> -<span class="lineNum"> 2026 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2027 </span> : : case 'b': -<span class="lineNum"> 2028 </span> :<span class="lineNoCov"> 0 : options-&gt;save_packet_file_append = 1;</span> -<span class="lineNum"> 2029 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2030 </span> : : case 'B': -<span class="lineNum"> 2031 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;save_packet_file, optarg, sizeof(options-&gt;save_packet_file));</span> -<span class="lineNum"> 2032 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2033 </span> : : case 'C': -<span class="lineNum"> 2034 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;server_command, optarg, sizeof(options-&gt;server_command));</span> -<span class="lineNum"> 2035 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2036 </span> : : case 'D': -<span class="lineNum"> 2037 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spa_server_str, optarg, sizeof(options-&gt;spa_server_str));</span> -<span class="lineNum"> 2038 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SERVER, &amp;var_bitmask);</span> -<span class="lineNum"> 2039 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2040 </span> : : case 'E': -<span class="lineNum"> 2041 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;args_save_file, optarg, sizeof(options-&gt;args_save_file));</span> -<span class="lineNum"> 2042 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2043 </span> : : case 'f': -<span class="lineNum"> 2044 </span> :<span class="lineNoCov"> 0 : options-&gt;fw_timeout = strtol_wrapper(optarg, 0,</span> -<span class="lineNum"> 2045 </span> : : (2 &lt;&lt; 16), NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2046 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 2047 </span> : : { -<span class="lineNum"> 2048 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;--fw-timeout must be within [%d-%d]&quot;,</span> -<span class="lineNum"> 2049 </span> : : 0, (2 &lt;&lt; 16)); -<span class="lineNum"> 2050 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2051 </span> : : } -<span class="lineNum"> 2052 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_FW_TIMEOUT, &amp;var_bitmask);</span> -<span class="lineNum"> 2053 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2054 </span> : : case FAULT_INJECTION_TAG: -<span class="lineNum"> 2055 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 2056 </span> : : strlcpy(options-&gt;fault_injection_tag, optarg, sizeof(options-&gt;fault_injection_tag)); -<span class="lineNum"> 2057 </span> : : #else -<span class="lineNum"> 2058 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2059 </span> : : &quot;fwknop not compiled with fault injection support.&quot;, optarg); -<span class="lineNum"> 2060 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2061 </span> : : #endif -<span class="lineNum"> 2062 </span> : : break; -<span class="lineNum"> 2063 </span> : : case 'g': -<span class="lineNum"> 2064 </span> : : case GPG_ENCRYPTION: -<span class="lineNum"> 2065 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 2066 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> -<span class="lineNum"> 2067 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2068 </span> : : case 'G': -<span class="lineNum"> 2069 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;get_key_file, optarg, sizeof(options-&gt;get_key_file));</span> -<span class="lineNum"> 2070 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_FILE, &amp;var_bitmask);</span> -<span class="lineNum"> 2071 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2072 </span> : : case GET_HMAC_KEY: -<span class="lineNum"> 2073 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;get_hmac_key_file, optarg,</span> -<span class="lineNum"> 2074 </span> : : sizeof(options-&gt;get_hmac_key_file)); -<span class="lineNum"> 2075 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 2076 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_HMAC_KEY_FILE, &amp;var_bitmask);</span> -<span class="lineNum"> 2077 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2078 </span> : : case 'H': -<span class="lineNum"> 2079 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_proto = FKO_PROTO_HTTP;</span> -<span class="lineNum"> 2080 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;http_proxy, optarg, sizeof(options-&gt;http_proxy));</span> -<span class="lineNum"> 2081 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2082 </span> : : case 'k': -<span class="lineNum"> 2083 </span> :<span class="lineNoCov"> 0 : options-&gt;key_gen = 1;</span> -<span class="lineNum"> 2084 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2085 </span> : : case 'K': -<span class="lineNum"> 2086 </span> :<span class="lineNoCov"> 0 : options-&gt;key_gen = 1;</span> -<span class="lineNum"> 2087 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;key_gen_file, optarg, sizeof(options-&gt;key_gen_file));</span> -<span class="lineNum"> 2088 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2089 </span> : : case KEY_RIJNDAEL: -<span class="lineNum"> 2090 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;key, optarg, sizeof(options-&gt;key));</span> -<span class="lineNum"> 2091 </span> :<span class="lineNoCov"> 0 : options-&gt;have_key = 1;</span> -<span class="lineNum"> 2092 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask);</span> -<span class="lineNum"> 2093 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2094 </span> : : case KEY_RIJNDAEL_BASE64: -<span class="lineNum"> 2095 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) optarg, strlen(optarg)))</span> -<span class="lineNum"> 2096 </span> : : { -<span class="lineNum"> 2097 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2098 </span> : : &quot;Base64 encoded Rijndael argument '%s' doesn't look like base64-encoded data.&quot;, -<span class="lineNum"> 2099 </span> : : optarg); -<span class="lineNum"> 2100 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2101 </span> : : } -<span class="lineNum"> 2102 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;key_base64, optarg, sizeof(options-&gt;key_base64));</span> -<span class="lineNum"> 2103 </span> :<span class="lineNoCov"> 0 : options-&gt;have_base64_key = 1;</span> -<span class="lineNum"> 2104 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, &amp;var_bitmask);</span> -<span class="lineNum"> 2105 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2106 </span> : : case KEY_HMAC_BASE64: -<span class="lineNum"> 2107 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) optarg, strlen(optarg)))</span> -<span class="lineNum"> 2108 </span> : : { -<span class="lineNum"> 2109 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2110 </span> : : &quot;Base64 encoded HMAC argument '%s' doesn't look like base64-encoded data.&quot;, -<span class="lineNum"> 2111 </span> : : optarg); -<span class="lineNum"> 2112 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2113 </span> : : } -<span class="lineNum"> 2114 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;hmac_key_base64, optarg, sizeof(options-&gt;hmac_key_base64));</span> -<span class="lineNum"> 2115 </span> :<span class="lineNoCov"> 0 : options-&gt;have_hmac_base64_key = 1;</span> -<span class="lineNum"> 2116 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 2117 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_HMAC_BASE64, &amp;var_bitmask);</span> -<span class="lineNum"> 2118 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> -<span class="lineNum"> 2119 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2120 </span> : : case KEY_HMAC: -<span class="lineNum"> 2121 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;hmac_key, optarg, sizeof(options-&gt;hmac_key));</span> -<span class="lineNum"> 2122 </span> :<span class="lineNoCov"> 0 : options-&gt;have_hmac_key = 1;</span> -<span class="lineNum"> 2123 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 2124 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_HMAC, &amp;var_bitmask);</span> -<span class="lineNum"> 2125 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> -<span class="lineNum"> 2126 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2127 </span> : : case KEY_LEN: -<span class="lineNum"> 2128 </span> :<span class="lineNoCov"> 0 : options-&gt;key_len = strtol_wrapper(optarg, 1,</span> -<span class="lineNum"> 2129 </span> : : MAX_KEY_LEN, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2130 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 2131 </span> : : { -<span class="lineNum"> 2132 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2133 </span> : : &quot;Invalid key length '%s', must be in [%d-%d]&quot;, -<span class="lineNum"> 2134 </span> : : optarg, 1, MAX_KEY_LEN); -<span class="lineNum"> 2135 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2136 </span> : : } -<span class="lineNum"> 2137 </span> : : break; -<span class="lineNum"> 2138 </span> : : case HMAC_DIGEST_TYPE: -<span class="lineNum"> 2139 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;hmac_type = hmac_digest_strtoint(optarg)) &lt; 0)</span> -<span class="lineNum"> 2140 </span> : : { -<span class="lineNum"> 2141 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2142 </span> : : &quot;* Invalid hmac digest type: %s, use {md5,sha1,sha256,sha384,sha512}&quot;, -<span class="lineNum"> 2143 </span> : : optarg); -<span class="lineNum"> 2144 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2145 </span> : : } -<span class="lineNum"> 2146 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE, &amp;var_bitmask);</span> -<span class="lineNum"> 2147 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> -<span class="lineNum"> 2148 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 2149 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2150 </span> : : case HMAC_KEY_LEN: -<span class="lineNum"> 2151 </span> :<span class="lineNoCov"> 0 : options-&gt;hmac_key_len = strtol_wrapper(optarg, 1,</span> -<span class="lineNum"> 2152 </span> : : MAX_KEY_LEN, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2153 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 2154 </span> : : { -<span class="lineNum"> 2155 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2156 </span> : : &quot;Invalid hmac key length '%s', must be in [%d-%d]&quot;, -<span class="lineNum"> 2157 </span> : : optarg, 1, MAX_KEY_LEN); -<span class="lineNum"> 2158 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2159 </span> : : } -<span class="lineNum"> 2160 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> -<span class="lineNum"> 2161 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 2162 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2163 </span> : : case SPA_ICMP_TYPE: -<span class="lineNum"> 2164 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_icmp_type = strtol_wrapper(optarg, 0,</span> -<span class="lineNum"> 2165 </span> : : MAX_ICMP_TYPE, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2166 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 2167 </span> : : { -<span class="lineNum"> 2168 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2169 </span> : : &quot;Invalid icmp type '%s', must be in [%d-%d]&quot;, -<span class="lineNum"> 2170 </span> : : optarg, 0, MAX_ICMP_TYPE); -<span class="lineNum"> 2171 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2172 </span> : : } -<span class="lineNum"> 2173 </span> : : break; -<span class="lineNum"> 2174 </span> : : case SPA_ICMP_CODE: -<span class="lineNum"> 2175 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_icmp_code = strtol_wrapper(optarg, 0,</span> -<span class="lineNum"> 2176 </span> : : MAX_ICMP_CODE, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2177 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 2178 </span> : : { -<span class="lineNum"> 2179 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2180 </span> : : &quot;Invalid icmp code '%s', must be in [%d-%d]&quot;, -<span class="lineNum"> 2181 </span> : : optarg, 0, MAX_ICMP_CODE); -<span class="lineNum"> 2182 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2183 </span> : : } -<span class="lineNum"> 2184 </span> : : break; -<span class="lineNum"> 2185 </span> : : case 'l': -<span class="lineNum"> 2186 </span> :<span class="lineNoCov"> 0 : options-&gt;run_last_command = 1;</span> -<span class="lineNum"> 2187 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2188 </span> : : case 'm': -<span class="lineNum"> 2189 </span> : : case FKO_DIGEST_NAME: -<span class="lineNum"> 2190 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;digest_type = digest_strtoint(optarg)) &lt; 0)</span> -<span class="lineNum"> 2191 </span> : : { -<span class="lineNum"> 2192 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2193 </span> : : &quot;* Invalid digest type: %s, use {md5,sha1,sha256,sha384,sha512}&quot;, -<span class="lineNum"> 2194 </span> : : optarg); -<span class="lineNum"> 2195 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2196 </span> : : } -<span class="lineNum"> 2197 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_DIGEST_TYPE, &amp;var_bitmask);</span> -<span class="lineNum"> 2198 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2199 </span> : : case 'M': -<span class="lineNum"> 2200 </span> : : case ENCRYPTION_MODE: -<span class="lineNum"> 2201 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;encryption_mode = enc_mode_strtoint(optarg)) &lt; 0)</span> -<span class="lineNum"> 2202 </span> : : { -<span class="lineNum"> 2203 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 2204 </span> : : &quot;* Invalid encryption mode: %s, use {CBC,CTR,legacy,Asymmetric}&quot;, -<span class="lineNum"> 2205 </span> : : optarg); -<span class="lineNum"> 2206 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2207 </span> : : } -<span class="lineNum"> 2208 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_ENCRYPTION_MODE, &amp;var_bitmask);</span> -<span class="lineNum"> 2209 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2210 </span> : : case NO_SAVE_ARGS: -<span class="lineNum"> 2211 </span> :<span class="lineNoCov"> 0 : options-&gt;no_save_args = 1;</span> -<span class="lineNum"> 2212 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NO_SAVE_ARGS, &amp;var_bitmask);</span> -<span class="lineNum"> 2213 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2214 </span> : : case 'n': -<span class="lineNum"> 2215 </span> : : /* We already handled this earlier, so we do nothing here -<span class="lineNum"> 2216 </span> : : */ -<span class="lineNum"> 2217 </span> : : break; -<span class="lineNum"> 2218 </span> : : case 'N': -<span class="lineNum"> 2219 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;nat_access_str, optarg, sizeof(options-&gt;nat_access_str));</span> -<span class="lineNum"> 2220 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_ACCESS, &amp;var_bitmask);</span> -<span class="lineNum"> 2221 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2222 </span> : : case 'p': -<span class="lineNum"> 2223 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_dst_port = strtol_wrapper(optarg, 0,</span> -<span class="lineNum"> 2224 </span> : : MAX_PORT, EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2225 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SERVER_PORT, &amp;var_bitmask);</span> -<span class="lineNum"> 2226 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2227 </span> : : case 'P': -<span class="lineNum"> 2228 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((options-&gt;spa_proto = proto_strtoint(optarg)) &lt; 0)</span> -<span class="lineNum"> 2229 </span> : : { -<span class="lineNum"> 2230 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Unrecognized protocol: %s&quot;, optarg);</span> -<span class="lineNum"> 2231 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2232 </span> : : } -<span class="lineNum"> 2233 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SERVER_PROTO, &amp;var_bitmask);</span> -<span class="lineNum"> 2234 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2235 </span> : : case 'Q': -<span class="lineNum"> 2236 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spoof_ip_src_str, optarg, sizeof(options-&gt;spoof_ip_src_str));</span> -<span class="lineNum"> 2237 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPOOF_SOURCE_IP, &amp;var_bitmask);</span> -<span class="lineNum"> 2238 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2239 </span> : : case RC_FILE_PATH: -<span class="lineNum"> 2240 </span> :<span class="lineCov"> 609 : strlcpy(options-&gt;rc_file, optarg, sizeof(options-&gt;rc_file));</span> -<span class="lineNum"> 2241 </span> :<span class="lineCov"> 609 : break;</span> -<span class="lineNum"> 2242 </span> : : case 'r': -<span class="lineNum"> 2243 </span> :<span class="lineNoCov"> 0 : options-&gt;rand_port = 1;</span> -<span class="lineNum"> 2244 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RAND_PORT, &amp;var_bitmask);</span> -<span class="lineNum"> 2245 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2246 </span> : : case 'R': -<span class="lineNum"> 2247 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> -<span class="lineNum"> 2248 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS, &amp;var_bitmask);</span> -<span class="lineNum"> 2249 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2250 </span> : : case RESOLVE_HTTP_ONLY: -<span class="lineNum"> 2251 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_http_only = 1;</span> -<span class="lineNum"> 2252 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_ip_http_https = 1;</span> -<span class="lineNum"> 2253 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_HTTP_ONLY, &amp;var_bitmask);</span> -<span class="lineNum"> 2254 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_IP_HTTPS, &amp;var_bitmask);</span> -<span class="lineNum"> 2255 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2256 </span> : : case RESOLVE_URL: -<span class="lineNum"> 2257 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> -<span class="lineNum"> 2258 </span> :<span class="lineNoCov"> 0 : free(options-&gt;resolve_url);</span> -<span class="lineNum"> 2259 </span> :<span class="lineNoCov"> 0 : rlen = strlen(optarg) + 1;</span> -<span class="lineNum"> 2260 </span> :<span class="lineNoCov"> 0 : options-&gt;resolve_url = calloc(1, rlen);</span> -<span class="lineNum"> 2261 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url == NULL)</span> -<span class="lineNum"> 2262 </span> : : { -<span class="lineNum"> 2263 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Memory allocation error for resolve URL.&quot;);</span> -<span class="lineNum"> 2264 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2265 </span> : : } -<span class="lineNum"> 2266 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;resolve_url, optarg, rlen);</span> -<span class="lineNum"> 2267 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_RESOLVE_URL, &amp;var_bitmask);</span> -<span class="lineNum"> 2268 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2269 </span> : : case 'w': -<span class="lineNum"> 2270 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin != NULL)</span> -<span class="lineNum"> 2271 </span> :<span class="lineNoCov"> 0 : free(options-&gt;wget_bin);</span> -<span class="lineNum"> 2272 </span> :<span class="lineNoCov"> 0 : rlen = strlen(optarg) + 1;</span> -<span class="lineNum"> 2273 </span> :<span class="lineNoCov"> 0 : options-&gt;wget_bin = calloc(1, rlen);</span> -<span class="lineNum"> 2274 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin == NULL)</span> -<span class="lineNum"> 2275 </span> : : { -<span class="lineNum"> 2276 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Memory allocation error for resolve URL.&quot;);</span> -<span class="lineNum"> 2277 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2278 </span> : : } -<span class="lineNum"> 2279 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;wget_bin, optarg, rlen);</span> -<span class="lineNum"> 2280 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_WGET_CMD, &amp;var_bitmask);</span> -<span class="lineNum"> 2281 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2282 </span> : : case SHOW_LAST_ARGS: -<span class="lineNum"> 2283 </span> :<span class="lineNoCov"> 0 : options-&gt;show_last_command = 1;</span> -<span class="lineNum"> 2284 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2285 </span> : : case 's': -<span class="lineNum"> 2286 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;allow_ip_str, &quot;0.0.0.0&quot;, sizeof(options-&gt;allow_ip_str));</span> -<span class="lineNum"> 2287 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2288 </span> : : case 'S': -<span class="lineNum"> 2289 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_src_port = strtol_wrapper(optarg, 0,</span> -<span class="lineNum"> 2290 </span> : : MAX_PORT, EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2291 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPA_SOURCE_PORT, &amp;var_bitmask);</span> -<span class="lineNum"> 2292 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2293 </span> : : case SAVE_RC_STANZA: -<span class="lineNum"> 2294 </span> : : /* We already handled this earlier, so we do nothing here -<span class="lineNum"> 2295 </span> : : */ -<span class="lineNum"> 2296 </span> : : break; -<span class="lineNum"> 2297 </span> : : case 'T': -<span class="lineNum"> 2298 </span> :<span class="lineCov"> 609 : options-&gt;test = 1;</span> -<span class="lineNum"> 2299 </span> :<span class="lineCov"> 609 : break;</span> -<span class="lineNum"> 2300 </span> : : case 'u': -<span class="lineNum"> 2301 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;http_user_agent, optarg, sizeof(options-&gt;http_user_agent));</span> -<span class="lineNum"> 2302 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_HTTP_USER_AGENT, &amp;var_bitmask);</span> -<span class="lineNum"> 2303 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2304 </span> : : case 'U': -<span class="lineNum"> 2305 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spoof_user, optarg, sizeof(options-&gt;spoof_user));</span> -<span class="lineNum"> 2306 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_SPOOF_USER, &amp;var_bitmask);</span> -<span class="lineNum"> 2307 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2308 </span> : : case 'v': -<span class="lineNum"> 2309 </span> : : /* Handled earlier. -<span class="lineNum"> 2310 </span> : : */ -<span class="lineNum"> 2311 </span> : : break; -<span class="lineNum"> 2312 </span> : : case 'V': -<span class="lineNum"> 2313 </span> :<span class="lineNoCov"> 0 : options-&gt;version = 1;</span> -<span class="lineNum"> 2314 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2315 </span> : : case GPG_RECIP_KEY: -<span class="lineNum"> 2316 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 2317 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_recipient_key, optarg, sizeof(options-&gt;gpg_recipient_key));</span> -<span class="lineNum"> 2318 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> -<span class="lineNum"> 2319 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_RECIPIENT, &amp;var_bitmask);</span> -<span class="lineNum"> 2320 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2321 </span> : : case GPG_SIGNER_KEY: -<span class="lineNum"> 2322 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 2323 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_signer_key, optarg, sizeof(options-&gt;gpg_signer_key));</span> -<span class="lineNum"> 2324 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> -<span class="lineNum"> 2325 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_SIGNER, &amp;var_bitmask);</span> -<span class="lineNum"> 2326 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2327 </span> : : case GPG_HOME_DIR: -<span class="lineNum"> 2328 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 2329 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_home_dir, optarg, sizeof(options-&gt;gpg_home_dir));</span> -<span class="lineNum"> 2330 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> -<span class="lineNum"> 2331 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_HOMEDIR, &amp;var_bitmask);</span> -<span class="lineNum"> 2332 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2333 </span> : : case GPG_EXE_PATH: -<span class="lineNum"> 2334 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 2335 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;gpg_exe, optarg, sizeof(options-&gt;gpg_exe));</span> -<span class="lineNum"> 2336 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> -<span class="lineNum"> 2337 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_EXE_PATH, &amp;var_bitmask);</span> -<span class="lineNum"> 2338 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2339 </span> : : case GPG_AGENT: -<span class="lineNum"> 2340 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 2341 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg_agent = 1;</span> -<span class="lineNum"> 2342 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> -<span class="lineNum"> 2343 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG_AGENT, &amp;var_bitmask);</span> -<span class="lineNum"> 2344 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2345 </span> : : case GPG_ALLOW_NO_SIGNING_PW: -<span class="lineNum"> 2346 </span> :<span class="lineNoCov"> 0 : options-&gt;use_gpg = 1;</span> -<span class="lineNum"> 2347 </span> :<span class="lineNoCov"> 0 : options-&gt;gpg_no_signing_pw = 1;</span> -<span class="lineNum"> 2348 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_GPG, &amp;var_bitmask);</span> -<span class="lineNum"> 2349 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_GPG_NO_SIGNING_PW, &amp;var_bitmask);</span> -<span class="lineNum"> 2350 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2351 </span> : : case NAT_LOCAL: -<span class="lineNum"> 2352 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_local = 1;</span> -<span class="lineNum"> 2353 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_LOCAL, &amp;var_bitmask);</span> -<span class="lineNum"> 2354 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2355 </span> : : case NAT_RAND_PORT: -<span class="lineNum"> 2356 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_rand_port = 1;</span> -<span class="lineNum"> 2357 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_RAND_PORT, &amp;var_bitmask);</span> -<span class="lineNum"> 2358 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2359 </span> : : case NAT_PORT: -<span class="lineNum"> 2360 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_port = strtol_wrapper(optarg, 0,</span> -<span class="lineNum"> 2361 </span> : : MAX_PORT, EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2362 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_NAT_PORT, &amp;var_bitmask);</span> -<span class="lineNum"> 2363 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2364 </span> : : case TIME_OFFSET_PLUS: -<span class="lineNum"> 2365 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! parse_time_offset(optarg, &amp;options-&gt;time_offset_plus))</span> -<span class="lineNum"> 2366 </span> : : { -<span class="lineNum"> 2367 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 2368 </span> : : &quot;Invalid time offset: '%s'&quot;, optarg); -<span class="lineNum"> 2369 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2370 </span> : : } -<span class="lineNum"> 2371 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_TIME_OFFSET, &amp;var_bitmask);</span> -<span class="lineNum"> 2372 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2373 </span> : : case TIME_OFFSET_MINUS: -<span class="lineNum"> 2374 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! parse_time_offset(optarg, &amp;options-&gt;time_offset_minus))</span> -<span class="lineNum"> 2375 </span> : : { -<span class="lineNum"> 2376 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 2377 </span> : : &quot;Invalid time offset: '%s'&quot;, optarg); -<span class="lineNum"> 2378 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2379 </span> : : } -<span class="lineNum"> 2380 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_TIME_OFFSET, &amp;var_bitmask);</span> -<span class="lineNum"> 2381 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2382 </span> : : case USE_HMAC: -<span class="lineNum"> 2383 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_HMAC, &amp;var_bitmask);</span> -<span class="lineNum"> 2384 </span> :<span class="lineNoCov"> 0 : options-&gt;use_hmac = 1;</span> -<span class="lineNum"> 2385 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2386 </span> : : case USE_WGET_USER_AGENT: -<span class="lineNum"> 2387 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_USE_WGET_USER_AGENT, &amp;var_bitmask);</span> -<span class="lineNum"> 2388 </span> :<span class="lineNoCov"> 0 : options-&gt;use_wget_user_agent = 1;</span> -<span class="lineNum"> 2389 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2390 </span> : : case FORCE_SAVE_RC_STANZA: -<span class="lineNum"> 2391 </span> :<span class="lineNoCov"> 0 : options-&gt;force_save_rc_stanza = 1;</span> -<span class="lineNum"> 2392 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2393 </span> : : case FD_SET_STDIN: -<span class="lineNum"> 2394 </span> :<span class="lineNoCov"> 0 : options-&gt;input_fd = STDIN_FILENO;</span> -<span class="lineNum"> 2395 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2396 </span> : : case FD_SET_ALT: -<span class="lineNum"> 2397 </span> : : #ifdef WIN32 -<span class="lineNum"> 2398 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;Read password from FD not supported on Windows&quot;); -<span class="lineNum"> 2399 </span> : : exit(EXIT_FAILURE); -<span class="lineNum"> 2400 </span> : : #endif -<span class="lineNum"> 2401 </span> :<span class="lineNoCov"> 0 : options-&gt;input_fd = strtol_wrapper(optarg, 0,</span> -<span class="lineNum"> 2402 </span> : : -1, EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 2403 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 2404 </span> : : default: -<span class="lineNum"> 2405 </span> :<span class="lineNoCov"> 0 : usage();</span> -<span class="lineNum"> 2406 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 2407 </span> : : } -<span class="lineNum"> 2408 </span> : : } -<span class="lineNum"> 2409 </span> : : -<span class="lineNum"> 2410 </span> : : /* Now that we have all of our options set, we can validate them */ -<span class="lineNum"> 2411 </span> :<span class="lineCov"> 609 : validate_options(options);</span> -<span class="lineNum"> 2412 </span> : : -<span class="lineNum"> 2413 </span> : : /* Generate Rijndael + HMAC keys from /dev/random and base64 encode -<span class="lineNum"> 2414 </span> : : */ -<span class="lineNum"> 2415 </span> :<span class="lineCov"> 566 : generate_keys(options);</span> -<span class="lineNum"> 2416 </span> : : -<span class="lineNum"> 2417 </span> : : /* We can upgrade our settings with the parameters set on the command -<span class="lineNum"> 2418 </span> : : * line by the user */ -<span class="lineNum"> 2419 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (options-&gt;save_rc_stanza == 1)</span> -<span class="lineNum"> 2420 </span> : : { -<span class="lineNum"> 2421 </span> : : /* If we are asked to generate keys, we add them to the bitmask so -<span class="lineNum"> 2422 </span> : : * that they can be added to the stanza when updated */ -<span class="lineNum"> 2423 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;key_gen == 1)</span> -<span class="lineNum"> 2424 </span> : : { -<span class="lineNum"> 2425 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64, &amp;var_bitmask);</span> -<span class="lineNum"> 2426 </span> :<span class="lineNoCov"> 0 : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_HMAC_BASE64, &amp;var_bitmask);</span> -<span class="lineNum"> 2427 </span> : : } -<span class="lineNum"> 2428 </span> : : else; -<span class="lineNum"> 2429 </span> : : -<span class="lineNum"> 2430 </span> :<span class="lineNoCov"> 0 : update_rc(options, &amp;var_bitmask);</span> -<span class="lineNum"> 2431 </span> : : } -<span class="lineNum"> 2432 </span> : : else; -<span class="lineNum"> 2433 </span> : : -<span class="lineNum"> 2434 </span> :<span class="lineCov"> 566 : keys_status(options);</span> -<span class="lineNum"> 2435 </span> : : -<span class="lineNum"> 2436 </span> :<span class="lineCov"> 566 : return;</span> -<span class="lineNum"> 2437 </span> : : } -<span class="lineNum"> 2438 </span> : : -<span class="lineNum"> 2439 </span> : : /* Print usage message... -<a name="2440"><span class="lineNum"> 2440 </span> : : */</a> -<span class="lineNum"> 2441 </span> : : void -<span class="lineNum"> 2442 </span> :<span class="lineNoCov"> 0 : usage(void)</span> -<span class="lineNum"> 2443 </span> : : { -<span class="lineNum"> 2444 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 2445 </span> : : &quot;\n%s client version %s\n%s - http://%s/fwknop/\n&quot;, -<span class="lineNum"> 2446 </span> : : MY_NAME, MY_VERSION, MY_DESC, HTTP_RESOLVE_HOST); -<span class="lineNum"> 2447 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 2448 </span> : : &quot;Usage: fwknop -A &lt;port list&gt; [-s|-R|-a] -D &lt;spa_server&gt; [options]\n\n&quot; -<span class="lineNum"> 2449 </span> : : &quot; -n, --named-config Specify a named configuration stanza in the\n&quot; -<span class="lineNum"> 2450 </span> : : &quot; '$HOME/.fwknoprc' file to provide some of all\n&quot; -<span class="lineNum"> 2451 </span> : : &quot; of the configuration parameters.\n&quot; -<span class="lineNum"> 2452 </span> : : &quot; If more arguments are set through the command\n&quot; -<span class="lineNum"> 2453 </span> : : &quot; line, the configuration is updated accordingly.\n&quot; -<span class="lineNum"> 2454 </span> : : &quot; -A, --access Provide a list of ports/protocols to open\n&quot; -<span class="lineNum"> 2455 </span> : : &quot; on the server (e.g. 'tcp/22').\n&quot; -<span class="lineNum"> 2456 </span> : : &quot; -a, --allow-ip Specify IP address to allow within the SPA\n&quot; -<span class="lineNum"> 2457 </span> : : &quot; packet (e.g. '123.2.3.4'). If \n&quot; -<span class="lineNum"> 2458 </span> : : &quot; -D, --destination Specify the hostname or IP address of the\n&quot; -<span class="lineNum"> 2459 </span> : : &quot; fwknop server.\n&quot; -<span class="lineNum"> 2460 </span> : : &quot; --use-hmac Add an HMAC to the outbound SPA packet for\n&quot; -<span class="lineNum"> 2461 </span> : : &quot; authenticated encryption.\n&quot; -<span class="lineNum"> 2462 </span> : : &quot; -h, --help Print this usage message and exit.\n&quot; -<span class="lineNum"> 2463 </span> : : &quot; -B, --save-packet Save the generated packet data to the\n&quot; -<span class="lineNum"> 2464 </span> : : &quot; specified file.\n&quot; -<span class="lineNum"> 2465 </span> : : &quot; -b, --save-packet-append Append the generated packet data to the\n&quot; -<span class="lineNum"> 2466 </span> : : &quot; file specified with the -B option.\n&quot; -<span class="lineNum"> 2467 </span> : : &quot; -C, --server-cmd Specify a command that the fwknop server will\n&quot; -<span class="lineNum"> 2468 </span> : : &quot; execute on behalf of the fwknop client..\n&quot; -<span class="lineNum"> 2469 </span> : : &quot; -N, --nat-access Gain NAT access to an internal service.\n&quot; -<span class="lineNum"> 2470 </span> : : &quot; -p, --server-port Set the destination port for outgoing SPA\n&quot; -<span class="lineNum"> 2471 </span> : : &quot; packet.\n&quot; -<span class="lineNum"> 2472 </span> : : &quot; -P, --server-proto Set the protocol (udp, tcp, http, tcpraw,\n&quot; -<span class="lineNum"> 2473 </span> : : &quot; icmp) for the outgoing SPA packet.\n&quot; -<span class="lineNum"> 2474 </span> : : &quot; Note: The 'tcpraw' and 'icmp' modes use raw\n&quot; -<span class="lineNum"> 2475 </span> : : &quot; sockets and thus require root access to use.\n&quot; -<span class="lineNum"> 2476 </span> : : &quot; -s, --source-ip Tell the fwknopd server to accept whatever\n&quot; -<span class="lineNum"> 2477 </span> : : &quot; source IP the SPA packet has as the IP that\n&quot; -<span class="lineNum"> 2478 </span> : : &quot; needs access (not recommended, and the\n&quot; -<span class="lineNum"> 2479 </span> : : &quot; fwknopd server can ignore such requests).\n&quot; -<span class="lineNum"> 2480 </span> : : &quot; -S, --source-port Set the source port for outgoing SPA packet.\n&quot; -<span class="lineNum"> 2481 </span> : : &quot; -Q, --spoof-source Set the source IP for outgoing SPA packet.\n&quot; -<span class="lineNum"> 2482 </span> : : &quot; -R, --resolve-ip-https Resolve the external network IP by\n&quot; -<span class="lineNum"> 2483 </span> : : &quot; connecting to a URL such as the default of:\n&quot; -<span class="lineNum"> 2484 </span> : : &quot; https://&quot; HTTP_RESOLVE_HOST HTTP_RESOLVE_URL &quot;\n&quot; -<span class="lineNum"> 2485 </span> : : &quot; with wget in --secure-protocol mode (SSL).\n&quot; -<span class="lineNum"> 2486 </span> : : &quot; The URL can be overridden with the\n&quot; -<span class="lineNum"> 2487 </span> : : &quot; --resolve-url option.\n&quot; -<span class="lineNum"> 2488 </span> : : &quot; --resolve-http-only Force external IP resolution via HTTP instead\n&quot; -<span class="lineNum"> 2489 </span> : : &quot; HTTPS (via the URL mentioned above). This is\n&quot; -<span class="lineNum"> 2490 </span> : : &quot; not recommended since it would open fwknop\n&quot; -<span class="lineNum"> 2491 </span> : : &quot; to potential MITM attacks if the IP resolution\n&quot; -<span class="lineNum"> 2492 </span> : : &quot; HTTP connection is altered en-route by a third\n&quot; -<span class="lineNum"> 2493 </span> : : &quot; party.\n&quot; -<span class="lineNum"> 2494 </span> : : &quot; --resolve-url Override the default URL used for resolving\n&quot; -<span class="lineNum"> 2495 </span> : : &quot; the source IP address.\n&quot; -<span class="lineNum"> 2496 </span> : : &quot; -u, --user-agent Set the HTTP User-Agent for resolving the\n&quot; -<span class="lineNum"> 2497 </span> : : &quot; external IP via -R, or for sending SPA\n&quot; -<span class="lineNum"> 2498 </span> : : &quot; packets over HTTP. The default is\n&quot; -<span class="lineNum"> 2499 </span> : : &quot; Fwknop/&lt;version&gt; if this option is not used.\n&quot; -<span class="lineNum"> 2500 </span> : : &quot; --use-wget-user-agent Use the default wget User-Agent string instead\n&quot; -<span class="lineNum"> 2501 </span> : : &quot; of Fwknop/&lt;version&gt;.\n&quot; -<span class="lineNum"> 2502 </span> : : &quot; -w, --wget-cmd Manually set the path to wget in -R mode.\n&quot; -<span class="lineNum"> 2503 </span> : : &quot; -H, --http-proxy Specify an HTTP proxy host through which the\n&quot; -<span class="lineNum"> 2504 </span> : : &quot; SPA packet will be sent. The port can also be\n&quot; -<span class="lineNum"> 2505 </span> : : &quot; specified here by following the host/ip with\n&quot; -<span class="lineNum"> 2506 </span> : : &quot; \&quot;:&lt;port&gt;\&quot;.\n&quot; -<span class="lineNum"> 2507 </span> : : &quot; -U, --spoof-user Set the username within outgoing SPA packet.\n&quot; -<span class="lineNum"> 2508 </span> : : &quot; -l, --last-cmd Run the fwknop client with the same command\n&quot; -<span class="lineNum"> 2509 </span> : : &quot; line args as the last time it was executed\n&quot; -<span class="lineNum"> 2510 </span> : : &quot; (args are read from the ~/.fwknop.run file).\n&quot; -<span class="lineNum"> 2511 </span> : : &quot; -G, --get-key Load an encryption key/password from a file.\n&quot; -<span class="lineNum"> 2512 </span> : : &quot; --stdin Read the encryption key/password from stdin\n&quot; -<span class="lineNum"> 2513 </span> : : &quot; --fd Specify the file descriptor to read the\n&quot; -<span class="lineNum"> 2514 </span> : : &quot; encryption key/password from.\n&quot; -<span class="lineNum"> 2515 </span> : : &quot; -k, --key-gen Generate SPA Rijndael + HMAC keys.\n&quot; -<span class="lineNum"> 2516 </span> : : &quot; -K, --key-gen-file Write generated Rijndael + HMAC keys to a\n&quot; -<span class="lineNum"> 2517 </span> : : &quot; file\n&quot; -<span class="lineNum"> 2518 </span> : : &quot; --key-rijndael Specify the Rijndael key. Since the password is\n&quot; -<span class="lineNum"> 2519 </span> : : &quot; visible to utilities (like 'ps' under Unix)\n&quot; -<span class="lineNum"> 2520 </span> : : &quot; this form should only be used where security is\n&quot; -<span class="lineNum"> 2521 </span> : : &quot; not important.\n&quot; -<span class="lineNum"> 2522 </span> : : &quot; --key-base64-rijndael Specify the base64 encoded Rijndael key. Since\n&quot; -<span class="lineNum"> 2523 </span> : : &quot; the password is visible to utilities (like 'ps'\n&quot; -<span class="lineNum"> 2524 </span> : : &quot; under Unix) this form should only be used where\n&quot; -<span class="lineNum"> 2525 </span> : : &quot; security is not important.\n&quot; -<span class="lineNum"> 2526 </span> : : &quot; --key-base64-hmac Specify the base64 encoded HMAC key. Since the\n&quot; -<span class="lineNum"> 2527 </span> : : &quot; password is visible to utilities (like 'ps'\n&quot; -<span class="lineNum"> 2528 </span> : : &quot; under Unix) this form should only be used where\n&quot; -<span class="lineNum"> 2529 </span> : : &quot; security is not important.\n&quot; -<span class="lineNum"> 2530 </span> : : &quot; -r, --rand-port Send the SPA packet over a randomly assigned\n&quot; -<span class="lineNum"> 2531 </span> : : &quot; port (requires a broader pcap filter on the\n&quot; -<span class="lineNum"> 2532 </span> : : &quot; server side than the default of udp 62201).\n&quot; -<span class="lineNum"> 2533 </span> : : &quot; -T, --test Build the SPA packet but do not send it over\n&quot; -<span class="lineNum"> 2534 </span> : : &quot; the network.\n&quot; -<span class="lineNum"> 2535 </span> : : &quot; -v, --verbose Set verbose mode (may specify multiple times).\n&quot; -<span class="lineNum"> 2536 </span> : : &quot; -V, --version Print version number.\n&quot; -<span class="lineNum"> 2537 </span> : : &quot; -m, --digest-type Specify the message digest algorithm to use.\n&quot; -<span class="lineNum"> 2538 </span> : : &quot; (md5, sha1, sha256, sha384, or sha512). The\n&quot; -<span class="lineNum"> 2539 </span> : : &quot; default is sha256.\n&quot; -<span class="lineNum"> 2540 </span> : : &quot; -M, --encryption-mode Specify the encryption mode when AES is used\n&quot; -<span class="lineNum"> 2541 </span> : : &quot; for encrypting SPA packets.The default is CBC\n&quot; -<span class="lineNum"> 2542 </span> : : &quot; mode, but others can be chosen such as CFB or\n&quot; -<span class="lineNum"> 2543 </span> : : &quot; OFB as long as this is also specified in the\n&quot; -<span class="lineNum"> 2544 </span> : : &quot; access.conf file on the server side. Note that\n&quot; -<span class="lineNum"> 2545 </span> : : &quot; the string ``legacy'' can be specified in order\n&quot; -<span class="lineNum"> 2546 </span> : : &quot; to generate SPA packets with the old initialization\n&quot; -<span class="lineNum"> 2547 </span> : : &quot; vector strategy used by versions of *fwknop*\n&quot; -<span class="lineNum"> 2548 </span> : : &quot; before 2.5.\n&quot; -<span class="lineNum"> 2549 </span> : : &quot; -f, --fw-timeout Specify SPA server firewall timeout from the\n&quot; -<span class="lineNum"> 2550 </span> : : &quot; client side.\n&quot; -<span class="lineNum"> 2551 </span> : : &quot; --hmac-digest-type Set the HMAC digest algorithm (default is\n&quot; -<span class="lineNum"> 2552 </span> : : &quot; sha256). Options are md5, sha1, sha256,\n&quot; -<span class="lineNum"> 2553 </span> : : &quot; sha384, or sha512.\n&quot; -<span class="lineNum"> 2554 </span> : : &quot; --icmp-type Set the ICMP type (used with '-P icmp')\n&quot; -<span class="lineNum"> 2555 </span> : : &quot; --icmp-code Set the ICMP code (used with '-P icmp')\n&quot; -<span class="lineNum"> 2556 </span> : : &quot; --gpg-encryption Use GPG encryption (default is Rijndael).\n&quot; -<span class="lineNum"> 2557 </span> : : &quot; --gpg-recipient-key Specify the recipient GPG key name or ID.\n&quot; -<span class="lineNum"> 2558 </span> : : &quot; --gpg-signer-key Specify the signer's GPG key name or ID.\n&quot; -<span class="lineNum"> 2559 </span> : : &quot; --gpg-home-dir Specify the GPG home directory.\n&quot; -<span class="lineNum"> 2560 </span> : : &quot; --gpg-agent Use GPG agent if available.\n&quot; -<span class="lineNum"> 2561 </span> : : &quot; --gpg-exe Set path to GPG binary.\n&quot; -<span class="lineNum"> 2562 </span> : : &quot; --no-save-args Do not save fwknop command line args to the\n&quot; -<span class="lineNum"> 2563 </span> : : &quot; $HOME/fwknop.run file\n&quot; -<span class="lineNum"> 2564 </span> : : &quot; --rc-file Specify path to the fwknop rc file (default\n&quot; -<span class="lineNum"> 2565 </span> : : &quot; is $HOME/.fwknoprc)\n&quot; -<span class="lineNum"> 2566 </span> : : &quot; --save-rc-stanza Save command line arguments to the\n&quot; -<span class="lineNum"> 2567 </span> : : &quot; $HOME/.fwknoprc stanza specified with the\n&quot; -<span class="lineNum"> 2568 </span> : : &quot; -n option.\n&quot; -<span class="lineNum"> 2569 </span> : : &quot; --force-stanza Used with --save-rc-stanza to overwrite all of\n&quot; -<span class="lineNum"> 2570 </span> : : &quot; the variables for the specified stanza\n&quot; -<span class="lineNum"> 2571 </span> : : &quot; --stanza-list Dump a list of the stanzas found in\n&quot; -<span class="lineNum"> 2572 </span> : : &quot; $HOME/.fwknoprc\n&quot; -<span class="lineNum"> 2573 </span> : : &quot; --nat-local Access a local service via a forwarded port\n&quot; -<span class="lineNum"> 2574 </span> : : &quot; on the fwknopd server system.\n&quot; -<span class="lineNum"> 2575 </span> : : &quot; --nat-port Specify the port to forward to access a\n&quot; -<span class="lineNum"> 2576 </span> : : &quot; service via NAT.\n&quot; -<span class="lineNum"> 2577 </span> : : &quot; --nat-rand-port Have the fwknop client assign a random port\n&quot; -<span class="lineNum"> 2578 </span> : : &quot; for NAT access.\n&quot; -<span class="lineNum"> 2579 </span> : : &quot; --show-last Show the last fwknop command line arguments.\n&quot; -<span class="lineNum"> 2580 </span> : : &quot; --time-offset-plus Add time to outgoing SPA packet timestamp.\n&quot; -<span class="lineNum"> 2581 </span> : : &quot; --time-offset-minus Subtract time from outgoing SPA packet\n&quot; -<span class="lineNum"> 2582 </span> : : &quot; timestamp.\n&quot; -<span class="lineNum"> 2583 </span> : : ); -<span class="lineNum"> 2584 </span> : : -<span class="lineNum"> 2585 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 2586 </span> : : } -<span class="lineNum"> 2587 </span> : : -<span class="lineNum"> 2588 </span> : : #ifdef HAVE_C_UNIT_TESTS -<span class="lineNum"> 2589 </span> : : -<span class="lineNum"> 2590 </span> : : DECLARE_TEST_SUITE_INIT(config_init) -<span class="lineNum"> 2591 </span> : : { -<span class="lineNum"> 2592 </span> : : log_set_verbosity(LOG_VERBOSITY_ERROR); -<span class="lineNum"> 2593 </span> : : return 0; -<span class="lineNum"> 2594 </span> : : } -<span class="lineNum"> 2595 </span> : : -<span class="lineNum"> 2596 </span> : : DECLARE_TEST_SUITE_CLEANUP(config_init) -<span class="lineNum"> 2597 </span> : : { -<span class="lineNum"> 2598 </span> : : return 0; -<span class="lineNum"> 2599 </span> : : } -<span class="lineNum"> 2600 </span> : : -<span class="lineNum"> 2601 </span> : : DECLARE_UTEST(critical_var, &quot;Check critcial vars&quot;) -<span class="lineNum"> 2602 </span> : : { -<span class="lineNum"> 2603 </span> : : CU_ASSERT(var_is_critical(FWKNOP_CLI_ARG_KEY_RIJNDAEL) == 1); -<span class="lineNum"> 2604 </span> : : CU_ASSERT(var_is_critical(FWKNOP_CLI_ARG_WGET_CMD) == 0); -<span class="lineNum"> 2605 </span> : : } -<span class="lineNum"> 2606 </span> : : -<span class="lineNum"> 2607 </span> : : DECLARE_UTEST(check_var_bitmask, &quot;Check var_bitmask functions&quot;) -<span class="lineNum"> 2608 </span> : : { -<span class="lineNum"> 2609 </span> : : fko_var_bitmask_t var_bitmask; -<span class="lineNum"> 2610 </span> : : -<span class="lineNum"> 2611 </span> : : memset(&amp;var_bitmask, 0x00, sizeof(fko_var_bitmask_t)); -<span class="lineNum"> 2612 </span> : : -<span class="lineNum"> 2613 </span> : : add_var_to_bitmask(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask); -<span class="lineNum"> 2614 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask) == 1); -<span class="lineNum"> 2615 </span> : : CU_ASSERT(var_bitmask.dw[0] == 1); -<span class="lineNum"> 2616 </span> : : remove_var_from_bitmask(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask); -<span class="lineNum"> 2617 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_FIRST_ARG, &amp;var_bitmask) == 0); -<span class="lineNum"> 2618 </span> : : CU_ASSERT(var_bitmask.dw[0] == 0); -<span class="lineNum"> 2619 </span> : : -<span class="lineNum"> 2620 </span> : : add_var_to_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask); -<span class="lineNum"> 2621 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask) == 1); -<span class="lineNum"> 2622 </span> : : remove_var_from_bitmask(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask); -<span class="lineNum"> 2623 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_ARG_KEY_RIJNDAEL, &amp;var_bitmask) == 0); -<span class="lineNum"> 2624 </span> : : -<span class="lineNum"> 2625 </span> : : add_var_to_bitmask(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask); -<span class="lineNum"> 2626 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask) == 1); -<span class="lineNum"> 2627 </span> : : remove_var_from_bitmask(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask); -<span class="lineNum"> 2628 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG, &amp;var_bitmask) == 0); -<span class="lineNum"> 2629 </span> : : -<span class="lineNum"> 2630 </span> : : add_var_to_bitmask(FWKNOP_CLI_LAST_ARG+32, &amp;var_bitmask); -<span class="lineNum"> 2631 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG+32, &amp;var_bitmask) == 0); -<span class="lineNum"> 2632 </span> : : -<span class="lineNum"> 2633 </span> : : add_var_to_bitmask(FWKNOP_CLI_LAST_ARG+34, &amp;var_bitmask); -<span class="lineNum"> 2634 </span> : : CU_ASSERT(bitmask_has_var(FWKNOP_CLI_LAST_ARG+34, &amp;var_bitmask) == 0); -<span class="lineNum"> 2635 </span> : : } -<span class="lineNum"> 2636 </span> : : -<span class="lineNum"> 2637 </span> : : int register_ts_config_init(void) -<span class="lineNum"> 2638 </span> : : { -<span class="lineNum"> 2639 </span> : : ts_init(&amp;TEST_SUITE(config_init), TEST_SUITE_DESCR(config_init), TEST_SUITE_INIT(config_init), TEST_SUITE_CLEANUP(config_init)); -<span class="lineNum"> 2640 </span> : : ts_add_utest(&amp;TEST_SUITE(config_init), UTEST_FCT(critical_var), UTEST_DESCR(critical_var)); -<span class="lineNum"> 2641 </span> : : ts_add_utest(&amp;TEST_SUITE(config_init), UTEST_FCT(check_var_bitmask), UTEST_DESCR(check_var_bitmask)); -<span class="lineNum"> 2642 </span> : : -<span class="lineNum"> 2643 </span> : : return register_ts(&amp;TEST_SUITE(config_init)); -<span class="lineNum"> 2644 </span> : : } -<span class="lineNum"> 2645 </span> : : -<span class="lineNum"> 2646 </span> : : #endif /* HAVE_C_UNIT_TESTS */ -<span class="lineNum"> 2647 </span> : : -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html deleted file mode 100644 index 0a6925e2..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func-sort-c.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/fwknop.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - fwknop.c<span style="font-size: 80%;"> (<a href="fwknop.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">245</td> - <td class="headerCovTableEntry">496</td> - <td class="headerCovTableEntryLo">49.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntryLo">66.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">129</td> - <td class="headerCovTableEntry">328</td> - <td class="headerCovTableEntryLo">39.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fwknop.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1288">zero_buf_wrapper</a></td> - <td class="coverFnHi">5660</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#145">main</a></td> - <td class="coverFnHi">2085</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1331">clean_exit</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1088">set_message_type</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1052">save_args</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#921">prev_exec</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#664">free_configs</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1030">get_save_file</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#756">set_access_buf</a></td> - <td class="coverFnHi">565</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1124">get_keys</a></td> - <td class="coverFnHi">439</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1282">errmsg</a></td> - <td class="coverFnHi">176</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#681">get_rand_port</a></td> - <td class="coverFnHi">5</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#728">ipv4_str_has_port</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#983">run_last_args</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#826">set_nat_access</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#952">show_last_command</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#102">is_hostname_str_with_port</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#77">is_ipv6_str.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html deleted file mode 100644 index 0989d771..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.func.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/fwknop.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - fwknop.c<span style="font-size: 80%;"> (<a href="fwknop.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">245</td> - <td class="headerCovTableEntry">496</td> - <td class="headerCovTableEntryLo">49.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntryLo">66.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">129</td> - <td class="headerCovTableEntry">328</td> - <td class="headerCovTableEntryLo">39.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fwknop.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1331">clean_exit</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1282">errmsg</a></td> - <td class="coverFnHi">176</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#664">free_configs</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1124">get_keys</a></td> - <td class="coverFnHi">439</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#681">get_rand_port</a></td> - <td class="coverFnHi">5</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1030">get_save_file</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#728">ipv4_str_has_port</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#102">is_hostname_str_with_port</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#77">is_ipv6_str.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#145">main</a></td> - <td class="coverFnHi">2085</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#921">prev_exec</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#983">run_last_args</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1052">save_args</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#756">set_access_buf</a></td> - <td class="coverFnHi">565</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1088">set_message_type</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#826">set_nat_access</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#952">show_last_command</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknop.c.gcov.html#1288">zero_buf_wrapper</a></td> - <td class="coverFnHi">5660</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html deleted file mode 100644 index 58f758b3..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/fwknop.c.gcov.html +++ /dev/null @@ -1,1440 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/fwknop.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - fwknop.c<span style="font-size: 80%;"> (source / <a href="fwknop.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">245</td> - <td class="headerCovTableEntry">496</td> - <td class="headerCovTableEntryLo">49.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntryLo">66.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">129</td> - <td class="headerCovTableEntry">328</td> - <td class="headerCovTableEntryLo">39.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /**</a> -<span class="lineNum"> 2 </span> : : * @file fwknop.c -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * @brief The fwknop client. -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 7 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 8 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * License (GNU General Public License): -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 13 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 14 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 15 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 16 </span> : : * -<span class="lineNum"> 17 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 18 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 19 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 20 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 21 </span> : : * -<span class="lineNum"> 22 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 23 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 24 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 25 </span> : : * USA -<span class="lineNum"> 26 </span> : : */ -<span class="lineNum"> 27 </span> : : -<span class="lineNum"> 28 </span> : : #include &quot;fwknop.h&quot; -<span class="lineNum"> 29 </span> : : #include &quot;config_init.h&quot; -<span class="lineNum"> 30 </span> : : #include &quot;spa_comm.h&quot; -<span class="lineNum"> 31 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;getpasswd.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #include &lt;sys/stat.h&gt; -<span class="lineNum"> 35 </span> : : #include &lt;fcntl.h&gt; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : -<span class="lineNum"> 38 </span> : : /* prototypes -<span class="lineNum"> 39 </span> : : */ -<span class="lineNum"> 40 </span> : : static int get_keys(fko_ctx_t ctx, fko_cli_options_t *options, -<span class="lineNum"> 41 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len); -<span class="lineNum"> 42 </span> : : static void errmsg(const char *msg, const int err); -<span class="lineNum"> 43 </span> : : static int prev_exec(fko_cli_options_t *options, int argc, char **argv); -<span class="lineNum"> 44 </span> : : static int get_save_file(char *args_save_file); -<span class="lineNum"> 45 </span> : : static int show_last_command(const char * const args_save_file); -<span class="lineNum"> 46 </span> : : static int save_args(int argc, char **argv, const char * const args_save_file); -<span class="lineNum"> 47 </span> : : static int run_last_args(fko_cli_options_t *options, -<span class="lineNum"> 48 </span> : : const char * const args_save_file); -<span class="lineNum"> 49 </span> : : static int set_message_type(fko_ctx_t ctx, fko_cli_options_t *options); -<span class="lineNum"> 50 </span> : : static int set_nat_access(fko_ctx_t ctx, fko_cli_options_t *options, -<span class="lineNum"> 51 </span> : : const char * const access_buf); -<span class="lineNum"> 52 </span> : : static int set_access_buf(fko_ctx_t ctx, fko_cli_options_t *options, -<span class="lineNum"> 53 </span> : : char *access_buf); -<span class="lineNum"> 54 </span> : : static int get_rand_port(fko_ctx_t ctx); -<span class="lineNum"> 55 </span> : : int resolve_ip_https(fko_cli_options_t *options); -<span class="lineNum"> 56 </span> : : int resolve_ip_http(fko_cli_options_t *options); -<span class="lineNum"> 57 </span> : : static void clean_exit(fko_ctx_t ctx, fko_cli_options_t *opts, -<span class="lineNum"> 58 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len, -<span class="lineNum"> 59 </span> : : unsigned int exit_status); -<span class="lineNum"> 60 </span> : : static void zero_buf_wrapper(char *buf, int len); -<span class="lineNum"> 61 </span> : : static int is_hostname_str_with_port(const char *str, -<span class="lineNum"> 62 </span> : : char *hostname, size_t hostname_bufsize, int *port); -<span class="lineNum"> 63 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 64 </span> : : static int enable_fault_injections(fko_cli_options_t * const opts); -<span class="lineNum"> 65 </span> : : #endif -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> : : #define NAT_ACCESS_STR_TEMPLATE &quot;%s,%d&quot; /*!&lt; Template for a nat access string ip,port with sscanf*/ -<span class="lineNum"> 68 </span> : : #define HOSTNAME_BUFSIZE 64 /*!&lt; Maximum size of a hostname string */ -<span class="lineNum"> 69 </span> : : #define CTX_DUMP_BUFSIZE 4096 /*!&lt; Maximum size allocated to a FKO context dump */ -<span class="lineNum"> 70 </span> : : -<span class="lineNum"> 71 </span> : : /** -<span class="lineNum"> 72 </span> : : * @brief Check whether a string is an ipv6 address or not -<span class="lineNum"> 73 </span> : : * -<span class="lineNum"> 74 </span> : : * @param str String to check for an ipv6 address. -<span class="lineNum"> 75 </span> : : * -<span class="lineNum"> 76 </span> : : * @return 1 if the string is an ipv6 address, 0 otherwise. -<a name="77"><span class="lineNum"> 77 </span> : : */</a> -<span class="lineNum"> 78 </span> : : static int -<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : is_ipv6_str(char *str)</span> -<span class="lineNum"> 80 </span> : : { -<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 82 </span> : : } -<span class="lineNum"> 83 </span> : : -<span class="lineNum"> 84 </span> : : /** -<span class="lineNum"> 85 </span> : : * @brief Check a string to find out if it is built as 'hostname,port' -<span class="lineNum"> 86 </span> : : * -<span class="lineNum"> 87 </span> : : * This function check if we can extract an hostname and a port from the string. -<span class="lineNum"> 88 </span> : : * If yes, we return 1, and both the hostname buffer and the port number are set -<span class="lineNum"> 89 </span> : : * accordingly. -<span class="lineNum"> 90 </span> : : * -<span class="lineNum"> 91 </span> : : * We could have used sscanf() here with a template &quot;%[^,],%u&quot;, but this way we -<span class="lineNum"> 92 </span> : : * do not limit the size of the value copy in the hostname destination buffer. -<span class="lineNum"> 93 </span> : : * Limiting the string in the sscanf() can be done but would prevent any easy change -<span class="lineNum"> 94 </span> : : * for the hostname buffer size. -<span class="lineNum"> 95 </span> : : * -<span class="lineNum"> 96 </span> : : * @param str String to parse. -<span class="lineNum"> 97 </span> : : * @param hostname Buffer where to store the hostname value read from @str. -<span class="lineNum"> 98 </span> : : * @param hostname_bufsize Hostname buffer size. -<span class="lineNum"> 99 </span> : : * @param port Value of the port read from @str. -<span class="lineNum"> 100 </span> : : * -<span class="lineNum"> 101 </span> : : * @return 1 if the string is built as 'hostname,port', 0 otherwise. -<a name="102"><span class="lineNum"> 102 </span> : : */</a> -<span class="lineNum"> 103 </span> : : static int -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : is_hostname_str_with_port(const char *str, char *hostname, size_t hostname_bufsize, int *port)</span> -<span class="lineNum"> 105 </span> : : { -<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : int valid = 0; /* Result of the function */</span> -<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : char buf[MAX_LINE_LEN] = {0}; /* Copy of the buffer eg. &quot;hostname,port&quot; */</span> -<span class="lineNum"> 108 </span> : : char *h; /* Pointer on the hostname string */ -<span class="lineNum"> 109 </span> : : char *p; /* Ponter on the port string */ -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> : : memset(hostname, 0, hostname_bufsize); -<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : *port = 0;</span> -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : /* Replace the comma in the string with a NULL char to split the -<span class="lineNum"> 115 </span> : : * buffer in two strings (hostname and port) */ -<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, str, sizeof(buf));</span> -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : p = strchr(buf, ',');</span> -<span class="lineNum"> 118 </span> : : -<span class="lineNum"> 119 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(p != NULL)</span> -<span class="lineNum"> 120 </span> : : { -<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : *p++ = 0;</span> -<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : h = buf;</span> -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : *port = atoi(p);</span> -<span class="lineNum"> 125 </span> : : -<span class="lineNum"> 126 </span> : : /* If the string does not match an ipv4 or ipv6 address we assume this -<span class="lineNum"> 127 </span> : : * is an hostname. We make sure the port is in the good range too */ -<span class="lineNum"> 128 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( (is_valid_ipv4_addr(buf) == 0)</span> -<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (is_ipv6_str(buf) == 0)</span> -<span class="lineNum"> 130 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; ((*port &gt; 0) &amp;&amp; (*port &lt; 65536)) )</span> -<span class="lineNum"> 131 </span> : : { -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : strlcpy(hostname, h, hostname_bufsize);</span> -<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : valid = 1;</span> -<span class="lineNum"> 134 </span> : : } -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> : : /* The port is out of range or the ip is an ipv6 or ipv4 address */ -<span class="lineNum"> 137 </span> : : else; -<span class="lineNum"> 138 </span> : : } -<span class="lineNum"> 139 </span> : : -<span class="lineNum"> 140 </span> : : /* No port found in the string, let's skip */ -<span class="lineNum"> 141 </span> : : else; -<span class="lineNum"> 142 </span> : : -<span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : return valid;</span> -<span class="lineNum"> 144 </span> : : } -<a name="145"><span class="lineNum"> 145 </span> : : </a> -<span class="lineNum"> 146 </span> : : int -<span class="lineNum"> 147 </span> :<span class="lineCov"> 2085 : main(int argc, char **argv)</span> -<span class="lineNum"> 148 </span> : : { -<span class="lineNum"> 149 </span> :<span class="lineCov"> 2085 : fko_ctx_t ctx = NULL;</span> -<span class="lineNum"> 150 </span> :<span class="lineCov"> 2085 : fko_ctx_t ctx2 = NULL;</span> -<span class="lineNum"> 151 </span> : : int res; -<span class="lineNum"> 152 </span> :<span class="lineCov"> 2085 : char *spa_data=NULL, *version=NULL;</span> -<span class="lineNum"> 153 </span> :<span class="lineCov"> 2085 : char access_buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 154 </span> :<span class="lineCov"> 2085 : char key[MAX_KEY_LEN+1] = {0};</span> -<span class="lineNum"> 155 </span> :<span class="lineCov"> 2085 : char hmac_key[MAX_KEY_LEN+1] = {0};</span> -<span class="lineNum"> 156 </span> :<span class="lineCov"> 2085 : int key_len = 0, orig_key_len = 0, hmac_key_len = 0, enc_mode;</span> -<span class="lineNum"> 157 </span> :<span class="lineCov"> 2085 : int tmp_port = 0;</span> -<span class="lineNum"> 158 </span> : : char dump_buf[CTX_DUMP_BUFSIZE]; -<span class="lineNum"> 159 </span> : : -<span class="lineNum"> 160 </span> : : fko_cli_options_t options; -<span class="lineNum"> 161 </span> : : -<span class="lineNum"> 162 </span> : : memset(&amp;options, 0x0, sizeof(fko_cli_options_t)); -<span class="lineNum"> 163 </span> : : -<span class="lineNum"> 164 </span> : : /* Initialize the log module */ -<span class="lineNum"> 165 </span> :<span class="lineCov"> 2085 : log_new();</span> -<span class="lineNum"> 166 </span> : : -<span class="lineNum"> 167 </span> : : /* Handle command line -<span class="lineNum"> 168 </span> : : */ -<span class="lineNum"> 169 </span> :<span class="lineCov"> 2085 : config_init(&amp;options, argc, argv);</span> -<span class="lineNum"> 170 </span> : : -<span class="lineNum"> 171 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 172 </span> : : /* Set any fault injection points early -<span class="lineNum"> 173 </span> : : */ -<span class="lineNum"> 174 </span> : : if(! enable_fault_injections(&amp;options)) -<span class="lineNum"> 175 </span> : : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key, -<span class="lineNum"> 176 </span> : : &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 177 </span> : : #endif -<span class="lineNum"> 178 </span> : : -<span class="lineNum"> 179 </span> : : /* Handle previous execution arguments if required -<span class="lineNum"> 180 </span> : : */ -<span class="lineNum"> 181 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(prev_exec(&amp;options, argc, argv) != 1)</span> -<span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key,</span> -<span class="lineNum"> 183 </span> : : &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 184 </span> : : -<span class="lineNum"> 185 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options.show_last_command)</span> -<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key,</span> -<span class="lineNum"> 187 </span> : : &amp;hmac_key_len, EXIT_SUCCESS); -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> : : /* Intialize the context -<span class="lineNum"> 190 </span> : : */ -<span class="lineNum"> 191 </span> :<span class="lineCov"> 566 : res = fko_new(&amp;ctx);</span> -<span class="lineNum"> 192 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 193 </span> : : { -<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_new&quot;, res);</span> -<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len, hmac_key,</span> -<span class="lineNum"> 196 </span> : : &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 197 </span> : : } -<span class="lineNum"> 198 </span> : : -<span class="lineNum"> 199 </span> : : /* Display version info and exit. -<span class="lineNum"> 200 </span> : : */ -<span class="lineNum"> 201 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options.version)</span> -<span class="lineNum"> 202 </span> : : { -<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : fko_get_version(ctx, &amp;version);</span> -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;fwknop client %s, FKO protocol version %s\n&quot;,</span> -<span class="lineNum"> 206 </span> : : MY_VERSION, version); -<span class="lineNum"> 207 </span> : : -<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 209 </span> : : hmac_key, &amp;hmac_key_len, EXIT_SUCCESS); -<span class="lineNum"> 210 </span> : : } -<span class="lineNum"> 211 </span> : : -<span class="lineNum"> 212 </span> : : /* Set client timeout -<span class="lineNum"> 213 </span> : : */ -<span class="lineNum"> 214 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 563 times"> + </span>]:<span class="lineCov"> 566 : if(options.fw_timeout &gt;= 0)</span> -<span class="lineNum"> 215 </span> : : { -<span class="lineNum"> 216 </span> :<span class="lineCov"> 3 : res = fko_set_spa_client_timeout(ctx, options.fw_timeout);</span> -<span class="lineNum"> 217 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 3 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 218 </span> : : { -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_client_timeout&quot;, res);</span> -<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 221 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 222 </span> : : } -<span class="lineNum"> 223 </span> : : } -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> : : /* Set the SPA packet message type based on command line options -<span class="lineNum"> 226 </span> : : */ -<span class="lineNum"> 227 </span> :<span class="lineCov"> 566 : res = set_message_type(ctx, &amp;options);</span> -<span class="lineNum"> 228 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 229 </span> : : { -<span class="lineNum"> 230 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_message_type&quot;, res);</span> -<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 232 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 233 </span> : : } -<span class="lineNum"> 234 </span> : : -<span class="lineNum"> 235 </span> : : /* Adjust the SPA timestamp if necessary -<span class="lineNum"> 236 </span> : : */ -<span class="lineNum"> 237 </span> [<span class="branchCov" title="Branch 0 was taken 75 times"> + </span><span class="branchCov" title="Branch 1 was taken 491 times"> + </span>]:<span class="lineCov"> 566 : if(options.time_offset_plus &gt; 0)</span> -<span class="lineNum"> 238 </span> : : { -<span class="lineNum"> 239 </span> :<span class="lineCov"> 75 : res = fko_set_timestamp(ctx, options.time_offset_plus);</span> -<span class="lineNum"> 240 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 75 times"> + </span>]:<span class="lineCov"> 75 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 241 </span> : : { -<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_timestamp&quot;, res);</span> -<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 244 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 245 </span> : : } -<span class="lineNum"> 246 </span> : : } -<span class="lineNum"> 247 </span> [<span class="branchCov" title="Branch 0 was taken 428 times"> + </span><span class="branchCov" title="Branch 1 was taken 138 times"> + </span>]:<span class="lineCov"> 566 : if(options.time_offset_minus &gt; 0)</span> -<span class="lineNum"> 248 </span> : : { -<span class="lineNum"> 249 </span> :<span class="lineCov"> 428 : res = fko_set_timestamp(ctx, -options.time_offset_minus);</span> -<span class="lineNum"> 250 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 427 times"> + </span>]:<span class="lineCov"> 428 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 251 </span> : : { -<span class="lineNum"> 252 </span> :<span class="lineCov"> 1 : errmsg(&quot;fko_set_timestamp&quot;, res);</span> -<span class="lineNum"> 253 </span> :<span class="lineCov"> 1 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 254 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 255 </span> : : } -<span class="lineNum"> 256 </span> : : } -<span class="lineNum"> 257 </span> : : -<span class="lineNum"> 258 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 565 times"> + </span>]:<span class="lineCov"> 565 : if(options.server_command[0] != 0x0)</span> -<span class="lineNum"> 259 </span> : : { -<span class="lineNum"> 260 </span> : : /* Set the access message to a command that the server will -<span class="lineNum"> 261 </span> : : * execute -<span class="lineNum"> 262 </span> : : */ -<span class="lineNum"> 263 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s%s&quot;, -<span class="lineNum"> 264 </span> : : options.allow_ip_str, &quot;,&quot;, options.server_command); -<span class="lineNum"> 265 </span> : : } -<span class="lineNum"> 266 </span> : : else -<span class="lineNum"> 267 </span> : : { -<span class="lineNum"> 268 </span> : : /* Resolve the client's public facing IP address if requestesd. -<span class="lineNum"> 269 </span> : : * if this fails, consider it fatal. -<span class="lineNum"> 270 </span> : : */ -<span class="lineNum"> 271 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 565 times"> + </span>]:<span class="lineCov"> 565 : if (options.resolve_ip_http_https)</span> -<span class="lineNum"> 272 </span> : : { -<span class="lineNum"> 273 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options.resolve_http_only)</span> -<span class="lineNum"> 274 </span> : : { -<span class="lineNum"> 275 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(resolve_ip_http(&amp;options) &lt; 0)</span> -<span class="lineNum"> 276 </span> : : { -<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 278 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 279 </span> : : } -<span class="lineNum"> 280 </span> : : } -<span class="lineNum"> 281 </span> : : else -<span class="lineNum"> 282 </span> : : { -<span class="lineNum"> 283 </span> : : /* Default to HTTPS */ -<span class="lineNum"> 284 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(resolve_ip_https(&amp;options) &lt; 0)</span> -<span class="lineNum"> 285 </span> : : { -<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 287 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 288 </span> : : } -<span class="lineNum"> 289 </span> : : } -<span class="lineNum"> 290 </span> : : } -<span class="lineNum"> 291 </span> : : -<span class="lineNum"> 292 </span> : : /* Set a message string by combining the allow IP and the -<span class="lineNum"> 293 </span> : : * port/protocol. The fwknopd server allows no port/protocol -<span class="lineNum"> 294 </span> : : * to be specified as well, so in this case append the string -<span class="lineNum"> 295 </span> : : * &quot;none/0&quot; to the allow IP. -<span class="lineNum"> 296 </span> : : */ -<span class="lineNum"> 297 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 565 times"> + </span>]:<span class="lineCov"> 565 : if(set_access_buf(ctx, &amp;options, access_buf) != 1)</span> -<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 299 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 300 </span> : : } -<span class="lineNum"> 301 </span> :<span class="lineCov"> 565 : res = fko_set_spa_message(ctx, access_buf);</span> -<span class="lineNum"> 302 </span> [<span class="branchCov" title="Branch 0 was taken 98 times"> + </span><span class="branchCov" title="Branch 1 was taken 467 times"> + </span>]:<span class="lineCov"> 565 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 303 </span> : : { -<span class="lineNum"> 304 </span> :<span class="lineCov"> 98 : errmsg(&quot;fko_set_spa_message&quot;, res);</span> -<span class="lineNum"> 305 </span> :<span class="lineCov"> 98 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 306 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 307 </span> : : } -<span class="lineNum"> 308 </span> : : -<span class="lineNum"> 309 </span> : : /* Set NAT access string -<span class="lineNum"> 310 </span> : : */ -<span class="lineNum"> 311 </span>[<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 467 times"> + </span>]:<span class="lineCov"> 467 : if (options.nat_local || options.nat_access_str[0] != 0x0)</span> -<span class="lineNum"> 312 </span> : : { -<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : res = set_nat_access(ctx, &amp;options, access_buf);</span> -<span class="lineNum"> 314 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 315 </span> : : { -<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_nat_access_str&quot;, res);</span> -<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 318 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 319 </span> : : } -<span class="lineNum"> 320 </span> : : } -<span class="lineNum"> 321 </span> : : -<span class="lineNum"> 322 </span> : : /* Set username -<span class="lineNum"> 323 </span> : : */ -<span class="lineNum"> 324 </span> [<span class="branchCov" title="Branch 0 was taken 378 times"> + </span><span class="branchCov" title="Branch 1 was taken 89 times"> + </span>]:<span class="lineCov"> 467 : if(options.spoof_user[0] != 0x0)</span> -<span class="lineNum"> 325 </span> : : { -<span class="lineNum"> 326 </span> :<span class="lineCov"> 378 : res = fko_set_username(ctx, options.spoof_user);</span> -<span class="lineNum"> 327 </span> [<span class="branchCov" title="Branch 0 was taken 25 times"> + </span><span class="branchCov" title="Branch 1 was taken 353 times"> + </span>]:<span class="lineCov"> 378 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 328 </span> : : { -<span class="lineNum"> 329 </span> :<span class="lineCov"> 25 : errmsg(&quot;fko_set_username&quot;, res);</span> -<span class="lineNum"> 330 </span> :<span class="lineCov"> 25 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 331 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 332 </span> : : } -<span class="lineNum"> 333 </span> : : } -<span class="lineNum"> 334 </span> : : -<span class="lineNum"> 335 </span> : : /* Set up for using GPG if specified. -<span class="lineNum"> 336 </span> : : */ -<span class="lineNum"> 337 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 439 times"> + </span>]:<span class="lineCov"> 442 : if(options.use_gpg)</span> -<span class="lineNum"> 338 </span> : : { -<span class="lineNum"> 339 </span> : : /* If use-gpg-agent was not specified, then remove the GPG_AGENT_INFO -<span class="lineNum"> 340 </span> : : * ENV variable if it exists. -<span class="lineNum"> 341 </span> : : */ -<span class="lineNum"> 342 </span> : : #ifndef WIN32 -<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 3 : if(!options.use_gpg_agent)</span> -<span class="lineNum"> 344 </span> :<span class="lineCov"> 2 : unsetenv(&quot;GPG_AGENT_INFO&quot;);</span> -<span class="lineNum"> 345 </span> : : #endif -<span class="lineNum"> 346 </span> : : -<span class="lineNum"> 347 </span> :<span class="lineCov"> 3 : res = fko_set_spa_encryption_type(ctx, FKO_ENCRYPTION_GPG);</span> -<span class="lineNum"> 348 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 3 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 349 </span> : : { -<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_type&quot;, res);</span> -<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 352 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 353 </span> : : } -<span class="lineNum"> 354 </span> : : -<span class="lineNum"> 355 </span> : : /* Set gpg path if necessary -<span class="lineNum"> 356 </span> : : */ -<span class="lineNum"> 357 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 3 : if(strlen(options.gpg_exe) &gt; 0)</span> -<span class="lineNum"> 358 </span> : : { -<span class="lineNum"> 359 </span> :<span class="lineCov"> 1 : res = fko_set_gpg_exe(ctx, options.gpg_exe);</span> -<span class="lineNum"> 360 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 361 </span> : : { -<span class="lineNum"> 362 </span> :<span class="lineCov"> 1 : errmsg(&quot;fko_set_gpg_exe&quot;, res);</span> -<span class="lineNum"> 363 </span> :<span class="lineCov"> 1 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 364 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 365 </span> : : } -<span class="lineNum"> 366 </span> : : } -<span class="lineNum"> 367 </span> : : -<span class="lineNum"> 368 </span> : : /* If a GPG home dir was specified, set it here. Note: Setting -<span class="lineNum"> 369 </span> : : * this has to occur before calling any of the other GPG-related -<span class="lineNum"> 370 </span> : : * functions. -<span class="lineNum"> 371 </span> : : */ -<span class="lineNum"> 372 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(strlen(options.gpg_home_dir) &gt; 0)</span> -<span class="lineNum"> 373 </span> : : { -<span class="lineNum"> 374 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_home_dir(ctx, options.gpg_home_dir);</span> -<span class="lineNum"> 375 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 376 </span> : : { -<span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_gpg_home_dir&quot;, res);</span> -<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 379 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 380 </span> : : } -<span class="lineNum"> 381 </span> : : } -<span class="lineNum"> 382 </span> : : -<span class="lineNum"> 383 </span> :<span class="lineCov"> 2 : res = fko_set_gpg_recipient(ctx, options.gpg_recipient_key);</span> -<span class="lineNum"> 384 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 385 </span> : : { -<span class="lineNum"> 386 </span> :<span class="lineCov"> 2 : errmsg(&quot;fko_set_gpg_recipient&quot;, res);</span> -<span class="lineNum"> 387 </span> : : -<span class="lineNum"> 388 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(IS_GPG_ERROR(res))</span> -<span class="lineNum"> 389 </span> :<span class="lineCov"> 2 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s&quot;, fko_gpg_errstr(ctx));</span> -<span class="lineNum"> 390 </span> :<span class="lineCov"> 2 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 391 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 392 </span> : : } -<span class="lineNum"> 393 </span> : : -<span class="lineNum"> 394 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(options.gpg_signer_key) &gt; 0)</span> -<span class="lineNum"> 395 </span> : : { -<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_signer(ctx, options.gpg_signer_key);</span> -<span class="lineNum"> 397 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 398 </span> : : { -<span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_gpg_signer&quot;, res);</span> -<span class="lineNum"> 400 </span> : : -<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_GPG_ERROR(res))</span> -<span class="lineNum"> 402 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s&quot;, fko_gpg_errstr(ctx));</span> -<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 404 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 405 </span> : : } -<span class="lineNum"> 406 </span> : : } -<span class="lineNum"> 407 </span> : : -<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : res = fko_set_spa_encryption_mode(ctx, FKO_ENC_MODE_ASYMMETRIC);</span> -<span class="lineNum"> 409 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 410 </span> : : { -<span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_mode&quot;, res);</span> -<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 413 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 414 </span> : : } -<span class="lineNum"> 415 </span> : : } -<span class="lineNum"> 416 </span> : : -<span class="lineNum"> 417 </span>[<span class="branchCov" title="Branch 0 was taken 383 times"> + </span><span class="branchCov" title="Branch 1 was taken 56 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 383 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 439 : if(options.encryption_mode &amp;&amp; !options.use_gpg)</span> -<span class="lineNum"> 418 </span> : : { -<span class="lineNum"> 419 </span> :<span class="lineCov"> 383 : res = fko_set_spa_encryption_mode(ctx, options.encryption_mode);</span> -<span class="lineNum"> 420 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 383 times"> + </span>]:<span class="lineCov"> 383 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 421 </span> : : { -<span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_mode&quot;, res);</span> -<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 424 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 425 </span> : : } -<span class="lineNum"> 426 </span> : : } -<span class="lineNum"> 427 </span> : : -<span class="lineNum"> 428 </span> : : /* Set Digest type. -<span class="lineNum"> 429 </span> : : */ -<span class="lineNum"> 430 </span> [<span class="branchCov" title="Branch 0 was taken 372 times"> + </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 439 : if(options.digest_type)</span> -<span class="lineNum"> 431 </span> : : { -<span class="lineNum"> 432 </span> :<span class="lineCov"> 372 : res = fko_set_spa_digest_type(ctx, options.digest_type);</span> -<span class="lineNum"> 433 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 372 times"> + </span>]:<span class="lineCov"> 372 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 434 </span> : : { -<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_digest_type&quot;, res);</span> -<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 437 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 438 </span> : : } -<span class="lineNum"> 439 </span> : : } -<span class="lineNum"> 440 </span> : : -<span class="lineNum"> 441 </span> : : /* Acquire the necessary encryption/hmac keys -<span class="lineNum"> 442 </span> : : */ -<span class="lineNum"> 443 </span> [<span class="branchCov" title="Branch 1 was taken 5 times"> + </span><span class="branchCov" title="Branch 2 was taken 434 times"> + </span>]:<span class="lineCov"> 439 : if(get_keys(ctx, &amp;options, key, &amp;key_len, hmac_key, &amp;hmac_key_len) != 1)</span> -<span class="lineNum"> 444 </span> :<span class="lineCov"> 5 : clean_exit(ctx, &amp;options, key, &amp;key_len,</span> -<span class="lineNum"> 445 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 446 </span> : : -<span class="lineNum"> 447 </span> :<span class="lineCov"> 434 : orig_key_len = key_len;</span> -<span class="lineNum"> 448 </span> : : -<span class="lineNum"> 449 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(options.encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV</span> -<span class="lineNum"> 450 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; key_len &gt; 16)</span> -<span class="lineNum"> 451 </span> : : { -<span class="lineNum"> 452 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 453 </span> : : &quot;WARNING: Encryption key in '-M legacy' mode must be &lt;= 16 bytes&quot;); -<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 455 </span> : : &quot;long - truncating before sending SPA packet. Upgrading remote&quot;); -<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 457 </span> : : &quot;fwknopd is recommended.&quot;); -<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : key_len = 16;</span> -<span class="lineNum"> 459 </span> : : } -<span class="lineNum"> 460 </span> : : -<span class="lineNum"> 461 </span> : : /* Finalize the context data (encrypt and encode the SPA data) -<span class="lineNum"> 462 </span> : : */ -<span class="lineNum"> 463 </span> :<span class="lineCov"> 434 : res = fko_spa_data_final(ctx, key, key_len, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 464 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 434 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 465 </span> : : { -<span class="lineNum"> 466 </span> :<span class="lineCov"> 18 : errmsg(&quot;fko_spa_data_final&quot;, res);</span> -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 18 : if(IS_GPG_ERROR(res))</span> -<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s&quot;, fko_gpg_errstr(ctx));</span> -<span class="lineNum"> 470 </span> :<span class="lineCov"> 18 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 471 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 472 </span> : : } -<span class="lineNum"> 473 </span> : : -<span class="lineNum"> 474 </span> : : /* Display the context data. -<span class="lineNum"> 475 </span> : : */ -<span class="lineNum"> 476 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if (options.verbose || options.test)</span> -<span class="lineNum"> 477 </span> : : { -<span class="lineNum"> 478 </span> :<span class="lineCov"> 416 : res = dump_ctx_to_buffer(ctx, dump_buf, sizeof(dump_buf));</span> -<span class="lineNum"> 479 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if (res == FKO_SUCCESS)</span> -<span class="lineNum"> 480 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_NORMAL, &quot;%s&quot;, dump_buf);</span> -<span class="lineNum"> 481 </span> : : else -<span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to dump FKO context: %s&quot;,</span> -<span class="lineNum"> 483 </span> : : fko_errstr(res)); -<span class="lineNum"> 484 </span> : : } -<span class="lineNum"> 485 </span> : : -<span class="lineNum"> 486 </span> : : /* Save packet data payload if requested. -<span class="lineNum"> 487 </span> : : */ -<span class="lineNum"> 488 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if (options.save_packet_file[0] != 0x0)</span> -<span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : write_spa_packet_data(ctx, &amp;options);</span> -<span class="lineNum"> 490 </span> : : -<span class="lineNum"> 491 </span> : : /* SPA packet random destination port handling -<span class="lineNum"> 492 </span> : : */ -<span class="lineNum"> 493 </span> [<span class="branchCov" title="Branch 0 was taken 5 times"> + </span><span class="branchCov" title="Branch 1 was taken 411 times"> + </span>]:<span class="lineCov"> 416 : if (options.rand_port)</span> -<span class="lineNum"> 494 </span> : : { -<span class="lineNum"> 495 </span> :<span class="lineCov"> 5 : tmp_port = get_rand_port(ctx);</span> -<span class="lineNum"> 496 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(tmp_port &lt; 0)</span> -<span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 498 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 499 </span> :<span class="lineCov"> 5 : options.spa_dst_port = tmp_port;</span> -<span class="lineNum"> 500 </span> : : } -<span class="lineNum"> 501 </span> : : -<span class="lineNum"> 502 </span> : : /* If we are using one the &quot;raw&quot; modes (normally because -<span class="lineNum"> 503 </span> : : * we're going to spoof the SPA packet source IP), then select -<span class="lineNum"> 504 </span> : : * a random source port unless the source port is already set -<span class="lineNum"> 505 </span> : : */ -<span class="lineNum"> 506 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if ((options.spa_proto == FKO_PROTO_TCP_RAW</span> -<span class="lineNum"> 507 </span> :<span class="lineCov"> 416 : || options.spa_proto == FKO_PROTO_UDP_RAW</span> -<span class="lineNum"> 508 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : || options.spa_proto == FKO_PROTO_ICMP)</span> -<span class="lineNum"> 509 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; !options.spa_src_port)</span> -<span class="lineNum"> 510 </span> : : { -<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : tmp_port = get_rand_port(ctx);</span> -<span class="lineNum"> 512 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tmp_port &lt; 0)</span> -<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 514 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : options.spa_src_port = tmp_port;</span> -<span class="lineNum"> 516 </span> : : } -<span class="lineNum"> 517 </span> : : -<span class="lineNum"> 518 </span> :<span class="lineCov"> 416 : res = send_spa_packet(ctx, &amp;options);</span> -<span class="lineNum"> 519 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res &lt; 0)</span> -<span class="lineNum"> 520 </span> : : { -<span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet: packet not sent.&quot;);</span> -<span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 523 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 524 </span> : : } -<span class="lineNum"> 525 </span> : : else -<span class="lineNum"> 526 </span> : : { -<span class="lineNum"> 527 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot;send_spa_packet: bytes sent: %i&quot;, res);</span> -<span class="lineNum"> 528 </span> : : } -<span class="lineNum"> 529 </span> : : -<span class="lineNum"> 530 </span> : : /* Run through a decode cycle in test mode (--DSS XXX: This test/decode -<span class="lineNum"> 531 </span> : : * portion should be moved elsewhere). -<span class="lineNum"> 532 </span> : : */ -<span class="lineNum"> 533 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if (options.test)</span> -<span class="lineNum"> 534 </span> : : { -<span class="lineNum"> 535 </span> : : /************** Decoding now *****************/ -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> : : /* Now we create a new context based on data from the first one. -<span class="lineNum"> 538 </span> : : */ -<span class="lineNum"> 539 </span> :<span class="lineCov"> 416 : res = fko_get_spa_data(ctx, &amp;spa_data);</span> -<span class="lineNum"> 540 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 541 </span> : : { -<span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_get_spa_data&quot;, res);</span> -<span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 544 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 545 </span> : : } -<span class="lineNum"> 546 </span> : : -<span class="lineNum"> 547 </span> : : /* Pull the encryption mode. -<span class="lineNum"> 548 </span> : : */ -<span class="lineNum"> 549 </span> :<span class="lineCov"> 416 : res = fko_get_spa_encryption_mode(ctx, &amp;enc_mode);</span> -<span class="lineNum"> 550 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 551 </span> : : { -<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_get_spa_encryption_mode&quot;, res);</span> -<span class="lineNum"> 553 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 555 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 558 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 559 </span> : : } -<span class="lineNum"> 560 </span> : : -<span class="lineNum"> 561 </span> : : /* If gpg-home-dir is specified, we have to defer decrypting if we -<span class="lineNum"> 562 </span> : : * use the fko_new_with_data() function because we need to set the -<span class="lineNum"> 563 </span> : : * gpg home dir after the context is created, but before we attempt -<span class="lineNum"> 564 </span> : : * to decrypt the data. Therefore we either pass NULL for the -<span class="lineNum"> 565 </span> : : * decryption key to fko_new_with_data() or use fko_new() to create -<span class="lineNum"> 566 </span> : : * an empty context, populate it with the encrypted data, set our -<span class="lineNum"> 567 </span> : : * options, then decode it. -<span class="lineNum"> 568 </span> : : * -<span class="lineNum"> 569 </span> : : * This also verifies the HMAC and truncates it if there are no -<span class="lineNum"> 570 </span> : : * problems. -<span class="lineNum"> 571 </span> : : */ -<span class="lineNum"> 572 </span> :<span class="lineCov"> 416 : res = fko_new_with_data(&amp;ctx2, spa_data, NULL,</span> -<span class="lineNum"> 573 </span> : : 0, enc_mode, hmac_key, hmac_key_len, options.hmac_type); -<span class="lineNum"> 574 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 575 </span> : : { -<span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_new_with_data&quot;, res);</span> -<span class="lineNum"> 577 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 578 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 579 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 580 </span> :<span class="lineNoCov"> 0 : ctx2 = NULL;</span> -<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 582 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 583 </span> : : } -<span class="lineNum"> 584 </span> : : -<span class="lineNum"> 585 </span> :<span class="lineCov"> 416 : res = fko_set_spa_encryption_mode(ctx2, enc_mode);</span> -<span class="lineNum"> 586 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 587 </span> : : { -<span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_encryption_mode&quot;, res);</span> -<span class="lineNum"> 589 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 591 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : ctx2 = NULL;</span> -<span class="lineNum"> 593 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 594 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 595 </span> : : } -<span class="lineNum"> 596 </span> : : -<span class="lineNum"> 597 </span> : : /* See if we are using gpg and if we need to set the GPG home dir. -<span class="lineNum"> 598 </span> : : */ -<span class="lineNum"> 599 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(options.use_gpg)</span> -<span class="lineNum"> 600 </span> : : { -<span class="lineNum"> 601 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(options.gpg_home_dir) &gt; 0)</span> -<span class="lineNum"> 602 </span> : : { -<span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_home_dir(ctx2, options.gpg_home_dir);</span> -<span class="lineNum"> 604 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 605 </span> : : { -<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_gpg_home_dir&quot;, res);</span> -<span class="lineNum"> 607 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 609 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : ctx2 = NULL;</span> -<span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 612 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 613 </span> : : } -<span class="lineNum"> 614 </span> : : } -<span class="lineNum"> 615 </span> : : } -<span class="lineNum"> 616 </span> : : -<span class="lineNum"> 617 </span> : : /* Decrypt -<span class="lineNum"> 618 </span> : : */ -<span class="lineNum"> 619 </span> :<span class="lineCov"> 416 : res = fko_decrypt_spa_data(ctx2, key, key_len);</span> -<span class="lineNum"> 620 </span> : : -<span class="lineNum"> 621 </span> [<span class="branchCov" title="Branch 0 was taken 31 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 622 </span> : : { -<span class="lineNum"> 623 </span> :<span class="lineCov"> 31 : errmsg(&quot;fko_decrypt_spa_data&quot;, res);</span> -<span class="lineNum"> 624 </span> : : -<span class="lineNum"> 625 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 31 : if(IS_GPG_ERROR(res)) {</span> -<span class="lineNum"> 626 </span> : : /* we most likely could not decrypt the gpg-encrypted data -<span class="lineNum"> 627 </span> : : * because we don't have access to the private key associated -<span class="lineNum"> 628 </span> : : * with the public key we used for encryption. Since this is -<span class="lineNum"> 629 </span> : : * expected, return 0 instead of an error condition (so calling -<span class="lineNum"> 630 </span> : : * programs like the fwknop test suite don't interpret this as -<span class="lineNum"> 631 </span> : : * an unrecoverable error), but print the error string for -<span class="lineNum"> 632 </span> : : * debugging purposes. The test suite does run a series of -<span class="lineNum"> 633 </span> : : * tests that use a single key pair for encryption and -<span class="lineNum"> 634 </span> : : * authentication, so decryption become possible for these -<span class="lineNum"> 635 </span> : : * tests. */ -<span class="lineNum"> 636 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;GPG ERR: %s\n%s&quot;, fko_gpg_errstr(ctx2),</span> -<span class="lineNum"> 637 </span> : : &quot;No access to recipient private key?&quot;); -<span class="lineNum"> 638 </span> : : } -<span class="lineNum"> 639 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 31 times"> + </span>]:<span class="lineCov"> 31 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 640 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 641 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 642 </span> :<span class="lineCov"> 31 : ctx2 = NULL;</span> -<span class="lineNum"> 643 </span> :<span class="lineCov"> 31 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 644 </span> : : hmac_key, &amp;hmac_key_len, EXIT_FAILURE); -<span class="lineNum"> 645 </span> : : } -<span class="lineNum"> 646 </span> : : -<span class="lineNum"> 647 </span> :<span class="lineCov"> 385 : res = dump_ctx_to_buffer(ctx2, dump_buf, sizeof(dump_buf));</span> -<span class="lineNum"> 648 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (res == FKO_SUCCESS)</span> -<span class="lineNum"> 649 </span> :<span class="lineCov"> 385 : log_msg(LOG_VERBOSITY_NORMAL, &quot;\nDump of the Decoded Data\n%s&quot;, dump_buf);</span> -<span class="lineNum"> 650 </span> : : else -<span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;Unable to dump FKO context: %s&quot;, fko_errstr(res));</span> -<span class="lineNum"> 652 </span> : : -<span class="lineNum"> 653 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(fko_destroy(ctx2) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 654 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 655 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 656 </span> :<span class="lineCov"> 385 : ctx2 = NULL;</span> -<span class="lineNum"> 657 </span> : : } -<span class="lineNum"> 658 </span> : : -<span class="lineNum"> 659 </span> :<span class="lineCov"> 385 : clean_exit(ctx, &amp;options, key, &amp;orig_key_len,</span> -<span class="lineNum"> 660 </span> : : hmac_key, &amp;hmac_key_len, EXIT_SUCCESS); -<span class="lineNum"> 661 </span> : : -<span class="lineNum"> 662 </span> : : return EXIT_SUCCESS; /* quiet down a gcc warning */ -<span class="lineNum"> 663 </span> : : } -<a name="664"><span class="lineNum"> 664 </span> : : </a> -<span class="lineNum"> 665 </span> : : void -<span class="lineNum"> 666 </span> :<span class="lineCov"> 566 : free_configs(fko_cli_options_t *opts)</span> -<span class="lineNum"> 667 </span> : : { -<span class="lineNum"> 668 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (opts-&gt;resolve_url != NULL)</span> -<span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : free(opts-&gt;resolve_url);</span> -<span class="lineNum"> 670 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (opts-&gt;wget_bin != NULL)</span> -<span class="lineNum"> 671 </span> :<span class="lineNoCov"> 0 : free(opts-&gt;wget_bin);</span> -<span class="lineNum"> 672 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;key, MAX_KEY_LEN+1);</span> -<span class="lineNum"> 673 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;key_base64, MAX_B64_KEY_LEN+1);</span> -<span class="lineNum"> 674 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;hmac_key, MAX_KEY_LEN+1);</span> -<span class="lineNum"> 675 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;hmac_key_base64, MAX_B64_KEY_LEN+1);</span> -<span class="lineNum"> 676 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;gpg_recipient_key, MAX_GPG_KEY_ID);</span> -<span class="lineNum"> 677 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;gpg_signer_key, MAX_GPG_KEY_ID);</span> -<span class="lineNum"> 678 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;gpg_home_dir, MAX_PATH_LEN);</span> -<span class="lineNum"> 679 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(opts-&gt;server_command, MAX_LINE_LEN);</span> -<span class="lineNum"> 680 </span> :<span class="lineCov"> 566 : }</span> -<a name="681"><span class="lineNum"> 681 </span> : : </a> -<span class="lineNum"> 682 </span> : : static int -<span class="lineNum"> 683 </span> :<span class="lineCov"> 5 : get_rand_port(fko_ctx_t ctx)</span> -<span class="lineNum"> 684 </span> : : { -<span class="lineNum"> 685 </span> :<span class="lineCov"> 5 : char *rand_val = NULL;</span> -<span class="lineNum"> 686 </span> :<span class="lineCov"> 5 : char port_str[MAX_PORT_STR_LEN+1] = {0};</span> -<span class="lineNum"> 687 </span> : : int tmpint, is_err; -<span class="lineNum"> 688 </span> :<span class="lineCov"> 5 : int port = 0;</span> -<span class="lineNum"> 689 </span> :<span class="lineCov"> 5 : int res = 0;</span> -<span class="lineNum"> 690 </span> : : -<span class="lineNum"> 691 </span> :<span class="lineCov"> 5 : res = fko_get_rand_value(ctx, &amp;rand_val);</span> -<span class="lineNum"> 692 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 693 </span> : : { -<span class="lineNum"> 694 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;get_rand_port(), fko_get_rand_value&quot;, res);</span> -<span class="lineNum"> 695 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 696 </span> : : } -<span class="lineNum"> 697 </span> : : -<span class="lineNum"> 698 </span> :<span class="lineCov"> 5 : strlcpy(port_str, rand_val, sizeof(port_str));</span> -<span class="lineNum"> 699 </span> : : -<span class="lineNum"> 700 </span> :<span class="lineCov"> 5 : tmpint = strtol_wrapper(port_str, 0, -1, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 701 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 702 </span> : : { -<span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 704 </span> : : &quot;[*] get_rand_port(), could not convert rand_val str '%s', to integer&quot;, -<span class="lineNum"> 705 </span> : : rand_val); -<span class="lineNum"> 706 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 707 </span> : : } -<span class="lineNum"> 708 </span> : : -<span class="lineNum"> 709 </span> : : /* Convert to a random value between 1024 and 65535 -<span class="lineNum"> 710 </span> : : */ -<span class="lineNum"> 711 </span> :<span class="lineCov"> 5 : port = (MIN_HIGH_PORT + (tmpint % (MAX_PORT - MIN_HIGH_PORT)));</span> -<span class="lineNum"> 712 </span> : : -<span class="lineNum"> 713 </span> : : /* Force libfko to calculate a new random value since we don't want to -<span class="lineNum"> 714 </span> : : * give anyone a hint (via the port value) about the contents of the -<span class="lineNum"> 715 </span> : : * encrypted SPA data. -<span class="lineNum"> 716 </span> : : */ -<span class="lineNum"> 717 </span> :<span class="lineCov"> 5 : res = fko_set_rand_value(ctx, NULL);</span> -<span class="lineNum"> 718 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 5 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 719 </span> : : { -<span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;get_rand_port(), fko_get_rand_value&quot;, res);</span> -<span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 722 </span> : : } -<span class="lineNum"> 723 </span> : : -<span class="lineNum"> 724 </span> : : return port; -<span class="lineNum"> 725 </span> : : } -<span class="lineNum"> 726 </span> : : -<span class="lineNum"> 727 </span> : : /* See if the string is of the format &quot;&lt;ipv4 addr&gt;:&lt;port&gt;&quot;, -<a name="728"><span class="lineNum"> 728 </span> : : */</a> -<span class="lineNum"> 729 </span> : : static int -<span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : ipv4_str_has_port(char *str)</span> -<span class="lineNum"> 731 </span> : : { -<span class="lineNum"> 732 </span> : : int o1, o2, o3, o4, p; -<span class="lineNum"> 733 </span> : : -<span class="lineNum"> 734 </span> : : /* Force the ':' (if any) to a ',' -<span class="lineNum"> 735 </span> : : */ -<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : char *ndx = strchr(str, ':');</span> -<span class="lineNum"> 737 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx != NULL)</span> -<span class="lineNum"> 738 </span> :<span class="lineNoCov"> 0 : *ndx = ',';</span> -<span class="lineNum"> 739 </span> : : -<span class="lineNum"> 740 </span> : : /* Check format and values. -<span class="lineNum"> 741 </span> : : */ -<span class="lineNum"> 742 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sscanf(str, &quot;%u.%u.%u.%u,%u&quot;, &amp;o1, &amp;o2, &amp;o3, &amp;o4, &amp;p)) == 5</span> -<span class="lineNum"> 743 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o1 &gt;= 0 &amp;&amp; o1 &lt;= 255</span> -<span class="lineNum"> 744 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o2 &gt;= 0 &amp;&amp; o2 &lt;= 255</span> -<span class="lineNum"> 745 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o3 &gt;= 0 &amp;&amp; o3 &lt;= 255</span> -<span class="lineNum"> 746 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o4 &gt;= 0 &amp;&amp; o4 &lt;= 255</span> -<span class="lineNum"> 747 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; p &gt; 0 &amp;&amp; p &lt; 65536)</span> -<span class="lineNum"> 748 </span> : : { -<span class="lineNum"> 749 </span> : : return 1; -<span class="lineNum"> 750 </span> : : } -<span class="lineNum"> 751 </span> : : -<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 753 </span> : : } -<span class="lineNum"> 754 </span> : : -<span class="lineNum"> 755 </span> : : /* Set access buf -<a name="756"><span class="lineNum"> 756 </span> : : */</a> -<span class="lineNum"> 757 </span> : : static int -<span class="lineNum"> 758 </span> :<span class="lineCov"> 565 : set_access_buf(fko_ctx_t ctx, fko_cli_options_t *options, char *access_buf)</span> -<span class="lineNum"> 759 </span> : : { -<span class="lineNum"> 760 </span> :<span class="lineCov"> 565 : char *ndx = NULL, tmp_nat_port[MAX_PORT_STR_LEN+1] = {0};</span> -<span class="lineNum"> 761 </span> :<span class="lineCov"> 565 : int nat_port = 0;</span> -<span class="lineNum"> 762 </span> : : -<span class="lineNum"> 763 </span> [<span class="branchCov" title="Branch 0 was taken 525 times"> + </span><span class="branchCov" title="Branch 1 was taken 40 times"> + </span>]:<span class="lineCov"> 565 : if(options-&gt;access_str[0] != 0x0)</span> -<span class="lineNum"> 764 </span> : : { -<span class="lineNum"> 765 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 525 times"> + </span>]:<span class="lineCov"> 525 : if (options-&gt;nat_rand_port)</span> -<span class="lineNum"> 766 </span> : : { -<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : nat_port = get_rand_port(ctx);</span> -<span class="lineNum"> 768 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_port = nat_port;</span> -<span class="lineNum"> 769 </span> : : } -<span class="lineNum"> 770 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 525 times"> + </span>]:<span class="lineCov"> 525 : else if (options-&gt;nat_port)</span> -<span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : nat_port = options-&gt;nat_port;</span> -<span class="lineNum"> 772 </span> : : -<span class="lineNum"> 773 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 525 times"> + </span>]:<span class="lineCov"> 525 : if(nat_port &gt; 0 &amp;&amp; nat_port &lt;= MAX_PORT)</span> -<span class="lineNum"> 774 </span> : : { -<span class="lineNum"> 775 </span> : : /* Replace the access string port with the NAT port since the -<span class="lineNum"> 776 </span> : : * NAT port is manually specified (--nat-port) or derived from -<span class="lineNum"> 777 </span> : : * random data (--nat-rand-port). In the NAT modes, the fwknopd -<span class="lineNum"> 778 </span> : : * server uses the port in the access string as the one to NAT, -<span class="lineNum"> 779 </span> : : * and access is granted via this translated port to whatever is -<span class="lineNum"> 780 </span> : : * specified with --nat-access &lt;IP:port&gt; (so this service is the -<span class="lineNum"> 781 </span> : : * utlimate target of the incoming connection after the SPA -<span class="lineNum"> 782 </span> : : * packet is sent). -<span class="lineNum"> 783 </span> : : */ -<span class="lineNum"> 784 </span> :<span class="lineNoCov"> 0 : ndx = strchr(options-&gt;access_str, '/');</span> -<span class="lineNum"> 785 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> -<span class="lineNum"> 786 </span> : : { -<span class="lineNum"> 787 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Expecting &lt;proto&gt;/&lt;port&gt; for -A arg.&quot;);</span> -<span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 789 </span> : : } -<span class="lineNum"> 790 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s&quot;, -<span class="lineNum"> 791 </span> :<span class="lineNoCov"> 0 : options-&gt;allow_ip_str, &quot;,&quot;);</span> -<span class="lineNum"> 792 </span> : : -<span class="lineNum"> 793 </span> : : /* This adds in the protocol + '/' char -<span class="lineNum"> 794 </span> : : */ -<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : strlcat(access_buf, options-&gt;access_str,</span> -<span class="lineNum"> 796 </span> :<span class="lineNoCov"> 0 : strlen(access_buf) + (ndx - options-&gt;access_str) + 2);</span> -<span class="lineNum"> 797 </span> : : -<span class="lineNum"> 798 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (strchr(ndx+1, '/') != NULL)</span> -<span class="lineNum"> 799 </span> : : { -<span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 801 </span> : : &quot;[*] NAT for multiple ports/protocols not yet supported.&quot;); -<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 803 </span> : : } -<span class="lineNum"> 804 </span> : : -<span class="lineNum"> 805 </span> : : /* Now add the NAT port -<span class="lineNum"> 806 </span> : : */ -<span class="lineNum"> 807 </span> : : snprintf(tmp_nat_port, MAX_PORT_STR_LEN+1, &quot;%d&quot;, nat_port); -<span class="lineNum"> 808 </span> :<span class="lineNoCov"> 0 : strlcat(access_buf, tmp_nat_port,</span> -<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : strlen(access_buf)+MAX_PORT_STR_LEN+1);</span> -<span class="lineNum"> 810 </span> : : } -<span class="lineNum"> 811 </span> : : else -<span class="lineNum"> 812 </span> : : { -<span class="lineNum"> 813 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s%s&quot;, -<span class="lineNum"> 814 </span> :<span class="lineCov"> 525 : options-&gt;allow_ip_str, &quot;,&quot;, options-&gt;access_str);</span> -<span class="lineNum"> 815 </span> : : } -<span class="lineNum"> 816 </span> : : } -<span class="lineNum"> 817 </span> : : else -<span class="lineNum"> 818 </span> : : { -<span class="lineNum"> 819 </span> : : snprintf(access_buf, MAX_LINE_LEN, &quot;%s%s%s&quot;, -<span class="lineNum"> 820 </span> :<span class="lineCov"> 40 : options-&gt;allow_ip_str, &quot;,&quot;, &quot;none/0&quot;);</span> -<span class="lineNum"> 821 </span> : : } -<span class="lineNum"> 822 </span> : : return 1; -<span class="lineNum"> 823 </span> : : } -<span class="lineNum"> 824 </span> : : -<span class="lineNum"> 825 </span> : : /* Set NAT access string -<a name="826"><span class="lineNum"> 826 </span> : : */</a> -<span class="lineNum"> 827 </span> : : static int -<span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : set_nat_access(fko_ctx_t ctx, fko_cli_options_t *options, const char * const access_buf)</span> -<span class="lineNum"> 829 </span> : : { -<span class="lineNum"> 830 </span> :<span class="lineNoCov"> 0 : char nat_access_buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 831 </span> :<span class="lineNoCov"> 0 : char tmp_access_port[MAX_PORT_STR_LEN+1] = {0}, *ndx = NULL;</span> -<span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : int access_port = 0, i = 0, is_err = 0;</span> -<span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : char dst_ip_str[INET_ADDRSTRLEN] = {0};</span> -<span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : char hostname[HOSTNAME_BUFSIZE] = {0};</span> -<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : int port = 0;</span> -<span class="lineNum"> 836 </span> : : struct addrinfo hints; -<span class="lineNum"> 837 </span> : : -<span class="lineNum"> 838 </span> : : memset(&amp;hints, 0 , sizeof(hints)); -<span class="lineNum"> 839 </span> : : -<span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : ndx = strchr(options-&gt;access_str, '/');</span> -<span class="lineNum"> 841 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> -<span class="lineNum"> 842 </span> : : { -<span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Expecting &lt;proto&gt;/&lt;port&gt; for -A arg.&quot;);</span> -<span class="lineNum"> 844 </span> :<span class="lineNoCov"> 0 : return FKO_ERROR_INVALID_DATA;</span> -<span class="lineNum"> 845 </span> : : } -<span class="lineNum"> 846 </span> :<span class="lineNoCov"> 0 : ndx++;</span> -<span class="lineNum"> 847 </span> : : -<span class="lineNum"> 848 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(*ndx != '\0' &amp;&amp; isdigit(*ndx) &amp;&amp; i &lt; MAX_PORT_STR_LEN)</span> -<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span>] -<span class="lineNum"> 849 </span> : : { -<span class="lineNum"> 850 </span> :<span class="lineNoCov"> 0 : tmp_access_port[i] = *ndx;</span> -<span class="lineNum"> 851 </span> :<span class="lineNoCov"> 0 : ndx++;</span> -<span class="lineNum"> 852 </span> :<span class="lineNoCov"> 0 : i++;</span> -<span class="lineNum"> 853 </span> : : } -<span class="lineNum"> 854 </span> :<span class="lineNoCov"> 0 : tmp_access_port[i] = '\0';</span> -<span class="lineNum"> 855 </span> : : -<span class="lineNum"> 856 </span> :<span class="lineNoCov"> 0 : access_port = strtol_wrapper(tmp_access_port, 1,</span> -<span class="lineNum"> 857 </span> : : MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 858 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 859 </span> : : { -<span class="lineNum"> 860 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Invalid port value '%d' for -A arg.&quot;,</span> -<span class="lineNum"> 861 </span> : : access_port); -<span class="lineNum"> 862 </span> :<span class="lineNoCov"> 0 : return FKO_ERROR_INVALID_DATA;</span> -<span class="lineNum"> 863 </span> : : } -<span class="lineNum"> 864 </span> : : -<span class="lineNum"> 865 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;nat_local &amp;&amp; options-&gt;nat_access_str[0] == 0x0)</span> -<span class="lineNum"> 866 </span> : : { -<span class="lineNum"> 867 </span> : : snprintf(nat_access_buf, MAX_LINE_LEN, NAT_ACCESS_STR_TEMPLATE, -<span class="lineNum"> 868 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_server_str, access_port);</span> -<span class="lineNum"> 869 </span> : : } -<span class="lineNum"> 870 </span> : : -<span class="lineNum"> 871 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (nat_access_buf[0] == 0x0 &amp;&amp; options-&gt;nat_access_str[0] != 0x0)</span> -<span class="lineNum"> 872 </span> : : { -<span class="lineNum"> 873 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ipv4_str_has_port(options-&gt;nat_access_str))</span> -<span class="lineNum"> 874 </span> : : { -<span class="lineNum"> 875 </span> : : snprintf(nat_access_buf, MAX_LINE_LEN, &quot;%s&quot;, -<span class="lineNum"> 876 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_access_str);</span> -<span class="lineNum"> 877 </span> : : } -<span class="lineNum"> 878 </span> : : else -<span class="lineNum"> 879 </span> : : { -<span class="lineNum"> 880 </span> : : snprintf(nat_access_buf, MAX_LINE_LEN, NAT_ACCESS_STR_TEMPLATE, -<span class="lineNum"> 881 </span> :<span class="lineNoCov"> 0 : options-&gt;nat_access_str, access_port);</span> -<span class="lineNum"> 882 </span> : : } -<span class="lineNum"> 883 </span> : : } -<span class="lineNum"> 884 </span> : : -<span class="lineNum"> 885 </span> : : /* Check if there is a hostname to resolve as an ip address in the NAT access buffer */ -<span class="lineNum"> 886 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_hostname_str_with_port(nat_access_buf, hostname, sizeof(hostname), &amp;port))</span> -<span class="lineNum"> 887 </span> : : { -<span class="lineNum"> 888 </span> : : /* Speed up the name resolution by forcing ipv4 (AF_INET). -<span class="lineNum"> 889 </span> : : * A NULL pointer could be used instead if there is no constraint. -<span class="lineNum"> 890 </span> : : * Maybe when ipv6 support will be enable the structure could initialize the -<span class="lineNum"> 891 </span> : : * family to either AF_INET or AF_INET6 */ -<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : hints.ai_family = AF_INET;</span> -<span class="lineNum"> 893 </span> : : -<span class="lineNum"> 894 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (resolve_dest_adr(hostname, &amp;hints, dst_ip_str, sizeof(dst_ip_str)) != 0)</span> -<span class="lineNum"> 895 </span> : : { -<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Unable to resolve %s as an ip address&quot;,</span> -<span class="lineNum"> 897 </span> : : hostname); -<span class="lineNum"> 898 </span> :<span class="lineNoCov"> 0 : return FKO_ERROR_INVALID_DATA;</span> -<span class="lineNum"> 899 </span> : : } -<span class="lineNum"> 900 </span> : : -<span class="lineNum"> 901 </span> :<span class="lineNoCov"> 0 : snprintf(nat_access_buf, MAX_LINE_LEN, NAT_ACCESS_STR_TEMPLATE,</span> -<span class="lineNum"> 902 </span> : : dst_ip_str, port); -<span class="lineNum"> 903 </span> : : } -<span class="lineNum"> 904 </span> : : -<span class="lineNum"> 905 </span> : : /* Nothing to resolve */ -<span class="lineNum"> 906 </span> : : else; -<span class="lineNum"> 907 </span> : : -<span class="lineNum"> 908 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;nat_rand_port)</span> -<span class="lineNum"> 909 </span> : : { -<span class="lineNum"> 910 </span> : : /* Must print to stdout what the random port is since -<span class="lineNum"> 911 </span> : : * if not then the user will not which port will be -<span class="lineNum"> 912 </span> : : * opened/NAT'd on the fwknopd side -<span class="lineNum"> 913 </span> : : */ -<span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 915 </span> : : &quot;[+] Randomly assigned port '%d' on: '%s' will grant access to: '%s'&quot;, -<span class="lineNum"> 916 </span> : : options-&gt;nat_port, access_buf, nat_access_buf); -<span class="lineNum"> 917 </span> : : } -<span class="lineNum"> 918 </span> : : -<span class="lineNum"> 919 </span> :<span class="lineNoCov"> 0 : return fko_set_spa_nat_access(ctx, nat_access_buf);</span> -<span class="lineNum"> 920 </span> : : } -<a name="921"><span class="lineNum"> 921 </span> : : </a> -<span class="lineNum"> 922 </span> : : static int -<span class="lineNum"> 923 </span> :<span class="lineCov"> 566 : prev_exec(fko_cli_options_t *options, int argc, char **argv)</span> -<span class="lineNum"> 924 </span> : : { -<span class="lineNum"> 925 </span> :<span class="lineCov"> 566 : char args_save_file[MAX_PATH_LEN] = {0};</span> -<span class="lineNum"> 926 </span> :<span class="lineCov"> 566 : int res = 1;</span> -<span class="lineNum"> 927 </span> : : -<span class="lineNum"> 928 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;args_save_file[0] != 0x0)</span> -<span class="lineNum"> 929 </span> : : { -<span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : strlcpy(args_save_file, options-&gt;args_save_file, sizeof(args_save_file));</span> -<span class="lineNum"> 931 </span> : : } -<span class="lineNum"> 932 </span> : : else -<span class="lineNum"> 933 </span> : : { -<span class="lineNum"> 934 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if (get_save_file(args_save_file) != 1)</span> -<span class="lineNum"> 935 </span> : : { -<span class="lineNum"> 936 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Unable to determine args save file&quot;);</span> -<span class="lineNum"> 937 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 938 </span> : : } -<span class="lineNum"> 939 </span> : : } -<span class="lineNum"> 940 </span> : : -<span class="lineNum"> 941 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(options-&gt;run_last_command)</span> -<span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : res = run_last_args(options, args_save_file);</span> -<span class="lineNum"> 943 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : else if(options-&gt;show_last_command)</span> -<span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : res = show_last_command(args_save_file);</span> -<span class="lineNum"> 945 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : else if (!options-&gt;no_save_args)</span> -<span class="lineNum"> 946 </span> :<span class="lineCov"> 566 : res = save_args(argc, argv, args_save_file);</span> -<span class="lineNum"> 947 </span> : : -<span class="lineNum"> 948 </span> :<span class="lineCov"> 566 : return res;</span> -<span class="lineNum"> 949 </span> : : } -<span class="lineNum"> 950 </span> : : -<span class="lineNum"> 951 </span> : : /* Show the last command that was executed -<a name="952"><span class="lineNum"> 952 </span> : : */</a> -<span class="lineNum"> 953 </span> : : static int -<span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : show_last_command(const char * const args_save_file)</span> -<span class="lineNum"> 955 </span> : : { -<span class="lineNum"> 956 </span> :<span class="lineNoCov"> 0 : char args_str[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 957 </span> :<span class="lineNoCov"> 0 : FILE *args_file_ptr = NULL;</span> -<span class="lineNum"> 958 </span> : : -<span class="lineNum"> 959 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(verify_file_perms_ownership(args_save_file) != 1)</span> -<span class="lineNum"> 960 </span> : : return 0; -<span class="lineNum"> 961 </span> : : -<span class="lineNum"> 962 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((args_file_ptr = fopen(args_save_file, &quot;r&quot;)) == NULL) {</span> -<span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open args file: %s&quot;,</span> -<span class="lineNum"> 964 </span> : : args_save_file); -<span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 966 </span> : : } -<span class="lineNum"> 967 </span> : : -<span class="lineNum"> 968 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((fgets(args_str, MAX_LINE_LEN, args_file_ptr)) != NULL) {</span> -<span class="lineNum"> 969 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 970 </span> : : &quot;Last fwknop client command line: %s&quot;, args_str); -<span class="lineNum"> 971 </span> : : } else { -<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 973 </span> : : &quot;Could not read line from file: %s&quot;, args_save_file); -<span class="lineNum"> 974 </span> :<span class="lineNoCov"> 0 : fclose(args_file_ptr);</span> -<span class="lineNum"> 975 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 976 </span> : : } -<span class="lineNum"> 977 </span> :<span class="lineNoCov"> 0 : fclose(args_file_ptr);</span> -<span class="lineNum"> 978 </span> : : -<span class="lineNum"> 979 </span> :<span class="lineNoCov"> 0 : return 1;</span> -<span class="lineNum"> 980 </span> : : } -<span class="lineNum"> 981 </span> : : -<span class="lineNum"> 982 </span> : : /* Get the command line arguments from the previous invocation -<a name="983"><span class="lineNum"> 983 </span> : : */</a> -<span class="lineNum"> 984 </span> : : static int -<span class="lineNum"> 985 </span> :<span class="lineNoCov"> 0 : run_last_args(fko_cli_options_t *options, const char * const args_save_file)</span> -<span class="lineNum"> 986 </span> : : { -<span class="lineNum"> 987 </span> :<span class="lineNoCov"> 0 : FILE *args_file_ptr = NULL;</span> -<span class="lineNum"> 988 </span> :<span class="lineNoCov"> 0 : int argc_new = 0, args_broken = 0;</span> -<span class="lineNum"> 989 </span> :<span class="lineNoCov"> 0 : char args_str[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 990 </span> : : char *argv_new[MAX_CMDLINE_ARGS]; /* should be way more than enough */ -<span class="lineNum"> 991 </span> : : -<span class="lineNum"> 992 </span> : : memset(argv_new, 0x0, sizeof(argv_new)); -<span class="lineNum"> 993 </span> : : -<span class="lineNum"> 994 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(verify_file_perms_ownership(args_save_file) != 1)</span> -<span class="lineNum"> 995 </span> : : return 0; -<span class="lineNum"> 996 </span> : : -<span class="lineNum"> 997 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((args_file_ptr = fopen(args_save_file, &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 998 </span> : : { -<span class="lineNum"> 999 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open args file: %s&quot;,</span> -<span class="lineNum"> 1000 </span> : : args_save_file); -<span class="lineNum"> 1001 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1002 </span> : : } -<span class="lineNum"> 1003 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((fgets(args_str, MAX_LINE_LEN, args_file_ptr)) != NULL)</span> -<span class="lineNum"> 1004 </span> : : { -<span class="lineNum"> 1005 </span> :<span class="lineNoCov"> 0 : args_str[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 1006 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;verbose)</span> -<span class="lineNum"> 1007 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;Executing: %s&quot;, args_str);</span> -<span class="lineNum"> 1008 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(args_str, argv_new, &amp;argc_new, options) != 1)</span> -<span class="lineNum"> 1009 </span> : : { -<span class="lineNum"> 1010 </span> :<span class="lineNoCov"> 0 : args_broken = 1;</span> -<span class="lineNum"> 1011 </span> : : } -<span class="lineNum"> 1012 </span> : : } -<span class="lineNum"> 1013 </span> :<span class="lineNoCov"> 0 : fclose(args_file_ptr);</span> -<span class="lineNum"> 1014 </span> : : -<span class="lineNum"> 1015 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(args_broken)</span> -<span class="lineNum"> 1016 </span> : : return 0; -<span class="lineNum"> 1017 </span> : : -<span class="lineNum"> 1018 </span> : : /* Reset the options index so we can run through them again. -<span class="lineNum"> 1019 </span> : : */ -<span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : optind = 0;</span> -<span class="lineNum"> 1021 </span> : : -<span class="lineNum"> 1022 </span> :<span class="lineNoCov"> 0 : config_init(options, argc_new, argv_new);</span> -<span class="lineNum"> 1023 </span> : : -<span class="lineNum"> 1024 </span> : : /* Since we passed in our own copies, free up malloc'd memory -<span class="lineNum"> 1025 </span> : : */ -<span class="lineNum"> 1026 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 1027 </span> : : -<span class="lineNum"> 1028 </span> :<span class="lineNoCov"> 0 : return 1;</span> -<span class="lineNum"> 1029 </span> : : } -<a name="1030"><span class="lineNum"> 1030 </span> : : </a> -<span class="lineNum"> 1031 </span> : : static int -<span class="lineNum"> 1032 </span> :<span class="lineCov"> 566 : get_save_file(char *args_save_file)</span> -<span class="lineNum"> 1033 </span> : : { -<span class="lineNum"> 1034 </span> :<span class="lineCov"> 566 : char *homedir = NULL;</span> -<span class="lineNum"> 1035 </span> :<span class="lineCov"> 566 : int rv = 0;</span> -<span class="lineNum"> 1036 </span> : : -<span class="lineNum"> 1037 </span> : : #ifdef WIN32 -<span class="lineNum"> 1038 </span> : : homedir = getenv(&quot;USERPROFILE&quot;); -<span class="lineNum"> 1039 </span> : : #else -<span class="lineNum"> 1040 </span> :<span class="lineCov"> 566 : homedir = getenv(&quot;HOME&quot;);</span> -<span class="lineNum"> 1041 </span> : : #endif -<span class="lineNum"> 1042 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if (homedir != NULL) {</span> -<span class="lineNum"> 1043 </span> : : snprintf(args_save_file, MAX_PATH_LEN, &quot;%s%c%s&quot;, -<span class="lineNum"> 1044 </span> : : homedir, PATH_SEP, &quot;.fwknop.run&quot;); -<span class="lineNum"> 1045 </span> :<span class="lineCov"> 566 : rv = 1;</span> -<span class="lineNum"> 1046 </span> : : } -<span class="lineNum"> 1047 </span> : : -<span class="lineNum"> 1048 </span> :<span class="lineCov"> 566 : return rv;</span> -<span class="lineNum"> 1049 </span> : : } -<span class="lineNum"> 1050 </span> : : -<span class="lineNum"> 1051 </span> : : /* Save our command line arguments -<a name="1052"><span class="lineNum"> 1052 </span> : : */</a> -<span class="lineNum"> 1053 </span> : : static int -<span class="lineNum"> 1054 </span> :<span class="lineCov"> 566 : save_args(int argc, char **argv, const char * const args_save_file)</span> -<span class="lineNum"> 1055 </span> : : { -<span class="lineNum"> 1056 </span> :<span class="lineCov"> 566 : char args_str[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1057 </span> :<span class="lineCov"> 566 : int i = 0, args_str_len = 0, args_file_fd = -1;</span> -<span class="lineNum"> 1058 </span> : : -<span class="lineNum"> 1059 </span> :<span class="lineCov"> 566 : args_file_fd = open(args_save_file, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR);</span> -<span class="lineNum"> 1060 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if (args_file_fd == -1) {</span> -<span class="lineNum"> 1061 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open args file: %s&quot;,</span> -<span class="lineNum"> 1062 </span> : : args_save_file); -<span class="lineNum"> 1063 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1064 </span> : : } -<span class="lineNum"> 1065 </span> : : else { -<span class="lineNum"> 1066 </span> [<span class="branchCov" title="Branch 0 was taken 4528 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 5094 : for (i=0; i &lt; argc; i++) {</span> -<span class="lineNum"> 1067 </span> :<span class="lineCov"> 4528 : args_str_len += strlen(argv[i]);</span> -<span class="lineNum"> 1068 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4528 times"> + </span>]:<span class="lineCov"> 4528 : if (args_str_len &gt;= MAX_PATH_LEN) {</span> -<span class="lineNum"> 1069 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;argument string too long, exiting.&quot;);</span> -<span class="lineNum"> 1070 </span> :<span class="lineNoCov"> 0 : close(args_file_fd);</span> -<span class="lineNum"> 1071 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1072 </span> : : } -<span class="lineNum"> 1073 </span> :<span class="lineCov"> 4528 : strlcat(args_str, argv[i], sizeof(args_str));</span> -<span class="lineNum"> 1074 </span> :<span class="lineCov"> 4528 : strlcat(args_str, &quot; &quot;, sizeof(args_str));</span> -<span class="lineNum"> 1075 </span> : : } -<span class="lineNum"> 1076 </span> :<span class="lineCov"> 566 : strlcat(args_str, &quot;\n&quot;, sizeof(args_str));</span> -<span class="lineNum"> 1077 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(write(args_file_fd, args_str, strlen(args_str))</span> -<span class="lineNum"> 1078 </span> :<span class="lineCov"> 566 : != strlen(args_str)) {</span> -<span class="lineNum"> 1079 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 1080 </span> : : &quot;warning, did not write expected number of bytes to args save file&quot;); -<span class="lineNum"> 1081 </span> : : } -<span class="lineNum"> 1082 </span> :<span class="lineCov"> 566 : close(args_file_fd);</span> -<span class="lineNum"> 1083 </span> : : } -<span class="lineNum"> 1084 </span> :<span class="lineCov"> 566 : return 1;</span> -<span class="lineNum"> 1085 </span> : : } -<span class="lineNum"> 1086 </span> : : -<span class="lineNum"> 1087 </span> : : /* Set the SPA packet message type -<a name="1088"><span class="lineNum"> 1088 </span> : : */</a> -<span class="lineNum"> 1089 </span> : : static int -<span class="lineNum"> 1090 </span> :<span class="lineCov"> 566 : set_message_type(fko_ctx_t ctx, fko_cli_options_t *options)</span> -<span class="lineNum"> 1091 </span> : : { -<span class="lineNum"> 1092 </span> : : short message_type; -<span class="lineNum"> 1093 </span> : : -<span class="lineNum"> 1094 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if(options-&gt;server_command[0] != 0x0)</span> -<span class="lineNum"> 1095 </span> : : { -<span class="lineNum"> 1096 </span> : : message_type = FKO_COMMAND_MSG; -<span class="lineNum"> 1097 </span> : : } -<span class="lineNum"> 1098 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : else if(options-&gt;nat_local)</span> -<span class="lineNum"> 1099 </span> : : { -<span class="lineNum"> 1100 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;fw_timeout &gt;= 0)</span> -<span class="lineNum"> 1101 </span> : : message_type = FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG; -<span class="lineNum"> 1102 </span> : : else -<span class="lineNum"> 1103 </span> :<span class="lineNoCov"> 0 : message_type = FKO_LOCAL_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 1104 </span> : : } -<span class="lineNum"> 1105 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : else if(options-&gt;nat_access_str[0] != 0x0)</span> -<span class="lineNum"> 1106 </span> : : { -<span class="lineNum"> 1107 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;fw_timeout &gt;= 0)</span> -<span class="lineNum"> 1108 </span> : : message_type = FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG; -<span class="lineNum"> 1109 </span> : : else -<span class="lineNum"> 1110 </span> :<span class="lineNoCov"> 0 : message_type = FKO_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 1111 </span> : : } -<span class="lineNum"> 1112 </span> : : else -<span class="lineNum"> 1113 </span> : : { -<span class="lineNum"> 1114 </span> [<span class="branchCov" title="Branch 0 was taken 563 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 566 : if (options-&gt;fw_timeout &gt;= 0)</span> -<span class="lineNum"> 1115 </span> : : message_type = FKO_CLIENT_TIMEOUT_ACCESS_MSG; -<span class="lineNum"> 1116 </span> : : else -<span class="lineNum"> 1117 </span> :<span class="lineCov"> 563 : message_type = FKO_ACCESS_MSG;</span> -<span class="lineNum"> 1118 </span> : : } -<span class="lineNum"> 1119 </span> : : -<span class="lineNum"> 1120 </span> :<span class="lineCov"> 566 : return fko_set_spa_message_type(ctx, message_type);</span> -<span class="lineNum"> 1121 </span> : : } -<span class="lineNum"> 1122 </span> : : -<span class="lineNum"> 1123 </span> : : /* Prompt for and receive a user password. -<a name="1124"><span class="lineNum"> 1124 </span> : : */</a> -<span class="lineNum"> 1125 </span> : : static int -<span class="lineNum"> 1126 </span> :<span class="lineCov"> 439 : get_keys(fko_ctx_t ctx, fko_cli_options_t *options,</span> -<span class="lineNum"> 1127 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len) -<span class="lineNum"> 1128 </span> : : { -<span class="lineNum"> 1129 </span> :<span class="lineCov"> 439 : char *key_tmp = NULL, *hmac_key_tmp = NULL;</span> -<span class="lineNum"> 1130 </span> :<span class="lineCov"> 439 : int use_hmac = 0, res = 0;</span> -<span class="lineNum"> 1131 </span> : : -<span class="lineNum"> 1132 </span> : : memset(key, 0x0, MAX_KEY_LEN+1); -<span class="lineNum"> 1133 </span> : : memset(hmac_key, 0x0, MAX_KEY_LEN+1); -<span class="lineNum"> 1134 </span> : : -<span class="lineNum"> 1135 </span> [<span class="branchCov" title="Branch 0 was taken 426 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>]:<span class="lineCov"> 439 : if(options-&gt;have_key)</span> -<span class="lineNum"> 1136 </span> : : { -<span class="lineNum"> 1137 </span> :<span class="lineCov"> 426 : strlcpy(key, options-&gt;key, MAX_KEY_LEN+1);</span> -<span class="lineNum"> 1138 </span> :<span class="lineCov"> 426 : *key_len = strlen(key);</span> -<span class="lineNum"> 1139 </span> : : } -<span class="lineNum"> 1140 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 13 : else if(options-&gt;have_base64_key)</span> -<span class="lineNum"> 1141 </span> : : { -<span class="lineNum"> 1142 </span> :<span class="lineCov"> 9 : *key_len = fko_base64_decode(options-&gt;key_base64,</span> -<span class="lineNum"> 1143 </span> :<span class="lineCov"> 9 : (unsigned char *) options-&gt;key);</span> -<span class="lineNum"> 1144 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 9 : if(*key_len &gt; 0 &amp;&amp; *key_len &lt; MAX_KEY_LEN)</span> -<span class="lineNum"> 1145 </span> : : { -<span class="lineNum"> 1146 </span> :<span class="lineCov"> 9 : memcpy(key, options-&gt;key, *key_len);</span> -<span class="lineNum"> 1147 </span> : : } -<span class="lineNum"> 1148 </span> : : else -<span class="lineNum"> 1149 </span> : : { -<span class="lineNum"> 1150 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Invalid key length: '%d', must be in [1,%d]&quot;,</span> -<span class="lineNum"> 1151 </span> : : *key_len, MAX_KEY_LEN); -<span class="lineNum"> 1152 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1153 </span> : : } -<span class="lineNum"> 1154 </span> : : } -<span class="lineNum"> 1155 </span> : : else -<span class="lineNum"> 1156 </span> : : { -<span class="lineNum"> 1157 </span> : : /* If --get-key file was specified grab the key/password from it. -<span class="lineNum"> 1158 </span> : : */ -<span class="lineNum"> 1159 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 4 : if(options-&gt;get_key_file[0] != 0x0)</span> -<span class="lineNum"> 1160 </span> : : { -<span class="lineNum"> 1161 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(get_key_file(key, key_len, options-&gt;get_key_file, ctx, options) != 1)</span> -<span class="lineNum"> 1162 </span> : : { -<span class="lineNum"> 1163 </span> : : return 0; -<span class="lineNum"> 1164 </span> : : } -<span class="lineNum"> 1165 </span> : : } -<span class="lineNum"> 1166 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : else if(options-&gt;use_gpg)</span> -<span class="lineNum"> 1167 </span> : : { -<span class="lineNum"> 1168 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;use_gpg_agent)</span> -<span class="lineNum"> 1169 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 1170 </span> : : &quot;[+] GPG mode set, signing passphrase acquired via gpg-agent&quot;); -<span class="lineNum"> 1171 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(options-&gt;gpg_no_signing_pw)</span> -<span class="lineNum"> 1172 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 1173 </span> : : &quot;[+] GPG mode set, signing passphrase not required&quot;); -<span class="lineNum"> 1174 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(strlen(options-&gt;gpg_signer_key))</span> -<span class="lineNum"> 1175 </span> : : { -<span class="lineNum"> 1176 </span> :<span class="lineNoCov"> 0 : key_tmp = getpasswd(&quot;Enter passphrase for signing: &quot;, options-&gt;input_fd);</span> -<span class="lineNum"> 1177 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_tmp == NULL)</span> -<span class="lineNum"> 1178 </span> : : { -<span class="lineNum"> 1179 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] getpasswd() key error.&quot;);</span> -<span class="lineNum"> 1180 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1181 </span> : : } -<span class="lineNum"> 1182 </span> :<span class="lineNoCov"> 0 : strlcpy(key, key_tmp, MAX_KEY_LEN+1);</span> -<span class="lineNum"> 1183 </span> :<span class="lineNoCov"> 0 : *key_len = strlen(key);</span> -<span class="lineNum"> 1184 </span> : : } -<span class="lineNum"> 1185 </span> : : } -<span class="lineNum"> 1186 </span> : : else -<span class="lineNum"> 1187 </span> : : { -<span class="lineNum"> 1188 </span> :<span class="lineCov"> 2 : key_tmp = getpasswd(&quot;Enter encryption key: &quot;, options-&gt;input_fd);</span> -<span class="lineNum"> 1189 </span> : : -<span class="lineNum"> 1190 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(key_tmp == NULL)</span> -<span class="lineNum"> 1191 </span> : : { -<span class="lineNum"> 1192 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] getpasswd() key error.&quot;);</span> -<span class="lineNum"> 1193 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1194 </span> : : } -<span class="lineNum"> 1195 </span> :<span class="lineCov"> 2 : strlcpy(key, key_tmp, MAX_KEY_LEN+1);</span> -<span class="lineNum"> 1196 </span> :<span class="lineCov"> 2 : *key_len = strlen(key);</span> -<span class="lineNum"> 1197 </span> : : } -<span class="lineNum"> 1198 </span> : : } -<span class="lineNum"> 1199 </span> : : -<span class="lineNum"> 1200 </span> [<span class="branchCov" title="Branch 0 was taken 242 times"> + </span><span class="branchCov" title="Branch 1 was taken 195 times"> + </span>]:<span class="lineCov"> 437 : if(options-&gt;have_hmac_key)</span> -<span class="lineNum"> 1201 </span> : : { -<span class="lineNum"> 1202 </span> :<span class="lineCov"> 242 : strlcpy(hmac_key, options-&gt;hmac_key, MAX_KEY_LEN+1);</span> -<span class="lineNum"> 1203 </span> :<span class="lineCov"> 242 : *hmac_key_len = strlen(hmac_key);</span> -<span class="lineNum"> 1204 </span> :<span class="lineCov"> 242 : use_hmac = 1;</span> -<span class="lineNum"> 1205 </span> : : } -<span class="lineNum"> 1206 </span> [<span class="branchCov" title="Branch 0 was taken 114 times"> + </span><span class="branchCov" title="Branch 1 was taken 81 times"> + </span>]:<span class="lineCov"> 195 : else if(options-&gt;have_hmac_base64_key)</span> -<span class="lineNum"> 1207 </span> : : { -<span class="lineNum"> 1208 </span> :<span class="lineCov"> 114 : *hmac_key_len = fko_base64_decode(options-&gt;hmac_key_base64,</span> -<span class="lineNum"> 1209 </span> :<span class="lineCov"> 114 : (unsigned char *) options-&gt;hmac_key);</span> -<span class="lineNum"> 1210 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 112 times"> + </span>]:<span class="lineCov"> 114 : if(*hmac_key_len &gt; MAX_KEY_LEN || *hmac_key_len &lt; 0)</span> -<span class="lineNum"> 1211 </span> : : { -<span class="lineNum"> 1212 </span> :<span class="lineCov"> 2 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1213 </span> : : &quot;[*] Invalid decoded key length: '%d', must be in [0,%d]&quot;, -<span class="lineNum"> 1214 </span> : : *hmac_key_len, MAX_KEY_LEN); -<span class="lineNum"> 1215 </span> :<span class="lineCov"> 2 : return 0;</span> -<span class="lineNum"> 1216 </span> : : } -<span class="lineNum"> 1217 </span> :<span class="lineCov"> 112 : memcpy(hmac_key, options-&gt;hmac_key, *hmac_key_len);</span> -<span class="lineNum"> 1218 </span> :<span class="lineCov"> 112 : use_hmac = 1;</span> -<span class="lineNum"> 1219 </span> : : } -<span class="lineNum"> 1220 </span> [<span class="branchCov" title="Branch 0 was taken 8 times"> + </span><span class="branchCov" title="Branch 1 was taken 73 times"> + </span>]:<span class="lineCov"> 81 : else if (options-&gt;use_hmac)</span> -<span class="lineNum"> 1221 </span> : : { -<span class="lineNum"> 1222 </span> : : /* If --get-key file was specified grab the key/password from it. -<span class="lineNum"> 1223 </span> : : */ -<span class="lineNum"> 1224 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8 times"> + </span>]:<span class="lineCov"> 8 : if(options-&gt;get_hmac_key_file[0] != 0x0)</span> -<span class="lineNum"> 1225 </span> : : { -<span class="lineNum"> 1226 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(get_key_file(hmac_key, hmac_key_len,</span> -<span class="lineNum"> 1227 </span> :<span class="lineNoCov"> 0 : options-&gt;get_hmac_key_file, ctx, options) != 1)</span> -<span class="lineNum"> 1228 </span> : : { -<span class="lineNum"> 1229 </span> : : return 0; -<span class="lineNum"> 1230 </span> : : } -<span class="lineNum"> 1231 </span> : : use_hmac = 1; -<span class="lineNum"> 1232 </span> : : } -<span class="lineNum"> 1233 </span> : : else -<span class="lineNum"> 1234 </span> : : { -<span class="lineNum"> 1235 </span> :<span class="lineCov"> 8 : hmac_key_tmp = getpasswd(&quot;Enter HMAC key: &quot;, options-&gt;input_fd);</span> -<span class="lineNum"> 1236 </span> : : -<span class="lineNum"> 1237 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8 times"> + </span>]:<span class="lineCov"> 8 : if(hmac_key_tmp == NULL)</span> -<span class="lineNum"> 1238 </span> : : { -<span class="lineNum"> 1239 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] getpasswd() key error.&quot;);</span> -<span class="lineNum"> 1240 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1241 </span> : : } -<span class="lineNum"> 1242 </span> : : -<span class="lineNum"> 1243 </span> :<span class="lineCov"> 8 : strlcpy(hmac_key, hmac_key_tmp, MAX_KEY_LEN+1);</span> -<span class="lineNum"> 1244 </span> :<span class="lineCov"> 8 : *hmac_key_len = strlen(hmac_key);</span> -<span class="lineNum"> 1245 </span> :<span class="lineCov"> 8 : use_hmac = 1;</span> -<span class="lineNum"> 1246 </span> : : } -<span class="lineNum"> 1247 </span> : : } -<span class="lineNum"> 1248 </span> : : -<span class="lineNum"> 1249 </span> [<span class="branchCov" title="Branch 0 was taken 362 times"> + </span><span class="branchCov" title="Branch 1 was taken 73 times"> + </span>]:<span class="lineCov"> 435 : if (use_hmac)</span> -<span class="lineNum"> 1250 </span> : : { -<span class="lineNum"> 1251 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 362 times"> + </span>]:<span class="lineCov"> 362 : if(*hmac_key_len &lt; 0 || *hmac_key_len &gt; MAX_KEY_LEN)</span> -<span class="lineNum"> 1252 </span> : : { -<span class="lineNum"> 1253 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Invalid HMAC key length: '%d', must be in [0,%d]&quot;,</span> -<span class="lineNum"> 1254 </span> : : *hmac_key_len, MAX_KEY_LEN); -<span class="lineNum"> 1255 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1256 </span> : : } -<span class="lineNum"> 1257 </span> : : -<span class="lineNum"> 1258 </span> : : /* Make sure the same key is not used for both encryption and the HMAC -<span class="lineNum"> 1259 </span> : : */ -<span class="lineNum"> 1260 </span> [<span class="branchCov" title="Branch 0 was taken 98 times"> + </span><span class="branchCov" title="Branch 1 was taken 264 times"> + </span>]:<span class="lineCov"> 362 : if(*hmac_key_len == *key_len)</span> -<span class="lineNum"> 1261 </span> : : { -<span class="lineNum"> 1262 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 97 times"> + </span>]:<span class="lineCov"> 98 : if(memcmp(hmac_key, key, *key_len) == 0)</span> -<span class="lineNum"> 1263 </span> : : { -<span class="lineNum"> 1264 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1265 </span> : : &quot;[*] The encryption passphrase and HMAC key should not be identical, no SPA packet sent. Exiting.&quot;); -<span class="lineNum"> 1266 </span> :<span class="lineCov"> 1 : return 0;</span> -<span class="lineNum"> 1267 </span> : : } -<span class="lineNum"> 1268 </span> : : } -<span class="lineNum"> 1269 </span> : : -<span class="lineNum"> 1270 </span> :<span class="lineCov"> 361 : res = fko_set_spa_hmac_type(ctx, options-&gt;hmac_type);</span> -<span class="lineNum"> 1271 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 361 times"> + </span>]:<span class="lineCov"> 361 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 1272 </span> : : { -<span class="lineNum"> 1273 </span> :<span class="lineNoCov"> 0 : errmsg(&quot;fko_set_spa_hmac_type&quot;, res);</span> -<span class="lineNum"> 1274 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1275 </span> : : } -<span class="lineNum"> 1276 </span> : : } -<span class="lineNum"> 1277 </span> : : -<span class="lineNum"> 1278 </span> : : return 1; -<span class="lineNum"> 1279 </span> : : } -<span class="lineNum"> 1280 </span> : : -<span class="lineNum"> 1281 </span> : : /* Display an FKO error message. -<a name="1282"><span class="lineNum"> 1282 </span> : : */</a> -<span class="lineNum"> 1283 </span> : : void -<span class="lineNum"> 1284 </span> :<span class="lineCov"> 176 : errmsg(const char *msg, const int err) {</span> -<span class="lineNum"> 1285 </span> :<span class="lineCov"> 176 : log_msg(LOG_VERBOSITY_ERROR, &quot;%s: %s: Error %i - %s&quot;,</span> -<span class="lineNum"> 1286 </span> : : MY_NAME, msg, err, fko_errstr(err)); -<span class="lineNum"> 1287 </span> :<span class="lineCov"> 176 : }</span> -<a name="1288"><span class="lineNum"> 1288 </span> : : </a> -<span class="lineNum"> 1289 </span> : : static void -<span class="lineNum"> 1290 </span> :<span class="lineCov"> 5660 : zero_buf_wrapper(char *buf, int len)</span> -<span class="lineNum"> 1291 </span> : : { -<span class="lineNum"> 1292 </span> : : -<span class="lineNum"> 1293 </span> [<span class="branchCov" title="Branch 0 was taken 5327 times"> + </span><span class="branchCov" title="Branch 1 was taken 333 times"> + </span>]:<span class="lineCov"> 5660 : if(buf == NULL || len == 0)</span> -<span class="lineNum"> 1294 </span> : : return; -<span class="lineNum"> 1295 </span> : : -<span class="lineNum"> 1296 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 5327 times"> + </span>]:<span class="lineCov"> 5327 : if(zero_buf(buf, len) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 1297 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1298 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 1299 </span> : : -<span class="lineNum"> 1300 </span> : : return; -<span class="lineNum"> 1301 </span> : : } -<span class="lineNum"> 1302 </span> : : -<span class="lineNum"> 1303 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 1304 </span> : : static int -<span class="lineNum"> 1305 </span> : : enable_fault_injections(fko_cli_options_t * const opts) -<span class="lineNum"> 1306 </span> : : { -<span class="lineNum"> 1307 </span> : : int rv = 1; -<span class="lineNum"> 1308 </span> : : if(opts-&gt;fault_injection_tag[0] != 0x0) -<span class="lineNum"> 1309 </span> : : { -<span class="lineNum"> 1310 </span> : : if(opts-&gt;verbose) -<span class="lineNum"> 1311 </span> : : log_msg(LOG_VERBOSITY_NORMAL, &quot;[+] Enable fault injection tag: %s&quot;, -<span class="lineNum"> 1312 </span> : : opts-&gt;fault_injection_tag); -<span class="lineNum"> 1313 </span> : : if(fiu_init(0) != 0) -<span class="lineNum"> 1314 </span> : : { -<span class="lineNum"> 1315 </span> : : log_msg(LOG_VERBOSITY_WARNING, &quot;[*] Unable to set fault injection tag: %s&quot;, -<span class="lineNum"> 1316 </span> : : opts-&gt;fault_injection_tag); -<span class="lineNum"> 1317 </span> : : rv = 0; -<span class="lineNum"> 1318 </span> : : } -<span class="lineNum"> 1319 </span> : : if(fiu_enable(opts-&gt;fault_injection_tag, 1, NULL, 0) != 0) -<span class="lineNum"> 1320 </span> : : { -<span class="lineNum"> 1321 </span> : : log_msg(LOG_VERBOSITY_WARNING, &quot;[*] Unable to set fault injection tag: %s&quot;, -<span class="lineNum"> 1322 </span> : : opts-&gt;fault_injection_tag); -<span class="lineNum"> 1323 </span> : : rv = 0; -<span class="lineNum"> 1324 </span> : : } -<span class="lineNum"> 1325 </span> : : } -<span class="lineNum"> 1326 </span> : : return rv; -<span class="lineNum"> 1327 </span> : : } -<span class="lineNum"> 1328 </span> : : #endif -<span class="lineNum"> 1329 </span> : : -<span class="lineNum"> 1330 </span> : : /* free up memory and exit -<a name="1331"><span class="lineNum"> 1331 </span> : : */</a> -<span class="lineNum"> 1332 </span> : : static void -<span class="lineNum"> 1333 </span> :<span class="lineCov"> 566 : clean_exit(fko_ctx_t ctx, fko_cli_options_t *opts,</span> -<span class="lineNum"> 1334 </span> : : char *key, int *key_len, char *hmac_key, int *hmac_key_len, -<span class="lineNum"> 1335 </span> : : unsigned int exit_status) -<span class="lineNum"> 1336 </span> : : { -<span class="lineNum"> 1337 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 1338 </span> : : if(opts-&gt;fault_injection_tag[0] != 0x0) -<span class="lineNum"> 1339 </span> : : fiu_disable(opts-&gt;fault_injection_tag); -<span class="lineNum"> 1340 </span> : : #endif -<span class="lineNum"> 1341 </span> : : -<span class="lineNum"> 1342 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 1343 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 1344 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 1345 </span> :<span class="lineCov"> 566 : ctx = NULL;</span> -<span class="lineNum"> 1346 </span> :<span class="lineCov"> 566 : free_configs(opts);</span> -<span class="lineNum"> 1347 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(key, *key_len);</span> -<span class="lineNum"> 1348 </span> :<span class="lineCov"> 566 : zero_buf_wrapper(hmac_key, *hmac_key_len);</span> -<span class="lineNum"> 1349 </span> :<span class="lineCov"> 566 : *key_len = 0;</span> -<span class="lineNum"> 1350 </span> :<span class="lineCov"> 566 : *hmac_key_len = 0;</span> -<span class="lineNum"> 1351 </span> :<span class="lineCov"> 566 : exit(exit_status);</span> -<span class="lineNum"> 1352 </span> : : } -<span class="lineNum"> 1353 </span> : : -<span class="lineNum"> 1354 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html deleted file mode 100644 index 3d618f6d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/getpasswd.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - getpasswd.c<span style="font-size: 80%;"> (<a href="getpasswd.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntry">78</td> - <td class="headerCovTableEntryLo">59.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">15</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">26.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="getpasswd.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="getpasswd.c.gcov.html#61">read_passwd_from_stream</a></td> - <td class="coverFnHi">10</td> - </tr> - <tr> - <td class="coverFn"><a href="getpasswd.c.gcov.html#129">getpasswd</a></td> - <td class="coverFnHi">10</td> - </tr> - <tr> - <td class="coverFn"><a href="getpasswd.c.gcov.html#216">get_key_file</a></td> - <td class="coverFnHi">2</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html deleted file mode 100644 index 6bbc448c..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.func.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/getpasswd.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - getpasswd.c<span style="font-size: 80%;"> (<a href="getpasswd.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntry">78</td> - <td class="headerCovTableEntryLo">59.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">15</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">26.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="getpasswd.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="getpasswd.c.gcov.html#216">get_key_file</a></td> - <td class="coverFnHi">2</td> - </tr> - <tr> - <td class="coverFn"><a href="getpasswd.c.gcov.html#129">getpasswd</a></td> - <td class="coverFnHi">10</td> - </tr> - <tr> - <td class="coverFn"><a href="getpasswd.c.gcov.html#61">read_passwd_from_stream</a></td> - <td class="coverFnHi">10</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html deleted file mode 100644 index 07b80b1f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/getpasswd.c.gcov.html +++ /dev/null @@ -1,382 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/getpasswd.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - getpasswd.c<span style="font-size: 80%;"> (source / <a href="getpasswd.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntry">78</td> - <td class="headerCovTableEntryLo">59.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">15</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">26.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: getpasswd.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Routines for obtaining a password from a user. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &lt;stdio.h&gt; -<span class="lineNum"> 32 </span> : : #include &lt;signal.h&gt; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #ifdef WIN32 -<span class="lineNum"> 35 </span> : : #include &lt;conio.h&gt; -<span class="lineNum"> 36 </span> : : #else -<span class="lineNum"> 37 </span> : : #include &lt;termios.h&gt; -<span class="lineNum"> 38 </span> : : #endif -<span class="lineNum"> 39 </span> : : -<span class="lineNum"> 40 </span> : : #include &quot;fwknop_common.h&quot; -<span class="lineNum"> 41 </span> : : #include &quot;getpasswd.h&quot; -<span class="lineNum"> 42 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : #define PW_BUFSIZE 128 /*!&lt; Maximum number of chars an encryption key or a password can contain */ -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : #define PW_BREAK_CHAR 0x03 /*!&lt; Ascii code for the Ctrl-C char */ -<span class="lineNum"> 47 </span> : : #define PW_BS_CHAR 0x08 /*!&lt; Ascii code for the backspace char */ -<span class="lineNum"> 48 </span> : : #define PW_LF_CHAR 0x0A /*!&lt; Ascii code for the \n char */ -<span class="lineNum"> 49 </span> : : #define PW_CR_CHAR 0x0D /*!&lt; Ascii code for the \r char */ -<span class="lineNum"> 50 </span> : : #define PW_CLEAR_CHAR 0x15 /*!&lt; Ascii code for the Ctrl-U char */ -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> : : #define ARRAY_FIRST_ELT_ADR(t) &amp;((t)[0]) /*!&lt; Macro to get the first element of an array */ -<span class="lineNum"> 53 </span> : : #define ARRAY_LAST_ELT_ADR(t) &amp;((t)[sizeof(t)-1]) /*!&lt; Macro to get the last element of an array */ -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : /** -<span class="lineNum"> 56 </span> : : * @brief Read a password from a stream object -<span class="lineNum"> 57 </span> : : * -<span class="lineNum"> 58 </span> : : * @param stream Pointer to a FILE object that identifies an input stream. -<span class="lineNum"> 59 </span> : : * -<span class="lineNum"> 60 </span> : : * @return The password buffer or NULL if not set -<a name="61"><span class="lineNum"> 61 </span> : : */</a> -<span class="lineNum"> 62 </span> : : static char * -<span class="lineNum"> 63 </span> :<span class="lineCov"> 10 : read_passwd_from_stream(FILE *stream)</span> -<span class="lineNum"> 64 </span> : : { -<span class="lineNum"> 65 </span> : : static char password[PW_BUFSIZE] = {0}; -<span class="lineNum"> 66 </span> : : int c; -<span class="lineNum"> 67 </span> : : char *ptr; -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> :<span class="lineCov"> 10 : ptr = ARRAY_FIRST_ELT_ADR(password);</span> -<span class="lineNum"> 70 </span> : : -<span class="lineNum"> 71 </span> [<span class="branchCov" title="Branch 0 was taken 10 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 10 : if(stream == NULL)</span> -<span class="lineNum"> 72 </span> : : return password; -<span class="lineNum"> 73 </span> : : -<span class="lineNum"> 74 </span> : : #ifdef WIN32 -<span class="lineNum"> 75 </span> : : while((c = _getch()) != PW_CR_CHAR) -<span class="lineNum"> 76 </span> : : #else -<span class="lineNum"> 77 </span>[<span class="branchCov" title="Branch 1 was taken 89 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 79 times"> + </span><span class="branchCov" title="Branch 4 was taken 10 times"> + </span>]:<span class="lineCov"> 89 : while( ((c = getc(stream)) != EOF) &amp;&amp; (c != PW_LF_CHAR) &amp;&amp; (c != PW_BREAK_CHAR) )</span> -<span class="lineNum"> 78 </span> : : #endif -<span class="lineNum"> 79 </span> : : { -<span class="lineNum"> 80 </span> : : /* Handle a backspace without backing up too far. */ -<span class="lineNum"> 81 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 79 times"> + </span>]:<span class="lineCov"> 79 : if (c == PW_BS_CHAR)</span> -<span class="lineNum"> 82 </span> : : { -<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ptr != ARRAY_FIRST_ELT_ADR(password))</span> -<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : ptr--;</span> -<span class="lineNum"> 85 </span> : : } -<span class="lineNum"> 86 </span> : : -<span class="lineNum"> 87 </span> : : /* Handle a Ctrl-U to clear the password entry and start over */ -<span class="lineNum"> 88 </span> [<span class="branchCov" title="Branch 0 was taken 79 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 79 : else if (c == PW_CLEAR_CHAR)</span> -<span class="lineNum"> 89 </span> : : ptr = ARRAY_FIRST_ELT_ADR(password); -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> : : /* Fill in the password buffer until it reaches the last -1 char. -<span class="lineNum"> 92 </span> : : * The last char is used to NULL terminate the string. */ -<span class="lineNum"> 93 </span> [<span class="branchCov" title="Branch 0 was taken 79 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 79 : else if (ptr &lt; ARRAY_LAST_ELT_ADR(password))</span> -<span class="lineNum"> 94 </span> : : { -<span class="lineNum"> 95 </span> :<span class="lineCov"> 79 : *ptr++ = c;</span> -<span class="lineNum"> 96 </span> : : } -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : /* Discard char */ -<span class="lineNum"> 99 </span> : : else; -<span class="lineNum"> 100 </span> : : } -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> : : /* A CTRL-C char has been detected, we discard the password */ -<span class="lineNum"> 103 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 10 times"> + </span>]:<span class="lineCov"> 10 : if (c == PW_BREAK_CHAR)</span> -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : password[0] = '\0';</span> -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> : : /* Otherwise we NULL terminate the string here. Overflows are handled -<span class="lineNum"> 107 </span> : : * previously, so we can add the char without worrying */ -<span class="lineNum"> 108 </span> : : else -<span class="lineNum"> 109 </span> :<span class="lineCov"> 10 : *ptr = '\0';</span> -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> : : return password; -<span class="lineNum"> 112 </span> : : } -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : /** -<span class="lineNum"> 115 </span> : : * @brief Function for accepting password input from users -<span class="lineNum"> 116 </span> : : * -<span class="lineNum"> 117 </span> : : * The functions reads chars from a buffered stream and store them in a buffer of -<span class="lineNum"> 118 </span> : : * chars. If a file descriptor is supplied then, the password is read from -<span class="lineNum"> 119 </span> : : * the associated stream, otherwise a new buffered stream is created and a -<span class="lineNum"> 120 </span> : : * prompt is displayed to the user. -<span class="lineNum"> 121 </span> : : * -<span class="lineNum"> 122 </span> : : * @param prompt String displayed on the terminal to prompt the user for a -<span class="lineNum"> 123 </span> : : * password or an encryption key -<span class="lineNum"> 124 </span> : : * @param fd File descriptor to use to read the pasword from. If fd is set -<span class="lineNum"> 125 </span> : : * to FD_INVALID, then a new stream is opened. -<span class="lineNum"> 126 </span> : : * -<span class="lineNum"> 127 </span> : : * @return NULL if a problem occured or the user killed the terminal (Ctrl-C)\n -<span class="lineNum"> 128 </span> : : * otherwise the password - empty password is accepted. -<a name="129"><span class="lineNum"> 129 </span> : : */</a> -<span class="lineNum"> 130 </span> : : char* -<span class="lineNum"> 131 </span> :<span class="lineCov"> 10 : getpasswd(const char *prompt, int fd)</span> -<span class="lineNum"> 132 </span> : : { -<span class="lineNum"> 133 </span> :<span class="lineCov"> 10 : char *ptr = NULL;</span> -<span class="lineNum"> 134 </span> :<span class="lineCov"> 10 : FILE *fp = NULL;</span> -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> : : #ifndef WIN32 -<span class="lineNum"> 137 </span> : : sigset_t sig, old_sig; -<span class="lineNum"> 138 </span> : : struct termios ts; -<span class="lineNum"> 139 </span> :<span class="lineCov"> 10 : tcflag_t old_c_lflag = 0;</span> -<span class="lineNum"> 140 </span> : : #else -<span class="lineNum"> 141 </span> : : /* Force stdin on windows. */ -<span class="lineNum"> 142 </span> : : fd = 0; -<span class="lineNum"> 143 </span> : : #endif -<span class="lineNum"> 144 </span> : : -<span class="lineNum"> 145 </span> : : /* If a valid file descriptor is supplied, we try to open a stream from it */ -<span class="lineNum"> 146 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 10 times"> + </span>]:<span class="lineCov"> 10 : if (FD_IS_VALID(fd))</span> -<span class="lineNum"> 147 </span> : : { -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : fp = fdopen(fd, &quot;r&quot;);</span> -<span class="lineNum"> 149 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (fp == NULL)</span> -<span class="lineNum"> 150 </span> : : { -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;getpasswd() - &quot;</span> -<span class="lineNum"> 152 </span> : : &quot;Unable to create a stream from the file descriptor : %s&quot;, -<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : return(NULL);</span> -<span class="lineNum"> 155 </span> : : } -<span class="lineNum"> 156 </span> : : } -<span class="lineNum"> 157 </span> : : -<span class="lineNum"> 158 </span> : : #ifndef WIN32 -<span class="lineNum"> 159 </span> : : /* Otherwise we are going to open a new stream */ -<span class="lineNum"> 160 </span> : : else -<span class="lineNum"> 161 </span> : : { -<span class="lineNum"> 162 </span> [<span class="branchCov" title="Branch 2 was taken 10 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 10 : if((fp = fopen(ctermid(NULL), &quot;r+&quot;)) == NULL)</span> -<span class="lineNum"> 163 </span> : : return(NULL); -<span class="lineNum"> 164 </span> : : -<span class="lineNum"> 165 </span> :<span class="lineCov"> 10 : setbuf(fp, NULL);</span> -<span class="lineNum"> 166 </span> : : -<span class="lineNum"> 167 </span> : : /* Setup blocks for SIGINT and SIGTSTP and save the original signal -<span class="lineNum"> 168 </span> : : * mask. -<span class="lineNum"> 169 </span> : : */ -<span class="lineNum"> 170 </span> :<span class="lineCov"> 10 : sigemptyset(&amp;sig);</span> -<span class="lineNum"> 171 </span> :<span class="lineCov"> 10 : sigaddset(&amp;sig, SIGINT);</span> -<span class="lineNum"> 172 </span> :<span class="lineCov"> 10 : sigaddset(&amp;sig, SIGTSTP);</span> -<span class="lineNum"> 173 </span> :<span class="lineCov"> 10 : sigprocmask(SIG_BLOCK, &amp;sig, &amp;old_sig);</span> -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> : : /* -<span class="lineNum"> 176 </span> : : * Save current tty state for later restoration after we : -<span class="lineNum"> 177 </span> : : * - disable echo of characters to the tty -<span class="lineNum"> 178 </span> : : * - disable signal generation -<span class="lineNum"> 179 </span> : : * - disable cannonical mode (input read line by line mode) -<span class="lineNum"> 180 </span> : : */ -<span class="lineNum"> 181 </span> :<span class="lineCov"> 10 : tcgetattr(fileno(fp), &amp;ts);</span> -<span class="lineNum"> 182 </span> :<span class="lineCov"> 10 : old_c_lflag = ts.c_lflag;</span> -<span class="lineNum"> 183 </span> :<span class="lineCov"> 10 : ts.c_lflag &amp;= ~(ECHO | ICANON | ISIG);</span> -<span class="lineNum"> 184 </span> :<span class="lineCov"> 10 : tcsetattr(fileno(fp), TCSAFLUSH, &amp;ts);</span> -<span class="lineNum"> 185 </span> : : -<span class="lineNum"> 186 </span> :<span class="lineCov"> 10 : fputs(prompt, fp);</span> -<span class="lineNum"> 187 </span> : : } -<span class="lineNum"> 188 </span> : : #else -<span class="lineNum"> 189 </span> : : _cputs(prompt); -<span class="lineNum"> 190 </span> : : #endif -<span class="lineNum"> 191 </span> : : /* Read the password */ -<span class="lineNum"> 192 </span> :<span class="lineCov"> 10 : ptr = read_passwd_from_stream(fp);</span> -<span class="lineNum"> 193 </span> : : -<span class="lineNum"> 194 </span> : : #ifdef WIN32 -<span class="lineNum"> 195 </span> : : /* In Windows, it would be a CR-LF -<span class="lineNum"> 196 </span> : : */ -<span class="lineNum"> 197 </span> : : _putch(PW_CR_CHAR); -<span class="lineNum"> 198 </span> : : _putch(PW_LF_CHAR); -<span class="lineNum"> 199 </span> : : #else -<span class="lineNum"> 200 </span> [<span class="branchCov" title="Branch 0 was taken 10 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 10 : if(! FD_IS_VALID(fd))</span> -<span class="lineNum"> 201 </span> : : { -<span class="lineNum"> 202 </span> : : /* Reset terminal settings -<span class="lineNum"> 203 </span> : : */ -<span class="lineNum"> 204 </span> :<span class="lineCov"> 10 : fputs(&quot;\n&quot;, fp);</span> -<span class="lineNum"> 205 </span> :<span class="lineCov"> 10 : ts.c_lflag = old_c_lflag;</span> -<span class="lineNum"> 206 </span> :<span class="lineCov"> 10 : tcsetattr(fileno(fp), TCSAFLUSH, &amp;ts);</span> -<span class="lineNum"> 207 </span> : : } -<span class="lineNum"> 208 </span> : : #endif -<span class="lineNum"> 209 </span> : : -<span class="lineNum"> 210 </span> :<span class="lineCov"> 10 : fclose(fp);</span> -<span class="lineNum"> 211 </span> : : -<span class="lineNum"> 212 </span> :<span class="lineCov"> 10 : return (ptr);</span> -<span class="lineNum"> 213 </span> : : } -<span class="lineNum"> 214 </span> : : -<span class="lineNum"> 215 </span> : : /* Function for accepting password input from a file -<a name="216"><span class="lineNum"> 216 </span> : : */</a> -<span class="lineNum"> 217 </span> : : int -<span class="lineNum"> 218 </span> :<span class="lineCov"> 2 : get_key_file(char *key, int *key_len, const char *key_file,</span> -<span class="lineNum"> 219 </span> : : fko_ctx_t ctx, const fko_cli_options_t *options) -<span class="lineNum"> 220 </span> : : { -<span class="lineNum"> 221 </span> : : FILE *pwfile_ptr; -<span class="lineNum"> 222 </span> :<span class="lineCov"> 2 : unsigned int numLines = 0, i = 0, found_dst;</span> -<span class="lineNum"> 223 </span> : : -<span class="lineNum"> 224 </span> :<span class="lineCov"> 2 : char conf_line_buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 225 </span> :<span class="lineCov"> 2 : char tmp_char_buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 226 </span> : : char *lptr; -<span class="lineNum"> 227 </span> : : -<span class="lineNum"> 228 </span> : : memset(key, 0x00, MAX_KEY_LEN+1); -<span class="lineNum"> 229 </span> : : -<span class="lineNum"> 230 </span> [<span class="branchCov" title="Branch 1 was taken 1 time"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 2 : if ((pwfile_ptr = fopen(key_file, &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 231 </span> : : { -<span class="lineNum"> 232 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not open config file: %s&quot;, key_file);</span> -<span class="lineNum"> 233 </span> :<span class="lineCov"> 1 : return 0;</span> -<span class="lineNum"> 234 </span> : : } -<span class="lineNum"> 235 </span> : : -<span class="lineNum"> 236 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : while ((fgets(conf_line_buf, MAX_LINE_LEN, pwfile_ptr)) != NULL)</span> -<span class="lineNum"> 237 </span> : : { -<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : numLines++;</span> -<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : conf_line_buf[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : lptr = conf_line_buf;</span> -<span class="lineNum"> 241 </span> : : -<span class="lineNum"> 242 </span> : : memset(tmp_char_buf, 0x0, MAX_LINE_LEN); -<span class="lineNum"> 243 </span> : : -<span class="lineNum"> 244 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (*lptr == ' ' || *lptr == '\t' || *lptr == '=')</span> -<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : lptr++;</span> -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> : : /* Get past comments and empty lines. -<span class="lineNum"> 248 </span> : : */ -<span class="lineNum"> 249 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*lptr == '#' || *lptr == '\n' || *lptr == '\r' || *lptr == '\0' || *lptr == ';')</span> -<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] -<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 251 </span> : : -<span class="lineNum"> 252 </span> : : /* Look for a line like &quot;&lt;SPA destination IP&gt;: &lt;password&gt;&quot; - this allows -<span class="lineNum"> 253 </span> : : * multiple keys to be placed within the same file, and the client will -<span class="lineNum"> 254 </span> : : * reference the matching one for the SPA server we are contacting -<span class="lineNum"> 255 </span> : : */ -<span class="lineNum"> 256 </span> : : found_dst = 1; -<span class="lineNum"> 257 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; strlen(options-&gt;spa_server_str); i++)</span> -<span class="lineNum"> 258 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*lptr++ != options-&gt;spa_server_str[i])</span> -<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : found_dst = 0;</span> -<span class="lineNum"> 260 </span> : : -<span class="lineNum"> 261 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! found_dst)</span> -<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 263 </span> : : -<span class="lineNum"> 264 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*lptr == ':')</span> -<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : lptr++;</span> -<span class="lineNum"> 266 </span> : : else -<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 268 </span> : : -<span class="lineNum"> 269 </span> : : /* Skip whitespace until we get to the password -<span class="lineNum"> 270 </span> : : */ -<span class="lineNum"> 271 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (*lptr == ' ' || *lptr == '\t' || *lptr == '=')</span> -<span class="lineNum"> 272 </span> :<span class="lineNoCov"> 0 : lptr++;</span> -<span class="lineNum"> 273 </span> : : -<span class="lineNum"> 274 </span> : : i = 0; -<span class="lineNum"> 275 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (*lptr != '\0' &amp;&amp; *lptr != '\n') {</span> -<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : key[i] = *lptr;</span> -<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : lptr++;</span> -<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : i++;</span> -<span class="lineNum"> 279 </span> : : } -<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : key[i] = '\0';</span> -<span class="lineNum"> 281 </span> : : } -<span class="lineNum"> 282 </span> : : -<span class="lineNum"> 283 </span> :<span class="lineCov"> 1 : fclose(pwfile_ptr);</span> -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if (key[0] == '\0') {</span> -<span class="lineNum"> 286 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not get key for IP: %s from: %s&quot;,</span> -<span class="lineNum"> 287 </span> :<span class="lineCov"> 1 : options-&gt;spa_server_str, key_file);</span> -<span class="lineNum"> 288 </span> :<span class="lineCov"> 1 : return 0;</span> -<span class="lineNum"> 289 </span> : : } -<span class="lineNum"> 290 </span> : : -<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : *key_len = strlen(key);</span> -<span class="lineNum"> 292 </span> : : -<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : return 1;</span> -<span class="lineNum"> 294 </span> : : } -<span class="lineNum"> 295 </span> : : -<span class="lineNum"> 296 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html deleted file mode 100644 index 3468de7f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func-sort-c.html +++ /dev/null @@ -1,97 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/http_resolve_host.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - http_resolve_host.c<span style="font-size: 80%;"> (<a href="http_resolve_host.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">172</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">122</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="http_resolve_host.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#58">try_url</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#323">resolve_ip_https</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#514">resolve_ip_http</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#241">parse_url</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html deleted file mode 100644 index b6484263..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.func.html +++ /dev/null @@ -1,97 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/http_resolve_host.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - http_resolve_host.c<span style="font-size: 80%;"> (<a href="http_resolve_host.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">172</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">122</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="http_resolve_host.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#241">parse_url</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#514">resolve_ip_http</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#323">resolve_ip_https</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="http_resolve_host.c.gcov.html#58">try_url</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html deleted file mode 100644 index b9a4cfa3..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/http_resolve_host.c.gcov.html +++ /dev/null @@ -1,649 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/http_resolve_host.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - http_resolve_host.c<span style="font-size: 80%;"> (source / <a href="http_resolve_host.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">172</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">122</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: http_resolve_host.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Routine for using an http request to obtain a client's IP -<span class="lineNum"> 7 </span> : : * address as seen from the outside world. -<span class="lineNum"> 8 </span> : : * -<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 12 </span> : : * -<span class="lineNum"> 13 </span> : : * License (GNU General Public License): -<span class="lineNum"> 14 </span> : : * -<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 19 </span> : : * -<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 24 </span> : : * -<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 28 </span> : : * USA -<span class="lineNum"> 29 </span> : : * -<span class="lineNum"> 30 </span> : : ***************************************************************************** -<span class="lineNum"> 31 </span> : : */ -<span class="lineNum"> 32 </span> : : #include &quot;fwknop_common.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 34 </span> : : -<span class="lineNum"> 35 </span> : : #include &lt;errno.h&gt; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : #ifdef WIN32 -<span class="lineNum"> 38 </span> : : #include &lt;winsock2.h&gt; -<span class="lineNum"> 39 </span> : : #include &lt;ws2tcpip.h&gt; -<span class="lineNum"> 40 </span> : : #else -<span class="lineNum"> 41 </span> : : #if HAVE_SYS_SOCKET_H -<span class="lineNum"> 42 </span> : : #include &lt;sys/socket.h&gt; -<span class="lineNum"> 43 </span> : : #endif -<span class="lineNum"> 44 </span> : : #include &lt;netdb.h&gt; -<span class="lineNum"> 45 </span> : : #include &lt;sys/wait.h&gt; -<span class="lineNum"> 46 </span> : : #endif -<span class="lineNum"> 47 </span> : : -<span class="lineNum"> 48 </span> : : #if AFL_FUZZING -<span class="lineNum"> 49 </span> : : #define AFL_SET_RESOLVE_HOST &quot;192.168.12.123&quot; /* force to non-routable IP */ -<span class="lineNum"> 50 </span> : : #endif -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> : : struct url -<span class="lineNum"> 53 </span> : : { -<span class="lineNum"> 54 </span> : : char port[MAX_PORT_STR_LEN+1]; -<span class="lineNum"> 55 </span> : : char host[MAX_URL_HOST_LEN+1]; -<span class="lineNum"> 56 </span> : : char path[MAX_URL_PATH_LEN+1]; -<span class="lineNum"> 57 </span> : : }; -<a name="58"><span class="lineNum"> 58 </span> : : </a> -<span class="lineNum"> 59 </span> : : static int -<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : try_url(struct url *url, fko_cli_options_t *options)</span> -<span class="lineNum"> 61 </span> : : { -<span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : int sock=-1, sock_success=0, res, error, http_buf_len, i;</span> -<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : int bytes_read = 0, position = 0;</span> -<span class="lineNum"> 64 </span> : : int o1, o2, o3, o4; -<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : struct addrinfo *result=NULL, *rp, hints;</span> -<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : char http_buf[HTTP_MAX_REQUEST_LEN] = {0};</span> -<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : char http_response[HTTP_MAX_RESPONSE_LEN] = {0};</span> -<span class="lineNum"> 68 </span> : : char *ndx; -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> : : #ifdef WIN32 -<span class="lineNum"> 71 </span> : : WSADATA wsa_data; -<span class="lineNum"> 72 </span> : : -<span class="lineNum"> 73 </span> : : /* Winsock needs to be initialized... -<span class="lineNum"> 74 </span> : : */ -<span class="lineNum"> 75 </span> : : res = WSAStartup( MAKEWORD(1,1), &amp;wsa_data ); -<span class="lineNum"> 76 </span> : : if( res != 0 ) -<span class="lineNum"> 77 </span> : : { -<span class="lineNum"> 78 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;Winsock initialization error %d&quot;, res ); -<span class="lineNum"> 79 </span> : : return(-1); -<span class="lineNum"> 80 </span> : : } -<span class="lineNum"> 81 </span> : : #endif -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> : : /* Build our HTTP request to resolve the external IP (this is similar to -<span class="lineNum"> 84 </span> : : * to contacting whatismyip.org, but using a different URL). -<span class="lineNum"> 85 </span> : : */ -<span class="lineNum"> 86 </span> : : snprintf(http_buf, HTTP_MAX_REQUEST_LEN, -<span class="lineNum"> 87 </span> : : &quot;GET %s HTTP/1.0\r\nUser-Agent: %s\r\nAccept: */*\r\n&quot; -<span class="lineNum"> 88 </span> : : &quot;Host: %s\r\nConnection: close\r\n\r\n&quot;, -<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : url-&gt;path,</span> -<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : options-&gt;http_user_agent,</span> -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : url-&gt;host</span> -<span class="lineNum"> 92 </span> : : ); -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : http_buf_len = strlen(http_buf);</span> -<span class="lineNum"> 95 </span> : : -<span class="lineNum"> 96 </span> : : memset(&amp;hints, 0, sizeof(struct addrinfo)); -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ -<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : hints.ai_socktype = SOCK_STREAM;</span> -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : hints.ai_protocol = IPPROTO_TCP;</span> -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> : : #if AFL_FUZZING -<span class="lineNum"> 103 </span> : : /* Make sure to not generate any resolution requests when compiled -<span class="lineNum"> 104 </span> : : * for AFL fuzzing cycles -<span class="lineNum"> 105 </span> : : */ -<span class="lineNum"> 106 </span> : : strlcpy(options-&gt;allow_ip_str, AFL_SET_RESOLVE_HOST, -<span class="lineNum"> 107 </span> : : sizeof(options-&gt;allow_ip_str)); -<span class="lineNum"> 108 </span> : : log_msg(LOG_VERBOSITY_INFO, -<span class="lineNum"> 109 </span> : : &quot;\n[+] AFL fuzzing cycle, force IP resolution to: %s&quot;, -<span class="lineNum"> 110 </span> : : options-&gt;allow_ip_str); -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : return(1); -<span class="lineNum"> 113 </span> : : #endif -<span class="lineNum"> 114 </span> : : -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : error = getaddrinfo(url-&gt;host, url-&gt;port, &amp;hints, &amp;result);</span> -<span class="lineNum"> 116 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (error != 0)</span> -<span class="lineNum"> 117 </span> : : { -<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;error in getaddrinfo: %s&quot;, gai_strerror(error));</span> -<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 120 </span> : : } -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (rp = result; rp != NULL; rp = rp-&gt;ai_next) {</span> -<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : sock = socket(rp-&gt;ai_family, rp-&gt;ai_socktype,</span> -<span class="lineNum"> 124 </span> : : rp-&gt;ai_protocol); -<span class="lineNum"> 125 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> -<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 127 </span> : : -<span class="lineNum"> 128 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((error = (connect(sock, rp-&gt;ai_addr, rp-&gt;ai_addrlen) != -1)))</span> -<span class="lineNum"> 129 </span> : : { -<span class="lineNum"> 130 </span> : : sock_success = 1; -<span class="lineNum"> 131 </span> : : break; /* made it */ -<span class="lineNum"> 132 </span> : : } -<span class="lineNum"> 133 </span> : : else /* close the open socket if there was a connect error */ -<span class="lineNum"> 134 </span> : : { -<span class="lineNum"> 135 </span> : : #ifdef WIN32 -<span class="lineNum"> 136 </span> : : closesocket(sock); -<span class="lineNum"> 137 </span> : : #else -<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : close(sock);</span> -<span class="lineNum"> 139 </span> : : #endif -<span class="lineNum"> 140 </span> : : } -<span class="lineNum"> 141 </span> : : -<span class="lineNum"> 142 </span> : : } -<span class="lineNum"> 143 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(result != NULL)</span> -<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : freeaddrinfo(result);</span> -<span class="lineNum"> 145 </span> : : -<span class="lineNum"> 146 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! sock_success)</span> -<span class="lineNum"> 147 </span> : : { -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve_ip_http: Could not create socket: &quot;, strerror(errno));</span> -<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 150 </span> : : } -<span class="lineNum"> 151 </span> : : -<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;\nHTTP request: %s&quot;, http_buf);</span> -<span class="lineNum"> 153 </span> : : -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : res = send(sock, http_buf, http_buf_len, 0);</span> -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> -<span class="lineNum"> 157 </span> : : { -<span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve_ip_http: write error: &quot;, strerror(errno));</span> -<span class="lineNum"> 159 </span> : : } -<span class="lineNum"> 160 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != http_buf_len)</span> -<span class="lineNum"> 161 </span> : : { -<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 163 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, -<span class="lineNum"> 164 </span> : : res, http_buf_len -<span class="lineNum"> 165 </span> : : ); -<span class="lineNum"> 166 </span> : : } -<span class="lineNum"> 167 </span> : : -<span class="lineNum"> 168 </span> : : do -<span class="lineNum"> 169 </span> : : { -<span class="lineNum"> 170 </span> : : memset(http_buf, 0x0, sizeof(http_buf)); -<span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : bytes_read = recv(sock, http_buf, sizeof(http_buf), 0);</span> -<span class="lineNum"> 172 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ( bytes_read &gt; 0 ) {</span> -<span class="lineNum"> 173 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(position + bytes_read &gt;= HTTP_MAX_RESPONSE_LEN)</span> -<span class="lineNum"> 174 </span> : : break; -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : memcpy(&amp;http_response[position], http_buf, bytes_read);</span> -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : position += bytes_read;</span> -<span class="lineNum"> 177 </span> : : } -<span class="lineNum"> 178 </span> : : } -<span class="lineNum"> 179 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while ( bytes_read &gt; 0 );</span> -<span class="lineNum"> 180 </span> : : -<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : http_response[HTTP_MAX_RESPONSE_LEN-1] = '\0';</span> -<span class="lineNum"> 182 </span> : : -<span class="lineNum"> 183 </span> : : #ifdef WIN32 -<span class="lineNum"> 184 </span> : : closesocket(sock); -<span class="lineNum"> 185 </span> : : #else -<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : close(sock);</span> -<span class="lineNum"> 187 </span> : : #endif -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_DEBUG, &quot;\nHTTP response: %s&quot;, http_response);</span> -<span class="lineNum"> 190 </span> : : -<span class="lineNum"> 191 </span> : : /* Move to the end of the HTTP header and to the start of the content. -<span class="lineNum"> 192 </span> : : */ -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : ndx = strstr(http_response, &quot;\r\n\r\n&quot;);</span> -<span class="lineNum"> 194 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> -<span class="lineNum"> 195 </span> : : { -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Did not find the end of HTTP header.&quot;);</span> -<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 198 </span> : : } -<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : ndx += 4;</span> -<span class="lineNum"> 200 </span> : : -<span class="lineNum"> 201 </span> : : /* Walk along the content to try to find the end of the IP address. -<span class="lineNum"> 202 </span> : : * Note: We are expecting the content to be just an IP address -<span class="lineNum"> 203 </span> : : * (possibly followed by whitespace or other not-digit value). -<span class="lineNum"> 204 </span> : : */ -<span class="lineNum"> 205 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;MAX_IPV4_STR_LEN; i++) {</span> -<span class="lineNum"> 206 </span>[<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! isdigit(*(ndx+i)) &amp;&amp; *(ndx+i) != '.')</span> -<span class="lineNum"> 207 </span> : : break; -<span class="lineNum"> 208 </span> : : } -<span class="lineNum"> 209 </span> : : -<span class="lineNum"> 210 </span> : : /* Terminate at the first non-digit and non-dot. -<span class="lineNum"> 211 </span> : : */ -<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : *(ndx+i) = '\0';</span> -<span class="lineNum"> 213 </span> : : -<span class="lineNum"> 214 </span> : : /* Now that we have what we think is an IP address string. We make -<span class="lineNum"> 215 </span> : : * sure the format and values are sane. -<span class="lineNum"> 216 </span> : : */ -<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sscanf(ndx, &quot;%u.%u.%u.%u&quot;, &amp;o1, &amp;o2, &amp;o3, &amp;o4)) == 4</span> -<span class="lineNum"> 218 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o1 &gt;= 0 &amp;&amp; o1 &lt;= 255</span> -<span class="lineNum"> 219 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o2 &gt;= 0 &amp;&amp; o2 &lt;= 255</span> -<span class="lineNum"> 220 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o3 &gt;= 0 &amp;&amp; o3 &lt;= 255</span> -<span class="lineNum"> 221 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o4 &gt;= 0 &amp;&amp; o4 &lt;= 255)</span> -<span class="lineNum"> 222 </span> : : { -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;allow_ip_str, ndx, sizeof(options-&gt;allow_ip_str));</span> -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO,</span> -<span class="lineNum"> 226 </span> : : &quot;\n[+] Resolved external IP (via http://%s%s) as: %s&quot;, -<span class="lineNum"> 227 </span> : : url-&gt;host, -<span class="lineNum"> 228 </span> : : url-&gt;path, -<span class="lineNum"> 229 </span> : : options-&gt;allow_ip_str); -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : return(1);</span> -<span class="lineNum"> 232 </span> : : } -<span class="lineNum"> 233 </span> : : else -<span class="lineNum"> 234 </span> : : { -<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 236 </span> : : &quot;[-] From http://%s%s\n Invalid IP (%s) in HTTP response:\n\n%s&quot;, -<span class="lineNum"> 237 </span> : : url-&gt;host, url-&gt;path, ndx, http_response); -<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 239 </span> : : } -<span class="lineNum"> 240 </span> : : } -<a name="241"><span class="lineNum"> 241 </span> : : </a> -<span class="lineNum"> 242 </span> : : static int -<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : parse_url(char *res_url, struct url* url)</span> -<span class="lineNum"> 244 </span> : : { -<span class="lineNum"> 245 </span> : : char *s_ndx, *e_ndx; -<span class="lineNum"> 246 </span> : : int tlen, tlen_offset, port, is_err; -<span class="lineNum"> 247 </span> : : -<span class="lineNum"> 248 </span> : : /* Strip off https:// or http:// portion if necessary -<span class="lineNum"> 249 </span> : : */ -<span class="lineNum"> 250 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(res_url, &quot;https://&quot;, 8) == 0)</span> -<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : s_ndx = res_url + 8;</span> -<span class="lineNum"> 252 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(strncasecmp(res_url, &quot;http://&quot;, 7) == 0)</span> -<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : s_ndx = res_url + 7;</span> -<span class="lineNum"> 254 </span> : : else -<span class="lineNum"> 255 </span> : : s_ndx = res_url; -<span class="lineNum"> 256 </span> : : -<span class="lineNum"> 257 </span> : : /* Look for a colon in case an alternate port was specified. -<span class="lineNum"> 258 </span> : : */ -<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : e_ndx = strchr(s_ndx, ':');</span> -<span class="lineNum"> 260 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(e_ndx != NULL)</span> -<span class="lineNum"> 261 </span> : : { -<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : port = strtol_wrapper(e_ndx+1, 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 263 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 264 </span> : : { -<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 266 </span> : : &quot;[*] resolve-url port value is invalid, must be in [%d-%d]&quot;, -<span class="lineNum"> 267 </span> : : 1, MAX_PORT); -<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 269 </span> : : } -<span class="lineNum"> 270 </span> : : -<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : snprintf(url-&gt;port, sizeof(url-&gt;port)-1, &quot;%u&quot;, port);</span> -<span class="lineNum"> 272 </span> : : -<span class="lineNum"> 273 </span> : : /* Get the offset we need to skip the port portion when we -<span class="lineNum"> 274 </span> : : * extract the hostname part. -<span class="lineNum"> 275 </span> : : */ -<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : tlen_offset = strlen(url-&gt;port)+1;</span> -<span class="lineNum"> 277 </span> : : } -<span class="lineNum"> 278 </span> : : else -<span class="lineNum"> 279 </span> : : { -<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;port, &quot;80&quot;, sizeof(url-&gt;port));</span> -<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : tlen_offset = 0;</span> -<span class="lineNum"> 282 </span> : : } -<span class="lineNum"> 283 </span> : : -<span class="lineNum"> 284 </span> : : /* Get rid of any trailing slash -<span class="lineNum"> 285 </span> : : */ -<span class="lineNum"> 286 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res_url[strlen(res_url)-1] == '/')</span> -<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : res_url[strlen(res_url)-1] = '\0';</span> -<span class="lineNum"> 288 </span> : : -<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : e_ndx = strchr(s_ndx, '/');</span> -<span class="lineNum"> 290 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(e_ndx == NULL)</span> -<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : tlen = strlen(s_ndx)+1;</span> -<span class="lineNum"> 292 </span> : : else -<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : tlen = (e_ndx-s_ndx)+1;</span> -<span class="lineNum"> 294 </span> : : -<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : tlen -= tlen_offset;</span> -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tlen &gt; MAX_URL_HOST_LEN)</span> -<span class="lineNum"> 298 </span> : : { -<span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve-url hostname portion is too large.&quot;);</span> -<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 301 </span> : : } -<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;host, s_ndx, tlen);</span> -<span class="lineNum"> 303 </span> : : -<span class="lineNum"> 304 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(e_ndx != NULL)</span> -<span class="lineNum"> 305 </span> : : { -<span class="lineNum"> 306 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(e_ndx) &gt; MAX_URL_PATH_LEN)</span> -<span class="lineNum"> 307 </span> : : { -<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve-url path portion is too large.&quot;);</span> -<span class="lineNum"> 309 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 310 </span> : : } -<span class="lineNum"> 311 </span> : : -<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;path, e_ndx, sizeof(url-&gt;path));</span> -<span class="lineNum"> 313 </span> : : } -<span class="lineNum"> 314 </span> : : else -<span class="lineNum"> 315 </span> : : { -<span class="lineNum"> 316 </span> : : /* default to &quot;GET /&quot; if there isn't a more specific URL -<span class="lineNum"> 317 </span> : : */ -<span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : strlcpy(url-&gt;path, &quot;/&quot;, sizeof(url-&gt;path));</span> -<span class="lineNum"> 319 </span> : : } -<span class="lineNum"> 320 </span> : : -<span class="lineNum"> 321 </span> : : return(0); -<span class="lineNum"> 322 </span> : : } -<a name="323"><span class="lineNum"> 323 </span> : : </a> -<span class="lineNum"> 324 </span> : : int -<span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : resolve_ip_https(fko_cli_options_t *options)</span> -<span class="lineNum"> 326 </span> : : { -<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : int o1, o2, o3, o4, got_resp=0, i=0;</span> -<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : char *ndx, resp[MAX_IPV4_STR_LEN+1] = {0};</span> -<span class="lineNum"> 329 </span> : : struct url url; /* for validation only */ -<span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : char wget_ssl_cmd[MAX_URL_PATH_LEN] = {0}; /* for verbose logging only */</span> -<span class="lineNum"> 331 </span> : : -<span class="lineNum"> 332 </span> : : #if HAVE_EXECVPE -<span class="lineNum"> 333 </span> : : char *wget_argv[MAX_CMDLINE_ARGS]; /* for execvpe() */ -<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : int wget_argc=0;</span> -<span class="lineNum"> 335 </span> : : int pipe_fd[2]; -<span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : pid_t pid=0;</span> -<span class="lineNum"> 337 </span> : : FILE *output; -<span class="lineNum"> 338 </span> : : int status; -<span class="lineNum"> 339 </span> : : #else -<span class="lineNum"> 340 </span> : : FILE *wget; -<span class="lineNum"> 341 </span> : : #endif -<span class="lineNum"> 342 </span> : : -<span class="lineNum"> 343 </span> : : #if HAVE_EXECVPE -<span class="lineNum"> 344 </span> : : memset(wget_argv, 0x0, sizeof(wget_argv)); -<span class="lineNum"> 345 </span> : : #endif -<span class="lineNum"> 346 </span> : : memset(&amp;url, 0x0, sizeof(url)); -<span class="lineNum"> 347 </span> : : -<span class="lineNum"> 348 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;wget_bin != NULL)</span> -<span class="lineNum"> 349 </span> : : { -<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : strlcpy(wget_ssl_cmd, options-&gt;wget_bin, sizeof(wget_ssl_cmd));</span> -<span class="lineNum"> 351 </span> : : } -<span class="lineNum"> 352 </span> : : else -<span class="lineNum"> 353 </span> : : { -<span class="lineNum"> 354 </span> : : #ifdef WGET_EXE -<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : strlcpy(wget_ssl_cmd, WGET_EXE, sizeof(wget_ssl_cmd));</span> -<span class="lineNum"> 356 </span> : : #else -<span class="lineNum"> 357 </span> : : log_msg(LOG_VERBOSITY_ERROR, -<span class="lineNum"> 358 </span> : : &quot;[*] Use --wget-cmd &lt;path&gt; to specify path to the wget command.&quot;); -<span class="lineNum"> 359 </span> : : return(-1); -<span class="lineNum"> 360 </span> : : #endif -<span class="lineNum"> 361 </span> : : } -<span class="lineNum"> 362 </span> : : -<span class="lineNum"> 363 </span> : : /* See whether we're supposed to change the default wget user agent -<span class="lineNum"> 364 </span> : : */ -<span class="lineNum"> 365 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! options-&gt;use_wget_user_agent)</span> -<span class="lineNum"> 366 </span> : : { -<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, &quot; -U &quot;, sizeof(wget_ssl_cmd));</span> -<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, options-&gt;http_user_agent, sizeof(wget_ssl_cmd));</span> -<span class="lineNum"> 369 </span> : : } -<span class="lineNum"> 370 </span> : : -<span class="lineNum"> 371 </span> : : /* We collect the IP from wget's stdout -<span class="lineNum"> 372 </span> : : */ -<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd,</span> -<span class="lineNum"> 374 </span> : : &quot; --secure-protocol=auto --quiet -O - &quot;, sizeof(wget_ssl_cmd)); -<span class="lineNum"> 375 </span> : : -<span class="lineNum"> 376 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> -<span class="lineNum"> 377 </span> : : { -<span class="lineNum"> 378 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(options-&gt;resolve_url, &quot;https&quot;, 5) != 0)</span> -<span class="lineNum"> 379 </span> : : { -<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 381 </span> : : &quot;[-] Warning: IP resolution URL '%s' should begin with 'https://' in -R mode.&quot;, -<span class="lineNum"> 382 </span> : : options-&gt;resolve_url); -<span class="lineNum"> 383 </span> : : } -<span class="lineNum"> 384 </span> : : -<span class="lineNum"> 385 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(parse_url(options-&gt;resolve_url, &amp;url) &lt; 0)</span> -<span class="lineNum"> 386 </span> : : { -<span class="lineNum"> 387 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Error parsing resolve-url&quot;);</span> -<span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 389 </span> : : } -<span class="lineNum"> 390 </span> : : /* tack on the original URL to the wget command -<span class="lineNum"> 391 </span> : : */ -<span class="lineNum"> 392 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, options-&gt;resolve_url, sizeof(wget_ssl_cmd));</span> -<span class="lineNum"> 393 </span> : : } -<span class="lineNum"> 394 </span> : : else -<span class="lineNum"> 395 </span> : : { -<span class="lineNum"> 396 </span> : : /* tack on the default URL to the wget command -<span class="lineNum"> 397 </span> : : */ -<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : strlcat(wget_ssl_cmd, WGET_RESOLVE_URL_SSL, sizeof(wget_ssl_cmd));</span> -<span class="lineNum"> 399 </span> : : } -<span class="lineNum"> 400 </span> : : -<span class="lineNum"> 401 </span> : : #if AFL_FUZZING -<span class="lineNum"> 402 </span> : : /* Make sure to not generate any resolution requests when compiled -<span class="lineNum"> 403 </span> : : * for AFL fuzzing cycles -<span class="lineNum"> 404 </span> : : */ -<span class="lineNum"> 405 </span> : : strlcpy(options-&gt;allow_ip_str, AFL_SET_RESOLVE_HOST, -<span class="lineNum"> 406 </span> : : sizeof(options-&gt;allow_ip_str)); -<span class="lineNum"> 407 </span> : : log_msg(LOG_VERBOSITY_INFO, -<span class="lineNum"> 408 </span> : : &quot;\n[+] AFL fuzzing cycle, force IP resolution to: %s&quot;, -<span class="lineNum"> 409 </span> : : options-&gt;allow_ip_str); -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> : : return(1); -<span class="lineNum"> 412 </span> : : #endif -<span class="lineNum"> 413 </span> : : -<span class="lineNum"> 414 </span> : : #if HAVE_EXECVPE -<span class="lineNum"> 415 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(wget_ssl_cmd, wget_argv, &amp;wget_argc, options) != 1)</span> -<span class="lineNum"> 416 </span> : : { -<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Error converting wget cmd str to argv&quot;);</span> -<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 419 </span> : : } -<span class="lineNum"> 420 </span> : : -<span class="lineNum"> 421 </span> : : /* We drive wget to resolve the external IP via SSL. This may not -<span class="lineNum"> 422 </span> : : * work on all platforms, but is a better strategy for now than -<span class="lineNum"> 423 </span> : : * requiring that fwknop link against an SSL library. -<span class="lineNum"> 424 </span> : : */ -<span class="lineNum"> 425 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pipe(pipe_fd) &lt; 0)</span> -<span class="lineNum"> 426 </span> : : { -<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] pipe() error&quot;);</span> -<span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> -<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 430 </span> : : } -<span class="lineNum"> 431 </span> : : -<span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : pid = fork();</span> -<span class="lineNum"> 433 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (pid == 0)</span> -<span class="lineNum"> 434 </span> : : { -<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[0]);</span> -<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDOUT_FILENO);</span> -<span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDERR_FILENO);</span> -<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : execvpe(wget_argv[0], wget_argv, (char * const *)NULL); /* don't use env */</span> -<span class="lineNum"> 439 </span> : : } -<span class="lineNum"> 440 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pid == -1)</span> -<span class="lineNum"> 441 </span> : : { -<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO, &quot;[*] Could not fork() for wget.&quot;);</span> -<span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> -<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 445 </span> : : } -<span class="lineNum"> 446 </span> : : -<span class="lineNum"> 447 </span> : : /* Only the parent process makes it here -<span class="lineNum"> 448 </span> : : */ -<span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> -<span class="lineNum"> 450 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((output = fdopen(pipe_fd[0], &quot;r&quot;)) != NULL)</span> -<span class="lineNum"> 451 </span> : : { -<span class="lineNum"> 452 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgets(resp, sizeof(resp), output) != NULL)</span> -<span class="lineNum"> 453 </span> : : { -<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : got_resp = 1;</span> -<span class="lineNum"> 455 </span> : : } -<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : fclose(output);</span> -<span class="lineNum"> 457 </span> : : } -<span class="lineNum"> 458 </span> : : else -<span class="lineNum"> 459 </span> : : { -<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO,</span> -<span class="lineNum"> 461 </span> : : &quot;[*] Could not fdopen() pipe output file descriptor.&quot;); -<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> -<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 464 </span> : : } -<span class="lineNum"> 465 </span> : : -<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : waitpid(pid, &amp;status, 0);</span> -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> :<span class="lineNoCov"> 0 : free_argv(wget_argv, &amp;wget_argc);</span> -<span class="lineNum"> 469 </span> : : -<span class="lineNum"> 470 </span> : : #else /* fall back to popen() */ -<span class="lineNum"> 471 </span> : : wget = popen(wget_ssl_cmd, &quot;r&quot;); -<span class="lineNum"> 472 </span> : : if(wget == NULL) -<span class="lineNum"> 473 </span> : : { -<span class="lineNum"> 474 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Could not run cmd: %s&quot;, -<span class="lineNum"> 475 </span> : : wget_ssl_cmd); -<span class="lineNum"> 476 </span> : : return -1; -<span class="lineNum"> 477 </span> : : } -<span class="lineNum"> 478 </span> : : /* Expecting one line of wget output that contains the resolved IP. -<span class="lineNum"> 479 </span> : : * */ -<span class="lineNum"> 480 </span> : : if ((fgets(resp, sizeof(resp), wget)) != NULL) -<span class="lineNum"> 481 </span> : : { -<span class="lineNum"> 482 </span> : : got_resp = 1; -<span class="lineNum"> 483 </span> : : } -<span class="lineNum"> 484 </span> : : pclose(wget); -<span class="lineNum"> 485 </span> : : #endif -<span class="lineNum"> 486 </span> : : -<span class="lineNum"> 487 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_resp)</span> -<span class="lineNum"> 488 </span> : : { -<span class="lineNum"> 489 </span> : : ndx = resp; -<span class="lineNum"> 490 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;MAX_IPV4_STR_LEN; i++) {</span> -<span class="lineNum"> 491 </span>[<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! isdigit(*(ndx+i)) &amp;&amp; *(ndx+i) != '.')</span> -<span class="lineNum"> 492 </span> : : break; -<span class="lineNum"> 493 </span> : : } -<span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : *(ndx+i) = '\0';</span> -<span class="lineNum"> 495 </span> : : -<span class="lineNum"> 496 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sscanf(ndx, &quot;%u.%u.%u.%u&quot;, &amp;o1, &amp;o2, &amp;o3, &amp;o4)) == 4</span> -<span class="lineNum"> 497 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o1 &gt;= 0 &amp;&amp; o1 &lt;= 255</span> -<span class="lineNum"> 498 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o2 &gt;= 0 &amp;&amp; o2 &lt;= 255</span> -<span class="lineNum"> 499 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o3 &gt;= 0 &amp;&amp; o3 &lt;= 255</span> -<span class="lineNum"> 500 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; o4 &gt;= 0 &amp;&amp; o4 &lt;= 255)</span> -<span class="lineNum"> 501 </span> : : { -<span class="lineNum"> 502 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;allow_ip_str, ndx, sizeof(options-&gt;allow_ip_str));</span> -<span class="lineNum"> 503 </span> : : -<span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_INFO,</span> -<span class="lineNum"> 505 </span> : : &quot;\n[+] Resolved external IP (via '%s') as: %s&quot;, -<span class="lineNum"> 506 </span> : : wget_ssl_cmd, options-&gt;allow_ip_str); -<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : return 1;</span> -<span class="lineNum"> 508 </span> : : } -<span class="lineNum"> 509 </span> : : } -<span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 511 </span> : : &quot;[-] Could not resolve IP via: '%s'&quot;, wget_ssl_cmd); -<span class="lineNum"> 512 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 513 </span> : : } -<a name="514"><span class="lineNum"> 514 </span> : : </a> -<span class="lineNum"> 515 </span> : : int -<span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : resolve_ip_http(fko_cli_options_t *options)</span> -<span class="lineNum"> 517 </span> : : { -<span class="lineNum"> 518 </span> : : int res; -<span class="lineNum"> 519 </span> : : struct url url; -<span class="lineNum"> 520 </span> : : -<span class="lineNum"> 521 </span> : : memset(&amp;url, 0, sizeof(url)); -<span class="lineNum"> 522 </span> : : -<span class="lineNum"> 523 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(options-&gt;resolve_url != NULL)</span> -<span class="lineNum"> 524 </span> : : { -<span class="lineNum"> 525 </span> : : /* we only enter this function when the user forces non-HTTPS -<span class="lineNum"> 526 </span> : : * IP resolution -<span class="lineNum"> 527 </span> : : */ -<span class="lineNum"> 528 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(options-&gt;resolve_url, &quot;https&quot;, 5) == 0)</span> -<span class="lineNum"> 529 </span> : : { -<span class="lineNum"> 530 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 531 </span> : : &quot;[*] https is not supported for --resolve-http-only.&quot;); -<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 533 </span> : : } -<span class="lineNum"> 534 </span> : : -<span class="lineNum"> 535 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(parse_url(options-&gt;resolve_url, &amp;url) &lt; 0)</span> -<span class="lineNum"> 536 </span> : : { -<span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Error parsing resolve-url&quot;);</span> -<span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 539 </span> : : } -<span class="lineNum"> 540 </span> : : -<span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : res = try_url(&amp;url, options);</span> -<span class="lineNum"> 542 </span> : : -<span class="lineNum"> 543 </span> : : } else { -<span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : strlcpy(url.port, &quot;80&quot;, sizeof(url.port));</span> -<span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : strlcpy(url.host, HTTP_RESOLVE_HOST, sizeof(url.host));</span> -<span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : strlcpy(url.path, HTTP_RESOLVE_URL, sizeof(url.path));</span> -<span class="lineNum"> 547 </span> : : -<span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : res = try_url(&amp;url, options);</span> -<span class="lineNum"> 549 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != 1)</span> -<span class="lineNum"> 550 </span> : : { -<span class="lineNum"> 551 </span> : : /* try the backup url (just switches the host to cipherdyne.com) -<span class="lineNum"> 552 </span> : : */ -<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : strlcpy(url.host, HTTP_BACKUP_RESOLVE_HOST, sizeof(url.host));</span> -<span class="lineNum"> 554 </span> : : -<span class="lineNum"> 555 </span> : : #ifndef WIN32 -<span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : sleep(2);</span> -<span class="lineNum"> 557 </span> : : #endif -<span class="lineNum"> 558 </span> :<span class="lineNoCov"> 0 : res = try_url(&amp;url, options);</span> -<span class="lineNum"> 559 </span> : : } -<span class="lineNum"> 560 </span> : : } -<span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 562 </span> : : } -<span class="lineNum"> 563 </span> : : -<span class="lineNum"> 564 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html deleted file mode 100644 index 5456a9a7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-b.html +++ /dev/null @@ -1,179 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">690</td> - <td class="headerCovTableEntry">2039</td> - <td class="headerCovTableEntryLo">33.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">39</td> - <td class="headerCovTableEntry">71</td> - <td class="headerCovTableEntryLo">54.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">397</td> - <td class="headerCovTableEntry">1260</td> - <td class="headerCovTableEntryLo">31.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> - </tr> - <tr> - <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 172</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 4</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 122</td> - </tr> - <tr> - <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> - </td> - <td class="coverPerLo">17.8&nbsp;%</td> - <td class="coverNumLo">50 / 281</td> - <td class="coverPerLo">44.4&nbsp;%</td> - <td class="coverNumLo">4 / 9</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">16 / 116</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">23 / 79</td> - <td class="coverPerLo">37.5&nbsp;%</td> - <td class="coverNumLo">3 / 8</td> - <td class="coverPerLo">21.2&nbsp;%</td> - <td class="coverNumLo">11 / 52</td> - </tr> - <tr> - <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> - </td> - <td class="coverPerLo">59.0&nbsp;%</td> - <td class="coverNumLo">46 / 78</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">26.8&nbsp;%</td> - <td class="coverNumLo">15 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">310 / 917</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">14 / 26</td> - <td class="coverPerLo">38.1&nbsp;%</td> - <td class="coverNumLo">222 / 582</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> - </td> - <td class="coverPerLo">49.4&nbsp;%</td> - <td class="coverNumLo">245 / 496</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">12 / 18</td> - <td class="coverPerLo">39.3&nbsp;%</td> - <td class="coverNumLo">129 / 328</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">16 / 16</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html deleted file mode 100644 index 7f5bcb65..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-f.html +++ /dev/null @@ -1,179 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">690</td> - <td class="headerCovTableEntry">2039</td> - <td class="headerCovTableEntryLo">33.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">39</td> - <td class="headerCovTableEntry">71</td> - <td class="headerCovTableEntryLo">54.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">397</td> - <td class="headerCovTableEntry">1260</td> - <td class="headerCovTableEntryLo">31.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 172</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 4</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 122</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">23 / 79</td> - <td class="coverPerLo">37.5&nbsp;%</td> - <td class="coverNumLo">3 / 8</td> - <td class="coverPerLo">21.2&nbsp;%</td> - <td class="coverNumLo">11 / 52</td> - </tr> - <tr> - <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> - </td> - <td class="coverPerLo">17.8&nbsp;%</td> - <td class="coverNumLo">50 / 281</td> - <td class="coverPerLo">44.4&nbsp;%</td> - <td class="coverNumLo">4 / 9</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">16 / 116</td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">310 / 917</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">14 / 26</td> - <td class="coverPerLo">38.1&nbsp;%</td> - <td class="coverNumLo">222 / 582</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> - </td> - <td class="coverPerLo">49.4&nbsp;%</td> - <td class="coverNumLo">245 / 496</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">12 / 18</td> - <td class="coverPerLo">39.3&nbsp;%</td> - <td class="coverNumLo">129 / 328</td> - </tr> - <tr> - <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> - </td> - <td class="coverPerLo">59.0&nbsp;%</td> - <td class="coverNumLo">46 / 78</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">26.8&nbsp;%</td> - <td class="coverNumLo">15 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">16 / 16</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html deleted file mode 100644 index 970e3437..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index-sort-l.html +++ /dev/null @@ -1,179 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">690</td> - <td class="headerCovTableEntry">2039</td> - <td class="headerCovTableEntryLo">33.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">39</td> - <td class="headerCovTableEntry">71</td> - <td class="headerCovTableEntryLo">54.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">397</td> - <td class="headerCovTableEntry">1260</td> - <td class="headerCovTableEntryLo">31.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 172</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 4</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 122</td> - </tr> - <tr> - <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> - </td> - <td class="coverPerLo">17.8&nbsp;%</td> - <td class="coverNumLo">50 / 281</td> - <td class="coverPerLo">44.4&nbsp;%</td> - <td class="coverNumLo">4 / 9</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">16 / 116</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">23 / 79</td> - <td class="coverPerLo">37.5&nbsp;%</td> - <td class="coverNumLo">3 / 8</td> - <td class="coverPerLo">21.2&nbsp;%</td> - <td class="coverNumLo">11 / 52</td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">310 / 917</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">14 / 26</td> - <td class="coverPerLo">38.1&nbsp;%</td> - <td class="coverNumLo">222 / 582</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> - </td> - <td class="coverPerLo">49.4&nbsp;%</td> - <td class="coverNumLo">245 / 496</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">12 / 18</td> - <td class="coverPerLo">39.3&nbsp;%</td> - <td class="coverNumLo">129 / 328</td> - </tr> - <tr> - <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> - </td> - <td class="coverPerLo">59.0&nbsp;%</td> - <td class="coverNumLo">46 / 78</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">26.8&nbsp;%</td> - <td class="coverNumLo">15 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">16 / 16</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html deleted file mode 100644 index 9efd8c7f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/index.html +++ /dev/null @@ -1,179 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - client</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">690</td> - <td class="headerCovTableEntry">2039</td> - <td class="headerCovTableEntryLo">33.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">39</td> - <td class="headerCovTableEntry">71</td> - <td class="headerCovTableEntryLo">54.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">397</td> - <td class="headerCovTableEntry">1260</td> - <td class="headerCovTableEntryLo">31.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=34 height=10 alt="33.8%"><img src="../snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">310 / 917</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">14 / 26</td> - <td class="coverPerLo">38.1&nbsp;%</td> - <td class="coverNumLo">222 / 582</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknop.c.gcov.html">fwknop.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=49 height=10 alt="49.4%"><img src="../snow.png" width=51 height=10 alt="49.4%"></td></tr></table> - </td> - <td class="coverPerLo">49.4&nbsp;%</td> - <td class="coverNumLo">245 / 496</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">12 / 18</td> - <td class="coverPerLo">39.3&nbsp;%</td> - <td class="coverNumLo">129 / 328</td> - </tr> - <tr> - <td class="coverFile"><a href="getpasswd.c.gcov.html">getpasswd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=59 height=10 alt="59.0%"><img src="../snow.png" width=41 height=10 alt="59.0%"></td></tr></table> - </td> - <td class="coverPerLo">59.0&nbsp;%</td> - <td class="coverNumLo">46 / 78</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">26.8&nbsp;%</td> - <td class="coverNumLo">15 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="http_resolve_host.c.gcov.html">http_resolve_host.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 172</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 4</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 122</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">16 / 16</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - </tr> - <tr> - <td class="coverFile"><a href="spa_comm.c.gcov.html">spa_comm.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=18 height=10 alt="17.8%"><img src="../snow.png" width=82 height=10 alt="17.8%"></td></tr></table> - </td> - <td class="coverPerLo">17.8&nbsp;%</td> - <td class="coverNumLo">50 / 281</td> - <td class="coverPerLo">44.4&nbsp;%</td> - <td class="coverNumLo">4 / 9</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">16 / 116</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">23 / 79</td> - <td class="coverPerLo">37.5&nbsp;%</td> - <td class="coverNumLo">3 / 8</td> - <td class="coverPerLo">21.2&nbsp;%</td> - <td class="coverNumLo">11 / 52</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html deleted file mode 100644 index f07f4548..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/log_msg.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="log_msg.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#85">log_msg</a></td> - <td class="coverFnHi">195829</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#69">log_set_verbosity</a></td> - <td class="coverFnHi">4817</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#47">log_new</a></td> - <td class="coverFnHi">2085</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html deleted file mode 100644 index 04ff855f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.func.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/log_msg.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="log_msg.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#85">log_msg</a></td> - <td class="coverFnHi">195829</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#47">log_new</a></td> - <td class="coverFnHi">2085</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#69">log_set_verbosity</a></td> - <td class="coverFnHi">4817</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html deleted file mode 100644 index 7a2e0c4f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/log_msg.c.gcov.html +++ /dev/null @@ -1,201 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/log_msg.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - log_msg.c<span style="font-size: 80%;"> (source / <a href="log_msg.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /**</a> -<span class="lineNum"> 2 </span> : : * @file log_msg.c -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * @brief General logging routine that can write to stderr -<span class="lineNum"> 5 </span> : : * and can take variable number of args. -<span class="lineNum"> 6 </span> : : * -<span class="lineNum"> 7 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 8 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 9 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 10 </span> : : * -<span class="lineNum"> 11 </span> : : * License (GNU General Public License): -<span class="lineNum"> 12 </span> : : * -<span class="lineNum"> 13 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 14 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 15 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 16 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 17 </span> : : * -<span class="lineNum"> 18 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 19 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 20 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 21 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 22 </span> : : * -<span class="lineNum"> 23 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 24 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 25 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 26 </span> : : * USA -<span class="lineNum"> 27 </span> : : */ -<span class="lineNum"> 28 </span> : : -<span class="lineNum"> 29 </span> : : #include &quot;fwknop_common.h&quot; -<span class="lineNum"> 30 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 31 </span> : : #include &lt;stdarg.h&gt; -<span class="lineNum"> 32 </span> : : -<span class="lineNum"> 33 </span> : : #define LOG_STREAM_STDERR stderr /*!&lt; Error and warning messages are redirected to stderr */ -<span class="lineNum"> 34 </span> : : #define LOG_STREAM_STDOUT stdout /*!&lt; Normal, info and debug messages are redirected to stdout */ -<span class="lineNum"> 35 </span> : : -<span class="lineNum"> 36 </span> : : typedef struct -<span class="lineNum"> 37 </span> : : { -<span class="lineNum"> 38 </span> : : int verbosity; /*!&lt; Verbosity level (LOG_VERBOSITY_DEBUG...*/ -<span class="lineNum"> 39 </span> : : } log_ctx_t; -<span class="lineNum"> 40 </span> : : -<span class="lineNum"> 41 </span> : : static log_ctx_t log_ctx; /*!&lt; Structure to store the context of the module */ -<span class="lineNum"> 42 </span> : : -<span class="lineNum"> 43 </span> : : /** -<span class="lineNum"> 44 </span> : : * Set up the context for the log module. -<span class="lineNum"> 45 </span> : : * -<span class="lineNum"> 46 </span> : : * This function only initialize the verbosity level -<a name="47"><span class="lineNum"> 47 </span> : : */</a> -<span class="lineNum"> 48 </span> : : void -<span class="lineNum"> 49 </span> :<span class="lineCov"> 2085 : log_new(void)</span> -<span class="lineNum"> 50 </span> : : { -<span class="lineNum"> 51 </span> :<span class="lineCov"> 2085 : log_ctx.verbosity = LOG_DEFAULT_VERBOSITY;</span> -<span class="lineNum"> 52 </span> :<span class="lineCov"> 2085 : }</span> -<span class="lineNum"> 53 </span> : : -<span class="lineNum"> 54 </span> : : /** -<span class="lineNum"> 55 </span> : : * Destroy the context for the log module. -<span class="lineNum"> 56 </span> : : * -<span class="lineNum"> 57 </span> : : * This function is not used at the moment since the module does not open file -<span class="lineNum"> 58 </span> : : * which would require to be closed; -<span class="lineNum"> 59 </span> : : void -<span class="lineNum"> 60 </span> : : log_free(void) -<span class="lineNum"> 61 </span> : : { -<span class="lineNum"> 62 </span> : : } -<span class="lineNum"> 63 </span> : : */ -<span class="lineNum"> 64 </span> : : -<span class="lineNum"> 65 </span> : : /** -<span class="lineNum"> 66 </span> : : * Set the verbosity level for the current context of the log module. -<span class="lineNum"> 67 </span> : : * -<span class="lineNum"> 68 </span> : : * @param level verbosity level to set -<a name="69"><span class="lineNum"> 69 </span> : : */</a> -<span class="lineNum"> 70 </span> : : void -<span class="lineNum"> 71 </span> :<span class="lineCov"> 4817 : log_set_verbosity(int level)</span> -<span class="lineNum"> 72 </span> : : { -<span class="lineNum"> 73 </span> :<span class="lineCov"> 4817 : log_ctx.verbosity = level;</span> -<span class="lineNum"> 74 </span> :<span class="lineCov"> 4817 : }</span> -<span class="lineNum"> 75 </span> : : -<span class="lineNum"> 76 </span> : : /** -<span class="lineNum"> 77 </span> : : * Log a message -<span class="lineNum"> 78 </span> : : * -<span class="lineNum"> 79 </span> : : * This function sends a message to the stream dedicated to the priority -<span class="lineNum"> 80 </span> : : * set. If the verbosity for the context is higher than the one used for -<span class="lineNum"> 81 </span> : : * the message, then the message is discarded. -<span class="lineNum"> 82 </span> : : * -<span class="lineNum"> 83 </span> : : * @param level Verbosity level to used for the message. -<span class="lineNum"> 84 </span> : : * @param msg Message to print -<a name="85"><span class="lineNum"> 85 </span> : : */</a> -<span class="lineNum"> 86 </span> : : void -<span class="lineNum"> 87 </span> :<span class="lineCov"> 195829 : log_msg(int level, char* msg, ...)</span> -<span class="lineNum"> 88 </span> : : { -<span class="lineNum"> 89 </span> : : va_list ap; -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> [<span class="branchCov" title="Branch 0 was taken 84186 times"> + </span><span class="branchCov" title="Branch 1 was taken 111643 times"> + </span>]:<span class="lineCov"> 195829 : if (level &lt;= log_ctx.verbosity)</span> -<span class="lineNum"> 92 </span> : : { -<span class="lineNum"> 93 </span> :<span class="lineCov"> 84186 : va_start(ap, msg);</span> -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> [<span class="branchCov" title="Branch 0 was taken 80747 times"> + </span><span class="branchCov" title="Branch 1 was taken 3439 times"> + </span>]:<span class="lineCov"> 84186 : switch (level)</span> -<span class="lineNum"> 96 </span> : : { -<span class="lineNum"> 97 </span> : : case LOG_VERBOSITY_ERROR: -<span class="lineNum"> 98 </span> : : case LOG_VERBOSITY_WARNING: -<span class="lineNum"> 99 </span> :<span class="lineCov"> 80747 : vfprintf(LOG_STREAM_STDERR, msg, ap);</span> -<span class="lineNum"> 100 </span> :<span class="lineCov"> 80747 : fprintf(LOG_STREAM_STDERR, &quot;\n&quot;);</span> -<span class="lineNum"> 101 </span> : : break; -<span class="lineNum"> 102 </span> : : case LOG_VERBOSITY_NORMAL: -<span class="lineNum"> 103 </span> : : case LOG_VERBOSITY_INFO: -<span class="lineNum"> 104 </span> : : case LOG_VERBOSITY_DEBUG: -<span class="lineNum"> 105 </span> : : default : -<span class="lineNum"> 106 </span> :<span class="lineCov"> 3439 : vfprintf(LOG_STREAM_STDOUT, msg, ap);</span> -<span class="lineNum"> 107 </span> :<span class="lineCov"> 3439 : fprintf(LOG_STREAM_STDOUT, &quot;\n&quot;);</span> -<span class="lineNum"> 108 </span> : : break; -<span class="lineNum"> 109 </span> : : } -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> :<span class="lineCov"> 84186 : va_end(ap);</span> -<span class="lineNum"> 112 </span> : : } -<span class="lineNum"> 113 </span> : : else; -<span class="lineNum"> 114 </span> :<span class="lineCov"> 195829 : }</span> -<span class="lineNum"> 115 </span> : : -<span class="lineNum"> 116 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html deleted file mode 100644 index c6653ef4..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func-sort-c.html +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/spa_comm.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - spa_comm.c<span style="font-size: 80%;"> (<a href="spa_comm.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntry">281</td> - <td class="headerCovTableEntryLo">17.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntryLo">44.4 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">116</td> - <td class="headerCovTableEntryLo">13.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="spa_comm.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#33">dump_transmit_options</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#608">send_spa_packet</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#84">send_spa_packet_tcp_or_udp</a></td> - <td class="coverFnHi">349</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#507">send_spa_packet_http</a></td> - <td class="coverFnHi">67</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#740">write_spa_packet_data</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#305">send_spa_packet_udp_raw.isra.1</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#56">chksum</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#404">send_spa_packet_icmp.isra.2</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#192">send_spa_packet_tcp_raw.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html deleted file mode 100644 index 5e975717..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.func.html +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/spa_comm.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - spa_comm.c<span style="font-size: 80%;"> (<a href="spa_comm.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntry">281</td> - <td class="headerCovTableEntryLo">17.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntryLo">44.4 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">116</td> - <td class="headerCovTableEntryLo">13.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="spa_comm.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#56">chksum</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#33">dump_transmit_options</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#608">send_spa_packet</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#507">send_spa_packet_http</a></td> - <td class="coverFnHi">67</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#404">send_spa_packet_icmp.isra.2</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#84">send_spa_packet_tcp_or_udp</a></td> - <td class="coverFnHi">349</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#192">send_spa_packet_tcp_raw.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#305">send_spa_packet_udp_raw.isra.1</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="spa_comm.c.gcov.html#740">write_spa_packet_data</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html deleted file mode 100644 index 4689376d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/spa_comm.c.gcov.html +++ /dev/null @@ -1,869 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/spa_comm.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - spa_comm.c<span style="font-size: 80%;"> (source / <a href="spa_comm.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntry">281</td> - <td class="headerCovTableEntryLo">17.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntryLo">44.4 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">116</td> - <td class="headerCovTableEntryLo">13.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: spa_comm.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Network-related functions for the fwknop client -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;spa_comm.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;utils.h&quot; -<a name="33"><span class="lineNum"> 33 </span> : : </a> -<span class="lineNum"> 34 </span> : : static void -<span class="lineNum"> 35 </span> :<span class="lineCov"> 416 : dump_transmit_options(const fko_cli_options_t *options)</span> -<span class="lineNum"> 36 </span> : : { -<span class="lineNum"> 37 </span> :<span class="lineCov"> 416 : char proto_str[PROTOCOL_BUFSIZE] = {0}; /* Protocol string */</span> -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> :<span class="lineCov"> 416 : proto_inttostr(options-&gt;spa_proto, proto_str, sizeof(proto_str));</span> -<span class="lineNum"> 40 </span> : : -<span class="lineNum"> 41 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot;Generating SPA packet:&quot;);</span> -<span class="lineNum"> 42 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot; protocol: %s&quot;, proto_str);</span> -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 415 times"> + </span>]:<span class="lineCov"> 416 : if (options-&gt;spa_src_port)</span> -<span class="lineNum"> 45 </span> :<span class="lineCov"> 1 : log_msg(LOG_VERBOSITY_INFO, &quot; source port: %d&quot;, options-&gt;spa_src_port);</span> -<span class="lineNum"> 46 </span> : : else -<span class="lineNum"> 47 </span> :<span class="lineCov"> 415 : log_msg(LOG_VERBOSITY_INFO, &quot; source port: &lt;OS assigned&gt;&quot;);</span> -<span class="lineNum"> 48 </span> : : -<span class="lineNum"> 49 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot; destination port: %d&quot;, options-&gt;spa_dst_port);</span> -<span class="lineNum"> 50 </span> :<span class="lineCov"> 416 : log_msg(LOG_VERBOSITY_INFO, &quot; IP/host: %s&quot;, options-&gt;spa_server_str);</span> -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> :<span class="lineCov"> 416 : return;</span> -<span class="lineNum"> 53 </span> : : } -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : /* Function to generate a header checksum. -<a name="56"><span class="lineNum"> 56 </span> : : */</a> -<span class="lineNum"> 57 </span> : : unsigned short -<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : chksum(unsigned short *buf, int nbytes)</span> -<span class="lineNum"> 59 </span> : : { -<span class="lineNum"> 60 </span> : : unsigned int sum; -<span class="lineNum"> 61 </span> : : unsigned short oddbyte; -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : sum = 0;</span> -<span class="lineNum"> 64 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (nbytes &gt; 1)</span> -<span class="lineNum"> 65 </span> : : { -<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : sum += *buf++;</span> -<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : nbytes -= 2;</span> -<span class="lineNum"> 68 </span> : : } -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (nbytes == 1)</span> -<span class="lineNum"> 71 </span> : : { -<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : oddbyte = 0;</span> -<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : *((unsigned short *) &amp;oddbyte) = *(unsigned short *) buf;</span> -<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : sum += oddbyte;</span> -<span class="lineNum"> 75 </span> : : } -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : sum = (sum &gt;&gt; 16) + (sum &amp; 0xffff);</span> -<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : sum += (sum &gt;&gt; 16);</span> -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : return (unsigned short) ~sum;</span> -<span class="lineNum"> 81 </span> : : } -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> : : /* Send the SPA data via UDP packet. -<a name="84"><span class="lineNum"> 84 </span> : : */</a> -<span class="lineNum"> 85 </span> : : static int -<span class="lineNum"> 86 </span> :<span class="lineCov"> 349 : send_spa_packet_tcp_or_udp(const char *spa_data, const int sd_len,</span> -<span class="lineNum"> 87 </span> : : const fko_cli_options_t *options) -<span class="lineNum"> 88 </span> : : { -<span class="lineNum"> 89 </span> :<span class="lineCov"> 349 : int sock=-1, sock_success=0, res=0, error;</span> -<span class="lineNum"> 90 </span> :<span class="lineCov"> 349 : struct addrinfo *result=NULL, *rp, hints;</span> -<span class="lineNum"> 91 </span> :<span class="lineCov"> 349 : char port_str[MAX_PORT_STR_LEN+1] = {0};</span> -<span class="lineNum"> 92 </span> : : -<span class="lineNum"> 93 </span> [<span class="branchCov" title="Branch 0 was taken 349 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 349 : if (options-&gt;test)</span> -<span class="lineNum"> 94 </span> : : { -<span class="lineNum"> 95 </span> :<span class="lineCov"> 349 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 96 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); -<span class="lineNum"> 97 </span> :<span class="lineCov"> 349 : return res;</span> -<span class="lineNum"> 98 </span> : : } -<span class="lineNum"> 99 </span> : : -<span class="lineNum"> 100 </span> : : memset(&amp;hints, 0, sizeof(struct addrinfo)); -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> : : hints.ai_family = AF_UNSPEC; /* Allow IPv4 or IPv6 */ -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_proto == FKO_PROTO_UDP)</span> -<span class="lineNum"> 105 </span> : : { -<span class="lineNum"> 106 </span> : : /* Send the SPA data packet via an single UDP packet - this is the -<span class="lineNum"> 107 </span> : : * most common usage. -<span class="lineNum"> 108 </span> : : */ -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : hints.ai_socktype = SOCK_DGRAM;</span> -<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : hints.ai_protocol = IPPROTO_UDP;</span> -<span class="lineNum"> 111 </span> : : } -<span class="lineNum"> 112 </span> : : else -<span class="lineNum"> 113 </span> : : { -<span class="lineNum"> 114 </span> : : /* Send the SPA data packet via an established TCP connection. -<span class="lineNum"> 115 </span> : : */ -<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : hints.ai_socktype = SOCK_STREAM;</span> -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : hints.ai_protocol = IPPROTO_TCP;</span> -<span class="lineNum"> 118 </span> : : } -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : snprintf(port_str, MAX_PORT_STR_LEN+1, &quot;%d&quot;, options-&gt;spa_dst_port);</span> -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> : : #if AFL_FUZZING -<span class="lineNum"> 123 </span> : : /* Make sure to never send SPA packets under AFL fuzzing cycles -<span class="lineNum"> 124 </span> : : */ -<span class="lineNum"> 125 </span> : : log_msg(LOG_VERBOSITY_NORMAL, -<span class="lineNum"> 126 </span> : : &quot;AFL fuzzing enabled, SPA packet not actually sent.&quot;); -<span class="lineNum"> 127 </span> : : return res; -<span class="lineNum"> 128 </span> : : #endif -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : error = getaddrinfo(options-&gt;spa_server_str, port_str, &amp;hints, &amp;result);</span> -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (error != 0)</span> -<span class="lineNum"> 133 </span> : : { -<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;error in getaddrinfo: %s&quot;, gai_strerror(error));</span> -<span class="lineNum"> 135 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 136 </span> : : } -<span class="lineNum"> 137 </span> : : -<span class="lineNum"> 138 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (rp = result; rp != NULL; rp = rp-&gt;ai_next) {</span> -<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : sock = socket(rp-&gt;ai_family, rp-&gt;ai_socktype,</span> -<span class="lineNum"> 140 </span> : : rp-&gt;ai_protocol); -<span class="lineNum"> 141 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((error = (connect(sock, rp-&gt;ai_addr, rp-&gt;ai_addrlen) != -1)))</span> -<span class="lineNum"> 145 </span> : : { -<span class="lineNum"> 146 </span> : : sock_success = 1; -<span class="lineNum"> 147 </span> : : break; /* made it */ -<span class="lineNum"> 148 </span> : : } -<span class="lineNum"> 149 </span> : : else /* close the open socket if there was a connect error */ -<span class="lineNum"> 150 </span> : : { -<span class="lineNum"> 151 </span> : : #ifdef WIN32 -<span class="lineNum"> 152 </span> : : closesocket(sock); -<span class="lineNum"> 153 </span> : : #else -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : close(sock);</span> -<span class="lineNum"> 155 </span> : : #endif -<span class="lineNum"> 156 </span> : : } -<span class="lineNum"> 157 </span> : : } -<span class="lineNum"> 158 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(result != NULL)</span> -<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : freeaddrinfo(result);</span> -<span class="lineNum"> 160 </span> : : -<span class="lineNum"> 161 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! sock_success) {</span> -<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 163 </span> : : &quot;send_spa_packet_tcp_or_udp: Could not create socket: &quot;, -<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 166 </span> : : } -<span class="lineNum"> 167 </span> : : -<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : res = send(sock, spa_data, sd_len, 0);</span> -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> -<span class="lineNum"> 171 </span> : : { -<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_or_udp: write error: &quot;, strerror(errno));</span> -<span class="lineNum"> 173 </span> : : } -<span class="lineNum"> 174 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len)</span> -<span class="lineNum"> 175 </span> : : { -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 177 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, -<span class="lineNum"> 178 </span> : : res, sd_len -<span class="lineNum"> 179 </span> : : ); -<span class="lineNum"> 180 </span> : : } -<span class="lineNum"> 181 </span> : : -<span class="lineNum"> 182 </span> : : #ifdef WIN32 -<span class="lineNum"> 183 </span> : : closesocket(sock); -<span class="lineNum"> 184 </span> : : #else -<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : close(sock);</span> -<span class="lineNum"> 186 </span> : : #endif -<span class="lineNum"> 187 </span> : : -<span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 189 </span> : : } -<span class="lineNum"> 190 </span> : : -<span class="lineNum"> 191 </span> : : /* Send the SPA data via raw TCP packet. -<a name="192"><span class="lineNum"> 192 </span> : : */</a> -<span class="lineNum"> 193 </span> : : static int -<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : send_spa_packet_tcp_raw(const char *spa_data, const int sd_len,</span> -<span class="lineNum"> 195 </span> : : const struct sockaddr_in *saddr, const struct sockaddr_in *daddr, -<span class="lineNum"> 196 </span> : : const fko_cli_options_t *options) -<span class="lineNum"> 197 </span> : : { -<span class="lineNum"> 198 </span> : : #ifdef WIN32 -<span class="lineNum"> 199 </span> : : log_msg(LOG_VERBOSITY_ERROR, -<span class="lineNum"> 200 </span> : : &quot;send_spa_packet_tcp_raw: raw packets are not yet supported.&quot;); -<span class="lineNum"> 201 </span> : : return(-1); -<span class="lineNum"> 202 </span> : : #else -<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : int sock, res = 0;</span> -<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : char pkt_data[2048] = {0}; /* Should be enough for our purposes */</span> -<span class="lineNum"> 205 </span> : : -<span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : struct iphdr *iph = (struct iphdr *) pkt_data;</span> -<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : struct tcphdr *tcph = (struct tcphdr *) (pkt_data + sizeof (struct iphdr));</span> -<span class="lineNum"> 208 </span> : : -<span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : int hdrlen = sizeof(struct iphdr) + sizeof(struct tcphdr);</span> -<span class="lineNum"> 210 </span> : : -<span class="lineNum"> 211 </span> : : /* Values for setsockopt. -<span class="lineNum"> 212 </span> : : */ -<span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : int one = 1;</span> -<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : const int *so_val = &amp;one;</span> -<span class="lineNum"> 215 </span> : : -<span class="lineNum"> 216 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;test)</span> -<span class="lineNum"> 217 </span> : : { -<span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 219 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); -<span class="lineNum"> 220 </span> : : return res; -<span class="lineNum"> 221 </span> : : } -<span class="lineNum"> 222 </span> : : -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);</span> -<span class="lineNum"> 224 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> -<span class="lineNum"> 225 </span> : : { -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_raw: create socket: &quot;, strerror(errno));</span> -<span class="lineNum"> 227 </span> : : return(sock); -<span class="lineNum"> 228 </span> : : } -<span class="lineNum"> 229 </span> : : -<span class="lineNum"> 230 </span> : : /* Put the spa data in place. -<span class="lineNum"> 231 </span> : : */ -<span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : memcpy((pkt_data + hdrlen), spa_data, sd_len);</span> -<span class="lineNum"> 233 </span> : : -<span class="lineNum"> 234 </span> : : /* Construct our own header by filling in the ip/tcp header values, -<span class="lineNum"> 235 </span> : : * starting with the IP header values. -<span class="lineNum"> 236 </span> : : */ -<span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : iph-&gt;ihl = 5;</span> -<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : iph-&gt;version = 4;</span> -<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : iph-&gt;tos = 0;</span> -<span class="lineNum"> 240 </span> : : /* Total size is header plus payload */ -<span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : iph-&gt;tot_len = hdrlen + sd_len;</span> -<span class="lineNum"> 242 </span> : : /* The value here does not matter */ -<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : iph-&gt;id = random() &amp; 0xffff;</span> -<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : iph-&gt;frag_off = 0;</span> -<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : iph-&gt;ttl = RAW_SPA_TTL;</span> -<span class="lineNum"> 246 </span> :<span class="lineNoCov"> 0 : iph-&gt;protocol = IPPROTO_TCP;</span> -<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = 0;</span> -<span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : iph-&gt;saddr = saddr-&gt;sin_addr.s_addr;</span> -<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : iph-&gt;daddr = daddr-&gt;sin_addr.s_addr;</span> -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> : : /* Now the TCP header values. -<span class="lineNum"> 252 </span> : : */ -<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : tcph-&gt;source = saddr-&gt;sin_port;</span> -<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : tcph-&gt;dest = daddr-&gt;sin_port;</span> -<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : tcph-&gt;seq = htonl(1);</span> -<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : tcph-&gt;ack_seq = 0;</span> -<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : tcph-&gt;doff = 5;</span> -<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : tcph-&gt;res1 = 0;</span> -<span class="lineNum"> 259 </span> : : /* TCP flags */ -<span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : tcph-&gt;fin = 0;</span> -<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : tcph-&gt;syn = 1;</span> -<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : tcph-&gt;rst = 0;</span> -<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : tcph-&gt;psh = 0;</span> -<span class="lineNum"> 264 </span> :<span class="lineNoCov"> 0 : tcph-&gt;ack = 0;</span> -<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : tcph-&gt;urg = 0;</span> -<span class="lineNum"> 266 </span> : : -<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : tcph-&gt;res2 = 0;</span> -<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : tcph-&gt;window = htons(32767);</span> -<span class="lineNum"> 269 </span> :<span class="lineNoCov"> 0 : tcph-&gt;check = 0;</span> -<span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : tcph-&gt;urg_ptr = 0;</span> -<span class="lineNum"> 271 </span> : : -<span class="lineNum"> 272 </span> : : /* No we can compute our checksum. -<span class="lineNum"> 273 </span> : : */ -<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = chksum((unsigned short *)pkt_data, iph-&gt;tot_len);</span> -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> : : /* Make sure the kernel knows the header is included in the data so it -<span class="lineNum"> 277 </span> : : * doesn't try to insert its own header into the packet. -<span class="lineNum"> 278 </span> : : */ -<span class="lineNum"> 279 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, so_val, sizeof(one)) &lt; 0)</span> -<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_raw: setsockopt HDRINCL: &quot;, strerror(errno));</span> -<span class="lineNum"> 281 </span> : : -<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : res = sendto (sock, pkt_data, iph-&gt;tot_len, 0,</span> -<span class="lineNum"> 283 </span> : : (struct sockaddr *)daddr, sizeof(*daddr)); -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> -<span class="lineNum"> 286 </span> : : { -<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_tcp_raw: sendto error: &quot;, strerror(errno));</span> -<span class="lineNum"> 288 </span> : : } -<span class="lineNum"> 289 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len + hdrlen) /* account for the header ?*/</span> -<span class="lineNum"> 290 </span> : : { -<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 292 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, -<span class="lineNum"> 293 </span> : : res, sd_len -<span class="lineNum"> 294 </span> : : ); -<span class="lineNum"> 295 </span> : : } -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : close(sock);</span> -<span class="lineNum"> 298 </span> : : -<span class="lineNum"> 299 </span> : : return(res); -<span class="lineNum"> 300 </span> : : -<span class="lineNum"> 301 </span> : : #endif /* !WIN32 */ -<span class="lineNum"> 302 </span> : : } -<span class="lineNum"> 303 </span> : : -<span class="lineNum"> 304 </span> : : /* Send the SPA data via raw UDP packet. -<a name="305"><span class="lineNum"> 305 </span> : : */</a> -<span class="lineNum"> 306 </span> : : static int -<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : send_spa_packet_udp_raw(const char *spa_data, const int sd_len,</span> -<span class="lineNum"> 308 </span> : : const struct sockaddr_in *saddr, const struct sockaddr_in *daddr, -<span class="lineNum"> 309 </span> : : const fko_cli_options_t *options) -<span class="lineNum"> 310 </span> : : { -<span class="lineNum"> 311 </span> : : #ifdef WIN32 -<span class="lineNum"> 312 </span> : : log_msg(LOG_VERBOSITY_ERROR, -<span class="lineNum"> 313 </span> : : &quot;send_spa_packet_udp_raw: raw packets are not yet supported.&quot;); -<span class="lineNum"> 314 </span> : : return(-1); -<span class="lineNum"> 315 </span> : : #else -<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : int sock, res = 0;</span> -<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : char pkt_data[2048] = {0}; /* Should be enough for our purposes */</span> -<span class="lineNum"> 318 </span> : : -<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : struct iphdr *iph = (struct iphdr *) pkt_data;</span> -<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : struct udphdr *udph = (struct udphdr *) (pkt_data + sizeof (struct iphdr));</span> -<span class="lineNum"> 321 </span> : : -<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : int hdrlen = sizeof(struct iphdr) + sizeof(struct udphdr);</span> -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> : : /* Values for setsockopt. -<span class="lineNum"> 325 </span> : : */ -<span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : int one = 1;</span> -<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : const int *so_val = &amp;one;</span> -<span class="lineNum"> 328 </span> : : -<span class="lineNum"> 329 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;test)</span> -<span class="lineNum"> 330 </span> : : { -<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 332 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); -<span class="lineNum"> 333 </span> : : return res; -<span class="lineNum"> 334 </span> : : } -<span class="lineNum"> 335 </span> : : -<span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);</span> -<span class="lineNum"> 337 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> -<span class="lineNum"> 338 </span> : : { -<span class="lineNum"> 339 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_udp_raw: create socket: &quot;, strerror(errno));</span> -<span class="lineNum"> 340 </span> : : return(sock); -<span class="lineNum"> 341 </span> : : } -<span class="lineNum"> 342 </span> : : -<span class="lineNum"> 343 </span> : : /* Put the spa data in place. -<span class="lineNum"> 344 </span> : : */ -<span class="lineNum"> 345 </span> :<span class="lineNoCov"> 0 : memcpy((pkt_data + hdrlen), spa_data, sd_len);</span> -<span class="lineNum"> 346 </span> : : -<span class="lineNum"> 347 </span> : : /* Construct our own header by filling in the ip/udp header values, -<span class="lineNum"> 348 </span> : : * starting with the IP header values. -<span class="lineNum"> 349 </span> : : */ -<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : iph-&gt;ihl = 5;</span> -<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : iph-&gt;version = 4;</span> -<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : iph-&gt;tos = 0;</span> -<span class="lineNum"> 353 </span> : : /* Total size is header plus payload */ -<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : iph-&gt;tot_len = hdrlen + sd_len;</span> -<span class="lineNum"> 355 </span> : : /* The value here does not matter */ -<span class="lineNum"> 356 </span> :<span class="lineNoCov"> 0 : iph-&gt;id = random() &amp; 0xffff;</span> -<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : iph-&gt;frag_off = 0;</span> -<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : iph-&gt;ttl = RAW_SPA_TTL;</span> -<span class="lineNum"> 359 </span> :<span class="lineNoCov"> 0 : iph-&gt;protocol = IPPROTO_UDP;</span> -<span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = 0;</span> -<span class="lineNum"> 361 </span> :<span class="lineNoCov"> 0 : iph-&gt;saddr = saddr-&gt;sin_addr.s_addr;</span> -<span class="lineNum"> 362 </span> :<span class="lineNoCov"> 0 : iph-&gt;daddr = daddr-&gt;sin_addr.s_addr;</span> -<span class="lineNum"> 363 </span> : : -<span class="lineNum"> 364 </span> : : /* Now the UDP header values. -<span class="lineNum"> 365 </span> : : */ -<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : udph-&gt;source = saddr-&gt;sin_port;</span> -<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : udph-&gt;dest = daddr-&gt;sin_port;</span> -<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : udph-&gt;check = 0;</span> -<span class="lineNum"> 369 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : udph-&gt;len = htons(sd_len + sizeof(struct udphdr));</span> -<span class="lineNum"> 370 </span> : : -<span class="lineNum"> 371 </span> : : /* No we can compute our checksum. -<span class="lineNum"> 372 </span> : : */ -<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = chksum((unsigned short *)pkt_data, iph-&gt;tot_len);</span> -<span class="lineNum"> 374 </span> : : -<span class="lineNum"> 375 </span> : : /* Make sure the kernel knows the header is included in the data so it -<span class="lineNum"> 376 </span> : : * doesn't try to insert its own header into the packet. -<span class="lineNum"> 377 </span> : : */ -<span class="lineNum"> 378 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, so_val, sizeof(one)) &lt; 0)</span> -<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_udp_raw: setsockopt HDRINCL: &quot;, strerror(errno));</span> -<span class="lineNum"> 380 </span> : : -<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : res = sendto (sock, pkt_data, iph-&gt;tot_len, 0,</span> -<span class="lineNum"> 382 </span> : : (struct sockaddr *)daddr, sizeof(*daddr)); -<span class="lineNum"> 383 </span> : : -<span class="lineNum"> 384 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> -<span class="lineNum"> 385 </span> : : { -<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_udp_raw: sendto error: &quot;, strerror(errno));</span> -<span class="lineNum"> 387 </span> : : } -<span class="lineNum"> 388 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len + hdrlen) /* account for the header ?*/</span> -<span class="lineNum"> 389 </span> : : { -<span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING,</span> -<span class="lineNum"> 391 </span> : : &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;, -<span class="lineNum"> 392 </span> : : res, sd_len -<span class="lineNum"> 393 </span> : : ); -<span class="lineNum"> 394 </span> : : } -<span class="lineNum"> 395 </span> : : -<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : close(sock);</span> -<span class="lineNum"> 397 </span> : : -<span class="lineNum"> 398 </span> : : return(res); -<span class="lineNum"> 399 </span> : : -<span class="lineNum"> 400 </span> : : #endif /* !WIN32 */ -<span class="lineNum"> 401 </span> : : } -<span class="lineNum"> 402 </span> : : -<span class="lineNum"> 403 </span> : : /* Send the SPA data via ICMP packet. -<a name="404"><span class="lineNum"> 404 </span> : : */</a> -<span class="lineNum"> 405 </span> : : static int -<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : send_spa_packet_icmp(const char *spa_data, const int sd_len,</span> -<span class="lineNum"> 407 </span> : : const struct sockaddr_in *saddr, const struct sockaddr_in *daddr, -<span class="lineNum"> 408 </span> : : const fko_cli_options_t *options) -<span class="lineNum"> 409 </span> : : { -<span class="lineNum"> 410 </span> : : #ifdef WIN32 -<span class="lineNum"> 411 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: raw packets are not yet supported.&quot;); -<span class="lineNum"> 412 </span> : : return(-1); -<span class="lineNum"> 413 </span> : : #else -<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : int res = 0, sock;</span> -<span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : char pkt_data[2048] = {0};</span> -<span class="lineNum"> 416 </span> : : -<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : struct iphdr *iph = (struct iphdr *) pkt_data;</span> -<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : struct icmphdr *icmph = (struct icmphdr *) (pkt_data + sizeof (struct iphdr));</span> -<span class="lineNum"> 419 </span> : : -<span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : int hdrlen = sizeof(struct iphdr) + sizeof(struct icmphdr);</span> -<span class="lineNum"> 421 </span> : : -<span class="lineNum"> 422 </span> : : /* Values for setsockopt. -<span class="lineNum"> 423 </span> : : */ -<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : int one = 1;</span> -<span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : const int *so_val = &amp;one;</span> -<span class="lineNum"> 426 </span> : : -<span class="lineNum"> 427 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;test)</span> -<span class="lineNum"> 428 </span> : : { -<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 430 </span> : : &quot;test mode enabled, SPA packet not actually sent.&quot;); -<span class="lineNum"> 431 </span> : : return res; -<span class="lineNum"> 432 </span> : : } -<span class="lineNum"> 433 </span> : : -<span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : sock = socket (PF_INET, SOCK_RAW, IPPROTO_RAW);</span> -<span class="lineNum"> 435 </span> : : -<span class="lineNum"> 436 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sock &lt; 0)</span> -<span class="lineNum"> 437 </span> : : { -<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: create socket: &quot;, strerror(errno));</span> -<span class="lineNum"> 439 </span> : : return(sock); -<span class="lineNum"> 440 </span> : : } -<span class="lineNum"> 441 </span> : : -<span class="lineNum"> 442 </span> : : /* Put the spa data in place. -<span class="lineNum"> 443 </span> : : */ -<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : memcpy((pkt_data + hdrlen), spa_data, sd_len);</span> -<span class="lineNum"> 445 </span> : : -<span class="lineNum"> 446 </span> : : /* Construct our own header by filling in the ip/icmp header values, -<span class="lineNum"> 447 </span> : : * starting with the IP header values. -<span class="lineNum"> 448 </span> : : */ -<span class="lineNum"> 449 </span> :<span class="lineNoCov"> 0 : iph-&gt;ihl = 5;</span> -<span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : iph-&gt;version = 4;</span> -<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : iph-&gt;tos = 0;</span> -<span class="lineNum"> 452 </span> : : /* Total size is header plus payload */ -<span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : iph-&gt;tot_len = hdrlen + sd_len;</span> -<span class="lineNum"> 454 </span> : : /* The value here does not matter */ -<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : iph-&gt;id = random() &amp; 0xffff;</span> -<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : iph-&gt;frag_off = 0;</span> -<span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : iph-&gt;ttl = RAW_SPA_TTL;</span> -<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : iph-&gt;protocol = IPPROTO_ICMP;</span> -<span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = 0;</span> -<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : iph-&gt;saddr = saddr-&gt;sin_addr.s_addr;</span> -<span class="lineNum"> 461 </span> :<span class="lineNoCov"> 0 : iph-&gt;daddr = daddr-&gt;sin_addr.s_addr;</span> -<span class="lineNum"> 462 </span> : : -<span class="lineNum"> 463 </span> : : /* Now the ICMP header values. -<span class="lineNum"> 464 </span> : : */ -<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : icmph-&gt;type = options-&gt;spa_icmp_type;</span> -<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : icmph-&gt;code = options-&gt;spa_icmp_code;</span> -<span class="lineNum"> 467 </span> :<span class="lineNoCov"> 0 : icmph-&gt;checksum = 0;</span> -<span class="lineNum"> 468 </span> : : -<span class="lineNum"> 469 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(icmph-&gt;type == ICMP_ECHO &amp;&amp; icmph-&gt;code == 0)</span> -<span class="lineNum"> 470 </span> : : { -<span class="lineNum"> 471 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : icmph-&gt;un.echo.id = htons(random() &amp; 0xffff);</span> -<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : icmph-&gt;un.echo.sequence = htons(1);</span> -<span class="lineNum"> 473 </span> : : } -<span class="lineNum"> 474 </span> : : -<span class="lineNum"> 475 </span> : : /* No we can compute our checksum. -<span class="lineNum"> 476 </span> : : */ -<span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : iph-&gt;check = chksum((unsigned short *)pkt_data, iph-&gt;tot_len);</span> -<span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : icmph-&gt;checksum = chksum((unsigned short *)icmph, sizeof(struct icmphdr) + sd_len);</span> -<span class="lineNum"> 479 </span> : : -<span class="lineNum"> 480 </span> : : /* Make sure the kernel knows the header is included in the data so it -<span class="lineNum"> 481 </span> : : * doesn't try to insert its own header into the packet. -<span class="lineNum"> 482 </span> : : */ -<span class="lineNum"> 483 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (setsockopt (sock, IPPROTO_IP, IP_HDRINCL, so_val, sizeof(one)) &lt; 0)</span> -<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: setsockopt HDRINCL: &quot;, strerror(errno));</span> -<span class="lineNum"> 485 </span> : : -<span class="lineNum"> 486 </span> :<span class="lineNoCov"> 0 : res = sendto (sock, pkt_data, iph-&gt;tot_len, 0,</span> -<span class="lineNum"> 487 </span> : : (struct sockaddr *)daddr, sizeof(*daddr)); -<span class="lineNum"> 488 </span> : : -<span class="lineNum"> 489 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> -<span class="lineNum"> 490 </span> : : { -<span class="lineNum"> 491 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;send_spa_packet_icmp: sendto error: &quot;, strerror(errno));</span> -<span class="lineNum"> 492 </span> : : } -<span class="lineNum"> 493 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res != sd_len + hdrlen) /* account for icmp header */</span> -<span class="lineNum"> 494 </span> : : { -<span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_WARNING, &quot;[#] Warning: bytes sent (%i) not spa data length (%i).&quot;,</span> -<span class="lineNum"> 496 </span> : : res, sd_len); -<span class="lineNum"> 497 </span> : : } -<span class="lineNum"> 498 </span> : : -<span class="lineNum"> 499 </span> :<span class="lineNoCov"> 0 : close(sock);</span> -<span class="lineNum"> 500 </span> : : -<span class="lineNum"> 501 </span> : : return(res); -<span class="lineNum"> 502 </span> : : -<span class="lineNum"> 503 </span> : : #endif /* !WIN32 */ -<span class="lineNum"> 504 </span> : : } -<span class="lineNum"> 505 </span> : : -<span class="lineNum"> 506 </span> : : /* Send the SPA data packet via an HTTP request -<a name="507"><span class="lineNum"> 507 </span> : : */</a> -<span class="lineNum"> 508 </span> : : static int -<span class="lineNum"> 509 </span> :<span class="lineCov"> 67 : send_spa_packet_http(const char *spa_data, const int sd_len,</span> -<span class="lineNum"> 510 </span> : : fko_cli_options_t *options) -<span class="lineNum"> 511 </span> : : { -<span class="lineNum"> 512 </span> :<span class="lineCov"> 67 : char http_buf[HTTP_MAX_REQUEST_LEN] = {0}, *spa_data_copy = NULL;</span> -<span class="lineNum"> 513 </span> :<span class="lineCov"> 67 : char *ndx = options-&gt;http_proxy;</span> -<span class="lineNum"> 514 </span> :<span class="lineCov"> 67 : int i, proxy_port = 0, is_err;</span> -<span class="lineNum"> 515 </span> : : -<span class="lineNum"> 516 </span> :<span class="lineCov"> 67 : spa_data_copy = malloc(sd_len+1);</span> -<span class="lineNum"> 517 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 67 : if (spa_data_copy == NULL)</span> -<span class="lineNum"> 518 </span> : : { -<span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Fatal, could not allocate memory.&quot;);</span> -<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 521 </span> : : } -<span class="lineNum"> 522 </span> :<span class="lineCov"> 67 : memcpy(spa_data_copy, spa_data, sd_len+1);</span> -<span class="lineNum"> 523 </span> : : -<span class="lineNum"> 524 </span> : : /* Change &quot;+&quot; to &quot;-&quot;, and &quot;/&quot; to &quot;_&quot; for HTTP requests (the server -<span class="lineNum"> 525 </span> : : * side will translate these back before decrypting) -<span class="lineNum"> 526 </span> : : */ -<span class="lineNum"> 527 </span> [<span class="branchCov" title="Branch 0 was taken 12687 times"> + </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 12754 : for (i=0; i &lt; sd_len; i++) {</span> -<span class="lineNum"> 528 </span> [<span class="branchCov" title="Branch 0 was taken 232 times"> + </span><span class="branchCov" title="Branch 1 was taken 12455 times"> + </span>]:<span class="lineCov"> 12687 : if (spa_data_copy[i] == '+') {</span> -<span class="lineNum"> 529 </span> :<span class="lineCov"> 232 : spa_data_copy[i] = '-';</span> -<span class="lineNum"> 530 </span> : : } -<span class="lineNum"> 531 </span> [<span class="branchCov" title="Branch 0 was taken 191 times"> + </span><span class="branchCov" title="Branch 1 was taken 12264 times"> + </span>]:<span class="lineCov"> 12455 : else if (spa_data_copy[i] == '/') {</span> -<span class="lineNum"> 532 </span> :<span class="lineCov"> 191 : spa_data_copy[i] = '_';</span> -<span class="lineNum"> 533 </span> : : } -<span class="lineNum"> 534 </span> : : } -<span class="lineNum"> 535 </span> : : -<span class="lineNum"> 536 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : if(options-&gt;http_proxy[0] == 0x0)</span> -<span class="lineNum"> 537 </span> : : { -<span class="lineNum"> 538 </span> : : snprintf(http_buf, HTTP_MAX_REQUEST_LEN, -<span class="lineNum"> 539 </span> : : &quot;GET /%s HTTP/1.0\r\nUser-Agent: %s\r\nAccept: */*\r\n&quot; -<span class="lineNum"> 540 </span> : : &quot;Host: %s\r\nConnection: close\r\n\r\n&quot;, -<span class="lineNum"> 541 </span> : : spa_data_copy, -<span class="lineNum"> 542 </span> :<span class="lineCov"> 67 : options-&gt;http_user_agent,</span> -<span class="lineNum"> 543 </span> :<span class="lineCov"> 67 : options-&gt;spa_server_str /* hostname or IP */</span> -<span class="lineNum"> 544 </span> : : ); -<span class="lineNum"> 545 </span> : : } -<span class="lineNum"> 546 </span> : : else /* we are sending the SPA packet through an HTTP proxy */ -<span class="lineNum"> 547 </span> : : { -<span class="lineNum"> 548 </span> : : /* Extract the hostname if it was specified as a URL. Actually, -<span class="lineNum"> 549 </span> : : * we just move the start of the hostname to the begining of the -<span class="lineNum"> 550 </span> : : * original string. -<span class="lineNum"> 551 </span> : : */ -<span class="lineNum"> 552 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(ndx, &quot;http://&quot;, 7) == 0)</span> -<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : memmove(ndx, ndx+7, strlen(ndx)+1);</span> -<span class="lineNum"> 554 </span> : : -<span class="lineNum"> 555 </span> : : /* If there is a colon assume the proxy hostame or IP is on the left -<span class="lineNum"> 556 </span> : : * and the proxy port is on the right. So we make the : a \0 and -<span class="lineNum"> 557 </span> : : * extract the port value. -<span class="lineNum"> 558 </span> : : */ -<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : ndx = strchr(options-&gt;http_proxy, ':');</span> -<span class="lineNum"> 560 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx)</span> -<span class="lineNum"> 561 </span> : : { -<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : *ndx = '\0';</span> -<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : proxy_port = strtol_wrapper(ndx+1, 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 564 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 565 </span> : : { -<span class="lineNum"> 566 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 567 </span> : : &quot;[-] proxy port value is invalid, must be in [%d-%d]&quot;, -<span class="lineNum"> 568 </span> : : 1, MAX_PORT); -<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : free(spa_data_copy);</span> -<span class="lineNum"> 570 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 571 </span> : : } -<span class="lineNum"> 572 </span> : : } -<span class="lineNum"> 573 </span> : : -<span class="lineNum"> 574 </span> : : /* If we have a valid port value, use it. -<span class="lineNum"> 575 </span> : : */ -<span class="lineNum"> 576 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(proxy_port)</span> -<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_dst_port = proxy_port;</span> -<span class="lineNum"> 578 </span> : : -<span class="lineNum"> 579 </span> : : snprintf(http_buf, HTTP_MAX_REQUEST_LEN, -<span class="lineNum"> 580 </span> : : &quot;GET http://%s/%s HTTP/1.0\r\nUser-Agent: %s\r\nAccept: */*\r\n&quot; -<span class="lineNum"> 581 </span> : : &quot;Host: %s\r\nConnection: close\r\n\r\n&quot;, -<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : options-&gt;spa_server_str,</span> -<span class="lineNum"> 583 </span> : : spa_data_copy, -<span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : options-&gt;http_user_agent,</span> -<span class="lineNum"> 585 </span> : : options-&gt;http_proxy /* hostname or IP */ -<span class="lineNum"> 586 </span> : : ); -<span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : strlcpy(options-&gt;spa_server_str, options-&gt;http_proxy,</span> -<span class="lineNum"> 588 </span> : : sizeof(options-&gt;spa_server_str)); -<span class="lineNum"> 589 </span> : : } -<span class="lineNum"> 590 </span> :<span class="lineCov"> 67 : free(spa_data_copy);</span> -<span class="lineNum"> 591 </span> : : -<span class="lineNum"> 592 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : if (options-&gt;test)</span> -<span class="lineNum"> 593 </span> : : { -<span class="lineNum"> 594 </span> :<span class="lineCov"> 67 : log_msg(LOG_VERBOSITY_INFO, &quot;%s&quot;, http_buf);</span> -<span class="lineNum"> 595 </span> : : -<span class="lineNum"> 596 </span> :<span class="lineCov"> 67 : log_msg(LOG_VERBOSITY_NORMAL,</span> -<span class="lineNum"> 597 </span> : : &quot;Test mode enabled, SPA packet not actually sent.&quot;); -<span class="lineNum"> 598 </span> :<span class="lineCov"> 67 : return 0;</span> -<span class="lineNum"> 599 </span> : : } -<span class="lineNum"> 600 </span> : : -<span class="lineNum"> 601 </span> : : /* In AFL fuzzing mode, the following function will not send -<span class="lineNum"> 602 </span> : : * the SPA packet. -<span class="lineNum"> 603 </span> : : */ -<span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : return send_spa_packet_tcp_or_udp(http_buf, strlen(http_buf), options);</span> -<span class="lineNum"> 605 </span> : : } -<span class="lineNum"> 606 </span> : : -<span class="lineNum"> 607 </span> : : /* Function used to send the SPA data. -<a name="608"><span class="lineNum"> 608 </span> : : */</a> -<span class="lineNum"> 609 </span> : : int -<span class="lineNum"> 610 </span> :<span class="lineCov"> 416 : send_spa_packet(fko_ctx_t ctx, fko_cli_options_t *options)</span> -<span class="lineNum"> 611 </span> : : { -<span class="lineNum"> 612 </span> : : int res, sd_len; -<span class="lineNum"> 613 </span> : : char *spa_data; -<span class="lineNum"> 614 </span> : : struct sockaddr_in saddr, daddr; -<span class="lineNum"> 615 </span> :<span class="lineCov"> 416 : char ip_str[INET_ADDRSTRLEN] = {0}; /* String used to contain the ip addres of an hostname */</span> -<span class="lineNum"> 616 </span> : : struct addrinfo hints; /* Structure used to set hints to resolve hostname */ -<span class="lineNum"> 617 </span> : : #ifdef WIN32 -<span class="lineNum"> 618 </span> : : WSADATA wsa_data; -<span class="lineNum"> 619 </span> : : #endif -<span class="lineNum"> 620 </span> : : -<span class="lineNum"> 621 </span> : : /* Initialize the hint buffer */ -<span class="lineNum"> 622 </span> : : memset(&amp;hints, 0 , sizeof(hints)); -<span class="lineNum"> 623 </span> : : -<span class="lineNum"> 624 </span> : : /* Get our spa data here. -<span class="lineNum"> 625 </span> : : */ -<span class="lineNum"> 626 </span> :<span class="lineCov"> 416 : res = fko_get_spa_data(ctx, &amp;spa_data);</span> -<span class="lineNum"> 627 </span> : : -<span class="lineNum"> 628 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 629 </span> : : { -<span class="lineNum"> 630 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 631 </span> : : &quot;send_spa_packet: Error #%i from fko_get_spa_data: %s&quot;, -<span class="lineNum"> 632 </span> : : res, fko_errstr(res) -<span class="lineNum"> 633 </span> : : ); -<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 635 </span> : : } -<span class="lineNum"> 636 </span> : : -<span class="lineNum"> 637 </span> :<span class="lineCov"> 416 : sd_len = strlen(spa_data);</span> -<span class="lineNum"> 638 </span> : : -<span class="lineNum"> 639 </span> : : #ifdef WIN32 -<span class="lineNum"> 640 </span> : : /* Winsock needs to be initialized... -<span class="lineNum"> 641 </span> : : */ -<span class="lineNum"> 642 </span> : : res = WSAStartup( MAKEWORD(1,1), &amp;wsa_data ); -<span class="lineNum"> 643 </span> : : if( res != 0 ) -<span class="lineNum"> 644 </span> : : { -<span class="lineNum"> 645 </span> : : log_msg(LOG_VERBOSITY_ERROR, &quot;Winsock initialization error %d&quot;, res ); -<span class="lineNum"> 646 </span> : : return(-1); -<span class="lineNum"> 647 </span> : : } -<span class="lineNum"> 648 </span> : : #endif -<span class="lineNum"> 649 </span> : : -<span class="lineNum"> 650 </span> :<span class="lineCov"> 416 : errno = 0;</span> -<span class="lineNum"> 651 </span> : : -<span class="lineNum"> 652 </span> :<span class="lineCov"> 416 : dump_transmit_options(options);</span> -<span class="lineNum"> 653 </span> : : -<span class="lineNum"> 654 </span> [<span class="branchCov" title="Branch 0 was taken 349 times"> + </span><span class="branchCov" title="Branch 1 was taken 67 times"> + </span>]:<span class="lineCov"> 416 : if (options-&gt;spa_proto == FKO_PROTO_TCP || options-&gt;spa_proto == FKO_PROTO_UDP)</span> -<span class="lineNum"> 655 </span> : : { -<span class="lineNum"> 656 </span> :<span class="lineCov"> 349 : res = send_spa_packet_tcp_or_udp(spa_data, sd_len, options);</span> -<span class="lineNum"> 657 </span> : : } -<span class="lineNum"> 658 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : else if (options-&gt;spa_proto == FKO_PROTO_HTTP)</span> -<span class="lineNum"> 659 </span> : : { -<span class="lineNum"> 660 </span> :<span class="lineCov"> 67 : res = send_spa_packet_http(spa_data, sd_len, options);</span> -<span class="lineNum"> 661 </span> : : } -<span class="lineNum"> 662 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (options-&gt;spa_proto == FKO_PROTO_TCP_RAW</span> -<span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : || options-&gt;spa_proto == FKO_PROTO_UDP_RAW</span> -<span class="lineNum"> 664 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || options-&gt;spa_proto == FKO_PROTO_ICMP)</span> -<span class="lineNum"> 665 </span> : : { -<span class="lineNum"> 666 </span> : : memset(&amp;saddr, 0, sizeof(saddr)); -<span class="lineNum"> 667 </span> : : memset(&amp;daddr, 0, sizeof(daddr)); -<span class="lineNum"> 668 </span> : : -<span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : saddr.sin_family = AF_INET;</span> -<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : daddr.sin_family = AF_INET;</span> -<span class="lineNum"> 671 </span> : : -<span class="lineNum"> 672 </span> : : /* Set source address and port -<span class="lineNum"> 673 </span> : : */ -<span class="lineNum"> 674 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_src_port)</span> -<span class="lineNum"> 675 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : saddr.sin_port = htons(options-&gt;spa_src_port);</span> -<span class="lineNum"> 676 </span> : : else -<span class="lineNum"> 677 </span> : : saddr.sin_port = INADDR_ANY; -<span class="lineNum"> 678 </span> : : -<span class="lineNum"> 679 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spoof_ip_src_str[0] != 0x00) {</span> -<span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : saddr.sin_addr.s_addr = inet_addr(options-&gt;spoof_ip_src_str);</span> -<span class="lineNum"> 681 </span> : : } else -<span class="lineNum"> 682 </span> : : saddr.sin_addr.s_addr = INADDR_ANY; /* default */ -<span class="lineNum"> 683 </span> : : -<span class="lineNum"> 684 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (saddr.sin_addr.s_addr == -1)</span> -<span class="lineNum"> 685 </span> : : { -<span class="lineNum"> 686 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;Could not set source IP.&quot;);</span> -<span class="lineNum"> 687 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 688 </span> : : } -<span class="lineNum"> 689 </span> : : -<span class="lineNum"> 690 </span> : : /* Set destination port -<span class="lineNum"> 691 </span> : : */ -<span class="lineNum"> 692 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : daddr.sin_port = htons(options-&gt;spa_dst_port);</span> -<span class="lineNum"> 693 </span> : : -<span class="lineNum"> 694 </span> : : /* Set destination address. We use the default protocol to resolve -<span class="lineNum"> 695 </span> : : * the ip address */ -<span class="lineNum"> 696 </span> :<span class="lineNoCov"> 0 : hints.ai_family = AF_INET;</span> -<span class="lineNum"> 697 </span> : : -<span class="lineNum"> 698 </span> : : #if AFL_FUZZING -<span class="lineNum"> 699 </span> : : /* Make sure to never send SPA packets under AFL fuzzing cycles -<span class="lineNum"> 700 </span> : : */ -<span class="lineNum"> 701 </span> : : log_msg(LOG_VERBOSITY_NORMAL, -<span class="lineNum"> 702 </span> : : &quot;AFL fuzzing enabled, SPA packet not actually sent.&quot;); -<span class="lineNum"> 703 </span> : : return res; -<span class="lineNum"> 704 </span> : : #endif -<span class="lineNum"> 705 </span> : : -<span class="lineNum"> 706 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (resolve_dest_adr(options-&gt;spa_server_str, &amp;hints, ip_str, sizeof(ip_str)) != 0)</span> -<span class="lineNum"> 707 </span> : : { -<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Unable to resolve %s as an ip address&quot;,</span> -<span class="lineNum"> 709 </span> : : options-&gt;spa_server_str); -<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 711 </span> : : } -<span class="lineNum"> 712 </span> : : else; -<span class="lineNum"> 713 </span> : : -<span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : daddr.sin_addr.s_addr = inet_addr(ip_str);</span> -<span class="lineNum"> 715 </span> : : -<span class="lineNum"> 716 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;spa_proto == FKO_PROTO_TCP_RAW)</span> -<span class="lineNum"> 717 </span> : : { -<span class="lineNum"> 718 </span> :<span class="lineNoCov"> 0 : res = send_spa_packet_tcp_raw(spa_data, sd_len, &amp;saddr, &amp;daddr, options);</span> -<span class="lineNum"> 719 </span> : : } -<span class="lineNum"> 720 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (options-&gt;spa_proto == FKO_PROTO_UDP_RAW)</span> -<span class="lineNum"> 721 </span> : : { -<span class="lineNum"> 722 </span> :<span class="lineNoCov"> 0 : res = send_spa_packet_udp_raw(spa_data, sd_len, &amp;saddr, &amp;daddr, options);</span> -<span class="lineNum"> 723 </span> : : } -<span class="lineNum"> 724 </span> : : else -<span class="lineNum"> 725 </span> : : { -<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : res = send_spa_packet_icmp(spa_data, sd_len, &amp;saddr, &amp;daddr, options);</span> -<span class="lineNum"> 727 </span> : : } -<span class="lineNum"> 728 </span> : : } -<span class="lineNum"> 729 </span> : : else -<span class="lineNum"> 730 </span> : : { -<span class="lineNum"> 731 </span> : : /* --DSS XXX: What to we really want to do here? */ -<span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;%i is not a valid or supported protocol.&quot;,</span> -<span class="lineNum"> 733 </span> : : options-&gt;spa_proto); -<span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : res = -1;</span> -<span class="lineNum"> 735 </span> : : } -<span class="lineNum"> 736 </span> : : -<span class="lineNum"> 737 </span> :<span class="lineCov"> 416 : return res;</span> -<span class="lineNum"> 738 </span> : : } -<span class="lineNum"> 739 </span> : : -<a name="740"><span class="lineNum"> 740 </span> : : /* Function to write SPA packet data to the filesystem</a> -<span class="lineNum"> 741 </span> : : */ -<span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : int write_spa_packet_data(fko_ctx_t ctx, const fko_cli_options_t *options)</span> -<span class="lineNum"> 743 </span> : : { -<span class="lineNum"> 744 </span> : : FILE *fp; -<span class="lineNum"> 745 </span> : : char *spa_data; -<span class="lineNum"> 746 </span> : : int res; -<span class="lineNum"> 747 </span> : : -<span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_data(ctx, &amp;spa_data);</span> -<span class="lineNum"> 749 </span> : : -<span class="lineNum"> 750 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 751 </span> : : { -<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 753 </span> : : &quot;write_spa_packet_data: Error #%i from fko_get_spa_data: %s&quot;, -<span class="lineNum"> 754 </span> : : res, fko_errstr(res) -<span class="lineNum"> 755 </span> : : ); -<span class="lineNum"> 756 </span> : : -<span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 758 </span> : : } -<span class="lineNum"> 759 </span> : : -<span class="lineNum"> 760 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (options-&gt;save_packet_file_append)</span> -<span class="lineNum"> 761 </span> : : { -<span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : fp = fopen(options-&gt;save_packet_file, &quot;a&quot;);</span> -<span class="lineNum"> 763 </span> : : } -<span class="lineNum"> 764 </span> : : else -<span class="lineNum"> 765 </span> : : { -<span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : unlink(options-&gt;save_packet_file);</span> -<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : fp = fopen(options-&gt;save_packet_file, &quot;w&quot;);</span> -<span class="lineNum"> 768 </span> : : } -<span class="lineNum"> 769 </span> : : -<span class="lineNum"> 770 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fp == NULL)</span> -<span class="lineNum"> 771 </span> : : { -<span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;write_spa_packet_data: &quot;, strerror(errno));</span> -<span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 774 </span> : : } -<span class="lineNum"> 775 </span> : : -<span class="lineNum"> 776 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : fprintf(fp, &quot;%s\n&quot;,</span> -<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : (spa_data == NULL) ? &quot;&lt;NULL&gt;&quot; : spa_data);</span> -<span class="lineNum"> 778 </span> : : -<span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : fclose(fp);</span> -<span class="lineNum"> 780 </span> : : -<span class="lineNum"> 781 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 782 </span> : : } -<span class="lineNum"> 783 </span> : : -<span class="lineNum"> 784 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html deleted file mode 100644 index 6dd192cd..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func-sort-c.html +++ /dev/null @@ -1,113 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/utils.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">23</td> - <td class="headerCovTableEntry">79</td> - <td class="headerCovTableEntryLo">29.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntryLo">37.5 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">52</td> - <td class="headerCovTableEntryLo">21.2 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="utils.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#257">proto_strtoint</a></td> - <td class="coverFnHi">3306</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#58">verify_file_perms_ownership</a></td> - <td class="coverFnHi">2890</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#225">proto_inttostr</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#309">strtoargv</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#277">add_argv.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#159">resolve_dest_adr</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#352">free_argv</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#135">get_in_addr</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html deleted file mode 100644 index 8f796204..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.func.html +++ /dev/null @@ -1,113 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/utils.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">23</td> - <td class="headerCovTableEntry">79</td> - <td class="headerCovTableEntryLo">29.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntryLo">37.5 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">52</td> - <td class="headerCovTableEntryLo">21.2 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="utils.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#277">add_argv.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#352">free_argv</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#135">get_in_addr</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#225">proto_inttostr</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#257">proto_strtoint</a></td> - <td class="coverFnHi">3306</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#159">resolve_dest_adr</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#309">strtoargv</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#58">verify_file_perms_ownership</a></td> - <td class="coverFnHi">2890</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html deleted file mode 100644 index e5bd922f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/client/utils.c.gcov.html +++ /dev/null @@ -1,456 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - client/utils.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">client</a> - utils.c<span style="font-size: 80%;"> (source / <a href="utils.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">23</td> - <td class="headerCovTableEntry">79</td> - <td class="headerCovTableEntryLo">29.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntryLo">37.5 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">52</td> - <td class="headerCovTableEntryLo">21.2 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: utils.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: General/Generic functions for the fwknop client. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fwknop_common.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 34 </span> : : #ifndef WIN32 -<span class="lineNum"> 35 </span> : : #include &lt;arpa/inet.h&gt; -<span class="lineNum"> 36 </span> : : #endif -<span class="lineNum"> 37 </span> : : -<span class="lineNum"> 38 </span> : : static void *get_in_addr(struct sockaddr *sa); -<span class="lineNum"> 39 </span> : : -<span class="lineNum"> 40 </span> : : /** -<span class="lineNum"> 41 </span> : : * Structure to handle a protocol string and its associated integer value -<span class="lineNum"> 42 </span> : : */ -<span class="lineNum"> 43 </span> : : typedef struct fko_protocol -<span class="lineNum"> 44 </span> : : { -<span class="lineNum"> 45 </span> : : const char str[PROTOCOL_BUFSIZE]; /*!&lt; String which represents a protocol value for the FKO library */ -<span class="lineNum"> 46 </span> : : int val; /*!&lt; Value of the protocol according to the FKO library */ -<span class="lineNum"> 47 </span> : : } fko_protocol_t; -<span class="lineNum"> 48 </span> : : -<span class="lineNum"> 49 </span> : : static fko_protocol_t fko_protocol_array[] = -<span class="lineNum"> 50 </span> : : { -<span class="lineNum"> 51 </span> : : { &quot;udpraw&quot;, FKO_PROTO_UDP_RAW }, -<span class="lineNum"> 52 </span> : : { &quot;udp&quot;, FKO_PROTO_UDP }, -<span class="lineNum"> 53 </span> : : { &quot;tcpraw&quot;, FKO_PROTO_TCP_RAW }, -<span class="lineNum"> 54 </span> : : { &quot;tcp&quot;, FKO_PROTO_TCP }, -<span class="lineNum"> 55 </span> : : { &quot;icmp&quot;, FKO_PROTO_ICMP }, -<span class="lineNum"> 56 </span> : : { &quot;http&quot;, FKO_PROTO_HTTP } -<span class="lineNum"> 57 </span> : : }; -<a name="58"><span class="lineNum"> 58 </span> : : </a> -<span class="lineNum"> 59 </span> : : int -<span class="lineNum"> 60 </span> :<span class="lineCov"> 2890 : verify_file_perms_ownership(const char *file)</span> -<span class="lineNum"> 61 </span> : : { -<span class="lineNum"> 62 </span> :<span class="lineCov"> 2890 : int res = 1;</span> -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> : : #if HAVE_STAT -<span class="lineNum"> 65 </span> : : struct stat st; -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> : : /* Every file that the fwknop client deals with should be owned -<span class="lineNum"> 68 </span> : : * by the user and permissions set to 600 (user read/write) -<span class="lineNum"> 69 </span> : : */ -<span class="lineNum"> 70 </span> [<span class="branchCov" title="Branch 1 was taken 2890 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 2890 : if((stat(file, &amp;st)) == 0)</span> -<span class="lineNum"> 71 </span> : : { -<span class="lineNum"> 72 </span> : : /* Make sure it is a regular file -<span class="lineNum"> 73 </span> : : */ -<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(S_ISREG(st.st_mode) != 1 &amp;&amp; S_ISLNK(st.st_mode) != 1)</span> -<span class="lineNum"> 75 </span> : : { -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 77 </span> : : &quot;[-] file: %s is not a regular file or symbolic link.&quot;, -<span class="lineNum"> 78 </span> : : file -<span class="lineNum"> 79 </span> : : ); -<span class="lineNum"> 80 </span> : : /* when we start in enforcing this instead of just warning -<span class="lineNum"> 81 </span> : : * the user -<span class="lineNum"> 82 </span> : : res = 0; -<span class="lineNum"> 83 </span> : : */ -<span class="lineNum"> 84 </span> : : } -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> [<span class="branchCov" title="Branch 0 was taken 2890 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2890 : if((st.st_mode &amp; (S_IRWXU|S_IRWXG|S_IRWXO)) != (S_IRUSR|S_IWUSR))</span> -<span class="lineNum"> 87 </span> : : { -<span class="lineNum"> 88 </span> :<span class="lineCov"> 2890 : log_msg(LOG_VERBOSITY_ERROR,</span> -<span class="lineNum"> 89 </span> : : &quot;[-] file: %s permissions should only be user read/write (0600, -rw-------)&quot;, -<span class="lineNum"> 90 </span> : : file -<span class="lineNum"> 91 </span> : : ); -<span class="lineNum"> 92 </span> : : /* when we start in enforcing this instead of just warning -<span class="lineNum"> 93 </span> : : * the user -<span class="lineNum"> 94 </span> : : res = 0; -<span class="lineNum"> 95 </span> : : */ -<span class="lineNum"> 96 </span> : : } -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2890 times"> + </span>]:<span class="lineCov"> 2890 : if(st.st_uid != getuid())</span> -<span class="lineNum"> 99 </span> : : { -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[-] file: %s not owned by current effective user id&quot;,</span> -<span class="lineNum"> 101 </span> : : file); -<span class="lineNum"> 102 </span> : : /* when we start in enforcing this instead of just warning -<span class="lineNum"> 103 </span> : : * the user -<span class="lineNum"> 104 </span> : : res = 0; -<span class="lineNum"> 105 </span> : : */ -<span class="lineNum"> 106 </span> : : } -<span class="lineNum"> 107 </span> : : } -<span class="lineNum"> 108 </span> : : else -<span class="lineNum"> 109 </span> : : { -<span class="lineNum"> 110 </span> : : /* if the path doesn't exist, just return, but otherwise something -<span class="lineNum"> 111 </span> : : * went wrong -<span class="lineNum"> 112 </span> : : */ -<span class="lineNum"> 113 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno != ENOENT)</span> -<span class="lineNum"> 114 </span> : : { -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[-] stat() against file: %s returned: %s&quot;,</span> -<span class="lineNum"> 116 </span> : : file, strerror(errno)); -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : res = 0;</span> -<span class="lineNum"> 118 </span> : : } -<span class="lineNum"> 119 </span> : : } -<span class="lineNum"> 120 </span> : : #endif -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> :<span class="lineCov"> 2890 : return res;</span> -<span class="lineNum"> 123 </span> : : } -<span class="lineNum"> 124 </span> : : -<span class="lineNum"> 125 </span> : : /** -<span class="lineNum"> 126 </span> : : * @brief Grab the sin address from the sockaddr structure. -<span class="lineNum"> 127 </span> : : * -<span class="lineNum"> 128 </span> : : * This function returns the sin address as a sockaddr_in or sockaddr_in6 -<span class="lineNum"> 129 </span> : : * structure according to the family set (ipv4 or ipv6) in the sockaddr -<span class="lineNum"> 130 </span> : : * structure. -<span class="lineNum"> 131 </span> : : * -<span class="lineNum"> 132 </span> : : * @param sa sockaddr strcuture -<span class="lineNum"> 133 </span> : : * -<span class="lineNum"> 134 </span> : : * @return the sin addr if the sa family is AF_INET or the sin6_addr otherwise. -<a name="135"><span class="lineNum"> 135 </span> : : */</a> -<span class="lineNum"> 136 </span> : : static void * -<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : get_in_addr(struct sockaddr *sa)</span> -<span class="lineNum"> 138 </span> : : { -<span class="lineNum"> 139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sa-&gt;sa_family == AF_INET)</span> -<span class="lineNum"> 140 </span> : : { -<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : return &amp;(((struct sockaddr_in*)sa)-&gt;sin_addr);</span> -<span class="lineNum"> 142 </span> : : } -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> : : else -<span class="lineNum"> 145 </span> : : { -<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : return &amp;(((struct sockaddr_in6*)sa)-&gt;sin6_addr);</span> -<span class="lineNum"> 147 </span> : : } -<span class="lineNum"> 148 </span> : : } -<span class="lineNum"> 149 </span> : : -<span class="lineNum"> 150 </span> : : /** -<span class="lineNum"> 151 </span> : : * @brief Resolve a domain name as an ip adress. -<span class="lineNum"> 152 </span> : : * -<span class="lineNum"> 153 </span> : : * @param dns_str Name of the host to resolve. -<span class="lineNum"> 154 </span> : : * @param hints Hints to reduce the number of result from getaddrinfo() -<span class="lineNum"> 155 </span> : : * @param ip_str String where to store the resolve ip address -<span class="lineNum"> 156 </span> : : * @param ip_bufsize Number of bytes available in the ip_str buffer -<span class="lineNum"> 157 </span> : : * -<span class="lineNum"> 158 </span> : : * @return 0 if successful, 1 if an error occured. -<a name="159"><span class="lineNum"> 159 </span> : : */</a> -<span class="lineNum"> 160 </span> : : int -<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : resolve_dest_adr(const char *dns_str, struct addrinfo *hints, char *ip_str, size_t ip_bufsize)</span> -<span class="lineNum"> 162 </span> : : { -<span class="lineNum"> 163 </span> : : int error; /* Function error return code */ -<span class="lineNum"> 164 </span> : : struct addrinfo *result; /* Result of getaddrinfo() */ -<span class="lineNum"> 165 </span> : : struct addrinfo *rp; /* Element of the linked list returned by getaddrinfo() */ -<span class="lineNum"> 166 </span> : : #if WIN32 &amp;&amp; WINVER &lt;= 0x0600 -<span class="lineNum"> 167 </span> : : struct sockaddr_in *in; -<span class="lineNum"> 168 </span> : : char *win_ip; -<span class="lineNum"> 169 </span> : : #else -<span class="lineNum"> 170 </span> : : struct sockaddr_in *sai_remote; /* Remote host information as a sockaddr_in structure */ -<span class="lineNum"> 171 </span> : : #endif -<span class="lineNum"> 172 </span> : : -<span class="lineNum"> 173 </span> : : /* Try to resolve the host name */ -<span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : error = getaddrinfo(dns_str, NULL, hints, &amp;result);</span> -<span class="lineNum"> 175 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (error != 0)</span> -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;resolve_dest_adr() : %s\n&quot;, gai_strerror(error));</span> -<span class="lineNum"> 177 </span> : : -<span class="lineNum"> 178 </span> : : else -<span class="lineNum"> 179 </span> : : { -<span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : error = 1;</span> -<span class="lineNum"> 181 </span> : : -<span class="lineNum"> 182 </span> : : /* Go through the linked list of addrinfo structures */ -<span class="lineNum"> 183 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (rp = result; rp != NULL; rp = rp-&gt;ai_next)</span> -<span class="lineNum"> 184 </span> : : { -<span class="lineNum"> 185 </span> : : memset(ip_str, 0, ip_bufsize); -<span class="lineNum"> 186 </span> : : #if WIN32 &amp;&amp; WINVER &lt;= 0x0600 -<span class="lineNum"> 187 </span> : : /* On older Windows systems (anything before Vista?), -<span class="lineNum"> 188 </span> : : * we use inet_ntoa for now. -<span class="lineNum"> 189 </span> : : */ -<span class="lineNum"> 190 </span> : : in = (struct sockaddr_in*)(rp-&gt;ai_addr); -<span class="lineNum"> 191 </span> : : win_ip = inet_ntoa(in-&gt;sin_addr); -<span class="lineNum"> 192 </span> : : -<span class="lineNum"> 193 </span> : : if (win_ip != NULL &amp;&amp; (strlcpy(ip_str, win_ip, ip_bufsize) &gt; 0)) -<span class="lineNum"> 194 </span> : : #else -<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : sai_remote = (struct sockaddr_in *)get_in_addr((struct sockaddr *)(rp-&gt;ai_addr));</span> -<span class="lineNum"> 196 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (inet_ntop(rp-&gt;ai_family, sai_remote, ip_str, ip_bufsize) != NULL)</span> -<span class="lineNum"> 197 </span> : : #endif -<span class="lineNum"> 198 </span> : : { -<span class="lineNum"> 199 </span> : : error = 0; -<span class="lineNum"> 200 </span> : : break; -<span class="lineNum"> 201 </span> : : } -<span class="lineNum"> 202 </span> : : else -<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;resolve_dest_adr() : inet_ntop (%d) - %s&quot;,</span> -<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : errno, strerror(errno));</span> -<span class="lineNum"> 205 </span> : : } -<span class="lineNum"> 206 </span> : : -<span class="lineNum"> 207 </span> : : /* Free our result from getaddrinfo() */ -<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : freeaddrinfo(result);</span> -<span class="lineNum"> 209 </span> : : } -<span class="lineNum"> 210 </span> : : -<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : return error;</span> -<span class="lineNum"> 212 </span> : : } -<span class="lineNum"> 213 </span> : : -<span class="lineNum"> 214 </span> : : /** -<span class="lineNum"> 215 </span> : : * @brief Return a protocol string according to a protocol integer value -<span class="lineNum"> 216 </span> : : * -<span class="lineNum"> 217 </span> : : * This function checks if the protocol integer is valid, and write the protocol -<span class="lineNum"> 218 </span> : : * string associated. -<span class="lineNum"> 219 </span> : : * -<span class="lineNum"> 220 </span> : : * @param proto protocol inetger value (UDP_RAW, UDP, TCPRAW...) -<span class="lineNum"> 221 </span> : : * @param proto_str Buffer to write the protocol string -<span class="lineNum"> 222 </span> : : * @param proto_size size of the protocol string buffer -<span class="lineNum"> 223 </span> : : * -<span class="lineNum"> 224 </span> : : * @return -1 if the protocol integer value is not supported, 0 otherwise -<a name="225"><span class="lineNum"> 225 </span> : : */</a> -<span class="lineNum"> 226 </span> : : short -<span class="lineNum"> 227 </span> :<span class="lineCov"> 416 : proto_inttostr(int proto, char *proto_str, size_t proto_size)</span> -<span class="lineNum"> 228 </span> : : { -<span class="lineNum"> 229 </span> :<span class="lineCov"> 416 : short proto_error = -1;</span> -<span class="lineNum"> 230 </span> : : unsigned char ndx_proto; /* Index for the fko_protocol_t structure */ -<span class="lineNum"> 231 </span> : : -<span class="lineNum"> 232 </span> : : /* Initialize the protocol string */ -<span class="lineNum"> 233 </span> : : memset(proto_str, 0, proto_size); -<span class="lineNum"> 234 </span> : : -<span class="lineNum"> 235 </span> : : /* Look into the fko_protocol_array to find out the right protocol */ -<span class="lineNum"> 236 </span> [<span class="branchCov" title="Branch 0 was taken 1102 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1102 : for (ndx_proto = 0 ; ndx_proto &lt; ARRAY_SIZE(fko_protocol_array) ; ndx_proto++)</span> -<span class="lineNum"> 237 </span> : : { -<span class="lineNum"> 238 </span> : : /* If the protocol matches, grab it */ -<span class="lineNum"> 239 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchCov" title="Branch 1 was taken 686 times"> + </span>]:<span class="lineCov"> 1102 : if (fko_protocol_array[ndx_proto].val == proto)</span> -<span class="lineNum"> 240 </span> : : { -<span class="lineNum"> 241 </span> :<span class="lineCov"> 416 : strlcpy(proto_str, fko_protocol_array[ndx_proto].str, proto_size);</span> -<span class="lineNum"> 242 </span> :<span class="lineCov"> 416 : proto_error = 0;</span> -<span class="lineNum"> 243 </span> :<span class="lineCov"> 416 : break;</span> -<span class="lineNum"> 244 </span> : : } -<span class="lineNum"> 245 </span> : : } -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> :<span class="lineCov"> 416 : return proto_error;</span> -<span class="lineNum"> 248 </span> : : -<span class="lineNum"> 249 </span> : : } -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> : : /** -<span class="lineNum"> 252 </span> : : * @brief Convert a protocol string to its integer value. -<span class="lineNum"> 253 </span> : : * -<span class="lineNum"> 254 </span> : : * @param pr_str Protocol string (UDP_RAW, UDP, TCPRAW...) -<span class="lineNum"> 255 </span> : : * -<span class="lineNum"> 256 </span> : : * @return -1 if the protocol string is not supported, otherwise the protocol value -<a name="257"><span class="lineNum"> 257 </span> : : */</a> -<span class="lineNum"> 258 </span> : : short -<span class="lineNum"> 259 </span> :<span class="lineCov"> 3306 : proto_strtoint(const char *pr_str)</span> -<span class="lineNum"> 260 </span> : : { -<span class="lineNum"> 261 </span> : : unsigned char ndx_proto; /* Index for the fko_protocol_t structure */ -<span class="lineNum"> 262 </span> :<span class="lineCov"> 3306 : int proto_int = -1; /* Protocol integer value */</span> -<span class="lineNum"> 263 </span> : : -<span class="lineNum"> 264 </span> : : /* Look into the fko_protocol_array to find out the right protocol */ -<span class="lineNum"> 265 </span> [<span class="branchCov" title="Branch 0 was taken 11018 times"> + </span><span class="branchCov" title="Branch 1 was taken 879 times"> + </span>]:<span class="lineCov"> 11897 : for (ndx_proto = 0 ; ndx_proto &lt; ARRAY_SIZE(fko_protocol_array) ; ndx_proto++)</span> -<span class="lineNum"> 266 </span> : : { -<span class="lineNum"> 267 </span> : : /* If the protocol matches, grab it */ -<span class="lineNum"> 268 </span> [<span class="branchCov" title="Branch 0 was taken 2427 times"> + </span><span class="branchCov" title="Branch 1 was taken 8591 times"> + </span>]:<span class="lineCov"> 11018 : if (strcasecmp(pr_str, fko_protocol_array[ndx_proto].str) == 0)</span> -<span class="lineNum"> 269 </span> : : { -<span class="lineNum"> 270 </span> :<span class="lineCov"> 2427 : proto_int = fko_protocol_array[ndx_proto].val;</span> -<span class="lineNum"> 271 </span> :<span class="lineCov"> 2427 : break;</span> -<span class="lineNum"> 272 </span> : : } -<span class="lineNum"> 273 </span> : : } -<span class="lineNum"> 274 </span> : : -<span class="lineNum"> 275 </span> :<span class="lineCov"> 3306 : return proto_int;</span> -<span class="lineNum"> 276 </span> : : } -<a name="277"><span class="lineNum"> 277 </span> : : </a> -<span class="lineNum"> 278 </span> : : static int -<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : add_argv(char **argv_new, int *argc_new,</span> -<span class="lineNum"> 280 </span> : : const char *new_arg, fko_cli_options_t *opts) -<span class="lineNum"> 281 </span> : : { -<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : int buf_size = 0;</span> -<span class="lineNum"> 283 </span> : : -<span class="lineNum"> 284 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 2)</span> -<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_NORMAL, &quot;[+] add_argv() + arg: %s&quot;, new_arg);</span> -<span class="lineNum"> 286 </span> : : -<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : buf_size = strlen(new_arg) + 1;</span> -<span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = calloc(1, buf_size);</span> -<span class="lineNum"> 289 </span> : : -<span class="lineNum"> 290 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[*argc_new] == NULL)</span> -<span class="lineNum"> 291 </span> : : { -<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] Memory allocation error.&quot;);</span> -<span class="lineNum"> 293 </span> : : return 0; -<span class="lineNum"> 294 </span> : : } -<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : strlcpy(argv_new[*argc_new], new_arg, buf_size);</span> -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : *argc_new += 1;</span> -<span class="lineNum"> 298 </span> : : -<span class="lineNum"> 299 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*argc_new &gt;= MAX_CMDLINE_ARGS-1)</span> -<span class="lineNum"> 300 </span> : : { -<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_VERBOSITY_ERROR, &quot;[*] max command line args exceeded.&quot;);</span> -<span class="lineNum"> 302 </span> : : return 0; -<span class="lineNum"> 303 </span> : : } -<span class="lineNum"> 304 </span> : : -<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = NULL;</span> -<span class="lineNum"> 306 </span> : : -<span class="lineNum"> 307 </span> : : return 1; -<span class="lineNum"> 308 </span> : : } -<a name="309"><span class="lineNum"> 309 </span> : : </a> -<span class="lineNum"> 310 </span> : : int -<span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : strtoargv(char *args_str, char **argv_new, int *argc_new,</span> -<span class="lineNum"> 312 </span> : : fko_cli_options_t *opts) -<span class="lineNum"> 313 </span> : : { -<span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : int current_arg_ctr = 0, i;</span> -<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : char arg_tmp[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 316 </span> : : -<span class="lineNum"> 317 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; (int)strlen(args_str); i++)</span> -<span class="lineNum"> 318 </span> : : { -<span class="lineNum"> 319 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!isspace(args_str[i]))</span> -<span class="lineNum"> 320 </span> : : { -<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = args_str[i];</span> -<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : current_arg_ctr++;</span> -<span class="lineNum"> 323 </span> : : } -<span class="lineNum"> 324 </span> : : else -<span class="lineNum"> 325 </span> : : { -<span class="lineNum"> 326 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> -<span class="lineNum"> 327 </span> : : { -<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> -<span class="lineNum"> 329 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> -<span class="lineNum"> 330 </span> : : { -<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> -<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 333 </span> : : } -<span class="lineNum"> 334 </span> : : current_arg_ctr = 0; -<span class="lineNum"> 335 </span> : : } -<span class="lineNum"> 336 </span> : : } -<span class="lineNum"> 337 </span> : : } -<span class="lineNum"> 338 </span> : : -<span class="lineNum"> 339 </span> : : /* pick up the last argument in the string -<span class="lineNum"> 340 </span> : : */ -<span class="lineNum"> 341 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> -<span class="lineNum"> 342 </span> : : { -<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> -<span class="lineNum"> 344 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> -<span class="lineNum"> 345 </span> : : { -<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> -<span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 348 </span> : : } -<span class="lineNum"> 349 </span> : : } -<span class="lineNum"> 350 </span> : : return 1; -<span class="lineNum"> 351 </span> : : } -<a name="352"><span class="lineNum"> 352 </span> : : </a> -<span class="lineNum"> 353 </span> : : void -<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : free_argv(char **argv_new, int *argc_new)</span> -<span class="lineNum"> 355 </span> : : { -<span class="lineNum"> 356 </span> : : int i; -<span class="lineNum"> 357 </span> : : -<span class="lineNum"> 358 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new == NULL || *argv_new == NULL)</span> -<span class="lineNum"> 359 </span> : : return; -<span class="lineNum"> 360 </span> : : -<span class="lineNum"> 361 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; *argc_new; i++)</span> -<span class="lineNum"> 362 </span> : : { -<span class="lineNum"> 363 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[i] == NULL)</span> -<span class="lineNum"> 364 </span> : : break; -<span class="lineNum"> 365 </span> : : else -<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : free(argv_new[i]);</span> -<span class="lineNum"> 367 </span> : : } -<span class="lineNum"> 368 </span> : : return; -<span class="lineNum"> 369 </span> : : } -<span class="lineNum"> 370 </span> : : -<span class="lineNum"> 371 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/emerald.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/emerald.png deleted file mode 100644 index 38ad4f4068b935643d2486f323005fb294a9bd7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^Jb<Pkv=K1`2T& zctjR6FmMZjFyp1Wb$@_@Ea{HEjtmSN`?>!lvI6;R0X`wF(yt=9xVZRt1vCRixIA4P dLn>}1Cji+@42)0J?}79&c)I$ztaD0e0sy@GAL0N2 diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css deleted file mode 100644 index bfd0a83e..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/gcov.css +++ /dev/null @@ -1,519 +0,0 @@ -/* All views: initial background and text color */ -body -{ - color: #000000; - background-color: #FFFFFF; -} - -/* All views: standard link format*/ -a:link -{ - color: #284FA8; - text-decoration: underline; -} - -/* All views: standard link - visited format */ -a:visited -{ - color: #00CB40; - text-decoration: underline; -} - -/* All views: standard link - activated format */ -a:active -{ - color: #FF0040; - text-decoration: underline; -} - -/* All views: main title format */ -td.title -{ - text-align: center; - padding-bottom: 10px; - font-family: sans-serif; - font-size: 20pt; - font-style: italic; - font-weight: bold; -} - -/* All views: header item format */ -td.headerItem -{ - text-align: right; - padding-right: 6px; - font-family: sans-serif; - font-weight: bold; - vertical-align: top; - white-space: nowrap; -} - -/* All views: header item value format */ -td.headerValue -{ - text-align: left; - color: #284FA8; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; -} - -/* All views: header item coverage table heading */ -td.headerCovTableHead -{ - text-align: center; - padding-right: 6px; - padding-left: 6px; - padding-bottom: 0px; - font-family: sans-serif; - font-size: 80%; - white-space: nowrap; -} - -/* All views: header item coverage table entry */ -td.headerCovTableEntry -{ - text-align: right; - color: #284FA8; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #DAE7FE; -} - -/* All views: header item coverage table entry for high coverage rate */ -td.headerCovTableEntryHi -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #A7FC9D; -} - -/* All views: header item coverage table entry for medium coverage rate */ -td.headerCovTableEntryMed -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #FFEA20; -} - -/* All views: header item coverage table entry for ow coverage rate */ -td.headerCovTableEntryLo -{ - text-align: right; - color: #000000; - font-family: sans-serif; - font-weight: bold; - white-space: nowrap; - padding-left: 12px; - padding-right: 4px; - background-color: #FF0000; -} - -/* All views: header legend value for legend entry */ -td.headerValueLeg -{ - text-align: left; - color: #000000; - font-family: sans-serif; - font-size: 80%; - white-space: nowrap; - padding-top: 4px; -} - -/* All views: color of horizontal ruler */ -td.ruler -{ - background-color: #6688D4; -} - -/* All views: version string format */ -td.versionInfo -{ - text-align: center; - padding-top: 2px; - font-family: sans-serif; - font-style: italic; -} - -/* Directory view/File view (all)/Test case descriptions: - table headline format */ -td.tableHead -{ - text-align: center; - color: #FFFFFF; - background-color: #6688D4; - font-family: sans-serif; - font-size: 120%; - font-weight: bold; - white-space: nowrap; - padding-left: 4px; - padding-right: 4px; -} - -span.tableHeadSort -{ - padding-right: 4px; -} - -/* Directory view/File view (all): filename entry format */ -td.coverFile -{ - text-align: left; - padding-left: 10px; - padding-right: 20px; - color: #284FA8; - background-color: #DAE7FE; - font-family: monospace; -} - -/* Directory view/File view (all): bar-graph entry format*/ -td.coverBar -{ - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; -} - -/* Directory view/File view (all): bar-graph outline color */ -td.coverBarOutline -{ - background-color: #000000; -} - -/* Directory view/File view (all): percentage entry for files with - high coverage rate */ -td.coverPerHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #A7FC9D; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - high coverage rate */ -td.coverNumHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #A7FC9D; - white-space: nowrap; - font-family: sans-serif; -} - -/* Directory view/File view (all): percentage entry for files with - medium coverage rate */ -td.coverPerMed -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FFEA20; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - medium coverage rate */ -td.coverNumMed -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FFEA20; - white-space: nowrap; - font-family: sans-serif; -} - -/* Directory view/File view (all): percentage entry for files with - low coverage rate */ -td.coverPerLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FF0000; - font-weight: bold; - font-family: sans-serif; -} - -/* Directory view/File view (all): line count entry for files with - low coverage rate */ -td.coverNumLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FF0000; - white-space: nowrap; - font-family: sans-serif; -} - -/* File view (all): "show/hide details" link format */ -a.detail:link -{ - color: #B8D0FF; - font-size:80%; -} - -/* File view (all): "show/hide details" link - visited format */ -a.detail:visited -{ - color: #B8D0FF; - font-size:80%; -} - -/* File view (all): "show/hide details" link - activated format */ -a.detail:active -{ - color: #FFFFFF; - font-size:80%; -} - -/* File view (detail): test name entry */ -td.testName -{ - text-align: right; - padding-right: 10px; - background-color: #DAE7FE; - font-family: sans-serif; -} - -/* File view (detail): test percentage entry */ -td.testPer -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; - font-family: sans-serif; -} - -/* File view (detail): test lines count entry */ -td.testNum -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; - font-family: sans-serif; -} - -/* Test case descriptions: test name format*/ -dt -{ - font-family: sans-serif; - font-weight: bold; -} - -/* Test case descriptions: description table body */ -td.testDescription -{ - padding-top: 10px; - padding-left: 30px; - padding-bottom: 10px; - padding-right: 30px; - background-color: #DAE7FE; -} - -/* Source code view: function entry */ -td.coverFn -{ - text-align: left; - padding-left: 10px; - padding-right: 20px; - color: #284FA8; - background-color: #DAE7FE; - font-family: monospace; -} - -/* Source code view: function entry zero count*/ -td.coverFnLo -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #FF0000; - font-weight: bold; - font-family: sans-serif; -} - -/* Source code view: function entry nonzero count*/ -td.coverFnHi -{ - text-align: right; - padding-left: 10px; - padding-right: 10px; - background-color: #DAE7FE; - font-weight: bold; - font-family: sans-serif; -} - -/* Source code view: source code format */ -pre.source -{ - font-family: monospace; - white-space: pre; - margin-top: 2px; -} - -/* Source code view: line number format */ -span.lineNum -{ - background-color: #EFE383; -} - -/* Source code view: format for lines which were executed */ -td.lineCov, -span.lineCov -{ - background-color: #CAD7FE; -} - -/* Source code view: format for Cov legend */ -span.coverLegendCov -{ - padding-left: 10px; - padding-right: 10px; - padding-bottom: 2px; - background-color: #CAD7FE; -} - -/* Source code view: format for lines which were not executed */ -td.lineNoCov, -span.lineNoCov -{ - background-color: #FF6230; -} - -/* Source code view: format for NoCov legend */ -span.coverLegendNoCov -{ - padding-left: 10px; - padding-right: 10px; - padding-bottom: 2px; - background-color: #FF6230; -} - -/* Source code view (function table): standard link - visited format */ -td.lineNoCov > a:visited, -td.lineCov > a:visited -{ - color: black; - text-decoration: underline; -} - -/* Source code view: format for lines which were executed only in a - previous version */ -span.lineDiffCov -{ - background-color: #B5F7AF; -} - -/* Source code view: format for branches which were executed - * and taken */ -span.branchCov -{ - background-color: #CAD7FE; -} - -/* Source code view: format for branches which were executed - * but not taken */ -span.branchNoCov -{ - background-color: #FF6230; -} - -/* Source code view: format for branches which were not executed */ -span.branchNoExec -{ - background-color: #FF6230; -} - -/* Source code view: format for the source code heading line */ -pre.sourceHeading -{ - white-space: pre; - font-family: monospace; - font-weight: bold; - margin: 0px; -} - -/* All views: header legend value for low rate */ -td.headerValueLegL -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 4px; - padding-right: 2px; - background-color: #FF0000; - font-size: 80%; -} - -/* All views: header legend value for med rate */ -td.headerValueLegM -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 2px; - padding-right: 2px; - background-color: #FFEA20; - font-size: 80%; -} - -/* All views: header legend value for hi rate */ -td.headerValueLegH -{ - font-family: sans-serif; - text-align: center; - white-space: nowrap; - padding-left: 2px; - padding-right: 4px; - background-color: #A7FC9D; - font-size: 80%; -} - -/* All views except source code view: legend format for low coverage */ -span.coverLegendCovLo -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #FF0000; -} - -/* All views except source code view: legend format for med coverage */ -span.coverLegendCovMed -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #FFEA20; -} - -/* All views except source code view: legend format for hi coverage */ -span.coverLegendCovHi -{ - padding-left: 10px; - padding-right: 10px; - padding-top: 2px; - background-color: #A7FC9D; -} diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/glass.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/glass.png deleted file mode 100644 index e1abc00680a3093c49fdb775ae6bdb6764c95af2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)gaEa{HEjtmSN`?>!lvI6;R0X`wF z|Ns97GD8ntt^-nxB|(0{3=Yq3q=7g|-tI089jvk*Kn`btM`SSr1Gf+eGhVt|_XjA* zUgGKN%6^Gmn4d%Ph(nkFP>9RZ#WAE}PI3Z}&BVayv3^M*kj3EX>gTe~DWM4f=_Dpv diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html deleted file mode 100644 index 0c10f579..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-b.html +++ /dev/null @@ -1,131 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> - <link rel="stylesheet" type="text/css" href="gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue">top level</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">3270</td> - <td class="headerCovTableEntry">7970</td> - <td class="headerCovTableEntryLo">41.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">224</td> - <td class="headerCovTableEntry">390</td> - <td class="headerCovTableEntryLo">57.4 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">1778</td> - <td class="headerCovTableEntry">5269</td> - <td class="headerCovTableEntryLo">33.7 %</td> - </tr> - <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> - </tr> - <tr> - <td class="coverFile"><a href="server/index.html">server</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> - </td> - <td class="coverPerLo">28.4&nbsp;%</td> - <td class="coverNumLo">876 / 3080</td> - <td class="coverPerLo">39.5&nbsp;%</td> - <td class="coverNumLo">49 / 124</td> - <td class="coverPerLo">27.0&nbsp;%</td> - <td class="coverNumLo">541 / 2007</td> - </tr> - <tr> - <td class="coverFile"><a href="client/index.html">client</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">690 / 2039</td> - <td class="coverPerLo">54.9&nbsp;%</td> - <td class="coverNumLo">39 / 71</td> - <td class="coverPerLo">31.5&nbsp;%</td> - <td class="coverNumLo">397 / 1260</td> - </tr> - <tr> - <td class="coverFile"><a href="lib/index.html">lib</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> - </td> - <td class="coverPerLo">59.8&nbsp;%</td> - <td class="coverNumLo">1704 / 2851</td> - <td class="coverPerLo">69.7&nbsp;%</td> - <td class="coverNumLo">136 / 195</td> - <td class="coverPerLo">42.0&nbsp;%</td> - <td class="coverNumLo">840 / 2002</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html deleted file mode 100644 index d0a0d50d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-f.html +++ /dev/null @@ -1,131 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> - <link rel="stylesheet" type="text/css" href="gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue">top level</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">3270</td> - <td class="headerCovTableEntry">7970</td> - <td class="headerCovTableEntryLo">41.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">224</td> - <td class="headerCovTableEntry">390</td> - <td class="headerCovTableEntryLo">57.4 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">1778</td> - <td class="headerCovTableEntry">5269</td> - <td class="headerCovTableEntryLo">33.7 %</td> - </tr> - <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="server/index.html">server</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> - </td> - <td class="coverPerLo">28.4&nbsp;%</td> - <td class="coverNumLo">876 / 3080</td> - <td class="coverPerLo">39.5&nbsp;%</td> - <td class="coverNumLo">49 / 124</td> - <td class="coverPerLo">27.0&nbsp;%</td> - <td class="coverNumLo">541 / 2007</td> - </tr> - <tr> - <td class="coverFile"><a href="client/index.html">client</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">690 / 2039</td> - <td class="coverPerLo">54.9&nbsp;%</td> - <td class="coverNumLo">39 / 71</td> - <td class="coverPerLo">31.5&nbsp;%</td> - <td class="coverNumLo">397 / 1260</td> - </tr> - <tr> - <td class="coverFile"><a href="lib/index.html">lib</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> - </td> - <td class="coverPerLo">59.8&nbsp;%</td> - <td class="coverNumLo">1704 / 2851</td> - <td class="coverPerLo">69.7&nbsp;%</td> - <td class="coverNumLo">136 / 195</td> - <td class="coverPerLo">42.0&nbsp;%</td> - <td class="coverNumLo">840 / 2002</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html deleted file mode 100644 index e4f18662..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index-sort-l.html +++ /dev/null @@ -1,131 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> - <link rel="stylesheet" type="text/css" href="gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue">top level</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">3270</td> - <td class="headerCovTableEntry">7970</td> - <td class="headerCovTableEntryLo">41.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">224</td> - <td class="headerCovTableEntry">390</td> - <td class="headerCovTableEntryLo">57.4 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">1778</td> - <td class="headerCovTableEntry">5269</td> - <td class="headerCovTableEntryLo">33.7 %</td> - </tr> - <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Directory <span class="tableHeadSort"><a href="index.html"><img src="updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="server/index.html">server</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> - </td> - <td class="coverPerLo">28.4&nbsp;%</td> - <td class="coverNumLo">876 / 3080</td> - <td class="coverPerLo">39.5&nbsp;%</td> - <td class="coverNumLo">49 / 124</td> - <td class="coverPerLo">27.0&nbsp;%</td> - <td class="coverNumLo">541 / 2007</td> - </tr> - <tr> - <td class="coverFile"><a href="client/index.html">client</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">690 / 2039</td> - <td class="coverPerLo">54.9&nbsp;%</td> - <td class="coverNumLo">39 / 71</td> - <td class="coverPerLo">31.5&nbsp;%</td> - <td class="coverNumLo">397 / 1260</td> - </tr> - <tr> - <td class="coverFile"><a href="lib/index.html">lib</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> - </td> - <td class="coverPerLo">59.8&nbsp;%</td> - <td class="coverNumLo">1704 / 2851</td> - <td class="coverPerLo">69.7&nbsp;%</td> - <td class="coverNumLo">136 / 195</td> - <td class="coverPerLo">42.0&nbsp;%</td> - <td class="coverNumLo">840 / 2002</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html deleted file mode 100644 index 7e7af434..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/index.html +++ /dev/null @@ -1,131 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final</title> - <link rel="stylesheet" type="text/css" href="gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue">top level</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">3270</td> - <td class="headerCovTableEntry">7970</td> - <td class="headerCovTableEntryLo">41.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">224</td> - <td class="headerCovTableEntry">390</td> - <td class="headerCovTableEntryLo">57.4 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">1778</td> - <td class="headerCovTableEntry">5269</td> - <td class="headerCovTableEntryLo">33.7 %</td> - </tr> - <tr><td><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Directory <span class="tableHeadSort"><img src="glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="client/index.html">client</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=34 height=10 alt="33.8%"><img src="snow.png" width=66 height=10 alt="33.8%"></td></tr></table> - </td> - <td class="coverPerLo">33.8&nbsp;%</td> - <td class="coverNumLo">690 / 2039</td> - <td class="coverPerLo">54.9&nbsp;%</td> - <td class="coverNumLo">39 / 71</td> - <td class="coverPerLo">31.5&nbsp;%</td> - <td class="coverNumLo">397 / 1260</td> - </tr> - <tr> - <td class="coverFile"><a href="lib/index.html">lib</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=60 height=10 alt="59.8%"><img src="snow.png" width=40 height=10 alt="59.8%"></td></tr></table> - </td> - <td class="coverPerLo">59.8&nbsp;%</td> - <td class="coverNumLo">1704 / 2851</td> - <td class="coverPerLo">69.7&nbsp;%</td> - <td class="coverNumLo">136 / 195</td> - <td class="coverPerLo">42.0&nbsp;%</td> - <td class="coverNumLo">840 / 2002</td> - </tr> - <tr> - <td class="coverFile"><a href="server/index.html">server</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="ruby.png" width=28 height=10 alt="28.4%"><img src="snow.png" width=72 height=10 alt="28.4%"></td></tr></table> - </td> - <td class="coverPerLo">28.4&nbsp;%</td> - <td class="coverNumLo">876 / 3080</td> - <td class="coverPerLo">39.5&nbsp;%</td> - <td class="coverNumLo">49 / 124</td> - <td class="coverPerLo">27.0&nbsp;%</td> - <td class="coverNumLo">541 / 2007</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html deleted file mode 100644 index b49edd20..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/base64.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - base64.c<span style="font-size: 80%;"> (<a href="base64.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">32</td> - <td class="headerCovTableEntry">32</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">17</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntryMed">85.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="base64.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="base64.c.gcov.html#95">b64_encode</a></td> - <td class="coverFnHi">2795</td> - </tr> - <tr> - <td class="coverFn"><a href="base64.c.gcov.html#129">strip_b64_eq</a></td> - <td class="coverFnHi">2795</td> - </tr> - <tr> - <td class="coverFn"><a href="base64.c.gcov.html#54">b64_decode</a></td> - <td class="coverFnHi">1280</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html deleted file mode 100644 index de2842db..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.func.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/base64.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - base64.c<span style="font-size: 80%;"> (<a href="base64.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">32</td> - <td class="headerCovTableEntry">32</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">17</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntryMed">85.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="base64.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="base64.c.gcov.html#54">b64_decode</a></td> - <td class="coverFnHi">1280</td> - </tr> - <tr> - <td class="coverFn"><a href="base64.c.gcov.html#95">b64_encode</a></td> - <td class="coverFnHi">2795</td> - </tr> - <tr> - <td class="coverFn"><a href="base64.c.gcov.html#129">strip_b64_eq</a></td> - <td class="coverFnHi">2795</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html deleted file mode 100644 index 1509b790..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/base64.c.gcov.html +++ /dev/null @@ -1,224 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/base64.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - base64.c<span style="font-size: 80%;"> (source / <a href="base64.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">32</td> - <td class="headerCovTableEntry">32</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">17</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntryMed">85.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: base64.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Implementation of the Base64 encode/decode algorithim. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * This code was derived from the base64.c part of FFmpeg written -<span class="lineNum"> 9 </span> : : * by Ryan Martell. (rdm4@martellventures.com). -<span class="lineNum"> 10 </span> : : * -<span class="lineNum"> 11 </span> : : * Copyright (C) Ryan Martell. (rdm4@martellventures.com) -<span class="lineNum"> 12 </span> : : * -<span class="lineNum"> 13 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 14 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 15 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 16 </span> : : * -<span class="lineNum"> 17 </span> : : * License (GNU General Public License): -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This library is free software; you can redistribute it and/or -<span class="lineNum"> 20 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 21 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 22 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 25 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 26 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 27 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 30 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 31 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 32 </span> : : * USA -<span class="lineNum"> 33 </span> : : * -<span class="lineNum"> 34 </span> : : ***************************************************************************** -<span class="lineNum"> 35 </span> : : */ -<span class="lineNum"> 36 </span> : : #include &quot;base64.h&quot; -<span class="lineNum"> 37 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : #if !AFL_FUZZING -<span class="lineNum"> 40 </span> : : static unsigned char map2[] = -<span class="lineNum"> 41 </span> : : { -<span class="lineNum"> 42 </span> : : 0x3e, 0xff, 0xff, 0xff, 0x3f, 0x34, 0x35, 0x36, -<span class="lineNum"> 43 </span> : : 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0xff, -<span class="lineNum"> 44 </span> : : 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x01, -<span class="lineNum"> 45 </span> : : 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, -<span class="lineNum"> 46 </span> : : 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, -<span class="lineNum"> 47 </span> : : 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, -<span class="lineNum"> 48 </span> : : 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1a, 0x1b, -<span class="lineNum"> 49 </span> : : 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, -<span class="lineNum"> 50 </span> : : 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, -<span class="lineNum"> 51 </span> : : 0x2c, 0x2d, 0x2e, 0x2f, 0x30, 0x31, 0x32, 0x33 -<span class="lineNum"> 52 </span> : : }; -<span class="lineNum"> 53 </span> : : #endif -<a name="54"><span class="lineNum"> 54 </span> : : </a> -<span class="lineNum"> 55 </span> : : int -<span class="lineNum"> 56 </span> :<span class="lineCov"> 1280 : b64_decode(const char *in, unsigned char *out)</span> -<span class="lineNum"> 57 </span> : : { -<span class="lineNum"> 58 </span> : : int i; -<span class="lineNum"> 59 </span> :<span class="lineCov"> 1280 : unsigned char *dst = out;</span> -<span class="lineNum"> 60 </span> : : #if ! AFL_FUZZING -<span class="lineNum"> 61 </span> : : int v; -<span class="lineNum"> 62 </span> : : #endif -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> : : #if AFL_FUZZING -<span class="lineNum"> 65 </span> : : /* short circuit base64 decoding in AFL fuzzing mode - just copy -<span class="lineNum"> 66 </span> : : * data as-is. -<span class="lineNum"> 67 </span> : : */ -<span class="lineNum"> 68 </span> : : for (i = 0; in[i]; i++) -<span class="lineNum"> 69 </span> : : *dst++ = in[i]; -<span class="lineNum"> 70 </span> : : #else -<span class="lineNum"> 71 </span> :<span class="lineCov"> 1280 : v = 0;</span> -<span class="lineNum"> 72 </span> [<span class="branchCov" title="Branch 0 was taken 103580 times"> + </span><span class="branchCov" title="Branch 1 was taken 1280 times"> + </span>]:<span class="lineCov"> 104860 : for (i = 0; in[i] &amp;&amp; in[i] != '='; i++) {</span> -<span class="lineNum"> 73 </span> :<span class="lineCov"> 103580 : unsigned int index= in[i]-43;</span> -<span class="lineNum"> 74 </span> : : -<span class="lineNum"> 75 </span>[<span class="branchCov" title="Branch 0 was taken 103580 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 103580 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 103580 : if (index&gt;=(sizeof(map2)/sizeof(map2[0])) || map2[index] == 0xff)</span> -<span class="lineNum"> 76 </span> : : return(-1); -<span class="lineNum"> 77 </span> : : -<span class="lineNum"> 78 </span> :<span class="lineCov"> 103580 : v = (v &lt;&lt; 6) + map2[index];</span> -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> [<span class="branchCov" title="Branch 0 was taken 77301 times"> + </span><span class="branchCov" title="Branch 1 was taken 26279 times"> + </span>]:<span class="lineCov"> 103580 : if (i &amp; 3)</span> -<span class="lineNum"> 81 </span> :<span class="lineCov"> 77301 : *dst++ = v &gt;&gt; (6 - 2 * (i &amp; 3));</span> -<span class="lineNum"> 82 </span> : : } -<span class="lineNum"> 83 </span> : : #endif -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> :<span class="lineCov"> 1280 : *dst = '\0';</span> -<span class="lineNum"> 86 </span> : : -<span class="lineNum"> 87 </span> :<span class="lineCov"> 1280 : return(dst - out);</span> -<span class="lineNum"> 88 </span> : : } -<span class="lineNum"> 89 </span> : : -<span class="lineNum"> 90 </span> : : /***************************************************************************** -<span class="lineNum"> 91 </span> : : * b64_encode: Stolen from VLC's http.c -<span class="lineNum"> 92 </span> : : * Simplified by michael -<span class="lineNum"> 93 </span> : : * fixed edge cases and made it work from data (vs. strings) by ryan. -<span class="lineNum"> 94 </span> : : ***************************************************************************** -<a name="95"><span class="lineNum"> 95 </span> : : */</a> -<span class="lineNum"> 96 </span> : : int -<span class="lineNum"> 97 </span> :<span class="lineCov"> 2795 : b64_encode(unsigned char *in, char *out, int in_len)</span> -<span class="lineNum"> 98 </span> : : { -<span class="lineNum"> 99 </span> : : static const char b64[] = -<span class="lineNum"> 100 </span> : : &quot;ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/&quot;; -<span class="lineNum"> 101 </span> :<span class="lineCov"> 2795 : unsigned i_bits = 0;</span> -<span class="lineNum"> 102 </span> :<span class="lineCov"> 2795 : int i_shift = 0;</span> -<span class="lineNum"> 103 </span> :<span class="lineCov"> 2795 : int bytes_remaining = in_len;</span> -<span class="lineNum"> 104 </span> : : -<span class="lineNum"> 105 </span> :<span class="lineCov"> 2795 : char *dst = out;</span> -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> [<span class="branchCov" title="Branch 0 was taken 2795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2795 : if (in_len &gt; 0) { /* Special edge case, what should we really do here? */</span> -<span class="lineNum"> 108 </span> [<span class="branchCov" title="Branch 0 was taken 131243 times"> + </span><span class="branchCov" title="Branch 1 was taken 2795 times"> + </span>]:<span class="lineCov"> 134038 : while (bytes_remaining) {</span> -<span class="lineNum"> 109 </span> :<span class="lineCov"> 131243 : i_bits = (i_bits &lt;&lt; 8) + *in++;</span> -<span class="lineNum"> 110 </span> :<span class="lineCov"> 131243 : bytes_remaining--;</span> -<span class="lineNum"> 111 </span> :<span class="lineCov"> 175974 : i_shift += 8;</span> -<span class="lineNum"> 112 </span> : : -<span class="lineNum"> 113 </span> : : do { -<span class="lineNum"> 114 </span> :<span class="lineCov"> 175974 : *dst++ = b64[(i_bits &lt;&lt; 6 &gt;&gt; i_shift) &amp; 0x3f];</span> -<span class="lineNum"> 115 </span> :<span class="lineCov"> 175974 : i_shift -= 6;</span> -<span class="lineNum"> 116 </span>[<span class="branchCov" title="Branch 0 was taken 41936 times"> + </span><span class="branchCov" title="Branch 1 was taken 134038 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 2795 times"> + </span><span class="branchCov" title="Branch 3 was taken 131243 times"> + </span>]:<span class="lineCov"> 178769 : } while (i_shift &gt; 6 || (bytes_remaining == 0 &amp;&amp; i_shift &gt; 0));</span> -<span class="lineNum"> 117 </span> : : } -<span class="lineNum"> 118 </span> [<span class="branchCov" title="Branch 0 was taken 2950 times"> + </span><span class="branchCov" title="Branch 1 was taken 2795 times"> + </span>]:<span class="lineCov"> 5745 : while ((dst - out) &amp; 3)</span> -<span class="lineNum"> 119 </span> :<span class="lineCov"> 2950 : *dst++ = '=';</span> -<span class="lineNum"> 120 </span> : : } -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> :<span class="lineCov"> 2795 : *dst = '\0';</span> -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> :<span class="lineCov"> 2795 : return(dst - out);</span> -<span class="lineNum"> 125 </span> : : } -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> : : /* Strip trailing equals (&quot;=&quot;) charcters from a base64-encoded -<span class="lineNum"> 128 </span> : : * message digest. -<a name="129"><span class="lineNum"> 129 </span> : : */</a> -<span class="lineNum"> 130 </span> : : void -<span class="lineNum"> 131 </span> :<span class="lineCov"> 2795 : strip_b64_eq(char *data)</span> -<span class="lineNum"> 132 </span> : : { -<span class="lineNum"> 133 </span> : : char *ndx; -<span class="lineNum"> 134 </span> : : -<span class="lineNum"> 135 </span> [<span class="branchCov" title="Branch 0 was taken 2548 times"> + </span><span class="branchCov" title="Branch 1 was taken 247 times"> + </span>]:<span class="lineCov"> 2795 : if((ndx = strchr(data, '=')) != NULL)</span> -<span class="lineNum"> 136 </span> :<span class="lineCov"> 2548 : *ndx = '\0';</span> -<span class="lineNum"> 137 </span> :<span class="lineCov"> 2795 : }</span> -<span class="lineNum"> 138 </span> : : -<span class="lineNum"> 139 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html deleted file mode 100644 index dba90075..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func-sort-c.html +++ /dev/null @@ -1,109 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/cipher_funcs.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - cipher_funcs.c<span style="font-size: 80%;"> (<a href="cipher_funcs.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">95</td> - <td class="headerCovTableEntry">120</td> - <td class="headerCovTableEntryMed">79.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntryMed">85.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">33</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">58.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="cipher_funcs.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#199">rijndael_init</a></td> - <td class="coverFnHi">803</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#116">rij_salt_and_iv</a></td> - <td class="coverFnHi">803</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#53">get_random_data</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#235">rij_encrypt</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#328">add_salted_str</a></td> - <td class="coverFnHi">415</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#273">rij_decrypt</a></td> - <td class="coverFnHi">387</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#376">add_gpg_prefix</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html deleted file mode 100644 index c4735749..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.func.html +++ /dev/null @@ -1,109 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/cipher_funcs.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - cipher_funcs.c<span style="font-size: 80%;"> (<a href="cipher_funcs.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">95</td> - <td class="headerCovTableEntry">120</td> - <td class="headerCovTableEntryMed">79.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntryMed">85.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">33</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">58.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="cipher_funcs.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#376">add_gpg_prefix</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#328">add_salted_str</a></td> - <td class="coverFnHi">415</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#53">get_random_data</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#273">rij_decrypt</a></td> - <td class="coverFnHi">387</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#235">rij_encrypt</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#116">rij_salt_and_iv</a></td> - <td class="coverFnHi">803</td> - </tr> - <tr> - <td class="coverFn"><a href="cipher_funcs.c.gcov.html#199">rijndael_init</a></td> - <td class="coverFnHi">803</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html deleted file mode 100644 index 9104109b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/cipher_funcs.c.gcov.html +++ /dev/null @@ -1,502 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/cipher_funcs.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - cipher_funcs.c<span style="font-size: 80%;"> (source / <a href="cipher_funcs.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">95</td> - <td class="headerCovTableEntry">120</td> - <td class="headerCovTableEntryMed">79.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntryMed">85.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">33</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">58.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: cipher_funcs.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Cipher functions used by fwknop -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This library is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &lt;stdio.h&gt; -<span class="lineNum"> 32 </span> : : #include &lt;string.h&gt; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #ifdef WIN32 -<span class="lineNum"> 35 </span> : : #include &lt;sys/timeb.h&gt; -<span class="lineNum"> 36 </span> : : #include &lt;time.h&gt; -<span class="lineNum"> 37 </span> : : #include &lt;stdlib.h&gt; -<span class="lineNum"> 38 </span> : : #else -<span class="lineNum"> 39 </span> : : #include &lt;sys/time.h&gt; -<span class="lineNum"> 40 </span> : : #endif -<span class="lineNum"> 41 </span> : : -<span class="lineNum"> 42 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 43 </span> : : #include &quot;cipher_funcs.h&quot; -<span class="lineNum"> 44 </span> : : #include &quot;digest.h&quot; -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : #ifndef WIN32 -<span class="lineNum"> 47 </span> : : #ifndef RAND_FILE -<span class="lineNum"> 48 </span> : : #define RAND_FILE &quot;/dev/urandom&quot; -<span class="lineNum"> 49 </span> : : #endif -<span class="lineNum"> 50 </span> : : #endif -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> : : /* Get random data. -<a name="53"><span class="lineNum"> 53 </span> : : */</a> -<span class="lineNum"> 54 </span> : : void -<span class="lineNum"> 55 </span> :<span class="lineCov"> 416 : get_random_data(unsigned char *data, const size_t len)</span> -<span class="lineNum"> 56 </span> : : { -<span class="lineNum"> 57 </span> : : uint32_t i; -<span class="lineNum"> 58 </span> : : #ifdef WIN32 -<span class="lineNum"> 59 </span> : : int rnum; -<span class="lineNum"> 60 </span> : : struct _timeb tb; -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> : : _ftime_s(&amp;tb); -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> : : srand((uint32_t)(tb.time*1000)+tb.millitm); -<span class="lineNum"> 65 </span> : : -<span class="lineNum"> 66 </span> : : for(i=0; i&lt;len; i++) -<span class="lineNum"> 67 </span> : : { -<span class="lineNum"> 68 </span> : : rnum = rand(); -<span class="lineNum"> 69 </span> : : *(data+i) = rnum % 0xff; -<span class="lineNum"> 70 </span> : : } -<span class="lineNum"> 71 </span> : : #else -<span class="lineNum"> 72 </span> : : FILE *rfd; -<span class="lineNum"> 73 </span> : : struct timeval tv; -<span class="lineNum"> 74 </span> :<span class="lineCov"> 416 : int do_time = 0;</span> -<span class="lineNum"> 75 </span> : : size_t amt_read; -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : /* Attempt to read seed data from /dev/urandom. If that does not -<span class="lineNum"> 78 </span> : : * work, then fall back to a time-based method (less secure, but -<span class="lineNum"> 79 </span> : : * probably more portable). -<span class="lineNum"> 80 </span> : : */ -<span class="lineNum"> 81 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if((rfd = fopen(RAND_FILE, &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 82 </span> : : { -<span class="lineNum"> 83 </span> : : do_time = 1; -<span class="lineNum"> 84 </span> : : } -<span class="lineNum"> 85 </span> : : else -<span class="lineNum"> 86 </span> : : { -<span class="lineNum"> 87 </span> : : /* Read seed from /dev/urandom -<span class="lineNum"> 88 </span> : : */ -<span class="lineNum"> 89 </span> :<span class="lineCov"> 416 : amt_read = fread(data, len, 1, rfd);</span> -<span class="lineNum"> 90 </span> :<span class="lineCov"> 416 : fclose(rfd);</span> -<span class="lineNum"> 91 </span> : : -<span class="lineNum"> 92 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if (amt_read != 1)</span> -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : do_time = 1;</span> -<span class="lineNum"> 94 </span> : : } -<span class="lineNum"> 95 </span> : : -<span class="lineNum"> 96 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if (do_time)</span> -<span class="lineNum"> 97 </span> : : { -<span class="lineNum"> 98 </span> : : /* Seed based on time (current usecs). -<span class="lineNum"> 99 </span> : : */ -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : gettimeofday(&amp;tv, NULL);</span> -<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : srand(tv.tv_usec);</span> -<span class="lineNum"> 102 </span> : : -<span class="lineNum"> 103 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;len; i++)</span> -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : *(data+i) = rand() % 0xff;</span> -<span class="lineNum"> 105 </span> : : } -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> : : #endif -<span class="lineNum"> 108 </span> : : -<span class="lineNum"> 109 </span> :<span class="lineCov"> 416 : }</span> -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : /*** These are Rijndael-specific functions ***/ -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : /* Rijndael function to generate initial salt and initialization vector -<span class="lineNum"> 115 </span> : : * (iv). This is is done to be compatible with the data produced via OpenSSL -<a name="116"><span class="lineNum"> 116 </span> : : */</a> -<span class="lineNum"> 117 </span> : : static void -<span class="lineNum"> 118 </span> :<span class="lineCov"> 803 : rij_salt_and_iv(RIJNDAEL_context *ctx, const char *key,</span> -<span class="lineNum"> 119 </span> : : const int key_len, const unsigned char *data, const int mode_flag) -<span class="lineNum"> 120 </span> : : { -<span class="lineNum"> 121 </span> :<span class="lineCov"> 803 : char pw_buf[RIJNDAEL_MAX_KEYSIZE] = {0};</span> -<span class="lineNum"> 122 </span> :<span class="lineCov"> 803 : unsigned char tmp_buf[MD5_DIGEST_LEN+RIJNDAEL_MAX_KEYSIZE+RIJNDAEL_BLOCKSIZE] = {0};</span> -<span class="lineNum"> 123 </span> :<span class="lineCov"> 803 : unsigned char kiv_buf[RIJNDAEL_MAX_KEYSIZE+RIJNDAEL_BLOCKSIZE] = {0}; /* Key and IV buffer */</span> -<span class="lineNum"> 124 </span> :<span class="lineCov"> 803 : unsigned char md5_buf[MD5_DIGEST_LEN] = {0}; /* Buffer for computed md5 hash */</span> -<span class="lineNum"> 125 </span> : : -<span class="lineNum"> 126 </span> :<span class="lineCov"> 803 : int final_key_len = 0;</span> -<span class="lineNum"> 127 </span> :<span class="lineCov"> 803 : size_t kiv_len = 0;</span> -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 803 : if(mode_flag == FKO_ENC_MODE_CBC_LEGACY_IV)</span> -<span class="lineNum"> 130 </span> : : { -<span class="lineNum"> 131 </span> : : /* Pad the pw with '0' chars up to the minimum Rijndael key size. -<span class="lineNum"> 132 </span> : : * -<span class="lineNum"> 133 </span> : : * This maintains compatibility with the old perl code if absolutely -<span class="lineNum"> 134 </span> : : * necessary in some scenarios, but is not recommended to use since it -<span class="lineNum"> 135 </span> : : * breaks compatibility with how OpenSSL implements AES and introduces -<span class="lineNum"> 136 </span> : : * other problems. This code will be removed altogether in a future -<span class="lineNum"> 137 </span> : : * version of fwknop. -<span class="lineNum"> 138 </span> : : */ -<span class="lineNum"> 139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &lt; RIJNDAEL_MIN_KEYSIZE)</span> -<span class="lineNum"> 140 </span> : : { -<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : memcpy(pw_buf, key, key_len);</span> -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : memset(pw_buf+key_len, '0', RIJNDAEL_MIN_KEYSIZE - key_len);</span> -<span class="lineNum"> 143 </span> : : final_key_len = RIJNDAEL_MIN_KEYSIZE; -<span class="lineNum"> 144 </span> : : } -<span class="lineNum"> 145 </span> : : else -<span class="lineNum"> 146 </span> : : { -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : memcpy(pw_buf, key, key_len);</span> -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : final_key_len = key_len;</span> -<span class="lineNum"> 149 </span> : : } -<span class="lineNum"> 150 </span> : : } -<span class="lineNum"> 151 </span> : : else -<span class="lineNum"> 152 </span> : : { -<span class="lineNum"> 153 </span> :<span class="lineCov"> 803 : memcpy(pw_buf, key, key_len);</span> -<span class="lineNum"> 154 </span> :<span class="lineCov"> 803 : final_key_len = key_len;</span> -<span class="lineNum"> 155 </span> : : } -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> : : /* If we are decrypting, data will contain the salt. Otherwise, -<span class="lineNum"> 158 </span> : : * for encryption, we generate a random salt. -<span class="lineNum"> 159 </span> : : */ -<span class="lineNum"> 160 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 803 : if(data != NULL)</span> -<span class="lineNum"> 161 </span> : : { -<span class="lineNum"> 162 </span> : : /* Pull the salt from the data -<span class="lineNum"> 163 </span> : : */ -<span class="lineNum"> 164 </span> :<span class="lineCov"> 387 : memcpy(ctx-&gt;salt, (data+SALT_LEN), SALT_LEN);</span> -<span class="lineNum"> 165 </span> : : } -<span class="lineNum"> 166 </span> : : else -<span class="lineNum"> 167 </span> : : { -<span class="lineNum"> 168 </span> : : /* Generate a random 8-byte salt. -<span class="lineNum"> 169 </span> : : */ -<span class="lineNum"> 170 </span> :<span class="lineCov"> 416 : get_random_data(ctx-&gt;salt, SALT_LEN);</span> -<span class="lineNum"> 171 </span> : : } -<span class="lineNum"> 172 </span> : : -<span class="lineNum"> 173 </span> : : /* Now generate the key and initialization vector. -<span class="lineNum"> 174 </span> : : * (again it is the perl Crypt::CBC way, with a touch of -<span class="lineNum"> 175 </span> : : * fwknop). -<span class="lineNum"> 176 </span> : : */ -<span class="lineNum"> 177 </span> :<span class="lineCov"> 803 : memcpy(tmp_buf+MD5_DIGEST_LEN, pw_buf, final_key_len);</span> -<span class="lineNum"> 178 </span> :<span class="lineCov"> 803 : memcpy(tmp_buf+MD5_DIGEST_LEN+final_key_len, ctx-&gt;salt, SALT_LEN);</span> -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> [<span class="branchCov" title="Branch 0 was taken 2409 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 3212 : while(kiv_len &lt; sizeof(kiv_buf))</span> -<span class="lineNum"> 181 </span> : : { -<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 803 times"> + </span><span class="branchCov" title="Branch 1 was taken 1606 times"> + </span>]:<span class="lineCov"> 2409 : if(kiv_len == 0)</span> -<span class="lineNum"> 183 </span> :<span class="lineCov"> 803 : md5(md5_buf, tmp_buf+MD5_DIGEST_LEN, final_key_len+SALT_LEN);</span> -<span class="lineNum"> 184 </span> : : else -<span class="lineNum"> 185 </span> :<span class="lineCov"> 1606 : md5(md5_buf, tmp_buf, MD5_DIGEST_LEN+final_key_len+SALT_LEN);</span> -<span class="lineNum"> 186 </span> : : -<span class="lineNum"> 187 </span> : : memcpy(tmp_buf, md5_buf, MD5_DIGEST_LEN); -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> :<span class="lineCov"> 2409 : memcpy(kiv_buf + kiv_len, md5_buf, MD5_DIGEST_LEN);</span> -<span class="lineNum"> 190 </span> : : -<span class="lineNum"> 191 </span> :<span class="lineCov"> 2409 : kiv_len += MD5_DIGEST_LEN;</span> -<span class="lineNum"> 192 </span> : : } -<span class="lineNum"> 193 </span> : : -<span class="lineNum"> 194 </span> :<span class="lineCov"> 803 : memcpy(ctx-&gt;key, kiv_buf, RIJNDAEL_MAX_KEYSIZE);</span> -<span class="lineNum"> 195 </span> :<span class="lineCov"> 803 : memcpy(ctx-&gt;iv, kiv_buf+RIJNDAEL_MAX_KEYSIZE, RIJNDAEL_BLOCKSIZE);</span> -<span class="lineNum"> 196 </span> :<span class="lineCov"> 803 : }</span> -<span class="lineNum"> 197 </span> : : -<span class="lineNum"> 198 </span> : : /* Initialization entry point. -<a name="199"><span class="lineNum"> 199 </span> : : */</a> -<span class="lineNum"> 200 </span> : : static void -<span class="lineNum"> 201 </span> :<span class="lineCov"> 803 : rijndael_init(RIJNDAEL_context *ctx, const char *key,</span> -<span class="lineNum"> 202 </span> : : const int key_len, const unsigned char *data, -<span class="lineNum"> 203 </span> : : int encryption_mode) -<span class="lineNum"> 204 </span> : : { -<span class="lineNum"> 205 </span> : : -<span class="lineNum"> 206 </span> : : /* The default is Rijndael in CBC mode -<span class="lineNum"> 207 </span> : : */ -<span class="lineNum"> 208 </span> [<span class="branchCov" title="Branch 0 was taken 759 times"> + </span><span class="branchCov" title="Branch 1 was taken 44 times"> + </span>]:<span class="lineCov"> 803 : if(encryption_mode == FKO_ENC_MODE_CBC</span> -<span class="lineNum"> 209 </span> :<span class="lineCov"> 803 : || encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV)</span> -<span class="lineNum"> 210 </span> :<span class="lineCov"> 759 : ctx-&gt;mode = MODE_CBC;</span> -<span class="lineNum"> 211 </span> [<span class="branchCov" title="Branch 0 was taken 7 times"> + </span><span class="branchCov" title="Branch 1 was taken 37 times"> + </span>]:<span class="lineCov"> 44 : else if(encryption_mode == FKO_ENC_MODE_CTR)</span> -<span class="lineNum"> 212 </span> :<span class="lineCov"> 7 : ctx-&gt;mode = MODE_CTR;</span> -<span class="lineNum"> 213 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37 times"> + </span>]:<span class="lineCov"> 37 : else if(encryption_mode == FKO_ENC_MODE_PCBC)</span> -<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : ctx-&gt;mode = MODE_PCBC;</span> -<span class="lineNum"> 215 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 33 times"> + </span>]:<span class="lineCov"> 37 : else if(encryption_mode == FKO_ENC_MODE_OFB)</span> -<span class="lineNum"> 216 </span> :<span class="lineCov"> 4 : ctx-&gt;mode = MODE_OFB;</span> -<span class="lineNum"> 217 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 33 : else if(encryption_mode == FKO_ENC_MODE_CFB)</span> -<span class="lineNum"> 218 </span> :<span class="lineCov"> 2 : ctx-&gt;mode = MODE_CFB;</span> -<span class="lineNum"> 219 </span> [<span class="branchCov" title="Branch 0 was taken 31 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 31 : else if(encryption_mode == FKO_ENC_MODE_ECB)</span> -<span class="lineNum"> 220 </span> :<span class="lineCov"> 31 : ctx-&gt;mode = MODE_ECB;</span> -<span class="lineNum"> 221 </span> : : else /* shouldn't get this far */ -<span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : ctx-&gt;mode = encryption_mode;</span> -<span class="lineNum"> 223 </span> : : -<span class="lineNum"> 224 </span> : : /* Generate the salt and initialization vector. -<span class="lineNum"> 225 </span> : : */ -<span class="lineNum"> 226 </span> :<span class="lineCov"> 803 : rij_salt_and_iv(ctx, key, key_len, data, encryption_mode);</span> -<span class="lineNum"> 227 </span> : : -<span class="lineNum"> 228 </span> : : /* Intialize our Rijndael context. -<span class="lineNum"> 229 </span> : : */ -<span class="lineNum"> 230 </span> :<span class="lineCov"> 803 : rijndael_setup(ctx, RIJNDAEL_MAX_KEYSIZE, ctx-&gt;key);</span> -<span class="lineNum"> 231 </span> :<span class="lineCov"> 803 : }</span> -<span class="lineNum"> 232 </span> : : -<span class="lineNum"> 233 </span> : : /* Take a chunk of data, encrypt it in the same way OpenSSL would -<span class="lineNum"> 234 </span> : : * (with a default of AES in CBC mode). -<a name="235"><span class="lineNum"> 235 </span> : : */</a> -<span class="lineNum"> 236 </span> : : size_t -<span class="lineNum"> 237 </span> :<span class="lineCov"> 416 : rij_encrypt(unsigned char *in, size_t in_len,</span> -<span class="lineNum"> 238 </span> : : const char *key, const int key_len, -<span class="lineNum"> 239 </span> : : unsigned char *out, int encryption_mode) -<span class="lineNum"> 240 </span> : : { -<span class="lineNum"> 241 </span> : : RIJNDAEL_context ctx; -<span class="lineNum"> 242 </span> : : int i, pad_val; -<span class="lineNum"> 243 </span> :<span class="lineCov"> 416 : unsigned char *ondx = out;</span> -<span class="lineNum"> 244 </span> : : -<span class="lineNum"> 245 </span> :<span class="lineCov"> 416 : rijndael_init(&amp;ctx, key, key_len, NULL, encryption_mode);</span> -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> : : /* Prepend the salt to the ciphertext... -<span class="lineNum"> 248 </span> : : */ -<span class="lineNum"> 249 </span> : : memcpy(ondx, &quot;Salted__&quot;, SALT_LEN); -<span class="lineNum"> 250 </span> :<span class="lineCov"> 416 : ondx+=SALT_LEN;</span> -<span class="lineNum"> 251 </span> : : memcpy(ondx, ctx.salt, SALT_LEN); -<span class="lineNum"> 252 </span> :<span class="lineCov"> 416 : ondx+=SALT_LEN;</span> -<span class="lineNum"> 253 </span> : : -<span class="lineNum"> 254 </span> : : /* Add padding to the original plaintext to ensure that it is a -<span class="lineNum"> 255 </span> : : * multiple of the Rijndael block size -<span class="lineNum"> 256 </span> : : */ -<span class="lineNum"> 257 </span> :<span class="lineCov"> 416 : pad_val = RIJNDAEL_BLOCKSIZE - (in_len % RIJNDAEL_BLOCKSIZE);</span> -<span class="lineNum"> 258 </span> [<span class="branchCov" title="Branch 0 was taken 2947 times"> + </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 3363 : for (i = (int)in_len; i &lt; ((int)in_len+pad_val); i++)</span> -<span class="lineNum"> 259 </span> :<span class="lineCov"> 2947 : in[i] = pad_val;</span> -<span class="lineNum"> 260 </span> : : -<span class="lineNum"> 261 </span> :<span class="lineCov"> 416 : block_encrypt(&amp;ctx, in, in_len+pad_val, ondx, ctx.iv);</span> -<span class="lineNum"> 262 </span> : : -<span class="lineNum"> 263 </span> :<span class="lineCov"> 416 : ondx += in_len+pad_val;</span> -<span class="lineNum"> 264 </span> : : -<span class="lineNum"> 265 </span> :<span class="lineCov"> 416 : zero_buf((char *)ctx.key, RIJNDAEL_MAX_KEYSIZE);</span> -<span class="lineNum"> 266 </span> :<span class="lineCov"> 416 : zero_buf((char *)ctx.iv, RIJNDAEL_BLOCKSIZE);</span> -<span class="lineNum"> 267 </span> :<span class="lineCov"> 416 : zero_buf((char *)ctx.salt, SALT_LEN);</span> -<span class="lineNum"> 268 </span> : : -<span class="lineNum"> 269 </span> :<span class="lineCov"> 416 : return(ondx - out);</span> -<span class="lineNum"> 270 </span> : : } -<span class="lineNum"> 271 </span> : : -<span class="lineNum"> 272 </span> : : /* Decrypt the given data. -<a name="273"><span class="lineNum"> 273 </span> : : */</a> -<span class="lineNum"> 274 </span> : : size_t -<span class="lineNum"> 275 </span> :<span class="lineCov"> 387 : rij_decrypt(unsigned char *in, size_t in_len,</span> -<span class="lineNum"> 276 </span> : : const char *key, const int key_len, -<span class="lineNum"> 277 </span> : : unsigned char *out, int encryption_mode) -<span class="lineNum"> 278 </span> : : { -<span class="lineNum"> 279 </span> : : RIJNDAEL_context ctx; -<span class="lineNum"> 280 </span> :<span class="lineCov"> 387 : int i, pad_val, pad_err = 0;</span> -<span class="lineNum"> 281 </span> : : unsigned char *pad_s; -<span class="lineNum"> 282 </span> :<span class="lineCov"> 387 : unsigned char *ondx = out;</span> -<span class="lineNum"> 283 </span> : : -<span class="lineNum"> 284 </span>[<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 387 : if(in == NULL || key == NULL || out == NULL)</span> -<span class="lineNum"> 285 </span> : : return 0; -<span class="lineNum"> 286 </span> : : -<span class="lineNum"> 287 </span> :<span class="lineCov"> 387 : rijndael_init(&amp;ctx, key, key_len, in, encryption_mode);</span> -<span class="lineNum"> 288 </span> : : -<span class="lineNum"> 289 </span> : : /* Remove the first block since it contains the salt (it was consumed -<span class="lineNum"> 290 </span> : : * by the rijndael_init() function above). -<span class="lineNum"> 291 </span> : : */ -<span class="lineNum"> 292 </span> :<span class="lineCov"> 387 : in_len -= RIJNDAEL_BLOCKSIZE;</span> -<span class="lineNum"> 293 </span> :<span class="lineCov"> 387 : memmove(in, in+RIJNDAEL_BLOCKSIZE, in_len);</span> -<span class="lineNum"> 294 </span> : : -<span class="lineNum"> 295 </span> :<span class="lineCov"> 387 : block_decrypt(&amp;ctx, in, in_len, out, ctx.iv);</span> -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> :<span class="lineCov"> 387 : ondx += in_len;</span> -<span class="lineNum"> 298 </span> : : -<span class="lineNum"> 299 </span> : : /* Find and remove padding. -<span class="lineNum"> 300 </span> : : */ -<span class="lineNum"> 301 </span> :<span class="lineCov"> 387 : pad_val = *(ondx-1);</span> -<span class="lineNum"> 302 </span> : : -<span class="lineNum"> 303 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 387 : if(pad_val &gt;= 0 &amp;&amp; pad_val &lt;= RIJNDAEL_BLOCKSIZE)</span> -<span class="lineNum"> 304 </span> : : { -<span class="lineNum"> 305 </span> :<span class="lineCov"> 385 : pad_s = ondx - pad_val;</span> -<span class="lineNum"> 306 </span> : : -<span class="lineNum"> 307 </span> [<span class="branchCov" title="Branch 0 was taken 2761 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 3146 : for(i=0; i &lt; (ondx-pad_s); i++)</span> -<span class="lineNum"> 308 </span> : : { -<span class="lineNum"> 309 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2761 times"> + </span>]:<span class="lineCov"> 2761 : if(*(pad_s+i) != pad_val)</span> -<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : pad_err++;</span> -<span class="lineNum"> 311 </span> : : } -<span class="lineNum"> 312 </span> : : -<span class="lineNum"> 313 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(pad_err == 0)</span> -<span class="lineNum"> 314 </span> :<span class="lineCov"> 385 : ondx -= pad_val;</span> -<span class="lineNum"> 315 </span> : : } -<span class="lineNum"> 316 </span> : : -<span class="lineNum"> 317 </span> :<span class="lineCov"> 387 : *ondx = '\0';</span> -<span class="lineNum"> 318 </span> : : -<span class="lineNum"> 319 </span> :<span class="lineCov"> 387 : zero_buf((char *)ctx.key, RIJNDAEL_MAX_KEYSIZE);</span> -<span class="lineNum"> 320 </span> :<span class="lineCov"> 387 : zero_buf((char *)ctx.iv, RIJNDAEL_BLOCKSIZE);</span> -<span class="lineNum"> 321 </span> :<span class="lineCov"> 387 : zero_buf((char *)ctx.salt, SALT_LEN);</span> -<span class="lineNum"> 322 </span> : : -<span class="lineNum"> 323 </span> :<span class="lineCov"> 387 : return(ondx - out);</span> -<span class="lineNum"> 324 </span> : : } -<span class="lineNum"> 325 </span> : : -<span class="lineNum"> 326 </span> : : /* See if we need to add the &quot;Salted__&quot; string to the front of the -<span class="lineNum"> 327 </span> : : * encrypted data. -<a name="328"><span class="lineNum"> 328 </span> : : */</a> -<span class="lineNum"> 329 </span> : : int -<span class="lineNum"> 330 </span> :<span class="lineCov"> 415 : add_salted_str(fko_ctx_t ctx)</span> -<span class="lineNum"> 331 </span> : : { -<span class="lineNum"> 332 </span> : : char *tbuf; -<span class="lineNum"> 333 </span> : : -<span class="lineNum"> 334 </span> : : #if AFL_FUZZING -<span class="lineNum"> 335 </span> : : ctx-&gt;added_salted_str = 1; -<span class="lineNum"> 336 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 337 </span> : : #endif -<span class="lineNum"> 338 </span> : : -<span class="lineNum"> 339 </span> : : /* We only add the base64 encoded salt to data that is already base64 -<span class="lineNum"> 340 </span> : : * encoded -<span class="lineNum"> 341 </span> : : */ -<span class="lineNum"> 342 </span> [<span class="branchCov" title="Branch 1 was taken 415 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 415 : if(is_base64((unsigned char *)ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 343 </span> :<span class="lineCov"> 415 : ctx-&gt;encrypted_msg_len) == 0)</span> -<span class="lineNum"> 344 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64); -<span class="lineNum"> 345 </span> : : -<span class="lineNum"> 346 </span> [<span class="branchCov" title="Branch 1 was taken 415 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 415 : if(constant_runtime_cmp(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 347 </span> : : B64_RIJNDAEL_SALT, B64_RIJNDAEL_SALT_STR_LEN) != 0) -<span class="lineNum"> 348 </span> : : { -<span class="lineNum"> 349 </span> : : /* We need to realloc space for the salt. -<span class="lineNum"> 350 </span> : : */ -<span class="lineNum"> 351 </span> :<span class="lineCov"> 830 : tbuf = realloc(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len</span> -<span class="lineNum"> 352 </span> :<span class="lineCov"> 415 : + B64_RIJNDAEL_SALT_STR_LEN+1);</span> -<span class="lineNum"> 353 </span> [<span class="branchCov" title="Branch 0 was taken 415 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 415 : if(tbuf == NULL)</span> -<span class="lineNum"> 354 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 355 </span> : : -<span class="lineNum"> 356 </span> :<span class="lineCov"> 415 : memmove(tbuf+B64_RIJNDAEL_SALT_STR_LEN, tbuf, ctx-&gt;encrypted_msg_len);</span> -<span class="lineNum"> 357 </span> : : -<span class="lineNum"> 358 </span> :<span class="lineCov"> 415 : ctx-&gt;encrypted_msg = memcpy(tbuf,</span> -<span class="lineNum"> 359 </span> : : B64_RIJNDAEL_SALT, B64_RIJNDAEL_SALT_STR_LEN); -<span class="lineNum"> 360 </span> : : -<span class="lineNum"> 361 </span> : : /* Adjust the encoded msg len for added SALT value and Make sure we -<span class="lineNum"> 362 </span> : : * are still a properly NULL-terminated string (Ubuntu was one system -<span class="lineNum"> 363 </span> : : * for which this was an issue). -<span class="lineNum"> 364 </span> : : */ -<span class="lineNum"> 365 </span> :<span class="lineCov"> 415 : ctx-&gt;encrypted_msg_len += B64_RIJNDAEL_SALT_STR_LEN;</span> -<span class="lineNum"> 366 </span> :<span class="lineCov"> 415 : tbuf[ctx-&gt;encrypted_msg_len] = '\0';</span> -<span class="lineNum"> 367 </span> : : -<span class="lineNum"> 368 </span> :<span class="lineCov"> 415 : ctx-&gt;added_salted_str = 1;</span> -<span class="lineNum"> 369 </span> : : } -<span class="lineNum"> 370 </span> : : -<span class="lineNum"> 371 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 372 </span> : : } -<span class="lineNum"> 373 </span> : : -<span class="lineNum"> 374 </span> : : /* See if we need to add the &quot;hQ&quot; string to the front of the -<span class="lineNum"> 375 </span> : : * encrypted data. -<a name="376"><span class="lineNum"> 376 </span> : : */</a> -<span class="lineNum"> 377 </span> : : int -<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : add_gpg_prefix(fko_ctx_t ctx)</span> -<span class="lineNum"> 379 </span> : : { -<span class="lineNum"> 380 </span> : : char *tbuf; -<span class="lineNum"> 381 </span> : : -<span class="lineNum"> 382 </span> : : /* We only add the base64 encoded salt to data that is already base64 -<span class="lineNum"> 383 </span> : : * encoded -<span class="lineNum"> 384 </span> : : */ -<span class="lineNum"> 385 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_base64((unsigned char *)ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len) == 0)</span> -<span class="lineNum"> 387 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64); -<span class="lineNum"> 388 </span> : : -<span class="lineNum"> 389 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(constant_runtime_cmp(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 390 </span> : : B64_GPG_PREFIX, B64_GPG_PREFIX_STR_LEN) != 0) -<span class="lineNum"> 391 </span> : : { -<span class="lineNum"> 392 </span> : : /* We need to realloc space for the prefix. -<span class="lineNum"> 393 </span> : : */ -<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : tbuf = realloc(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len</span> -<span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : + B64_GPG_PREFIX_STR_LEN+1);</span> -<span class="lineNum"> 396 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tbuf == NULL)</span> -<span class="lineNum"> 397 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 398 </span> : : -<span class="lineNum"> 399 </span> :<span class="lineNoCov"> 0 : memmove(tbuf+B64_GPG_PREFIX_STR_LEN, tbuf, ctx-&gt;encrypted_msg_len);</span> -<span class="lineNum"> 400 </span> : : -<span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg = memcpy(tbuf,</span> -<span class="lineNum"> 402 </span> : : B64_GPG_PREFIX, B64_GPG_PREFIX_STR_LEN); -<span class="lineNum"> 403 </span> : : -<span class="lineNum"> 404 </span> : : /* Adjust the encoded msg len for added SALT value and Make sure we -<span class="lineNum"> 405 </span> : : * are still a properly NULL-terminated string (Ubuntu was one system -<span class="lineNum"> 406 </span> : : * for which this was an issue). -<span class="lineNum"> 407 </span> : : */ -<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len += B64_GPG_PREFIX_STR_LEN;</span> -<span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : tbuf[ctx-&gt;encrypted_msg_len] = '\0';</span> -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : ctx-&gt;added_gpg_prefix = 1;</span> -<span class="lineNum"> 412 </span> : : } -<span class="lineNum"> 413 </span> : : -<span class="lineNum"> 414 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 415 </span> : : } -<span class="lineNum"> 416 </span> : : -<span class="lineNum"> 417 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html deleted file mode 100644 index 0418cb85..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func-sort-c.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/digest.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - digest.c<span style="font-size: 80%;"> (<a href="digest.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">25</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntryHi">-</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="digest.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#33">md5</a></td> - <td class="coverFnHi">2409</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#83">sha256</a></td> - <td class="coverFnHi">847</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#95">sha256_base64</a></td> - <td class="coverFnHi">713</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#58">sha1</a></td> - <td class="coverFnHi">206</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#70">sha1_base64</a></td> - <td class="coverFnHi">106</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#45">md5_base64</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#120">sha384_base64</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#145">sha512_base64</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#108">sha384</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#133">sha512</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html deleted file mode 100644 index f551a4b3..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.func.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/digest.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - digest.c<span style="font-size: 80%;"> (<a href="digest.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">25</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntryHi">-</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="digest.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#33">md5</a></td> - <td class="coverFnHi">2409</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#45">md5_base64</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#58">sha1</a></td> - <td class="coverFnHi">206</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#70">sha1_base64</a></td> - <td class="coverFnHi">106</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#83">sha256</a></td> - <td class="coverFnHi">847</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#95">sha256_base64</a></td> - <td class="coverFnHi">713</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#108">sha384</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#120">sha384_base64</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#133">sha512</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="digest.c.gcov.html#145">sha512_base64</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html deleted file mode 100644 index 2096f05d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/digest.c.gcov.html +++ /dev/null @@ -1,242 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/digest.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - digest.c<span style="font-size: 80%;"> (source / <a href="digest.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">25</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntryHi">-</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /**</a> -<span class="lineNum"> 2 </span> : : * @file digest.c -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * @brief Roll-up of the digests used by fwknop. -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 7 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 8 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * License (GNU General Public License): -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 13 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 14 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 15 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 16 </span> : : * -<span class="lineNum"> 17 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 18 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 19 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 20 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 21 </span> : : * -<span class="lineNum"> 22 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 23 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 24 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 25 </span> : : * USA -<span class="lineNum"> 26 </span> : : */ -<span class="lineNum"> 27 </span> : : -<span class="lineNum"> 28 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 29 </span> : : #include &quot;digest.h&quot; -<span class="lineNum"> 30 </span> : : #include &quot;base64.h&quot; -<span class="lineNum"> 31 </span> : : -<span class="lineNum"> 32 </span> : : /* Compute MD5 hash on in and store result in out. -<a name="33"><span class="lineNum"> 33 </span> : : */</a> -<span class="lineNum"> 34 </span> : : void -<span class="lineNum"> 35 </span> :<span class="lineCov"> 2409 : md5(unsigned char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 36 </span> : : { -<span class="lineNum"> 37 </span> : : MD5Context ctx; -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> :<span class="lineCov"> 2409 : MD5Init(&amp;ctx);</span> -<span class="lineNum"> 40 </span> :<span class="lineCov"> 2409 : MD5Update(&amp;ctx, (unsigned char*)in, size);</span> -<span class="lineNum"> 41 </span> :<span class="lineCov"> 2409 : MD5Final(out, &amp;ctx);</span> -<span class="lineNum"> 42 </span> :<span class="lineCov"> 2409 : }</span> -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : /* Compute MD5 hash on in and store the base64 string result in out. -<a name="45"><span class="lineNum"> 45 </span> : : */</a> -<span class="lineNum"> 46 </span> : : void -<span class="lineNum"> 47 </span> :<span class="lineNoCov"> 0 : md5_base64(char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 48 </span> : : { -<span class="lineNum"> 49 </span> : : uint8_t md[MD5_DIGEST_LEN]; -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : md5(md, in, size);</span> -<span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : b64_encode(md, out, MD5_DIGEST_LEN);</span> -<span class="lineNum"> 53 </span> : : -<span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(out);</span> -<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 56 </span> : : -<span class="lineNum"> 57 </span> : : /* Compute SHA1 hash on in and store result in out. -<a name="58"><span class="lineNum"> 58 </span> : : */</a> -<span class="lineNum"> 59 </span> : : void -<span class="lineNum"> 60 </span> :<span class="lineCov"> 206 : sha1(unsigned char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 61 </span> : : { -<span class="lineNum"> 62 </span> : : SHA1_INFO sha1_info; -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> :<span class="lineCov"> 206 : sha1_init(&amp;sha1_info);</span> -<span class="lineNum"> 65 </span> :<span class="lineCov"> 206 : sha1_update(&amp;sha1_info, (uint8_t*)in, size);</span> -<span class="lineNum"> 66 </span> :<span class="lineCov"> 206 : sha1_final(out, &amp;sha1_info);</span> -<span class="lineNum"> 67 </span> :<span class="lineCov"> 206 : }</span> -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> : : /* Compute SHA1 hash on in and store the base64 string result in out. -<a name="70"><span class="lineNum"> 70 </span> : : */</a> -<span class="lineNum"> 71 </span> : : void -<span class="lineNum"> 72 </span> :<span class="lineCov"> 106 : sha1_base64(char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 73 </span> : : { -<span class="lineNum"> 74 </span> : : uint8_t md[SHA1_DIGEST_LEN]; -<span class="lineNum"> 75 </span> : : -<span class="lineNum"> 76 </span> :<span class="lineCov"> 106 : sha1(md, in, size);</span> -<span class="lineNum"> 77 </span> :<span class="lineCov"> 106 : b64_encode(md, out, SHA1_DIGEST_LEN);</span> -<span class="lineNum"> 78 </span> : : -<span class="lineNum"> 79 </span> :<span class="lineCov"> 106 : strip_b64_eq(out);</span> -<span class="lineNum"> 80 </span> :<span class="lineCov"> 106 : }</span> -<span class="lineNum"> 81 </span> : : -<span class="lineNum"> 82 </span> : : /* Compute SHA256 hash on in and store the hex string result in out. -<a name="83"><span class="lineNum"> 83 </span> : : */</a> -<span class="lineNum"> 84 </span> : : void -<span class="lineNum"> 85 </span> :<span class="lineCov"> 847 : sha256(unsigned char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 86 </span> : : { -<span class="lineNum"> 87 </span> : : SHA256_CTX sha256_ctx; -<span class="lineNum"> 88 </span> : : -<span class="lineNum"> 89 </span> :<span class="lineCov"> 847 : SHA256_Init(&amp;sha256_ctx);</span> -<span class="lineNum"> 90 </span> :<span class="lineCov"> 847 : SHA256_Update(&amp;sha256_ctx, (const uint8_t*)in, size);</span> -<span class="lineNum"> 91 </span> :<span class="lineCov"> 847 : SHA256_Final(out, &amp;sha256_ctx);</span> -<span class="lineNum"> 92 </span> :<span class="lineCov"> 847 : }</span> -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> : : /* Compute SHA256 hash on in and store the base64 string result in out. -<a name="95"><span class="lineNum"> 95 </span> : : */</a> -<span class="lineNum"> 96 </span> : : void -<span class="lineNum"> 97 </span> :<span class="lineCov"> 713 : sha256_base64(char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 98 </span> : : { -<span class="lineNum"> 99 </span> : : uint8_t md[SHA256_DIGEST_LEN]; -<span class="lineNum"> 100 </span> : : -<span class="lineNum"> 101 </span> :<span class="lineCov"> 713 : sha256(md, in, size);</span> -<span class="lineNum"> 102 </span> :<span class="lineCov"> 713 : b64_encode(md, out, SHA256_DIGEST_LEN);</span> -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> :<span class="lineCov"> 713 : strip_b64_eq(out);</span> -<span class="lineNum"> 105 </span> :<span class="lineCov"> 713 : }</span> -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> : : /* Compute SHA384 hash on in and store the hex string result in out. -<a name="108"><span class="lineNum"> 108 </span> : : */</a> -<span class="lineNum"> 109 </span> : : void -<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : sha384(unsigned char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 111 </span> : : { -<span class="lineNum"> 112 </span> : : SHA384_CTX sha384_ctx; -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : SHA384_Init(&amp;sha384_ctx);</span> -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;sha384_ctx, (const uint8_t*)in, size);</span> -<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : SHA384_Final(out, &amp;sha384_ctx);</span> -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 118 </span> : : -<span class="lineNum"> 119 </span> : : /* Compute SHA384 hash on in and store the base64 string result in out. -<a name="120"><span class="lineNum"> 120 </span> : : */</a> -<span class="lineNum"> 121 </span> : : void -<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : sha384_base64(char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 123 </span> : : { -<span class="lineNum"> 124 </span> : : uint8_t md[SHA384_DIGEST_LEN]; -<span class="lineNum"> 125 </span> : : -<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : sha384(md, in, size);</span> -<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : b64_encode(md, out, SHA384_DIGEST_LEN);</span> -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(out);</span> -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> : : /* Compute SHA512 hash on in and store the hex string result in out. -<a name="133"><span class="lineNum"> 133 </span> : : */</a> -<span class="lineNum"> 134 </span> : : void -<span class="lineNum"> 135 </span> :<span class="lineNoCov"> 0 : sha512(unsigned char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 136 </span> : : { -<span class="lineNum"> 137 </span> : : SHA512_CTX sha512_ctx; -<span class="lineNum"> 138 </span> : : -<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : SHA512_Init(&amp;sha512_ctx);</span> -<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;sha512_ctx, (const uint8_t*)in, size);</span> -<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : SHA512_Final(out, &amp;sha512_ctx);</span> -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> : : /* Compute SHA512 hash on in and store the base64 string result in out. -<a name="145"><span class="lineNum"> 145 </span> : : */</a> -<span class="lineNum"> 146 </span> : : void -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : sha512_base64(char *out, unsigned char *in, size_t size)</span> -<span class="lineNum"> 148 </span> : : { -<span class="lineNum"> 149 </span> : : uint8_t md[SHA512_DIGEST_LEN]; -<span class="lineNum"> 150 </span> : : -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : sha512(md, in, size);</span> -<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : b64_encode(md, out, SHA512_DIGEST_LEN);</span> -<span class="lineNum"> 153 </span> : : -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(out);</span> -<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html deleted file mode 100644 index 36292b6a..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_client_timeout.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_client_timeout.c<span style="font-size: 80%;"> (<a href="fko_client_timeout.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntryLo">71.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryLo">58.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_client_timeout.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#102">fko_get_spa_client_timeout</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#35">fko_set_spa_client_timeout</a></td> - <td class="coverFnHi">437</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html deleted file mode 100644 index cab045bb..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.func.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_client_timeout.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_client_timeout.c<span style="font-size: 80%;"> (<a href="fko_client_timeout.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntryLo">71.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryLo">58.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_client_timeout.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#102">fko_get_spa_client_timeout</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_client_timeout.c.gcov.html#35">fko_set_spa_client_timeout</a></td> - <td class="coverFnHi">437</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html deleted file mode 100644 index 1a37bb8a..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_client_timeout.c.gcov.html +++ /dev/null @@ -1,215 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_client_timeout.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_client_timeout.c<span style="font-size: 80%;"> (source / <a href="fko_client_timeout.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntryLo">71.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryLo">58.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_spa_client_timeout.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa client timeout data -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : /* Set the SPA Client Timeout data -<a name="35"><span class="lineNum"> 35 </span> : : */</a> -<span class="lineNum"> 36 </span> : : int -<span class="lineNum"> 37 </span> :<span class="lineCov"> 437 : fko_set_spa_client_timeout(fko_ctx_t ctx, const int timeout)</span> -<span class="lineNum"> 38 </span> : : { -<span class="lineNum"> 39 </span> : : int old_msg_type; -<span class="lineNum"> 40 </span> : : -<span class="lineNum"> 41 </span> : : /* Context must be initialized. -<span class="lineNum"> 42 </span> : : */ -<span class="lineNum"> 43 </span>[<span class="branchCov" title="Branch 0 was taken 437 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 437 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 437 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 44 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : /* The timeout should not be negative -<span class="lineNum"> 47 </span> : : */ -<span class="lineNum"> 48 </span> [<span class="branchCov" title="Branch 0 was taken 437 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 437 : if(timeout &lt; 0)</span> -<span class="lineNum"> 49 </span> : : return(FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE); -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> :<span class="lineCov"> 437 : old_msg_type = ctx-&gt;message_type;</span> -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> :<span class="lineCov"> 437 : ctx-&gt;client_timeout = timeout;</span> -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> :<span class="lineCov"> 437 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 56 </span> : : -<span class="lineNum"> 57 </span> : : /* If a timeout is set, then we may need to verify/change message -<span class="lineNum"> 58 </span> : : * type accordingly. -<span class="lineNum"> 59 </span> : : */ -<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 437 : if(ctx-&gt;client_timeout &gt; 0)</span> -<span class="lineNum"> 61 </span> : : { -<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 1 time"> + </span>]:<span class="lineCov"> 3 : switch(ctx-&gt;message_type)</span> -<span class="lineNum"> 63 </span> : : { -<span class="lineNum"> 64 </span> : : case FKO_ACCESS_MSG: -<span class="lineNum"> 65 </span> :<span class="lineCov"> 2 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_ACCESS_MSG;</span> -<span class="lineNum"> 66 </span> :<span class="lineCov"> 2 : break;</span> -<span class="lineNum"> 67 </span> : : -<span class="lineNum"> 68 </span> : : case FKO_NAT_ACCESS_MSG: -<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : case FKO_LOCAL_NAT_ACCESS_MSG: -<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 75 </span> : : } -<span class="lineNum"> 76 </span> : : } -<span class="lineNum"> 77 </span> : : else /* Timeout is 0, which means ignore it. */ -<span class="lineNum"> 78 </span> : : { -<span class="lineNum"> 79 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 433 times"> + </span>]:<span class="lineCov"> 434 : switch(ctx-&gt;message_type)</span> -<span class="lineNum"> 80 </span> : : { -<span class="lineNum"> 81 </span> : : case FKO_CLIENT_TIMEOUT_ACCESS_MSG: -<span class="lineNum"> 82 </span> :<span class="lineCov"> 1 : ctx-&gt;message_type = FKO_ACCESS_MSG;</span> -<span class="lineNum"> 83 </span> :<span class="lineCov"> 1 : break;</span> -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> : : case FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG: -<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 88 </span> : : -<span class="lineNum"> 89 </span> : : case FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG: -<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_LOCAL_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 92 </span> : : } -<span class="lineNum"> 93 </span> : : } -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 437 : if(ctx-&gt;message_type != old_msg_type)</span> -<span class="lineNum"> 96 </span> :<span class="lineCov"> 3 : ctx-&gt;state |= FKO_SPA_MSG_TYPE_MODIFIED;</span> -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 99 </span> : : } -<span class="lineNum"> 100 </span> : : -<span class="lineNum"> 101 </span> : : /* Return the SPA message data. -<a name="102"><span class="lineNum"> 102 </span> : : */</a> -<span class="lineNum"> 103 </span> : : int -<span class="lineNum"> 104 </span> :<span class="lineCov"> 801 : fko_get_spa_client_timeout(fko_ctx_t ctx, int *timeout)</span> -<span class="lineNum"> 105 </span> : : { -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 108 </span> : : fiu_return_on(&quot;fko_get_spa_client_timeout_init&quot;, -<span class="lineNum"> 109 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 110 </span> : : #endif -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : /* Must be initialized -<span class="lineNum"> 113 </span> : : */ -<span class="lineNum"> 114 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 115 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 116 </span> : : -<span class="lineNum"> 117 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(timeout == NULL)</span> -<span class="lineNum"> 118 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 121 </span> : : fiu_return_on(&quot;fko_get_spa_client_timeout_val&quot;, -<span class="lineNum"> 122 </span> : : FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 123 </span> : : #endif -<span class="lineNum"> 124 </span> : : -<span class="lineNum"> 125 </span> :<span class="lineCov"> 801 : *timeout = ctx-&gt;client_timeout;</span> -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 128 </span> : : } -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html deleted file mode 100644 index 645407fe..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func-sort-c.html +++ /dev/null @@ -1,137 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_decode.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_decode.c<span style="font-size: 80%;"> (<a href="fko_decode.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">139</td> - <td class="headerCovTableEntry">190</td> - <td class="headerCovTableEntryLo">73.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">73</td> - <td class="headerCovTableEntry">164</td> - <td class="headerCovTableEntryLo">44.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_decode.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#45">num_fields</a></td> - <td class="coverFnHi">770</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#486">fko_decode_spa_data</a></td> - <td class="coverFnHi">387</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#123">is_valid_digest_len</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#81">verify_digest</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#412">parse_timestamp</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#62">last_field</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#390">parse_version</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#208">parse_nat_msg</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#305">parse_client_timeout</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#334">parse_msg_type</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#435">parse_username</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#464">parse_rand_val</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#243">parse_server_auth</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#163">parse_msg</a></td> - <td class="coverFnHi">385</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html deleted file mode 100644 index 4285722c..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.func.html +++ /dev/null @@ -1,137 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_decode.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_decode.c<span style="font-size: 80%;"> (<a href="fko_decode.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">139</td> - <td class="headerCovTableEntry">190</td> - <td class="headerCovTableEntryLo">73.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">73</td> - <td class="headerCovTableEntry">164</td> - <td class="headerCovTableEntryLo">44.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_decode.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#486">fko_decode_spa_data</a></td> - <td class="coverFnHi">387</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#123">is_valid_digest_len</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#62">last_field</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#45">num_fields</a></td> - <td class="coverFnHi">770</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#305">parse_client_timeout</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#163">parse_msg</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#334">parse_msg_type</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#208">parse_nat_msg</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#464">parse_rand_val</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#243">parse_server_auth</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#412">parse_timestamp</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#435">parse_username</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#390">parse_version</a></td> - <td class="coverFnHi">385</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_decode.c.gcov.html#81">verify_digest</a></td> - <td class="coverFnHi">385</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html deleted file mode 100644 index d3356286..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_decode.c.gcov.html +++ /dev/null @@ -1,743 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_decode.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_decode.c<span style="font-size: 80%;"> (source / <a href="fko_decode.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">139</td> - <td class="headerCovTableEntry">190</td> - <td class="headerCovTableEntryLo">73.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">73</td> - <td class="headerCovTableEntry">164</td> - <td class="headerCovTableEntryLo">44.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_decode.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Decode an FKO SPA message after decryption. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;base64.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : #define FIELD_PARSERS 9 -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : /* Char used to separate SPA fields in an SPA packet */ -<span class="lineNum"> 40 </span> : : #define SPA_FIELD_SEPARATOR &quot;:&quot; -<span class="lineNum"> 41 </span> : : -<span class="lineNum"> 42 </span> : : #ifdef HAVE_C_UNIT_TESTS -<span class="lineNum"> 43 </span> : : DECLARE_TEST_SUITE(fko_decode, &quot;FKO decode test suite&quot;); -<span class="lineNum"> 44 </span> : : #endif -<a name="45"><span class="lineNum"> 45 </span> : : </a> -<span class="lineNum"> 46 </span> : : static int -<span class="lineNum"> 47 </span> :<span class="lineCov"> 770 : num_fields(char *str)</span> -<span class="lineNum"> 48 </span> : : { -<span class="lineNum"> 49 </span> :<span class="lineCov"> 770 : int i=0;</span> -<span class="lineNum"> 50 </span> :<span class="lineCov"> 770 : char *tmp = NULL;</span> -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> : : /* Count the number of remaining SPA packet fields -<span class="lineNum"> 53 </span> : : */ -<span class="lineNum"> 54 </span> [<span class="branchCov" title="Branch 0 was taken 3467 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 3467 : for (i=0; i &lt;= MAX_SPA_FIELDS+1; i++)</span> -<span class="lineNum"> 55 </span> : : { -<span class="lineNum"> 56 </span> [<span class="branchCov" title="Branch 0 was taken 2697 times"> + </span><span class="branchCov" title="Branch 1 was taken 770 times"> + </span>]:<span class="lineCov"> 3467 : if ((tmp = strchr(str, ':')) == NULL)</span> -<span class="lineNum"> 57 </span> : : break; -<span class="lineNum"> 58 </span> :<span class="lineCov"> 2697 : str = tmp + 1;</span> -<span class="lineNum"> 59 </span> : : } -<span class="lineNum"> 60 </span> :<span class="lineCov"> 770 : return i;</span> -<span class="lineNum"> 61 </span> : : } -<a name="62"><span class="lineNum"> 62 </span> : : </a> -<span class="lineNum"> 63 </span> : : static int -<span class="lineNum"> 64 </span> :<span class="lineCov"> 385 : last_field(char *str)</span> -<span class="lineNum"> 65 </span> : : { -<span class="lineNum"> 66 </span> :<span class="lineCov"> 385 : int i=0, pos_last=0;</span> -<span class="lineNum"> 67 </span> :<span class="lineCov"> 385 : char *tmp = NULL;</span> -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> : : /* Count the number of bytes to the last ':' char -<span class="lineNum"> 70 </span> : : */ -<span class="lineNum"> 71 </span> [<span class="branchCov" title="Branch 0 was taken 2696 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2696 : for (i=0; i &lt;= MAX_SPA_FIELDS+1; i++)</span> -<span class="lineNum"> 72 </span> : : { -<span class="lineNum"> 73 </span> [<span class="branchCov" title="Branch 0 was taken 2311 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 2696 : if ((tmp = strchr(str, ':')) == NULL)</span> -<span class="lineNum"> 74 </span> : : break; -<span class="lineNum"> 75 </span> : : -<span class="lineNum"> 76 </span> :<span class="lineCov"> 2311 : pos_last += (tmp - str) + 1;</span> -<span class="lineNum"> 77 </span> :<span class="lineCov"> 2311 : str = tmp + 1;</span> -<span class="lineNum"> 78 </span> : : } -<span class="lineNum"> 79 </span> :<span class="lineCov"> 385 : return pos_last;</span> -<span class="lineNum"> 80 </span> : : } -<a name="81"><span class="lineNum"> 81 </span> : : </a> -<span class="lineNum"> 82 </span> : : static int -<span class="lineNum"> 83 </span> :<span class="lineCov"> 385 : verify_digest(char *tbuf, int t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 84 </span> : : { -<span class="lineNum"> 85 </span> : : #if AFL_FUZZING -<span class="lineNum"> 86 </span> : : return FKO_SUCCESS; -<span class="lineNum"> 87 </span> : : #endif -<span class="lineNum"> 88 </span> : : -<span class="lineNum"> 89 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span><span class="branchCov" title="Branch 2 was taken 338 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 385 : switch(ctx-&gt;digest_type)</span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] -<span class="lineNum"> 90 </span> : : { -<span class="lineNum"> 91 </span> : : case FKO_DIGEST_MD5: -<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : md5_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> : : case FKO_DIGEST_SHA1: -<span class="lineNum"> 96 </span> :<span class="lineCov"> 47 : sha1_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> -<span class="lineNum"> 97 </span> :<span class="lineCov"> 47 : break;</span> -<span class="lineNum"> 98 </span> : : -<span class="lineNum"> 99 </span> : : case FKO_DIGEST_SHA256: -<span class="lineNum"> 100 </span> :<span class="lineCov"> 338 : sha256_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> -<span class="lineNum"> 101 </span> :<span class="lineCov"> 338 : break;</span> -<span class="lineNum"> 102 </span> : : -<span class="lineNum"> 103 </span> : : case FKO_DIGEST_SHA384: -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : sha384_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> -<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> : : case FKO_DIGEST_SHA512: -<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : sha512_base64(tbuf, (unsigned char*)ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len);</span> -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> : : default: /* Invalid or unsupported digest */ -<span class="lineNum"> 112 </span> : : return(FKO_ERROR_INVALID_DIGEST_TYPE); -<span class="lineNum"> 113 </span> : : } -<span class="lineNum"> 114 </span> : : -<span class="lineNum"> 115 </span> : : /* We give up here if the computed digest does not match the -<span class="lineNum"> 116 </span> : : * digest in the message data. -<span class="lineNum"> 117 </span> : : */ -<span class="lineNum"> 118 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(constant_runtime_cmp(ctx-&gt;digest, tbuf, t_size) != 0)</span> -<span class="lineNum"> 119 </span> : : return(FKO_ERROR_DIGEST_VERIFICATION_FAILED); -<span class="lineNum"> 120 </span> : : -<span class="lineNum"> 121 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 122 </span> : : } -<a name="123"><span class="lineNum"> 123 </span> : : </a> -<span class="lineNum"> 124 </span> : : static int -<span class="lineNum"> 125 </span> :<span class="lineCov"> 385 : is_valid_digest_len(int t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 126 </span> : : { -<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span><span class="branchCov" title="Branch 2 was taken 338 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 385 : switch(t_size)</span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] -<span class="lineNum"> 128 </span> : : { -<span class="lineNum"> 129 </span> : : case MD5_B64_LEN: -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_type = FKO_DIGEST_MD5;</span> -<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_len = MD5_B64_LEN;</span> -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> : : case SHA1_B64_LEN: -<span class="lineNum"> 135 </span> :<span class="lineCov"> 47 : ctx-&gt;digest_type = FKO_DIGEST_SHA1;</span> -<span class="lineNum"> 136 </span> :<span class="lineCov"> 47 : ctx-&gt;digest_len = SHA1_B64_LEN;</span> -<span class="lineNum"> 137 </span> :<span class="lineCov"> 47 : break;</span> -<span class="lineNum"> 138 </span> : : -<span class="lineNum"> 139 </span> : : case SHA256_B64_LEN: -<span class="lineNum"> 140 </span> :<span class="lineCov"> 338 : ctx-&gt;digest_type = FKO_DIGEST_SHA256;</span> -<span class="lineNum"> 141 </span> :<span class="lineCov"> 338 : ctx-&gt;digest_len = SHA256_B64_LEN;</span> -<span class="lineNum"> 142 </span> :<span class="lineCov"> 338 : break;</span> -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> : : case SHA384_B64_LEN: -<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_type = FKO_DIGEST_SHA384;</span> -<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_len = SHA384_B64_LEN;</span> -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 148 </span> : : -<span class="lineNum"> 149 </span> : : case SHA512_B64_LEN: -<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_type = FKO_DIGEST_SHA512;</span> -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : ctx-&gt;digest_len = SHA512_B64_LEN;</span> -<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 153 </span> : : -<span class="lineNum"> 154 </span> : : default: /* Invalid or unsupported digest */ -<span class="lineNum"> 155 </span> : : return(FKO_ERROR_INVALID_DIGEST_TYPE); -<span class="lineNum"> 156 </span> : : } -<span class="lineNum"> 157 </span> : : -<span class="lineNum"> 158 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (ctx-&gt;encoded_msg_len - t_size &lt; 0)</span> -<span class="lineNum"> 159 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE); -<span class="lineNum"> 160 </span> : : -<span class="lineNum"> 161 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 162 </span> : : } -<a name="163"><span class="lineNum"> 163 </span> : : </a> -<span class="lineNum"> 164 </span> : : static int -<span class="lineNum"> 165 </span> :<span class="lineCov"> 385 : parse_msg(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 166 </span> : : { -<span class="lineNum"> 167 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> -<span class="lineNum"> 168 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING); -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 171 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG); -<span class="lineNum"> 172 </span> : : -<span class="lineNum"> 173 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;message != NULL)</span> -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;message);</span> -<span class="lineNum"> 177 </span> : : -<span class="lineNum"> 178 </span> :<span class="lineCov"> 385 : ctx-&gt;message = calloc(1, *t_size+1); /* Yes, more than we need */</span> -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;message == NULL)</span> -<span class="lineNum"> 181 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 182 </span> : : -<span class="lineNum"> 183 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;message) &lt; 0)</span> -<span class="lineNum"> 184 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL); -<span class="lineNum"> 185 </span> : : -<span class="lineNum"> 186 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;message_type == FKO_COMMAND_MSG)</span> -<span class="lineNum"> 187 </span> : : { -<span class="lineNum"> 188 </span> : : /* Require a message similar to: 1.2.3.4,&lt;command&gt; -<span class="lineNum"> 189 </span> : : */ -<span class="lineNum"> 190 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(validate_cmd_msg(ctx-&gt;message) != FKO_SUCCESS)</span> -<span class="lineNum"> 191 </span> : : { -<span class="lineNum"> 192 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL); -<span class="lineNum"> 193 </span> : : } -<span class="lineNum"> 194 </span> : : } -<span class="lineNum"> 195 </span> : : else -<span class="lineNum"> 196 </span> : : { -<span class="lineNum"> 197 </span> : : /* Require a message similar to: 1.2.3.4,tcp/22 -<span class="lineNum"> 198 </span> : : */ -<span class="lineNum"> 199 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(validate_access_msg(ctx-&gt;message) != FKO_SUCCESS)</span> -<span class="lineNum"> 200 </span> : : { -<span class="lineNum"> 201 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL); -<span class="lineNum"> 202 </span> : : } -<span class="lineNum"> 203 </span> : : } -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 206 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 207 </span> : : } -<a name="208"><span class="lineNum"> 208 </span> : : </a> -<span class="lineNum"> 209 </span> : : static int -<span class="lineNum"> 210 </span> :<span class="lineCov"> 385 : parse_nat_msg(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 211 </span> : : { -<span class="lineNum"> 212 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if( ctx-&gt;message_type == FKO_NAT_ACCESS_MSG</span> -<span class="lineNum"> 213 </span> :<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_LOCAL_NAT_ACCESS_MSG</span> -<span class="lineNum"> 214 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG</span> -<span class="lineNum"> 215 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 216 </span> : : { -<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> -<span class="lineNum"> 218 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING); -<span class="lineNum"> 219 </span> : : -<span class="lineNum"> 220 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 221 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG); -<span class="lineNum"> 222 </span> : : -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy(tbuf, *ndx, *t_size+1);</span> -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access != NULL)</span> -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;nat_access);</span> -<span class="lineNum"> 227 </span> : : -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : ctx-&gt;nat_access = calloc(1, *t_size+1); /* Yes, more than we need */</span> -<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access == NULL)</span> -<span class="lineNum"> 230 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 231 </span> : : -<span class="lineNum"> 232 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;nat_access) &lt; 0)</span> -<span class="lineNum"> 233 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL); -<span class="lineNum"> 234 </span> : : -<span class="lineNum"> 235 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(validate_nat_access_msg(ctx-&gt;nat_access) != FKO_SUCCESS)</span> -<span class="lineNum"> 236 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL); -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 239 </span> : : } -<span class="lineNum"> 240 </span> : : -<span class="lineNum"> 241 </span> : : return FKO_SUCCESS; -<span class="lineNum"> 242 </span> : : } -<a name="243"><span class="lineNum"> 243 </span> : : </a> -<span class="lineNum"> 244 </span> : : static int -<span class="lineNum"> 245 </span> :<span class="lineCov"> 385 : parse_server_auth(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 246 </span> : : { -<span class="lineNum"> 247 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 384 times"> + </span>]:<span class="lineCov"> 385 : if((*t_size = strlen(*ndx)) &gt; 0)</span> -<span class="lineNum"> 248 </span> : : { -<span class="lineNum"> 249 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 250 </span> : : { -<span class="lineNum"> 251 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING); -<span class="lineNum"> 252 </span> : : } -<span class="lineNum"> 253 </span> : : } -<span class="lineNum"> 254 </span> : : else -<span class="lineNum"> 255 </span> : : return FKO_SUCCESS; -<span class="lineNum"> 256 </span> : : -<span class="lineNum"> 257 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if( ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_ACCESS_MSG</span> -<span class="lineNum"> 258 </span> : : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG -<span class="lineNum"> 259 </span> :<span class="lineCov"> 1 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 260 </span> : : { -<span class="lineNum"> 261 </span> : : /* If we are here then we may still have a server_auth string, -<span class="lineNum"> 262 </span> : : * or a timeout, or both. So we look for a ':' delimiter. If -<span class="lineNum"> 263 </span> : : * it is there we have both, if not we check the message_type -<span class="lineNum"> 264 </span> : : * again. -<span class="lineNum"> 265 </span> : : */ -<span class="lineNum"> 266 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : if(strchr(*ndx, ':'))</span> -<span class="lineNum"> 267 </span> : : { -<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : *t_size = strcspn(*ndx, &quot;:&quot;);</span> -<span class="lineNum"> 269 </span> : : -<span class="lineNum"> 270 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 271 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG); -<span class="lineNum"> 272 </span> : : -<span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : strlcpy(tbuf, *ndx, *t_size+1);</span> -<span class="lineNum"> 274 </span> : : -<span class="lineNum"> 275 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth != NULL)</span> -<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> -<span class="lineNum"> 277 </span> : : -<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : ctx-&gt;server_auth = calloc(1, *t_size+1); /* Yes, more than we need */</span> -<span class="lineNum"> 279 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth == NULL)</span> -<span class="lineNum"> 280 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 281 </span> : : -<span class="lineNum"> 282 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;server_auth) &lt; 0)</span> -<span class="lineNum"> 283 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL); -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 286 </span> : : } -<span class="lineNum"> 287 </span> : : } -<span class="lineNum"> 288 </span> : : else -<span class="lineNum"> 289 </span> : : { -<span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : strlcpy(tbuf, *ndx, *t_size+1);</span> -<span class="lineNum"> 291 </span> : : -<span class="lineNum"> 292 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth != NULL)</span> -<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> -<span class="lineNum"> 294 </span> : : -<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : ctx-&gt;server_auth = calloc(1, *t_size+1); /* Yes, more than we need */</span> -<span class="lineNum"> 296 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth == NULL)</span> -<span class="lineNum"> 297 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 298 </span> : : -<span class="lineNum"> 299 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;server_auth) &lt; 0)</span> -<span class="lineNum"> 300 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL); -<span class="lineNum"> 301 </span> : : } -<span class="lineNum"> 302 </span> : : -<span class="lineNum"> 303 </span> : : return FKO_SUCCESS; -<span class="lineNum"> 304 </span> : : } -<a name="305"><span class="lineNum"> 305 </span> : : </a> -<span class="lineNum"> 306 </span> : : static int -<span class="lineNum"> 307 </span> :<span class="lineCov"> 385 : parse_client_timeout(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 308 </span> : : { -<span class="lineNum"> 309 </span> : : int is_err; -<span class="lineNum"> 310 </span> : : -<span class="lineNum"> 311 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 384 times"> + </span>]:<span class="lineCov"> 385 : if( ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_ACCESS_MSG</span> -<span class="lineNum"> 312 </span> : : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG -<span class="lineNum"> 313 </span> :<span class="lineCov"> 385 : || ctx-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 314 </span> : : { -<span class="lineNum"> 315 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if((*t_size = strlen(*ndx)) &lt; 1)</span> -<span class="lineNum"> 316 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING); -<span class="lineNum"> 317 </span> : : -<span class="lineNum"> 318 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if (*t_size &gt; MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 319 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG); -<span class="lineNum"> 320 </span> : : -<span class="lineNum"> 321 </span> : : /* Should be a number only. -<span class="lineNum"> 322 </span> : : */ -<span class="lineNum"> 323 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(strspn(*ndx, &quot;0123456789&quot;) != *t_size)</span> -<span class="lineNum"> 324 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL); -<span class="lineNum"> 325 </span> : : -<span class="lineNum"> 326 </span> :<span class="lineCov"> 1 : ctx-&gt;client_timeout = (unsigned int) strtol_wrapper(*ndx, 0,</span> -<span class="lineNum"> 327 </span> : : (2 &lt;&lt; 15), NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 328 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 329 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL); -<span class="lineNum"> 330 </span> : : } -<span class="lineNum"> 331 </span> : : -<span class="lineNum"> 332 </span> : : return FKO_SUCCESS; -<span class="lineNum"> 333 </span> : : } -<a name="334"><span class="lineNum"> 334 </span> : : </a> -<span class="lineNum"> 335 </span> : : static int -<span class="lineNum"> 336 </span> :<span class="lineCov"> 385 : parse_msg_type(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 337 </span> : : { -<span class="lineNum"> 338 </span> : : int is_err, remaining_fields; -<span class="lineNum"> 339 </span> : : -<span class="lineNum"> 340 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> -<span class="lineNum"> 341 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING); -<span class="lineNum"> 342 </span> : : -<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(*t_size &gt; MAX_SPA_MESSAGE_TYPE_SIZE)</span> -<span class="lineNum"> 344 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG); -<span class="lineNum"> 345 </span> : : -<span class="lineNum"> 346 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> -<span class="lineNum"> 347 </span> : : -<span class="lineNum"> 348 </span> :<span class="lineCov"> 385 : ctx-&gt;message_type = strtol_wrapper(tbuf, 0,</span> -<span class="lineNum"> 349 </span> : : FKO_LAST_MSG_TYPE-1, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 350 </span> : : -<span class="lineNum"> 351 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 352 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL); -<span class="lineNum"> 353 </span> : : -<span class="lineNum"> 354 </span> : : /* Now that we have a valid type, ensure that the total -<span class="lineNum"> 355 </span> : : * number of SPA fields is also valid for the type -<span class="lineNum"> 356 </span> : : */ -<span class="lineNum"> 357 </span>[<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 385 : remaining_fields = num_fields(*ndx);</span> -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 5 was taken 384 times"> + </span><span class="branchCov" title="Branch 6 was taken 1 time"> + </span>][<span class="branchCov" title="Branch 7 was taken 384 times"> + </span><span class="branchNoCov" title="Branch 8 was not taken"> - </span>] -<span class="lineNum"> 358 </span> : : -<span class="lineNum"> 359 </span> : : switch(ctx-&gt;message_type) -<span class="lineNum"> 360 </span> : : { -<span class="lineNum"> 361 </span> : : /* optional server_auth + digest */ -<span class="lineNum"> 362 </span> : : case FKO_COMMAND_MSG: -<span class="lineNum"> 363 </span> : : case FKO_ACCESS_MSG: -<span class="lineNum"> 364 </span> [<span class="branchCov" title="Branch 0 was taken 384 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 384 : if(remaining_fields &gt; 2)</span> -<span class="lineNum"> 365 </span> : : return FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS; -<span class="lineNum"> 366 </span> : : break; -<span class="lineNum"> 367 </span> : : -<span class="lineNum"> 368 </span> : : /* nat or client timeout + optional server_auth + digest */ -<span class="lineNum"> 369 </span> : : case FKO_NAT_ACCESS_MSG: -<span class="lineNum"> 370 </span> : : case FKO_LOCAL_NAT_ACCESS_MSG: -<span class="lineNum"> 371 </span> : : case FKO_CLIENT_TIMEOUT_ACCESS_MSG: -<span class="lineNum"> 372 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(remaining_fields &gt; 3)</span> -<span class="lineNum"> 373 </span> : : return FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS; -<span class="lineNum"> 374 </span> : : break; -<span class="lineNum"> 375 </span> : : -<span class="lineNum"> 376 </span> : : /* client timeout + nat + optional server_auth + digest */ -<span class="lineNum"> 377 </span> : : case FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG: -<span class="lineNum"> 378 </span> : : case FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG: -<span class="lineNum"> 379 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(remaining_fields &gt; 4)</span> -<span class="lineNum"> 380 </span> : : return FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS; -<span class="lineNum"> 381 </span> : : break; -<span class="lineNum"> 382 </span> : : -<span class="lineNum"> 383 </span> : : default: /* Should not reach here */ -<span class="lineNum"> 384 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL); -<span class="lineNum"> 385 </span> : : } -<span class="lineNum"> 386 </span> : : -<span class="lineNum"> 387 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 388 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 389 </span> : : } -<a name="390"><span class="lineNum"> 390 </span> : : </a> -<span class="lineNum"> 391 </span> : : static int -<span class="lineNum"> 392 </span> :<span class="lineCov"> 385 : parse_version(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 393 </span> : : { -<span class="lineNum"> 394 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> -<span class="lineNum"> 395 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING); -<span class="lineNum"> 396 </span> : : -<span class="lineNum"> 397 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_VERSION_SIZE)</span> -<span class="lineNum"> 398 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG); -<span class="lineNum"> 399 </span> : : -<span class="lineNum"> 400 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;version != NULL)</span> -<span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;version);</span> -<span class="lineNum"> 402 </span> : : -<span class="lineNum"> 403 </span> :<span class="lineCov"> 385 : ctx-&gt;version = calloc(1, *t_size+1);</span> -<span class="lineNum"> 404 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;version == NULL)</span> -<span class="lineNum"> 405 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 406 </span> : : -<span class="lineNum"> 407 </span> :<span class="lineCov"> 385 : strlcpy(ctx-&gt;version, *ndx, *t_size+1);</span> -<span class="lineNum"> 408 </span> : : -<span class="lineNum"> 409 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 410 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 411 </span> : : } -<a name="412"><span class="lineNum"> 412 </span> : : </a> -<span class="lineNum"> 413 </span> : : static int -<span class="lineNum"> 414 </span> :<span class="lineCov"> 385 : parse_timestamp(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 415 </span> : : { -<span class="lineNum"> 416 </span> : : int is_err; -<span class="lineNum"> 417 </span> : : -<span class="lineNum"> 418 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> -<span class="lineNum"> 419 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING); -<span class="lineNum"> 420 </span> : : -<span class="lineNum"> 421 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_TIMESTAMP_SIZE)</span> -<span class="lineNum"> 422 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG); -<span class="lineNum"> 423 </span> : : -<span class="lineNum"> 424 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> -<span class="lineNum"> 425 </span> : : -<span class="lineNum"> 426 </span> :<span class="lineCov"> 385 : ctx-&gt;timestamp = (unsigned int) strtol_wrapper(tbuf,</span> -<span class="lineNum"> 427 </span> : : 0, -1, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 428 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 429 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL); -<span class="lineNum"> 430 </span> : : -<span class="lineNum"> 431 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 432 </span> : : -<span class="lineNum"> 433 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 434 </span> : : } -<a name="435"><span class="lineNum"> 435 </span> : : </a> -<span class="lineNum"> 436 </span> : : static int -<span class="lineNum"> 437 </span> :<span class="lineCov"> 385 : parse_username(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 438 </span> : : { -<span class="lineNum"> 439 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; 1)</span> -<span class="lineNum"> 440 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING); -<span class="lineNum"> 441 </span> : : -<span class="lineNum"> 442 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if (*t_size &gt; MAX_SPA_USERNAME_SIZE)</span> -<span class="lineNum"> 443 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG); -<span class="lineNum"> 444 </span> : : -<span class="lineNum"> 445 </span> :<span class="lineCov"> 385 : strlcpy(tbuf, *ndx, *t_size+1);</span> -<span class="lineNum"> 446 </span> : : -<span class="lineNum"> 447 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;username != NULL)</span> -<span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;username);</span> -<span class="lineNum"> 449 </span> : : -<span class="lineNum"> 450 </span> :<span class="lineCov"> 385 : ctx-&gt;username = calloc(1, *t_size+1); /* Yes, more than we need */</span> -<span class="lineNum"> 451 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;username == NULL)</span> -<span class="lineNum"> 452 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 453 </span> : : -<span class="lineNum"> 454 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(b64_decode(tbuf, (unsigned char*)ctx-&gt;username) &lt; 0)</span> -<span class="lineNum"> 455 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL); -<span class="lineNum"> 456 </span> : : -<span class="lineNum"> 457 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if(validate_username(ctx-&gt;username) != FKO_SUCCESS)</span> -<span class="lineNum"> 458 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL); -<span class="lineNum"> 459 </span> : : -<span class="lineNum"> 460 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 461 </span> : : -<span class="lineNum"> 462 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 463 </span> : : } -<a name="464"><span class="lineNum"> 464 </span> : : </a> -<span class="lineNum"> 465 </span> : : static int -<span class="lineNum"> 466 </span> :<span class="lineCov"> 385 : parse_rand_val(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 467 </span> : : { -<span class="lineNum"> 468 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if((*t_size = strcspn(*ndx, &quot;:&quot;)) &lt; FKO_RAND_VAL_SIZE)</span> -<span class="lineNum"> 469 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING); -<span class="lineNum"> 470 </span> : : -<span class="lineNum"> 471 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;rand_val != NULL)</span> -<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;rand_val);</span> -<span class="lineNum"> 473 </span> : : -<span class="lineNum"> 474 </span> :<span class="lineCov"> 385 : ctx-&gt;rand_val = calloc(1, FKO_RAND_VAL_SIZE+1);</span> -<span class="lineNum"> 475 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;rand_val == NULL)</span> -<span class="lineNum"> 476 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 477 </span> : : -<span class="lineNum"> 478 </span> :<span class="lineCov"> 770 : ctx-&gt;rand_val = strncpy(ctx-&gt;rand_val, *ndx, FKO_RAND_VAL_SIZE);</span> -<span class="lineNum"> 479 </span> : : -<span class="lineNum"> 480 </span> :<span class="lineCov"> 385 : *ndx += *t_size + 1;</span> -<span class="lineNum"> 481 </span> : : -<span class="lineNum"> 482 </span> :<span class="lineCov"> 385 : return FKO_SUCCESS;</span> -<span class="lineNum"> 483 </span> : : } -<span class="lineNum"> 484 </span> : : -<span class="lineNum"> 485 </span> : : /* Decode the encoded SPA data. -<a name="486"><span class="lineNum"> 486 </span> : : */</a> -<span class="lineNum"> 487 </span> : : int -<span class="lineNum"> 488 </span> :<span class="lineCov"> 387 : fko_decode_spa_data(fko_ctx_t ctx)</span> -<span class="lineNum"> 489 </span> : : { -<span class="lineNum"> 490 </span> : : char *tbuf, *ndx; -<span class="lineNum"> 491 </span> : : int t_size, i, res; -<span class="lineNum"> 492 </span> : : -<span class="lineNum"> 493 </span> : : /* Array of function pointers to SPA field parsing functions -<span class="lineNum"> 494 </span> : : */ -<span class="lineNum"> 495 </span> :<span class="lineCov"> 387 : int (*field_parser[FIELD_PARSERS])(char *tbuf, char **ndx, int *t_size, fko_ctx_t ctx)</span> -<span class="lineNum"> 496 </span> : : = { parse_rand_val, /* Extract random value */ -<span class="lineNum"> 497 </span> : : parse_username, /* Extract username */ -<span class="lineNum"> 498 </span> : : parse_timestamp, /* Client timestamp */ -<span class="lineNum"> 499 </span> : : parse_version, /* SPA version */ -<span class="lineNum"> 500 </span> : : parse_msg_type, /* SPA msg type */ -<span class="lineNum"> 501 </span> : : parse_msg, /* SPA msg string */ -<span class="lineNum"> 502 </span> : : parse_nat_msg, /* SPA NAT msg string */ -<span class="lineNum"> 503 </span> : : parse_server_auth, /* optional server authentication method */ -<span class="lineNum"> 504 </span> : : parse_client_timeout /* client defined timeout */ -<span class="lineNum"> 505 </span> : : }; -<span class="lineNum"> 506 </span> : : -<span class="lineNum"> 507 </span> [<span class="branchCov" title="Branch 1 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 387 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> -<span class="lineNum"> 508 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL); -<span class="lineNum"> 509 </span> : : -<span class="lineNum"> 510 </span> : : /* Make sure there are no non-ascii printable chars -<span class="lineNum"> 511 </span> : : */ -<span class="lineNum"> 512 </span> [<span class="branchCov" title="Branch 1 was taken 47253 times"> + </span><span class="branchCov" title="Branch 2 was taken 385 times"> + </span>]:<span class="lineCov"> 47638 : for (i=0; i &lt; (int)strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE); i++)</span> -<span class="lineNum"> 513 </span> [<span class="branchCov" title="Branch 1 was taken 47251 times"> + </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 47253 : if(isprint(ctx-&gt;encoded_msg[i]) == 0)</span> -<span class="lineNum"> 514 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII); -<span class="lineNum"> 515 </span> : : -<span class="lineNum"> 516 </span> : : /* Make sure there are enough fields in the SPA packet -<span class="lineNum"> 517 </span> : : * delimited with ':' chars -<span class="lineNum"> 518 </span> : : */ -<span class="lineNum"> 519 </span> :<span class="lineCov"> 385 : ndx = ctx-&gt;encoded_msg;</span> -<span class="lineNum"> 520 </span> : : -<span class="lineNum"> 521 </span> [<span class="branchCov" title="Branch 1 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 385 : if (num_fields(ndx) &lt; MIN_SPA_FIELDS)</span> -<span class="lineNum"> 522 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS); -<span class="lineNum"> 523 </span> : : -<span class="lineNum"> 524 </span> :<span class="lineCov"> 385 : ndx += last_field(ndx);</span> -<span class="lineNum"> 525 </span> : : -<span class="lineNum"> 526 </span> :<span class="lineCov"> 385 : t_size = strnlen(ndx, SHA512_B64_LEN+1);</span> -<span class="lineNum"> 527 </span> : : -<span class="lineNum"> 528 </span> : : /* Validate digest length -<span class="lineNum"> 529 </span> : : */ -<span class="lineNum"> 530 </span> :<span class="lineCov"> 385 : res = is_valid_digest_len(t_size, ctx);</span> -<span class="lineNum"> 531 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 532 </span> : : return res; -<span class="lineNum"> 533 </span> : : -<span class="lineNum"> 534 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(ctx-&gt;digest != NULL)</span> -<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;digest);</span> -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> : : /* Copy the digest into the context and terminate the encoded data -<span class="lineNum"> 538 </span> : : * at that point so the original digest is not part of the -<span class="lineNum"> 539 </span> : : * encoded string. -<span class="lineNum"> 540 </span> : : */ -<span class="lineNum"> 541 </span> :<span class="lineCov"> 385 : ctx-&gt;digest = strdup(ndx);</span> -<span class="lineNum"> 542 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(ctx-&gt;digest == NULL)</span> -<span class="lineNum"> 543 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 544 </span> : : -<span class="lineNum"> 545 </span> : : /* Chop the digest off of the encoded_msg bucket... -<span class="lineNum"> 546 </span> : : */ -<span class="lineNum"> 547 </span> :<span class="lineCov"> 385 : bzero((ndx-1), t_size);</span> -<span class="lineNum"> 548 </span> : : -<span class="lineNum"> 549 </span> :<span class="lineCov"> 385 : ctx-&gt;encoded_msg_len -= t_size+1;</span> -<span class="lineNum"> 550 </span> : : -<span class="lineNum"> 551 </span> : : /* Make a tmp bucket for processing base64 encoded data and -<span class="lineNum"> 552 </span> : : * other general use. -<span class="lineNum"> 553 </span> : : */ -<span class="lineNum"> 554 </span> :<span class="lineCov"> 385 : tbuf = calloc(1, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 555 </span> [<span class="branchCov" title="Branch 0 was taken 385 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 385 : if(tbuf == NULL)</span> -<span class="lineNum"> 556 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 557 </span> : : -<span class="lineNum"> 558 </span> : : /* Can now verify the digest. -<span class="lineNum"> 559 </span> : : */ -<span class="lineNum"> 560 </span> :<span class="lineCov"> 385 : res = verify_digest(tbuf, t_size, ctx);</span> -<span class="lineNum"> 561 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 385 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 562 </span> : : { -<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> -<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_DIGEST_VERIFICATION_FAILED);</span> -<span class="lineNum"> 565 </span> : : } -<span class="lineNum"> 566 </span> : : -<span class="lineNum"> 567 </span> : : /* Now we will work through the encoded data and extract (and base64- -<span class="lineNum"> 568 </span> : : * decode where necessary), the SPA data fields and populate the context. -<span class="lineNum"> 569 </span> : : */ -<span class="lineNum"> 570 </span> :<span class="lineCov"> 385 : ndx = ctx-&gt;encoded_msg;</span> -<span class="lineNum"> 571 </span> : : -<span class="lineNum"> 572 </span> [<span class="branchCov" title="Branch 0 was taken 3465 times"> + </span><span class="branchCov" title="Branch 1 was taken 385 times"> + </span>]:<span class="lineCov"> 3850 : for (i=0; i &lt; FIELD_PARSERS; i++)</span> -<span class="lineNum"> 573 </span> : : { -<span class="lineNum"> 574 </span> :<span class="lineCov"> 3465 : res = (*field_parser[i])(tbuf, &amp;ndx, &amp;t_size, ctx);</span> -<span class="lineNum"> 575 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3465 times"> + </span>]:<span class="lineCov"> 3465 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 576 </span> : : { -<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> -<span class="lineNum"> 578 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 579 </span> : : } -<span class="lineNum"> 580 </span> : : } -<span class="lineNum"> 581 </span> : : -<span class="lineNum"> 582 </span> : : /* Done with the tmp buffer. -<span class="lineNum"> 583 </span> : : */ -<span class="lineNum"> 584 </span> :<span class="lineCov"> 385 : free(tbuf);</span> -<span class="lineNum"> 585 </span> : : -<span class="lineNum"> 586 </span> : : /* Call the context initialized. -<span class="lineNum"> 587 </span> : : */ -<span class="lineNum"> 588 </span> :<span class="lineCov"> 385 : ctx-&gt;initval = FKO_CTX_INITIALIZED;</span> -<span class="lineNum"> 589 </span> :<span class="lineCov"> 385 : FKO_SET_CTX_INITIALIZED(ctx);</span> -<span class="lineNum"> 590 </span> : : -<span class="lineNum"> 591 </span> :<span class="lineCov"> 385 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 592 </span> : : } -<span class="lineNum"> 593 </span> : : -<span class="lineNum"> 594 </span> : : #ifdef HAVE_C_UNIT_TESTS -<span class="lineNum"> 595 </span> : : -<span class="lineNum"> 596 </span> : : DECLARE_UTEST(num_fields, &quot;Count the number of SPA fields in a SPA packet&quot;) -<span class="lineNum"> 597 </span> : : { -<span class="lineNum"> 598 </span> : : int ix_field=0; -<span class="lineNum"> 599 </span> : : char spa_packet[(MAX_SPA_FIELDS+1)*3]; -<span class="lineNum"> 600 </span> : : -<span class="lineNum"> 601 </span> : : /* Zeroing the spa packet */ -<span class="lineNum"> 602 </span> : : memset(spa_packet, 0, sizeof(spa_packet)); -<span class="lineNum"> 603 </span> : : -<span class="lineNum"> 604 </span> : : /* Check we are able to count the number of SPA fields */ -<span class="lineNum"> 605 </span> : : for(ix_field=0 ; ix_field&lt;=MAX_SPA_FIELDS+2 ; ix_field++) -<span class="lineNum"> 606 </span> : : { -<span class="lineNum"> 607 </span> : : strcat(spa_packet, &quot;x&quot;); -<span class="lineNum"> 608 </span> : : CU_ASSERT(num_fields(spa_packet) == ix_field); -<span class="lineNum"> 609 </span> : : strcat(spa_packet, SPA_FIELD_SEPARATOR); -<span class="lineNum"> 610 </span> : : } -<span class="lineNum"> 611 </span> : : -<span class="lineNum"> 612 </span> : : /* Check for possible overflow */ -<span class="lineNum"> 613 </span> : : strcat(spa_packet, &quot;x&quot;); -<span class="lineNum"> 614 </span> : : CU_ASSERT(num_fields(spa_packet) == MAX_SPA_FIELDS + 2); -<span class="lineNum"> 615 </span> : : strcat(spa_packet, &quot;x&quot;); -<span class="lineNum"> 616 </span> : : strcat(spa_packet, SPA_FIELD_SEPARATOR); -<span class="lineNum"> 617 </span> : : CU_ASSERT(num_fields(spa_packet) == MAX_SPA_FIELDS + 2); -<span class="lineNum"> 618 </span> : : } -<span class="lineNum"> 619 </span> : : -<span class="lineNum"> 620 </span> : : DECLARE_UTEST(last_field, &quot;Count the number of bytes to the last :&quot;) -<span class="lineNum"> 621 </span> : : { -<span class="lineNum"> 622 </span> : : int ix_field; -<span class="lineNum"> 623 </span> : : char spa_packet[(MAX_SPA_FIELDS+1)*3]; -<span class="lineNum"> 624 </span> : : -<span class="lineNum"> 625 </span> : : /* Zeroing the spa packet */ -<span class="lineNum"> 626 </span> : : memset(spa_packet, 0, sizeof(spa_packet)); -<span class="lineNum"> 627 </span> : : -<span class="lineNum"> 628 </span> : : /* Check for a valid count when the number of field is less than MAX_SPA_FIELDS */ -<span class="lineNum"> 629 </span> : : CU_ASSERT(last_field(&quot;a:&quot;) == 2); -<span class="lineNum"> 630 </span> : : CU_ASSERT(last_field(&quot;ab:abc:&quot;) == 7); -<span class="lineNum"> 631 </span> : : CU_ASSERT(last_field(&quot;abc:abcd:&quot;) == 9); -<span class="lineNum"> 632 </span> : : CU_ASSERT(last_field(&quot;abc:abcd:abc&quot;) == 9); -<span class="lineNum"> 633 </span> : : -<span class="lineNum"> 634 </span> : : -<span class="lineNum"> 635 </span> : : /* */ -<span class="lineNum"> 636 </span> : : for(ix_field=0 ; ix_field&lt;=MAX_SPA_FIELDS+2 ; ix_field++) -<span class="lineNum"> 637 </span> : : { -<span class="lineNum"> 638 </span> : : strcat(spa_packet, &quot;x&quot;); -<span class="lineNum"> 639 </span> : : strcat(spa_packet, SPA_FIELD_SEPARATOR); -<span class="lineNum"> 640 </span> : : } -<span class="lineNum"> 641 </span> : : CU_ASSERT(last_field(spa_packet) == ((MAX_SPA_FIELDS+2)*2)); -<span class="lineNum"> 642 </span> : : } -<span class="lineNum"> 643 </span> : : -<span class="lineNum"> 644 </span> : : int register_ts_fko_decode(void) -<span class="lineNum"> 645 </span> : : { -<span class="lineNum"> 646 </span> : : ts_init(&amp;TEST_SUITE(fko_decode), TEST_SUITE_DESCR(fko_decode), NULL, NULL); -<span class="lineNum"> 647 </span> : : ts_add_utest(&amp;TEST_SUITE(fko_decode), UTEST_FCT(num_fields), UTEST_DESCR(num_fields)); -<span class="lineNum"> 648 </span> : : ts_add_utest(&amp;TEST_SUITE(fko_decode), UTEST_FCT(last_field), UTEST_DESCR(last_field)); -<span class="lineNum"> 649 </span> : : -<span class="lineNum"> 650 </span> : : return register_ts(&amp;TEST_SUITE(fko_decode)); -<span class="lineNum"> 651 </span> : : } -<span class="lineNum"> 652 </span> : : -<span class="lineNum"> 653 </span> : : #endif /* HAVE_C_UNIT_TESTS */ -<span class="lineNum"> 654 </span> : : -<span class="lineNum"> 655 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html deleted file mode 100644 index b39ef127..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func-sort-c.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_digest.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_digest.c<span style="font-size: 80%;"> (<a href="fko_digest.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">41</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">56.9 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">60.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">58</td> - <td class="headerCovTableEntryLo">31.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_digest.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#38">set_spa_digest_type</a></td> - <td class="coverFnHi">938</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#64">fko_set_spa_digest_type</a></td> - <td class="coverFnHi">938</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#78">fko_get_spa_digest_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#258">fko_get_spa_digest</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#210">fko_set_spa_digest</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#122">set_digest</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#234">fko_set_raw_spa_digest</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#280">fko_get_raw_spa_digest</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#105">fko_get_raw_spa_digest_type</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#70">fko_set_raw_spa_digest_type</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html deleted file mode 100644 index 473c50f4..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.func.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_digest.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_digest.c<span style="font-size: 80%;"> (<a href="fko_digest.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">41</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">56.9 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">60.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">58</td> - <td class="headerCovTableEntryLo">31.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_digest.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#280">fko_get_raw_spa_digest</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#105">fko_get_raw_spa_digest_type</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#258">fko_get_spa_digest</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#78">fko_get_spa_digest_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#234">fko_set_raw_spa_digest</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#70">fko_set_raw_spa_digest_type</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#210">fko_set_spa_digest</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#64">fko_set_spa_digest_type</a></td> - <td class="coverFnHi">938</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#122">set_digest</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_digest.c.gcov.html#38">set_spa_digest_type</a></td> - <td class="coverFnHi">938</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html deleted file mode 100644 index 47b5642b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_digest.c.gcov.html +++ /dev/null @@ -1,383 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_digest.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_digest.c<span style="font-size: 80%;"> (source / <a href="fko_digest.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">41</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">56.9 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">60.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">58</td> - <td class="headerCovTableEntryLo">31.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_digest.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Create the base64-encoded digest for the current spa data. The -<span class="lineNum"> 7 </span> : : * digest used is determined by the digest_type setting in the -<span class="lineNum"> 8 </span> : : * fko context. -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 11 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 12 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * License (GNU General Public License): -<span class="lineNum"> 15 </span> : : * -<span class="lineNum"> 16 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 17 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 18 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 19 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 20 </span> : : * -<span class="lineNum"> 21 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 22 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 23 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 24 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 25 </span> : : * -<span class="lineNum"> 26 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 27 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 28 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 29 </span> : : * USA -<span class="lineNum"> 30 </span> : : * -<span class="lineNum"> 31 </span> : : ***************************************************************************** -<span class="lineNum"> 32 </span> : : */ -<span class="lineNum"> 33 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : /* Set the SPA digest type. -<a name="38"><span class="lineNum"> 38 </span> : : */</a> -<span class="lineNum"> 39 </span> : : static int -<span class="lineNum"> 40 </span> :<span class="lineCov"> 938 : set_spa_digest_type(fko_ctx_t ctx,</span> -<span class="lineNum"> 41 </span> : : short *digest_type_field, const short digest_type) -<span class="lineNum"> 42 </span> : : { -<span class="lineNum"> 43 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 44 </span> : : fiu_return_on(&quot;set_spa_digest_type_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 45 </span> : : #endif -<span class="lineNum"> 46 </span> : : /* Must be initialized -<span class="lineNum"> 47 </span> : : */ -<span class="lineNum"> 48 </span>[<span class="branchCov" title="Branch 0 was taken 938 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 938 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 938 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 49 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 52 </span> : : fiu_return_on(&quot;set_spa_digest_type_val&quot;, -<span class="lineNum"> 53 </span> : : FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL); -<span class="lineNum"> 54 </span> : : #endif -<span class="lineNum"> 55 </span> [<span class="branchCov" title="Branch 0 was taken 938 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 938 : if(digest_type &lt; 1 || digest_type &gt;= FKO_LAST_DIGEST_TYPE)</span> -<span class="lineNum"> 56 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL); -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> :<span class="lineCov"> 938 : *digest_type_field = digest_type;</span> -<span class="lineNum"> 59 </span> : : -<span class="lineNum"> 60 </span> :<span class="lineCov"> 938 : ctx-&gt;state |= FKO_DIGEST_TYPE_MODIFIED;</span> -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> :<span class="lineCov"> 938 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 63 </span> : : } -<a name="64"><span class="lineNum"> 64 </span> : : </a> -<span class="lineNum"> 65 </span> : : int -<span class="lineNum"> 66 </span> :<span class="lineCov"> 938 : fko_set_spa_digest_type(fko_ctx_t ctx, const short digest_type)</span> -<span class="lineNum"> 67 </span> : : { -<span class="lineNum"> 68 </span> :<span class="lineCov"> 938 : return set_spa_digest_type(ctx, &amp;ctx-&gt;digest_type, digest_type);</span> -<span class="lineNum"> 69 </span> : : } -<a name="70"><span class="lineNum"> 70 </span> : : </a> -<span class="lineNum"> 71 </span> : : int -<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : fko_set_raw_spa_digest_type(fko_ctx_t ctx, const short raw_digest_type)</span> -<span class="lineNum"> 73 </span> : : { -<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return set_spa_digest_type(ctx, &amp;ctx-&gt;raw_digest_type, raw_digest_type);</span> -<span class="lineNum"> 75 </span> : : } -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : /* Return the SPA digest type. -<a name="78"><span class="lineNum"> 78 </span> : : */</a> -<span class="lineNum"> 79 </span> : : int -<span class="lineNum"> 80 </span> :<span class="lineCov"> 801 : fko_get_spa_digest_type(fko_ctx_t ctx, short *digest_type)</span> -<span class="lineNum"> 81 </span> : : { -<span class="lineNum"> 82 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 83 </span> : : fiu_return_on(&quot;fko_get_spa_digest_type_init&quot;, -<span class="lineNum"> 84 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 85 </span> : : #endif -<span class="lineNum"> 86 </span> : : /* Must be initialized -<span class="lineNum"> 87 </span> : : */ -<span class="lineNum"> 88 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 89 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 92 </span> : : fiu_return_on(&quot;fko_get_spa_digest_type_val&quot;, -<span class="lineNum"> 93 </span> : : FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 94 </span> : : #endif -<span class="lineNum"> 95 </span> : : -<span class="lineNum"> 96 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(digest_type == NULL)</span> -<span class="lineNum"> 97 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 98 </span> : : -<span class="lineNum"> 99 </span> :<span class="lineCov"> 801 : *digest_type = ctx-&gt;digest_type;</span> -<span class="lineNum"> 100 </span> : : -<span class="lineNum"> 101 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 102 </span> : : } -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> : : /* Return the SPA digest type. -<a name="105"><span class="lineNum"> 105 </span> : : */</a> -<span class="lineNum"> 106 </span> : : int -<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : fko_get_raw_spa_digest_type(fko_ctx_t ctx, short *raw_digest_type)</span> -<span class="lineNum"> 108 </span> : : { -<span class="lineNum"> 109 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 110 </span> : : fiu_return_on(&quot;fko_get_raw_spa_digest_type_init&quot;, -<span class="lineNum"> 111 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 112 </span> : : #endif -<span class="lineNum"> 113 </span> : : /* Must be initialized -<span class="lineNum"> 114 </span> : : */ -<span class="lineNum"> 115 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 116 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 117 </span> : : -<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : *raw_digest_type = ctx-&gt;raw_digest_type;</span> -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 121 </span> : : } -<a name="122"><span class="lineNum"> 122 </span> : : </a> -<span class="lineNum"> 123 </span> : : static int -<span class="lineNum"> 124 </span> :<span class="lineCov"> 434 : set_digest(char *data, char **digest, short digest_type, int *digest_len)</span> -<span class="lineNum"> 125 </span> : : { -<span class="lineNum"> 126 </span> :<span class="lineCov"> 434 : char *md = NULL;</span> -<span class="lineNum"> 127 </span> : : int data_len; -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> :<span class="lineCov"> 434 : data_len = strnlen(data, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 130 </span> : : -<span class="lineNum"> 131 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 132 </span> : : fiu_return_on(&quot;set_digest_toobig&quot;, -<span class="lineNum"> 133 </span> : : FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG); -<span class="lineNum"> 134 </span> : : #endif -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(data_len == MAX_SPA_ENCODED_MSG_SIZE)</span> -<span class="lineNum"> 137 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG); -<span class="lineNum"> 138 </span> : : -<span class="lineNum"> 139 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 140 </span> : : fiu_return_on(&quot;set_digest_invalidtype&quot;, FKO_ERROR_INVALID_DIGEST_TYPE); -<span class="lineNum"> 141 </span> : : fiu_return_on(&quot;set_digest_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 142 </span> : : #endif -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 59 times"> + </span><span class="branchCov" title="Branch 2 was taken 375 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 434 : switch(digest_type)</span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] -<span class="lineNum"> 145 </span> : : { -<span class="lineNum"> 146 </span> : : case FKO_DIGEST_MD5: -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : md = calloc(1, MD_HEX_SIZE(MD5_DIGEST_LEN)+1);</span> -<span class="lineNum"> 148 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(md == NULL)</span> -<span class="lineNum"> 149 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 150 </span> : : -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : md5_base64(md,</span> -<span class="lineNum"> 152 </span> : : (unsigned char*)data, data_len); -<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : *digest_len = MD5_B64_LEN;</span> -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> : : case FKO_DIGEST_SHA1: -<span class="lineNum"> 157 </span> :<span class="lineCov"> 59 : md = calloc(1, MD_HEX_SIZE(SHA1_DIGEST_LEN)+1);</span> -<span class="lineNum"> 158 </span> [<span class="branchCov" title="Branch 0 was taken 59 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 59 : if(md == NULL)</span> -<span class="lineNum"> 159 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 160 </span> : : -<span class="lineNum"> 161 </span> :<span class="lineCov"> 59 : sha1_base64(md,</span> -<span class="lineNum"> 162 </span> : : (unsigned char*)data, data_len); -<span class="lineNum"> 163 </span> :<span class="lineCov"> 59 : *digest_len = SHA1_B64_LEN;</span> -<span class="lineNum"> 164 </span> :<span class="lineCov"> 59 : break;</span> -<span class="lineNum"> 165 </span> : : -<span class="lineNum"> 166 </span> : : case FKO_DIGEST_SHA256: -<span class="lineNum"> 167 </span> :<span class="lineCov"> 375 : md = calloc(1, MD_HEX_SIZE(SHA256_DIGEST_LEN)+1);</span> -<span class="lineNum"> 168 </span> [<span class="branchCov" title="Branch 0 was taken 375 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 375 : if(md == NULL)</span> -<span class="lineNum"> 169 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 170 </span> : : -<span class="lineNum"> 171 </span> :<span class="lineCov"> 375 : sha256_base64(md,</span> -<span class="lineNum"> 172 </span> : : (unsigned char*)data, data_len); -<span class="lineNum"> 173 </span> :<span class="lineCov"> 375 : *digest_len = SHA256_B64_LEN;</span> -<span class="lineNum"> 174 </span> :<span class="lineCov"> 375 : break;</span> -<span class="lineNum"> 175 </span> : : -<span class="lineNum"> 176 </span> : : case FKO_DIGEST_SHA384: -<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : md = calloc(1, MD_HEX_SIZE(SHA384_DIGEST_LEN)+1);</span> -<span class="lineNum"> 178 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(md == NULL)</span> -<span class="lineNum"> 179 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 180 </span> : : -<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : sha384_base64(md,</span> -<span class="lineNum"> 182 </span> : : (unsigned char*)data, data_len); -<span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : *digest_len = SHA384_B64_LEN;</span> -<span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 185 </span> : : -<span class="lineNum"> 186 </span> : : case FKO_DIGEST_SHA512: -<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : md = calloc(1, MD_HEX_SIZE(SHA512_DIGEST_LEN)+1);</span> -<span class="lineNum"> 188 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(md == NULL)</span> -<span class="lineNum"> 189 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 190 </span> : : -<span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : sha512_base64(md,</span> -<span class="lineNum"> 192 </span> : : (unsigned char*)data, data_len); -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : *digest_len = SHA512_B64_LEN;</span> -<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 195 </span> : : -<span class="lineNum"> 196 </span> : : default: -<span class="lineNum"> 197 </span> : : return(FKO_ERROR_INVALID_DIGEST_TYPE); -<span class="lineNum"> 198 </span> : : } -<span class="lineNum"> 199 </span> : : -<span class="lineNum"> 200 </span> : : /* Just in case this is a subsquent call to this function. We -<span class="lineNum"> 201 </span> : : * do not want to be leaking memory. -<span class="lineNum"> 202 </span> : : */ -<span class="lineNum"> 203 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(*digest != NULL)</span> -<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : free(*digest);</span> -<span class="lineNum"> 205 </span> : : -<span class="lineNum"> 206 </span> :<span class="lineCov"> 434 : *digest = md;</span> -<span class="lineNum"> 207 </span> : : -<span class="lineNum"> 208 </span> :<span class="lineCov"> 434 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 209 </span> : : } -<a name="210"><span class="lineNum"> 210 </span> : : </a> -<span class="lineNum"> 211 </span> : : int -<span class="lineNum"> 212 </span> :<span class="lineCov"> 434 : fko_set_spa_digest(fko_ctx_t ctx)</span> -<span class="lineNum"> 213 </span> : : { -<span class="lineNum"> 214 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 215 </span> : : fiu_return_on(&quot;fko_set_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 216 </span> : : #endif -<span class="lineNum"> 217 </span> : : /* Must be initialized -<span class="lineNum"> 218 </span> : : */ -<span class="lineNum"> 219 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 220 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 221 </span> : : -<span class="lineNum"> 222 </span> : : /* Must have encoded message data to start with. -<span class="lineNum"> 223 </span> : : */ -<span class="lineNum"> 224 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg == NULL)</span> -<span class="lineNum"> 225 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 226 </span> : : -<span class="lineNum"> 227 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 228 </span> : : fiu_return_on(&quot;fko_set_spa_digest_encoded&quot;, FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 229 </span> : : #endif -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> :<span class="lineCov"> 434 : return set_digest(ctx-&gt;encoded_msg, &amp;ctx-&gt;digest,</span> -<span class="lineNum"> 232 </span> :<span class="lineCov"> 434 : ctx-&gt;digest_type, &amp;ctx-&gt;digest_len);</span> -<span class="lineNum"> 233 </span> : : } -<a name="234"><span class="lineNum"> 234 </span> : : </a> -<span class="lineNum"> 235 </span> : : int -<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : fko_set_raw_spa_digest(fko_ctx_t ctx)</span> -<span class="lineNum"> 237 </span> : : { -<span class="lineNum"> 238 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 239 </span> : : fiu_return_on(&quot;fko_set_raw_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 240 </span> : : #endif -<span class="lineNum"> 241 </span> : : /* Must be initialized -<span class="lineNum"> 242 </span> : : */ -<span class="lineNum"> 243 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 244 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 245 </span> : : -<span class="lineNum"> 246 </span> : : /* Must have encoded message data to start with. -<span class="lineNum"> 247 </span> : : */ -<span class="lineNum"> 248 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg == NULL)</span> -<span class="lineNum"> 249 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 252 </span> : : fiu_return_on(&quot;fko_set_raw_spa_digest_val&quot;, FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 253 </span> : : #endif -<span class="lineNum"> 254 </span> : : -<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : return set_digest(ctx-&gt;encrypted_msg, &amp;ctx-&gt;raw_digest,</span> -<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : ctx-&gt;raw_digest_type, &amp;ctx-&gt;raw_digest_len);</span> -<span class="lineNum"> 257 </span> : : } -<a name="258"><span class="lineNum"> 258 </span> : : </a> -<span class="lineNum"> 259 </span> : : int -<span class="lineNum"> 260 </span> :<span class="lineCov"> 801 : fko_get_spa_digest(fko_ctx_t ctx, char **md)</span> -<span class="lineNum"> 261 </span> : : { -<span class="lineNum"> 262 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 263 </span> : : fiu_return_on(&quot;fko_get_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 264 </span> : : #endif -<span class="lineNum"> 265 </span> : : /* Must be initialized -<span class="lineNum"> 266 </span> : : */ -<span class="lineNum"> 267 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 268 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 269 </span> : : -<span class="lineNum"> 270 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 271 </span> : : fiu_return_on(&quot;fko_get_spa_digest_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 272 </span> : : #endif -<span class="lineNum"> 273 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(md == NULL)</span> -<span class="lineNum"> 274 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> :<span class="lineCov"> 801 : *md = ctx-&gt;digest;</span> -<span class="lineNum"> 277 </span> : : -<span class="lineNum"> 278 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 279 </span> : : } -<a name="280"><span class="lineNum"> 280 </span> : : </a> -<span class="lineNum"> 281 </span> : : int -<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : fko_get_raw_spa_digest(fko_ctx_t ctx, char **md)</span> -<span class="lineNum"> 283 </span> : : { -<span class="lineNum"> 284 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 285 </span> : : fiu_return_on(&quot;fko_get_raw_spa_digest_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 286 </span> : : #endif -<span class="lineNum"> 287 </span> : : /* Must be initialized -<span class="lineNum"> 288 </span> : : */ -<span class="lineNum"> 289 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 290 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 291 </span> : : -<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : *md = ctx-&gt;raw_digest;</span> -<span class="lineNum"> 293 </span> : : -<span class="lineNum"> 294 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 295 </span> : : } -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html deleted file mode 100644 index 2ab146e7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encode.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encode.c<span style="font-size: 80%;"> (<a href="fko_encode.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntry">64</td> - <td class="headerCovTableEntryMed">78.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">25</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">44.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_encode.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encode.c.gcov.html#40">append_b64</a></td> - <td class="coverFnHi">868</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encode.c.gcov.html#239">fko_get_encoded_data</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encode.c.gcov.html#78">fko_encode_spa_data</a></td> - <td class="coverFnHi">434</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html deleted file mode 100644 index 39513c66..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.func.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encode.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encode.c<span style="font-size: 80%;"> (<a href="fko_encode.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntry">64</td> - <td class="headerCovTableEntryMed">78.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">25</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">44.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_encode.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encode.c.gcov.html#40">append_b64</a></td> - <td class="coverFnHi">868</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encode.c.gcov.html#78">fko_encode_spa_data</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encode.c.gcov.html#239">fko_get_encoded_data</a></td> - <td class="coverFnHi">801</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html deleted file mode 100644 index 4d44eb94..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encode.c.gcov.html +++ /dev/null @@ -1,411 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encode.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encode.c<span style="font-size: 80%;"> (source / <a href="fko_encode.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">50</td> - <td class="headerCovTableEntry">64</td> - <td class="headerCovTableEntryMed">78.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">25</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntryLo">44.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_encode.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Encodes some pieces of the spa data then puts together all of -<span class="lineNum"> 7 </span> : : * the necessary pieces to gether to create the single encoded -<span class="lineNum"> 8 </span> : : * message string. -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 11 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 12 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * License (GNU General Public License): -<span class="lineNum"> 15 </span> : : * -<span class="lineNum"> 16 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 17 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 18 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 19 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 20 </span> : : * -<span class="lineNum"> 21 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 22 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 23 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 24 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 25 </span> : : * -<span class="lineNum"> 26 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 27 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 28 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 29 </span> : : * USA -<span class="lineNum"> 30 </span> : : * -<span class="lineNum"> 31 </span> : : ***************************************************************************** -<span class="lineNum"> 32 </span> : : */ -<span class="lineNum"> 33 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;base64.h&quot; -<span class="lineNum"> 36 </span> : : #include &quot;digest.h&quot; -<span class="lineNum"> 37 </span> : : -<span class="lineNum"> 38 </span> : : /* Take a given string, base64-encode it and append it to the given -<span class="lineNum"> 39 </span> : : * buffer. -<a name="40"><span class="lineNum"> 40 </span> : : */</a> -<span class="lineNum"> 41 </span> : : static int -<span class="lineNum"> 42 </span> :<span class="lineCov"> 868 : append_b64(char* tbuf, char *str)</span> -<span class="lineNum"> 43 </span> : : { -<span class="lineNum"> 44 </span> :<span class="lineCov"> 868 : int len = strnlen(str, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 45 </span> : : char *bs; -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 48 </span> : : fiu_return_on(&quot;append_b64_toobig&quot;, -<span class="lineNum"> 49 </span> : : FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG); -<span class="lineNum"> 50 </span> : : #endif -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> [<span class="branchCov" title="Branch 0 was taken 868 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 868 : if(len &gt;= MAX_SPA_ENCODED_MSG_SIZE)</span> -<span class="lineNum"> 53 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG); -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 56 </span> : : fiu_return_on(&quot;append_b64_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 57 </span> : : #endif -<span class="lineNum"> 58 </span> : : -<span class="lineNum"> 59 </span> :<span class="lineCov"> 868 : bs = calloc(1, ((len/3)*4)+8);</span> -<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 868 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 868 : if(bs == NULL)</span> -<span class="lineNum"> 61 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> :<span class="lineCov"> 868 : b64_encode((unsigned char*)str, bs, len);</span> -<span class="lineNum"> 64 </span> : : -<span class="lineNum"> 65 </span> : : /* --DSS XXX: make sure to check here if later decoding -<span class="lineNum"> 66 </span> : : * becomes a problem. -<span class="lineNum"> 67 </span> : : */ -<span class="lineNum"> 68 </span> :<span class="lineCov"> 868 : strip_b64_eq(bs);</span> -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> :<span class="lineCov"> 868 : strlcat(tbuf, bs, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> :<span class="lineCov"> 868 : free(bs);</span> -<span class="lineNum"> 73 </span> : : -<span class="lineNum"> 74 </span> :<span class="lineCov"> 868 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 75 </span> : : } -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : /* Set the SPA encryption type. -<a name="78"><span class="lineNum"> 78 </span> : : */</a> -<span class="lineNum"> 79 </span> : : int -<span class="lineNum"> 80 </span> :<span class="lineCov"> 434 : fko_encode_spa_data(fko_ctx_t ctx)</span> -<span class="lineNum"> 81 </span> : : { -<span class="lineNum"> 82 </span> :<span class="lineCov"> 434 : int res, offset = 0;</span> -<span class="lineNum"> 83 </span> : : char *tbuf; -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 86 </span> : : fiu_return_on(&quot;fko_encode_spa_data_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 87 </span> : : #endif -<span class="lineNum"> 88 </span> : : /* Must be initialized -<span class="lineNum"> 89 </span> : : */ -<span class="lineNum"> 90 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 91 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 92 </span> : : -<span class="lineNum"> 93 </span> : : /* Check prerequisites. -<span class="lineNum"> 94 </span> : : * --DSS XXX: Needs review. Also, we could make this more robust (or -<span class="lineNum"> 95 </span> : : * (at leaset expand the error reporting for the missing -<span class="lineNum"> 96 </span> : : * data). -<span class="lineNum"> 97 </span> : : */ -<span class="lineNum"> 98 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 99 </span> : : fiu_return_on(&quot;fko_encode_spa_data_valid&quot;, FKO_ERROR_INCOMPLETE_SPA_DATA); -<span class="lineNum"> 100 </span> : : #endif -<span class="lineNum"> 101 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if( validate_username(ctx-&gt;username) != FKO_SUCCESS</span> -<span class="lineNum"> 102 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 434 : || ctx-&gt;version == NULL || strnlen(ctx-&gt;version, MAX_SPA_VERSION_SIZE) == 0</span> -<span class="lineNum"> 103 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 434 : || ctx-&gt;message == NULL || strnlen(ctx-&gt;message, MAX_SPA_MESSAGE_SIZE) == 0)</span> -<span class="lineNum"> 104 </span> : : { -<span class="lineNum"> 105 </span> : : return(FKO_ERROR_INCOMPLETE_SPA_DATA); -<span class="lineNum"> 106 </span> : : } -<span class="lineNum"> 107 </span> : : -<span class="lineNum"> 108 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;message_type == FKO_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 109 </span> : : { -<span class="lineNum"> 110 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access == NULL || strnlen(ctx-&gt;nat_access, MAX_SPA_MESSAGE_SIZE) == 0)</span> -<span class="lineNum"> 111 </span> : : return(FKO_ERROR_INCOMPLETE_SPA_DATA); -<span class="lineNum"> 112 </span> : : } -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 115 </span> : : fiu_return_on(&quot;fko_encode_spa_data_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 116 </span> : : #endif -<span class="lineNum"> 117 </span> : : /* Allocate our initial tmp buffer. -<span class="lineNum"> 118 </span> : : */ -<span class="lineNum"> 119 </span> :<span class="lineCov"> 434 : tbuf = calloc(1, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 120 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(tbuf == NULL)</span> -<span class="lineNum"> 121 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 122 </span> : : -<span class="lineNum"> 123 </span> : : /* Put it together a piece at a time, starting with the rand val. -<span class="lineNum"> 124 </span> : : */ -<span class="lineNum"> 125 </span> :<span class="lineCov"> 434 : strlcpy(tbuf, ctx-&gt;rand_val, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> : : /* Add the base64-encoded username. -<span class="lineNum"> 128 </span> : : */ -<span class="lineNum"> 129 </span> :<span class="lineCov"> 434 : strlcat(tbuf, &quot;:&quot;, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 130 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if((res = append_b64(tbuf, ctx-&gt;username)) != FKO_SUCCESS)</span> -<span class="lineNum"> 131 </span> : : { -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> -<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 134 </span> : : } -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> : : /* Add the timestamp. -<span class="lineNum"> 137 </span> : : */ -<span class="lineNum"> 138 </span> :<span class="lineCov"> 434 : offset = strlen(tbuf);</span> -<span class="lineNum"> 139 </span> :<span class="lineCov"> 434 : snprintf(((char*)tbuf+offset), FKO_ENCODE_TMP_BUF_SIZE - offset,</span> -<span class="lineNum"> 140 </span> :<span class="lineCov"> 434 : &quot;:%u:&quot;, (unsigned int) ctx-&gt;timestamp);</span> -<span class="lineNum"> 141 </span> : : -<span class="lineNum"> 142 </span> : : /* Add the version string. -<span class="lineNum"> 143 </span> : : */ -<span class="lineNum"> 144 </span> :<span class="lineCov"> 434 : strlcat(tbuf, ctx-&gt;version, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 145 </span> : : -<span class="lineNum"> 146 </span> : : /* Before we add the message type value, we will once again -<span class="lineNum"> 147 </span> : : * check for whether or not a client_timeout was specified -<span class="lineNum"> 148 </span> : : * since the message_type was set. If this is the case, then -<span class="lineNum"> 149 </span> : : * we want to adjust the message_type first. The easy way -<span class="lineNum"> 150 </span> : : * to do this is simply call fko_set_spa_client_timeout and set -<span class="lineNum"> 151 </span> : : * it to its current value. This will force a re-check and -<span class="lineNum"> 152 </span> : : * possible reset of the message type. -<span class="lineNum"> 153 </span> : : * -<span class="lineNum"> 154 </span> : : */ -<span class="lineNum"> 155 </span> :<span class="lineCov"> 434 : fko_set_spa_client_timeout(ctx, ctx-&gt;client_timeout);</span> -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> : : /* Add the message type value. -<span class="lineNum"> 158 </span> : : */ -<span class="lineNum"> 159 </span> :<span class="lineCov"> 434 : offset = strlen(tbuf);</span> -<span class="lineNum"> 160 </span> :<span class="lineCov"> 434 : snprintf(((char*)tbuf+offset), FKO_ENCODE_TMP_BUF_SIZE - offset,</span> -<span class="lineNum"> 161 </span> :<span class="lineCov"> 434 : &quot;:%i:&quot;, ctx-&gt;message_type);</span> -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> : : /* Add the base64-encoded SPA message. -<span class="lineNum"> 164 </span> : : */ -<span class="lineNum"> 165 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if((res = append_b64(tbuf, ctx-&gt;message)) != FKO_SUCCESS)</span> -<span class="lineNum"> 166 </span> : : { -<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> -<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 169 </span> : : } -<span class="lineNum"> 170 </span> : : -<span class="lineNum"> 171 </span> : : /* If a nat_access message was given, add it to the SPA -<span class="lineNum"> 172 </span> : : * message. -<span class="lineNum"> 173 </span> : : */ -<span class="lineNum"> 174 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;nat_access != NULL)</span> -<span class="lineNum"> 175 </span> : : { -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : strlcat(tbuf, &quot;:&quot;, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 177 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = append_b64(tbuf, ctx-&gt;nat_access)) != FKO_SUCCESS)</span> -<span class="lineNum"> 178 </span> : : { -<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> -<span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 181 </span> : : } -<span class="lineNum"> 182 </span> : : } -<span class="lineNum"> 183 </span> : : -<span class="lineNum"> 184 </span> : : /* If we have a server_auth field set. Add it here. -<span class="lineNum"> 185 </span> : : * -<span class="lineNum"> 186 </span> : : */ -<span class="lineNum"> 187 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;server_auth != NULL)</span> -<span class="lineNum"> 188 </span> : : { -<span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : strlcat(tbuf, &quot;:&quot;, FKO_ENCODE_TMP_BUF_SIZE);</span> -<span class="lineNum"> 190 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = append_b64(tbuf, ctx-&gt;server_auth)) != FKO_SUCCESS)</span> -<span class="lineNum"> 191 </span> : : { -<span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : free(tbuf);</span> -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 194 </span> : : } -<span class="lineNum"> 195 </span> : : } -<span class="lineNum"> 196 </span> : : -<span class="lineNum"> 197 </span> : : /* If a client timeout is specified and we are not dealing with a -<span class="lineNum"> 198 </span> : : * SPA command message, add the timeout here. -<span class="lineNum"> 199 </span> : : */ -<span class="lineNum"> 200 </span>[<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 433 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;client_timeout &gt; 0 &amp;&amp; ctx-&gt;message_type != FKO_COMMAND_MSG)</span> -<span class="lineNum"> 201 </span> : : { -<span class="lineNum"> 202 </span> :<span class="lineCov"> 1 : offset = strlen(tbuf);</span> -<span class="lineNum"> 203 </span> :<span class="lineCov"> 1 : snprintf(((char*)tbuf+offset), FKO_ENCODE_TMP_BUF_SIZE - offset,</span> -<span class="lineNum"> 204 </span> : : &quot;:%i&quot;, ctx-&gt;client_timeout); -<span class="lineNum"> 205 </span> : : } -<span class="lineNum"> 206 </span> : : -<span class="lineNum"> 207 </span> : : /* If encoded_msg is not null, then we assume it needs to -<span class="lineNum"> 208 </span> : : * be freed before re-assignment. -<span class="lineNum"> 209 </span> : : */ -<span class="lineNum"> 210 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg != NULL)</span> -<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;encoded_msg);</span> -<span class="lineNum"> 212 </span> : : -<span class="lineNum"> 213 </span> : : /* Copy our encoded data into the context. -<span class="lineNum"> 214 </span> : : */ -<span class="lineNum"> 215 </span> :<span class="lineCov"> 434 : ctx-&gt;encoded_msg = strdup(tbuf);</span> -<span class="lineNum"> 216 </span> :<span class="lineCov"> 434 : free(tbuf);</span> -<span class="lineNum"> 217 </span> : : -<span class="lineNum"> 218 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg == NULL)</span> -<span class="lineNum"> 219 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> :<span class="lineCov"> 434 : ctx-&gt;encoded_msg_len = strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 222 </span> : : -<span class="lineNum"> 223 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if(! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> -<span class="lineNum"> 224 </span> : : return(FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL); -<span class="lineNum"> 225 </span> : : -<span class="lineNum"> 226 </span> : : /* At this point we can compute the digest for this SPA data. -<span class="lineNum"> 227 </span> : : */ -<span class="lineNum"> 228 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if((res = fko_set_spa_digest(ctx)) != FKO_SUCCESS)</span> -<span class="lineNum"> 229 </span> : : return(res); -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> : : /* Here we can clear the modified flags on the SPA data fields. -<span class="lineNum"> 232 </span> : : */ -<span class="lineNum"> 233 </span> :<span class="lineCov"> 434 : FKO_CLEAR_SPA_DATA_MODIFIED(ctx);</span> -<span class="lineNum"> 234 </span> : : -<span class="lineNum"> 235 </span> :<span class="lineCov"> 434 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 236 </span> : : } -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> : : /* Return the fko SPA encrypted data. -<a name="239"><span class="lineNum"> 239 </span> : : */</a> -<span class="lineNum"> 240 </span> : : int -<span class="lineNum"> 241 </span> :<span class="lineCov"> 801 : fko_get_encoded_data(fko_ctx_t ctx, char **enc_msg)</span> -<span class="lineNum"> 242 </span> : : { -<span class="lineNum"> 243 </span> : : /* Must be initialized -<span class="lineNum"> 244 </span> : : */ -<span class="lineNum"> 245 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 246 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 247 </span> : : -<span class="lineNum"> 248 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(enc_msg == NULL)</span> -<span class="lineNum"> 249 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> :<span class="lineCov"> 801 : *enc_msg = ctx-&gt;encoded_msg;</span> -<span class="lineNum"> 252 </span> : : -<span class="lineNum"> 253 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 254 </span> : : } -<span class="lineNum"> 255 </span> : : -<span class="lineNum"> 256 </span> : : /* Set the fko SPA encoded data (this is a convenience -<span class="lineNum"> 257 </span> : : * function mostly used for tests that involve fuzzing). -<span class="lineNum"> 258 </span> : : */ -<span class="lineNum"> 259 </span> : : #if FUZZING_INTERFACES -<span class="lineNum"> 260 </span> : : int -<span class="lineNum"> 261 </span> : : fko_set_encoded_data(fko_ctx_t ctx, -<span class="lineNum"> 262 </span> : : const char * const encoded_msg, const int msg_len, -<span class="lineNum"> 263 </span> : : const int require_digest, const int digest_type) -<span class="lineNum"> 264 </span> : : { -<span class="lineNum"> 265 </span> : : char *tbuf = NULL; -<span class="lineNum"> 266 </span> : : int res = FKO_SUCCESS, mlen; -<span class="lineNum"> 267 </span> : : -<span class="lineNum"> 268 </span> : : /* Must be initialized -<span class="lineNum"> 269 </span> : : */ -<span class="lineNum"> 270 </span> : : if(!CTX_INITIALIZED(ctx)) -<span class="lineNum"> 271 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 272 </span> : : -<span class="lineNum"> 273 </span> : : if(encoded_msg == NULL) -<span class="lineNum"> 274 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> : : ctx-&gt;encoded_msg = strdup(encoded_msg); -<span class="lineNum"> 277 </span> : : -<span class="lineNum"> 278 </span> : : ctx-&gt;state |= FKO_DATA_MODIFIED; -<span class="lineNum"> 279 </span> : : -<span class="lineNum"> 280 </span> : : if(ctx-&gt;encoded_msg == NULL) -<span class="lineNum"> 281 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 282 </span> : : -<span class="lineNum"> 283 </span> : : /* allow arbitrary length (i.e. let the decode routines validate -<span class="lineNum"> 284 </span> : : * SPA message length). -<span class="lineNum"> 285 </span> : : */ -<span class="lineNum"> 286 </span> : : ctx-&gt;encoded_msg_len = msg_len; -<span class="lineNum"> 287 </span> : : -<span class="lineNum"> 288 </span> : : if(require_digest) -<span class="lineNum"> 289 </span> : : { -<span class="lineNum"> 290 </span> : : fko_set_spa_digest_type(ctx, digest_type); -<span class="lineNum"> 291 </span> : : if((res = fko_set_spa_digest(ctx)) != FKO_SUCCESS) -<span class="lineNum"> 292 </span> : : { -<span class="lineNum"> 293 </span> : : return res; -<span class="lineNum"> 294 </span> : : } -<span class="lineNum"> 295 </span> : : -<span class="lineNum"> 296 </span> : : /* append the digest to the encoded message buffer -<span class="lineNum"> 297 </span> : : */ -<span class="lineNum"> 298 </span> : : mlen = ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + 2; -<span class="lineNum"> 299 </span> : : tbuf = calloc(1, mlen); -<span class="lineNum"> 300 </span> : : if(tbuf == NULL) -<span class="lineNum"> 301 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 302 </span> : : -<span class="lineNum"> 303 </span> : : /* memcpy since the provided encoded buffer might -<span class="lineNum"> 304 </span> : : * have an embedded NULL? -<span class="lineNum"> 305 </span> : : */ -<span class="lineNum"> 306 </span> : : mlen = snprintf(tbuf, mlen, &quot;%s:%s&quot;, ctx-&gt;encoded_msg, ctx-&gt;digest); -<span class="lineNum"> 307 </span> : : -<span class="lineNum"> 308 </span> : : if(ctx-&gt;encoded_msg != NULL) -<span class="lineNum"> 309 </span> : : free(ctx-&gt;encoded_msg); -<span class="lineNum"> 310 </span> : : -<span class="lineNum"> 311 </span> : : ctx-&gt;encoded_msg = strdup(tbuf); -<span class="lineNum"> 312 </span> : : free(tbuf); -<span class="lineNum"> 313 </span> : : -<span class="lineNum"> 314 </span> : : if(ctx-&gt;encoded_msg == NULL) -<span class="lineNum"> 315 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 316 </span> : : -<span class="lineNum"> 317 </span> : : ctx-&gt;encoded_msg_len = mlen; -<span class="lineNum"> 318 </span> : : } -<span class="lineNum"> 319 </span> : : -<span class="lineNum"> 320 </span> : : FKO_CLEAR_SPA_DATA_MODIFIED(ctx); -<span class="lineNum"> 321 </span> : : -<span class="lineNum"> 322 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 323 </span> : : } -<span class="lineNum"> 324 </span> : : #endif -<span class="lineNum"> 325 </span> : : -<span class="lineNum"> 326 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html deleted file mode 100644 index 96eddb50..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func-sort-c.html +++ /dev/null @@ -1,197 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encryption.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encryption.c<span style="font-size: 80%;"> (<a href="fko_encryption.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">117</td> - <td class="headerCovTableEntry">322</td> - <td class="headerCovTableEntryLo">36.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">29</td> - <td class="headerCovTableEntryLo">37.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">75</td> - <td class="headerCovTableEntry">340</td> - <td class="headerCovTableEntryLo">22.1 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_encryption.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#527">fko_set_spa_encryption_mode</a></td> - <td class="coverFnHi">1781</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#555">fko_get_spa_encryption_mode</a></td> - <td class="coverFnHi">1217</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#512">fko_get_spa_encryption_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#484">fko_set_spa_encryption_type</a></td> - <td class="coverFnHi">569</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#573">fko_encrypt_spa_data</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#45">_rijndael_encrypt</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#665">fko_encryption_type</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#625">fko_decrypt_spa_data</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#160">_rijndael_decrypt</a></td> - <td class="coverFnHi">387</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#693">fko_set_gpg_recipient</a></td> - <td class="coverFnHi">2</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#737">fko_set_gpg_exe</a></td> - <td class="coverFnHi">1</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1121">fko_gpg_signature_id_match</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1025">fko_get_gpg_signature_id</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#873">fko_set_gpg_home_dir</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#791">fko_get_gpg_recipient</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#412">gpg_decrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#993">fko_get_gpg_signature_fpr</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#810">fko_set_gpg_signer</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#924">fko_set_gpg_signature_verify</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#975">fko_get_gpg_ignore_verify_error</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1161">fko_gpg_signature_fpr_match</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1089">fko_get_gpg_signature_status</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#772">fko_get_gpg_exe</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#958">fko_set_gpg_ignore_verify_error</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#907">fko_get_gpg_home_dir</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#277">gpg_encrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#941">fko_get_gpg_signature_verify</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#854">fko_get_gpg_signer</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1057">fko_get_gpg_signature_summary</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html deleted file mode 100644 index 676b2426..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.func.html +++ /dev/null @@ -1,197 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encryption.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encryption.c<span style="font-size: 80%;"> (<a href="fko_encryption.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">117</td> - <td class="headerCovTableEntry">322</td> - <td class="headerCovTableEntryLo">36.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">29</td> - <td class="headerCovTableEntryLo">37.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">75</td> - <td class="headerCovTableEntry">340</td> - <td class="headerCovTableEntryLo">22.1 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_encryption.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#160">_rijndael_decrypt</a></td> - <td class="coverFnHi">387</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#45">_rijndael_encrypt</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#625">fko_decrypt_spa_data</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#573">fko_encrypt_spa_data</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#665">fko_encryption_type</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#772">fko_get_gpg_exe</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#907">fko_get_gpg_home_dir</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#975">fko_get_gpg_ignore_verify_error</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#791">fko_get_gpg_recipient</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#993">fko_get_gpg_signature_fpr</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1025">fko_get_gpg_signature_id</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1089">fko_get_gpg_signature_status</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1057">fko_get_gpg_signature_summary</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#941">fko_get_gpg_signature_verify</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#854">fko_get_gpg_signer</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#555">fko_get_spa_encryption_mode</a></td> - <td class="coverFnHi">1217</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#512">fko_get_spa_encryption_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1161">fko_gpg_signature_fpr_match</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#1121">fko_gpg_signature_id_match</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#737">fko_set_gpg_exe</a></td> - <td class="coverFnHi">1</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#873">fko_set_gpg_home_dir</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#958">fko_set_gpg_ignore_verify_error</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#693">fko_set_gpg_recipient</a></td> - <td class="coverFnHi">2</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#924">fko_set_gpg_signature_verify</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#810">fko_set_gpg_signer</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#527">fko_set_spa_encryption_mode</a></td> - <td class="coverFnHi">1781</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#484">fko_set_spa_encryption_type</a></td> - <td class="coverFnHi">569</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#412">gpg_decrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_encryption.c.gcov.html#277">gpg_encrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html deleted file mode 100644 index 645a89d3..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_encryption.c.gcov.html +++ /dev/null @@ -1,1280 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_encryption.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_encryption.c<span style="font-size: 80%;"> (source / <a href="fko_encryption.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">117</td> - <td class="headerCovTableEntry">322</td> - <td class="headerCovTableEntryLo">36.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">29</td> - <td class="headerCovTableEntryLo">37.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">75</td> - <td class="headerCovTableEntry">340</td> - <td class="headerCovTableEntryLo">22.1 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_encryption.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa encryption type. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;base64.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 38 </span> : : #include &quot;gpgme_funcs.h&quot; -<span class="lineNum"> 39 </span> : : #if HAVE_SYS_STAT_H -<span class="lineNum"> 40 </span> : : #include &lt;sys/stat.h&gt; -<span class="lineNum"> 41 </span> : : #endif -<span class="lineNum"> 42 </span> : : #endif -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : /* Prep and encrypt using Rijndael -<a name="45"><span class="lineNum"> 45 </span> : : */</a> -<span class="lineNum"> 46 </span> : : static int -<span class="lineNum"> 47 </span> :<span class="lineCov"> 434 : _rijndael_encrypt(fko_ctx_t ctx, const char *enc_key, const int enc_key_len)</span> -<span class="lineNum"> 48 </span> : : { -<span class="lineNum"> 49 </span> : : char *plaintext; -<span class="lineNum"> 50 </span> : : char *b64ciphertext; -<span class="lineNum"> 51 </span> : : unsigned char *ciphertext; -<span class="lineNum"> 52 </span> : : int cipher_len; -<span class="lineNum"> 53 </span> : : int pt_len; -<span class="lineNum"> 54 </span> :<span class="lineCov"> 434 : int zero_free_rv = FKO_SUCCESS;</span> -<span class="lineNum"> 55 </span> : : -<span class="lineNum"> 56 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 434 : if(enc_key_len &lt; 0 || enc_key_len &gt; RIJNDAEL_MAX_KEYSIZE)</span> -<span class="lineNum"> 57 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 58 </span> : : -<span class="lineNum"> 59 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> -<span class="lineNum"> 60 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL); -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : switch(ctx-&gt;digest_len)</span> -<span class="lineNum"> 63 </span> : : { -<span class="lineNum"> 64 </span> : : case MD5_B64_LEN: -<span class="lineNum"> 65 </span> : : break; -<span class="lineNum"> 66 </span> : : case SHA1_B64_LEN: -<span class="lineNum"> 67 </span> : : break; -<span class="lineNum"> 68 </span> : : case SHA256_B64_LEN: -<span class="lineNum"> 69 </span> : : break; -<span class="lineNum"> 70 </span> : : case SHA384_B64_LEN: -<span class="lineNum"> 71 </span> : : break; -<span class="lineNum"> 72 </span> : : case SHA512_B64_LEN: -<span class="lineNum"> 73 </span> : : break; -<span class="lineNum"> 74 </span> : : default: -<span class="lineNum"> 75 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL); -<span class="lineNum"> 76 </span> : : } -<span class="lineNum"> 77 </span> : : -<span class="lineNum"> 78 </span> :<span class="lineCov"> 416 : pt_len = ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + RIJNDAEL_BLOCKSIZE + 2;</span> -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> : : /* Make a bucket big enough to hold the enc msg + digest (plaintext) -<span class="lineNum"> 81 </span> : : * and populate it appropriately. -<span class="lineNum"> 82 </span> : : */ -<span class="lineNum"> 83 </span> :<span class="lineCov"> 416 : plaintext = calloc(1, pt_len);</span> -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(plaintext == NULL)</span> -<span class="lineNum"> 86 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 87 </span> : : -<span class="lineNum"> 88 </span> :<span class="lineCov"> 832 : pt_len = snprintf(plaintext, pt_len, &quot;%s:%s&quot;, ctx-&gt;encoded_msg, ctx-&gt;digest);</span> -<span class="lineNum"> 89 </span> : : -<span class="lineNum"> 90 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(! is_valid_pt_msg_len(pt_len))</span> -<span class="lineNum"> 91 </span> : : { -<span class="lineNum"> 92 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plaintext, pt_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 93 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL); -<span class="lineNum"> 94 </span> : : else -<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 96 </span> : : } -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : /* Make a bucket for the encrypted version and populate it. -<span class="lineNum"> 99 </span> : : */ -<span class="lineNum"> 100 </span> :<span class="lineCov"> 416 : ciphertext = calloc(1, pt_len + 32); /* Plus padding for salt and Block */</span> -<span class="lineNum"> 101 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(ciphertext == NULL)</span> -<span class="lineNum"> 102 </span> : : { -<span class="lineNum"> 103 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plaintext, pt_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 104 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 105 </span> : : else -<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 107 </span> : : } -<span class="lineNum"> 108 </span> : : -<span class="lineNum"> 109 </span> :<span class="lineCov"> 416 : cipher_len = rij_encrypt(</span> -<span class="lineNum"> 110 </span> : : (unsigned char*)plaintext, pt_len, -<span class="lineNum"> 111 </span> : : (char*)enc_key, enc_key_len, -<span class="lineNum"> 112 </span> : : ciphertext, ctx-&gt;encryption_mode -<span class="lineNum"> 113 </span> : : ); -<span class="lineNum"> 114 </span> : : -<span class="lineNum"> 115 </span> : : /* Now make a bucket for the base64-encoded version and populate it. -<span class="lineNum"> 116 </span> : : */ -<span class="lineNum"> 117 </span> :<span class="lineCov"> 416 : b64ciphertext = calloc(1, ((cipher_len / 3) * 4) + 8);</span> -<span class="lineNum"> 118 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(b64ciphertext == NULL)</span> -<span class="lineNum"> 119 </span> : : { -<span class="lineNum"> 120 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) ciphertext, pt_len+32) == FKO_SUCCESS</span> -<span class="lineNum"> 121 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; zero_free(plaintext, pt_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 122 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 123 </span> : : else -<span class="lineNum"> 124 </span> : : return(FKO_ERROR_ZERO_OUT_DATA); -<span class="lineNum"> 125 </span> : : } -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> :<span class="lineCov"> 416 : b64_encode(ciphertext, b64ciphertext, cipher_len);</span> -<span class="lineNum"> 128 </span> :<span class="lineCov"> 416 : strip_b64_eq(b64ciphertext);</span> -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(ctx-&gt;encrypted_msg != NULL)</span> -<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE));</span> -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg = strdup(b64ciphertext);</span> -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> : : /* Clean-up -<span class="lineNum"> 137 </span> : : */ -<span class="lineNum"> 138 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(zero_free(plaintext, pt_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(zero_free((char *) ciphertext, pt_len+32) != FKO_SUCCESS)</span> -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> [<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(zero_free(b64ciphertext, strnlen(b64ciphertext,</span> -<span class="lineNum"> 145 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) -<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 147 </span> : : -<span class="lineNum"> 148 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(ctx-&gt;encrypted_msg == NULL)</span> -<span class="lineNum"> 149 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 150 </span> : : -<span class="lineNum"> 151 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg_len = strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if(! is_valid_encoded_msg_len(ctx-&gt;encrypted_msg_len))</span> -<span class="lineNum"> 154 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL); -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> :<span class="lineCov"> 416 : return(zero_free_rv);</span> -<span class="lineNum"> 157 </span> : : } -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> : : /* Decode, decrypt, and parse SPA data into the context. -<a name="160"><span class="lineNum"> 160 </span> : : */</a> -<span class="lineNum"> 161 </span> : : static int -<span class="lineNum"> 162 </span> :<span class="lineCov"> 387 : _rijndael_decrypt(fko_ctx_t ctx,</span> -<span class="lineNum"> 163 </span> : : const char *dec_key, const int key_len, int encryption_mode) -<span class="lineNum"> 164 </span> : : { -<span class="lineNum"> 165 </span> : : unsigned char *ndx; -<span class="lineNum"> 166 </span> : : unsigned char *cipher; -<span class="lineNum"> 167 </span> :<span class="lineCov"> 387 : int cipher_len=0, pt_len, i, err = 0, res = FKO_SUCCESS;</span> -<span class="lineNum"> 168 </span> :<span class="lineCov"> 387 : int zero_free_rv = FKO_SUCCESS;</span> -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(key_len &lt; 0 || key_len &gt; RIJNDAEL_MAX_KEYSIZE)</span> -<span class="lineNum"> 171 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 172 </span> : : -<span class="lineNum"> 173 </span> : : /* Now see if we need to add the &quot;Salted__&quot; string to the front of the -<span class="lineNum"> 174 </span> : : * encrypted data. -<span class="lineNum"> 175 </span> : : */ -<span class="lineNum"> 176 </span> [<span class="branchCov" title="Branch 0 was taken 70 times"> + </span><span class="branchCov" title="Branch 1 was taken 317 times"> + </span>]:<span class="lineCov"> 387 : if(! ctx-&gt;added_salted_str)</span> -<span class="lineNum"> 177 </span> : : { -<span class="lineNum"> 178 </span> :<span class="lineCov"> 70 : res = add_salted_str(ctx);</span> -<span class="lineNum"> 179 </span> [<span class="branchCov" title="Branch 0 was taken 70 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 70 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 180 </span> : : return res; -<span class="lineNum"> 181 </span> : : } -<span class="lineNum"> 182 </span> : : -<span class="lineNum"> 183 </span> : : /* Create a bucket for the (base64) decoded encrypted data and get the -<span class="lineNum"> 184 </span> : : * raw cipher data. -<span class="lineNum"> 185 </span> : : */ -<span class="lineNum"> 186 </span> :<span class="lineCov"> 387 : cipher = calloc(1, ctx-&gt;encrypted_msg_len);</span> -<span class="lineNum"> 187 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(cipher == NULL)</span> -<span class="lineNum"> 188 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 189 </span> : : -<span class="lineNum"> 190 </span> : : #if AFL_FUZZING -<span class="lineNum"> 191 </span> : : cipher_len = ctx-&gt;encrypted_msg_len; -<span class="lineNum"> 192 </span> : : memcpy(cipher, ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len); -<span class="lineNum"> 193 </span> : : #else -<span class="lineNum"> 194 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if((cipher_len = b64_decode(ctx-&gt;encrypted_msg, cipher)) &lt; 0)</span> -<span class="lineNum"> 195 </span> : : { -<span class="lineNum"> 196 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 197 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL); -<span class="lineNum"> 198 </span> : : else -<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 200 </span> : : } -<span class="lineNum"> 201 </span> : : #endif -<span class="lineNum"> 202 </span> : : -<span class="lineNum"> 203 </span> : : /* Since we're using AES, make sure the incoming data is a multiple of -<span class="lineNum"> 204 </span> : : * the blocksize -<span class="lineNum"> 205 </span> : : */ -<span class="lineNum"> 206 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if((cipher_len % RIJNDAEL_BLOCKSIZE) != 0)</span> -<span class="lineNum"> 207 </span> : : { -<span class="lineNum"> 208 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 209 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL); -<span class="lineNum"> 210 </span> : : else -<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 212 </span> : : } -<span class="lineNum"> 213 </span> : : -<span class="lineNum"> 214 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if(ctx-&gt;encoded_msg != NULL)</span> -<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(ctx-&gt;encoded_msg,</span> -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE));</span> -<span class="lineNum"> 217 </span> : : -<span class="lineNum"> 218 </span> : : /* Create a bucket for the plaintext data and decrypt the message -<span class="lineNum"> 219 </span> : : * data into it. -<span class="lineNum"> 220 </span> : : */ -<span class="lineNum"> 221 </span> :<span class="lineCov"> 387 : ctx-&gt;encoded_msg = calloc(1, cipher_len);</span> -<span class="lineNum"> 222 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if(ctx-&gt;encoded_msg == NULL)</span> -<span class="lineNum"> 223 </span> : : { -<span class="lineNum"> 224 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 225 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 226 </span> : : else -<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 228 </span> : : } -<span class="lineNum"> 229 </span> : : -<span class="lineNum"> 230 </span> :<span class="lineCov"> 387 : pt_len = rij_decrypt(cipher, cipher_len, dec_key, key_len,</span> -<span class="lineNum"> 231 </span> : : (unsigned char*)ctx-&gt;encoded_msg, encryption_mode); -<span class="lineNum"> 232 </span> : : -<span class="lineNum"> 233 </span> : : /* Done with cipher... -<span class="lineNum"> 234 </span> : : */ -<span class="lineNum"> 235 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : if(zero_free((char *)cipher, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> : : /* The length of the decrypted data should be within 32 bytes of the -<span class="lineNum"> 239 </span> : : * length of the encrypted version. -<span class="lineNum"> 240 </span> : : */ -<span class="lineNum"> 241 </span>[<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 387 : if(pt_len &lt; (cipher_len - 32) || pt_len &lt;= 0)</span> -<span class="lineNum"> 242 </span> : : return(FKO_ERROR_DECRYPTION_SIZE); -<span class="lineNum"> 243 </span> : : -<span class="lineNum"> 244 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(ctx-&gt;encoded_msg == NULL)</span> -<span class="lineNum"> 245 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> [<span class="branchCov" title="Branch 1 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 387 : if(! is_valid_encoded_msg_len(pt_len))</span> -<span class="lineNum"> 248 </span> : : return(FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL); -<span class="lineNum"> 249 </span> : : -<span class="lineNum"> 250 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 387 : if(zero_free_rv != FKO_SUCCESS)</span> -<span class="lineNum"> 251 </span> : : return(zero_free_rv); -<span class="lineNum"> 252 </span> : : -<span class="lineNum"> 253 </span> :<span class="lineCov"> 387 : ctx-&gt;encoded_msg_len = pt_len;</span> -<span class="lineNum"> 254 </span> : : -<span class="lineNum"> 255 </span> : : /* At this point we can check the data to see if we have a good -<span class="lineNum"> 256 </span> : : * decryption by ensuring the first field (16-digit random decimal -<span class="lineNum"> 257 </span> : : * value) is valid and is followed by a colon. Additional checks -<span class="lineNum"> 258 </span> : : * are made in fko_decode_spa_data(). -<span class="lineNum"> 259 </span> : : */ -<span class="lineNum"> 260 </span> :<span class="lineCov"> 387 : ndx = (unsigned char *)ctx-&gt;encoded_msg;</span> -<span class="lineNum"> 261 </span> [<span class="branchCov" title="Branch 0 was taken 6192 times"> + </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 6579 : for(i=0; i&lt;FKO_RAND_VAL_SIZE; i++)</span> -<span class="lineNum"> 262 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 6192 times"> + </span>]:<span class="lineCov"> 6192 : if(!isdigit(*(ndx++)))</span> -<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 264 </span> : : -<span class="lineNum"> 265 </span>[<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 387 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 387 : if(err &gt; 0 || *ndx != ':')</span> -<span class="lineNum"> 266 </span> : : return(FKO_ERROR_DECRYPTION_FAILURE); -<span class="lineNum"> 267 </span> : : -<span class="lineNum"> 268 </span> : : /* Call fko_decode and return the results. -<span class="lineNum"> 269 </span> : : */ -<span class="lineNum"> 270 </span> :<span class="lineCov"> 387 : return(fko_decode_spa_data(ctx));</span> -<span class="lineNum"> 271 </span> : : } -<span class="lineNum"> 272 </span> : : -<span class="lineNum"> 273 </span> : : -<span class="lineNum"> 274 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> : : /* Prep and encrypt using gpgme -<a name="277"><span class="lineNum"> 277 </span> : : */</a> -<span class="lineNum"> 278 </span> : : static int -<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : gpg_encrypt(fko_ctx_t ctx, const char *enc_key)</span> -<span class="lineNum"> 280 </span> : : { -<span class="lineNum"> 281 </span> : : int res; -<span class="lineNum"> 282 </span> : : char *plain; -<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : int pt_len, zero_free_rv = FKO_SUCCESS;</span> -<span class="lineNum"> 284 </span> : : char *b64cipher; -<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : unsigned char *cipher = NULL;</span> -<span class="lineNum"> 286 </span> : : size_t cipher_len; -<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : char *empty_key = &quot;&quot;;</span> -<span class="lineNum"> 288 </span> : : -<span class="lineNum"> 289 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> -<span class="lineNum"> 290 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL); -<span class="lineNum"> 291 </span> : : -<span class="lineNum"> 292 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : switch(ctx-&gt;digest_len)</span> -<span class="lineNum"> 293 </span> : : { -<span class="lineNum"> 294 </span> : : case MD5_B64_LEN: -<span class="lineNum"> 295 </span> : : break; -<span class="lineNum"> 296 </span> : : case SHA1_B64_LEN: -<span class="lineNum"> 297 </span> : : break; -<span class="lineNum"> 298 </span> : : case SHA256_B64_LEN: -<span class="lineNum"> 299 </span> : : break; -<span class="lineNum"> 300 </span> : : case SHA384_B64_LEN: -<span class="lineNum"> 301 </span> : : break; -<span class="lineNum"> 302 </span> : : case SHA512_B64_LEN: -<span class="lineNum"> 303 </span> : : break; -<span class="lineNum"> 304 </span> : : default: -<span class="lineNum"> 305 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL); -<span class="lineNum"> 306 </span> : : } -<span class="lineNum"> 307 </span> : : -<span class="lineNum"> 308 </span> : : /* First make sure we have a recipient key set. -<span class="lineNum"> 309 </span> : : */ -<span class="lineNum"> 310 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_recipient == NULL)</span> -<span class="lineNum"> 311 </span> : : return(FKO_ERROR_MISSING_GPG_KEY_DATA); -<span class="lineNum"> 312 </span> : : -<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : pt_len = ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + 2;</span> -<span class="lineNum"> 314 </span> : : -<span class="lineNum"> 315 </span> : : /* Make a bucket big enough to hold the enc msg + digest (plaintext) -<span class="lineNum"> 316 </span> : : * and populate it appropriately. -<span class="lineNum"> 317 </span> : : */ -<span class="lineNum"> 318 </span> :<span class="lineNoCov"> 0 : plain = calloc(1, ctx-&gt;encoded_msg_len + ctx-&gt;digest_len + 2);</span> -<span class="lineNum"> 319 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(plain == NULL)</span> -<span class="lineNum"> 320 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 321 </span> : : -<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : pt_len = snprintf(plain, pt_len+1, &quot;%s:%s&quot;, ctx-&gt;encoded_msg, ctx-&gt;digest);</span> -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_pt_msg_len(pt_len))</span> -<span class="lineNum"> 325 </span> : : { -<span class="lineNum"> 326 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plain, pt_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 327 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL); -<span class="lineNum"> 328 </span> : : else -<span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 330 </span> : : } -<span class="lineNum"> 331 </span> : : -<span class="lineNum"> 332 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (enc_key != NULL)</span> -<span class="lineNum"> 333 </span> : : { -<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : res = gpgme_encrypt(ctx, (unsigned char*)plain, pt_len,</span> -<span class="lineNum"> 335 </span> : : enc_key, &amp;cipher, &amp;cipher_len -<span class="lineNum"> 336 </span> : : ); -<span class="lineNum"> 337 </span> : : } -<span class="lineNum"> 338 </span> : : else -<span class="lineNum"> 339 </span> : : { -<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : res = gpgme_encrypt(ctx, (unsigned char*)plain, pt_len,</span> -<span class="lineNum"> 341 </span> : : empty_key, &amp;cipher, &amp;cipher_len -<span class="lineNum"> 342 </span> : : ); -<span class="lineNum"> 343 </span> : : } -<span class="lineNum"> 344 </span> : : -<span class="lineNum"> 345 </span> : : /* --DSS XXX: Better parsing of what went wrong would be nice :) -<span class="lineNum"> 346 </span> : : */ -<span class="lineNum"> 347 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 348 </span> : : { -<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(plain, pt_len);</span> -<span class="lineNum"> 350 </span> : : -<span class="lineNum"> 351 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(cipher != NULL)</span> -<span class="lineNum"> 352 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, cipher_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 354 </span> : : -<span class="lineNum"> 355 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free_rv == FKO_SUCCESS)</span> -<span class="lineNum"> 356 </span> : : return(res); -<span class="lineNum"> 357 </span> : : else -<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> -<span class="lineNum"> 359 </span> : : } -<span class="lineNum"> 360 </span> : : -<span class="lineNum"> 361 </span> : : /* Now make a bucket for the base64-encoded version and populate it. -<span class="lineNum"> 362 </span> : : */ -<span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : b64cipher = calloc(1, ((cipher_len / 3) * 4) + 8);</span> -<span class="lineNum"> 364 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64cipher == NULL)</span> -<span class="lineNum"> 365 </span> : : { -<span class="lineNum"> 366 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plain, pt_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 368 </span> : : -<span class="lineNum"> 369 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(cipher != NULL)</span> -<span class="lineNum"> 370 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, cipher_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 372 </span> : : -<span class="lineNum"> 373 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free_rv == FKO_SUCCESS)</span> -<span class="lineNum"> 374 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 375 </span> : : else -<span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> -<span class="lineNum"> 377 </span> : : } -<span class="lineNum"> 378 </span> : : -<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : b64_encode(cipher, b64cipher, cipher_len);</span> -<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : strip_b64_eq(b64cipher);</span> -<span class="lineNum"> 381 </span> : : -<span class="lineNum"> 382 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg != NULL)</span> -<span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : zero_free_rv = zero_free(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 384 </span> :<span class="lineNoCov"> 0 : strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE));</span> -<span class="lineNum"> 385 </span> : : -<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg = strdup(b64cipher);</span> -<span class="lineNum"> 387 </span> : : -<span class="lineNum"> 388 </span> : : /* Clean-up -<span class="lineNum"> 389 </span> : : */ -<span class="lineNum"> 390 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(plain, pt_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 392 </span> : : -<span class="lineNum"> 393 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, cipher_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 395 </span> : : -<span class="lineNum"> 396 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(b64cipher, strnlen(b64cipher,</span> -<span class="lineNum"> 397 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) -<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 399 </span> : : -<span class="lineNum"> 400 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg == NULL)</span> -<span class="lineNum"> 401 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 402 </span> : : -<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len = strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 404 </span> : : -<span class="lineNum"> 405 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_encoded_msg_len(ctx-&gt;encrypted_msg_len))</span> -<span class="lineNum"> 406 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL); -<span class="lineNum"> 407 </span> : : -<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> -<span class="lineNum"> 409 </span> : : } -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> : : /* Prep and decrypt using gpgme -<a name="412"><span class="lineNum"> 412 </span> : : */</a> -<span class="lineNum"> 413 </span> : : static int -<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : gpg_decrypt(fko_ctx_t ctx, const char *dec_key)</span> -<span class="lineNum"> 415 </span> : : { -<span class="lineNum"> 416 </span> : : unsigned char *cipher; -<span class="lineNum"> 417 </span> : : size_t cipher_len; -<span class="lineNum"> 418 </span> : : int res, pt_len, b64_decode_len; -<span class="lineNum"> 419 </span> : : -<span class="lineNum"> 420 </span> : : /* Now see if we need to add the &quot;hQ&quot; string to the front of the -<span class="lineNum"> 421 </span> : : * base64-encoded-GPG-encrypted data. -<span class="lineNum"> 422 </span> : : */ -<span class="lineNum"> 423 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! ctx-&gt;added_gpg_prefix)</span> -<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : add_gpg_prefix(ctx);</span> -<span class="lineNum"> 425 </span> : : -<span class="lineNum"> 426 </span> : : /* Create a bucket for the (base64) decoded encrypted data and get the -<span class="lineNum"> 427 </span> : : * raw cipher data. -<span class="lineNum"> 428 </span> : : */ -<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : cipher = calloc(1, ctx-&gt;encrypted_msg_len);</span> -<span class="lineNum"> 430 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(cipher == NULL)</span> -<span class="lineNum"> 431 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 432 </span> : : -<span class="lineNum"> 433 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((b64_decode_len = b64_decode(ctx-&gt;encrypted_msg, cipher)) &lt; 0)</span> -<span class="lineNum"> 434 </span> : : { -<span class="lineNum"> 435 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, ctx-&gt;encrypted_msg_len) == FKO_SUCCESS)</span> -<span class="lineNum"> 436 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL); -<span class="lineNum"> 437 </span> : : else -<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 439 </span> : : -<span class="lineNum"> 440 </span> : : } -<span class="lineNum"> 441 </span> : : -<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : cipher_len = b64_decode_len;</span> -<span class="lineNum"> 443 </span> : : -<span class="lineNum"> 444 </span> : : /* Create a bucket for the plaintext data and decrypt the message -<span class="lineNum"> 445 </span> : : * data into it. -<span class="lineNum"> 446 </span> : : */ -<span class="lineNum"> 447 </span> : : /* --DSS Actually, the needed memory will be malloced in the gpgme_decrypt -<span class="lineNum"> 448 </span> : : // function. Just leaving this here for reference (for now). -<span class="lineNum"> 449 </span> : : //ctx-&gt;encoded_msg = malloc(cipher_len); -<span class="lineNum"> 450 </span> : : //if(ctx-&gt;encoded_msg == NULL) -<span class="lineNum"> 451 </span> : : // return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 452 </span> : : */ -<span class="lineNum"> 453 </span> : : -<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : res = gpgme_decrypt(ctx, cipher, cipher_len,</span> -<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : dec_key, (unsigned char**)&amp;ctx-&gt;encoded_msg, &amp;cipher_len</span> -<span class="lineNum"> 456 </span> : : ); -<span class="lineNum"> 457 </span> : : -<span class="lineNum"> 458 </span> : : /* Done with cipher... -<span class="lineNum"> 459 </span> : : */ -<span class="lineNum"> 460 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free((char *) cipher, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 461 </span> : : return(FKO_ERROR_ZERO_OUT_DATA); -<span class="lineNum"> 462 </span> : : else -<span class="lineNum"> 463 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS) /* bail if there was some other problem */</span> -<span class="lineNum"> 464 </span> : : return(res); -<span class="lineNum"> 465 </span> : : -<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : pt_len = strnlen(ctx-&gt;encoded_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encoded_msg == NULL)</span> -<span class="lineNum"> 469 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING); -<span class="lineNum"> 470 </span> : : -<span class="lineNum"> 471 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_encoded_msg_len(pt_len))</span> -<span class="lineNum"> 472 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL); -<span class="lineNum"> 473 </span> : : -<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encoded_msg_len = pt_len;</span> -<span class="lineNum"> 475 </span> : : -<span class="lineNum"> 476 </span> : : /* Call fko_decode and return the results. -<span class="lineNum"> 477 </span> : : */ -<span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : return(fko_decode_spa_data(ctx));</span> -<span class="lineNum"> 479 </span> : : } -<span class="lineNum"> 480 </span> : : -<span class="lineNum"> 481 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 482 </span> : : -<span class="lineNum"> 483 </span> : : /* Set the SPA encryption type. -<a name="484"><span class="lineNum"> 484 </span> : : */</a> -<span class="lineNum"> 485 </span> : : int -<span class="lineNum"> 486 </span> :<span class="lineCov"> 569 : fko_set_spa_encryption_type(fko_ctx_t ctx, const short encrypt_type)</span> -<span class="lineNum"> 487 </span> : : { -<span class="lineNum"> 488 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 489 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_type_init&quot;, -<span class="lineNum"> 490 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 491 </span> : : #endif -<span class="lineNum"> 492 </span> : : /* Must be initialized -<span class="lineNum"> 493 </span> : : */ -<span class="lineNum"> 494 </span>[<span class="branchCov" title="Branch 0 was taken 569 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 569 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 569 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 495 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 496 </span> : : -<span class="lineNum"> 497 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 498 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_type_val&quot;, -<span class="lineNum"> 499 </span> : : FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL); -<span class="lineNum"> 500 </span> : : #endif -<span class="lineNum"> 501 </span> [<span class="branchCov" title="Branch 0 was taken 569 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 569 : if(encrypt_type &lt; 0 || encrypt_type &gt;= FKO_LAST_ENCRYPTION_TYPE)</span> -<span class="lineNum"> 502 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL); -<span class="lineNum"> 503 </span> : : -<span class="lineNum"> 504 </span> :<span class="lineCov"> 569 : ctx-&gt;encryption_type = encrypt_type;</span> -<span class="lineNum"> 505 </span> : : -<span class="lineNum"> 506 </span> :<span class="lineCov"> 569 : ctx-&gt;state |= FKO_ENCRYPT_TYPE_MODIFIED;</span> -<span class="lineNum"> 507 </span> : : -<span class="lineNum"> 508 </span> :<span class="lineCov"> 569 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 509 </span> : : } -<span class="lineNum"> 510 </span> : : -<span class="lineNum"> 511 </span> : : /* Return the SPA encryption type. -<a name="512"><span class="lineNum"> 512 </span> : : */</a> -<span class="lineNum"> 513 </span> : : int -<span class="lineNum"> 514 </span> :<span class="lineCov"> 801 : fko_get_spa_encryption_type(fko_ctx_t ctx, short *enc_type)</span> -<span class="lineNum"> 515 </span> : : { -<span class="lineNum"> 516 </span> : : /* Must be initialized -<span class="lineNum"> 517 </span> : : */ -<span class="lineNum"> 518 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 519 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 520 </span> : : -<span class="lineNum"> 521 </span> :<span class="lineCov"> 801 : *enc_type = ctx-&gt;encryption_type;</span> -<span class="lineNum"> 522 </span> : : -<span class="lineNum"> 523 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 524 </span> : : } -<span class="lineNum"> 525 </span> : : -<span class="lineNum"> 526 </span> : : /* Set the SPA encryption mode. -<a name="527"><span class="lineNum"> 527 </span> : : */</a> -<span class="lineNum"> 528 </span> : : int -<span class="lineNum"> 529 </span> :<span class="lineCov"> 1781 : fko_set_spa_encryption_mode(fko_ctx_t ctx, const int encrypt_mode)</span> -<span class="lineNum"> 530 </span> : : { -<span class="lineNum"> 531 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 532 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_mode_init&quot;, -<span class="lineNum"> 533 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 534 </span> : : #endif -<span class="lineNum"> 535 </span> : : /* Must be initialized -<span class="lineNum"> 536 </span> : : */ -<span class="lineNum"> 537 </span>[<span class="branchCov" title="Branch 0 was taken 1781 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1781 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1781 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 538 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 539 </span> : : -<span class="lineNum"> 540 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 541 </span> : : fiu_return_on(&quot;fko_set_spa_encryption_mode_val&quot;, -<span class="lineNum"> 542 </span> : : FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL); -<span class="lineNum"> 543 </span> : : #endif -<span class="lineNum"> 544 </span> [<span class="branchCov" title="Branch 0 was taken 1781 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1781 : if(encrypt_mode &lt; 0 || encrypt_mode &gt;= FKO_LAST_ENC_MODE)</span> -<span class="lineNum"> 545 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL); -<span class="lineNum"> 546 </span> : : -<span class="lineNum"> 547 </span> :<span class="lineCov"> 1781 : ctx-&gt;encryption_mode = encrypt_mode;</span> -<span class="lineNum"> 548 </span> : : -<span class="lineNum"> 549 </span> :<span class="lineCov"> 1781 : ctx-&gt;state |= FKO_ENCRYPT_MODE_MODIFIED;</span> -<span class="lineNum"> 550 </span> : : -<span class="lineNum"> 551 </span> :<span class="lineCov"> 1781 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 552 </span> : : } -<span class="lineNum"> 553 </span> : : -<span class="lineNum"> 554 </span> : : /* Return the SPA encryption mode. -<a name="555"><span class="lineNum"> 555 </span> : : */</a> -<span class="lineNum"> 556 </span> : : int -<span class="lineNum"> 557 </span> :<span class="lineCov"> 1217 : fko_get_spa_encryption_mode(fko_ctx_t ctx, int *enc_mode)</span> -<span class="lineNum"> 558 </span> : : { -<span class="lineNum"> 559 </span> : : /* Must be initialized -<span class="lineNum"> 560 </span> : : */ -<span class="lineNum"> 561 </span>[<span class="branchCov" title="Branch 0 was taken 1217 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1217 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1217 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 562 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 563 </span> : : -<span class="lineNum"> 564 </span> [<span class="branchCov" title="Branch 0 was taken 1217 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1217 : if(enc_mode == NULL)</span> -<span class="lineNum"> 565 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 566 </span> : : -<span class="lineNum"> 567 </span> :<span class="lineCov"> 1217 : *enc_mode = ctx-&gt;encryption_mode;</span> -<span class="lineNum"> 568 </span> : : -<span class="lineNum"> 569 </span> :<span class="lineCov"> 1217 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 570 </span> : : } -<span class="lineNum"> 571 </span> : : -<span class="lineNum"> 572 </span> : : /* Encrypt the encoded SPA data. -<a name="573"><span class="lineNum"> 573 </span> : : */</a> -<span class="lineNum"> 574 </span> : : int -<span class="lineNum"> 575 </span> :<span class="lineCov"> 434 : fko_encrypt_spa_data(fko_ctx_t ctx, const char * const enc_key,</span> -<span class="lineNum"> 576 </span> : : const int enc_key_len) -<span class="lineNum"> 577 </span> : : { -<span class="lineNum"> 578 </span> :<span class="lineCov"> 434 : int res = 0;</span> -<span class="lineNum"> 579 </span> : : -<span class="lineNum"> 580 </span> : : /* Must be initialized -<span class="lineNum"> 581 </span> : : */ -<span class="lineNum"> 582 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 583 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 584 </span> : : -<span class="lineNum"> 585 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(enc_key_len &lt; 0)</span> -<span class="lineNum"> 586 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 587 </span> : : -<span class="lineNum"> 588 </span> : : /* If there is no encoded data or the SPA data has been modified, -<span class="lineNum"> 589 </span> : : * go ahead and re-encode here. -<span class="lineNum"> 590 </span> : : */ -<span class="lineNum"> 591 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encoded_msg == NULL || FKO_IS_SPA_DATA_MODIFIED(ctx))</span> -<span class="lineNum"> 592 </span> :<span class="lineCov"> 434 : res = fko_encode_spa_data(ctx);</span> -<span class="lineNum"> 593 </span> : : -<span class="lineNum"> 594 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 595 </span> : : return(res); -<span class="lineNum"> 596 </span> : : -<span class="lineNum"> 597 </span> : : /* Croak on invalid encoded message as well. At present this is a -<span class="lineNum"> 598 </span> : : * check for a somewhat arbitrary minimum length for the encoded -<span class="lineNum"> 599 </span> : : * data. -<span class="lineNum"> 600 </span> : : */ -<span class="lineNum"> 601 </span> [<span class="branchCov" title="Branch 1 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 434 : if (! is_valid_encoded_msg_len(ctx-&gt;encoded_msg_len))</span> -<span class="lineNum"> 602 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 603 </span> : : -<span class="lineNum"> 604 </span> : : /* Encrypt according to type and return... -<span class="lineNum"> 605 </span> : : */ -<span class="lineNum"> 606 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(ctx-&gt;encryption_type == FKO_ENCRYPTION_RIJNDAEL)</span> -<span class="lineNum"> 607 </span> : : { -<span class="lineNum"> 608 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(enc_key == NULL)</span> -<span class="lineNum"> 609 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 610 </span> :<span class="lineCov"> 434 : res = _rijndael_encrypt(ctx, enc_key, enc_key_len);</span> -<span class="lineNum"> 611 </span> : : } -<span class="lineNum"> 612 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;encryption_type == FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 613 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 614 </span> :<span class="lineNoCov"> 0 : res = gpg_encrypt(ctx, enc_key);</span> -<span class="lineNum"> 615 </span> : : #else -<span class="lineNum"> 616 </span> : : res = FKO_ERROR_UNSUPPORTED_FEATURE; -<span class="lineNum"> 617 </span> : : #endif -<span class="lineNum"> 618 </span> : : else -<span class="lineNum"> 619 </span> : : res = FKO_ERROR_INVALID_ENCRYPTION_TYPE; -<span class="lineNum"> 620 </span> : : -<span class="lineNum"> 621 </span> :<span class="lineCov"> 434 : return(res);</span> -<span class="lineNum"> 622 </span> : : } -<span class="lineNum"> 623 </span> : : -<span class="lineNum"> 624 </span> : : /* Decode, decrypt, and parse SPA data into the context. -<a name="625"><span class="lineNum"> 625 </span> : : */</a> -<span class="lineNum"> 626 </span> : : int -<span class="lineNum"> 627 </span> :<span class="lineCov"> 416 : fko_decrypt_spa_data(fko_ctx_t ctx, const char * const dec_key, const int key_len)</span> -<span class="lineNum"> 628 </span> : : { -<span class="lineNum"> 629 </span> : : int enc_type, res; -<span class="lineNum"> 630 </span> : : -<span class="lineNum"> 631 </span>[<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 416 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 632 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 633 </span> : : -<span class="lineNum"> 634 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(key_len &lt; 0)</span> -<span class="lineNum"> 635 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 636 </span> : : -<span class="lineNum"> 637 </span> : : /* Get the (assumed) type of encryption used. This will also provide -<span class="lineNum"> 638 </span> : : * some data validation. -<span class="lineNum"> 639 </span> : : */ -<span class="lineNum"> 640 </span> :<span class="lineCov"> 416 : enc_type = fko_encryption_type(ctx-&gt;encrypted_msg);</span> -<span class="lineNum"> 641 </span> : : -<span class="lineNum"> 642 </span> [<span class="branchCov" title="Branch 0 was taken 29 times"> + </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 416 : if(enc_type == FKO_ENCRYPTION_GPG</span> -<span class="lineNum"> 643 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 29 times"> + </span>]:<span class="lineCov"> 29 : &amp;&amp; ctx-&gt;encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> -<span class="lineNum"> 644 </span> : : { -<span class="lineNum"> 645 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encryption_type = FKO_ENCRYPTION_GPG;</span> -<span class="lineNum"> 646 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 647 </span> :<span class="lineNoCov"> 0 : res = gpg_decrypt(ctx, dec_key);</span> -<span class="lineNum"> 648 </span> : : #else -<span class="lineNum"> 649 </span> : : res = FKO_ERROR_UNSUPPORTED_FEATURE; -<span class="lineNum"> 650 </span> : : #endif -<span class="lineNum"> 651 </span> : : } -<span class="lineNum"> 652 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchCov" title="Branch 1 was taken 29 times"> + </span>]:<span class="lineCov"> 416 : else if(enc_type == FKO_ENCRYPTION_RIJNDAEL)</span> -<span class="lineNum"> 653 </span> : : { -<span class="lineNum"> 654 </span> :<span class="lineCov"> 387 : ctx-&gt;encryption_type = FKO_ENCRYPTION_RIJNDAEL;</span> -<span class="lineNum"> 655 </span> :<span class="lineCov"> 387 : res = _rijndael_decrypt(ctx,</span> -<span class="lineNum"> 656 </span> : : dec_key, key_len, ctx-&gt;encryption_mode); -<span class="lineNum"> 657 </span> : : } -<span class="lineNum"> 658 </span> : : else -<span class="lineNum"> 659 </span> : : return(FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN); -<span class="lineNum"> 660 </span> : : -<span class="lineNum"> 661 </span> :<span class="lineCov"> 387 : return(res);</span> -<span class="lineNum"> 662 </span> : : } -<span class="lineNum"> 663 </span> : : -<span class="lineNum"> 664 </span> : : /* Return the assumed encryption type based on the raw encrypted data. -<a name="665"><span class="lineNum"> 665 </span> : : */</a> -<span class="lineNum"> 666 </span> : : int -<span class="lineNum"> 667 </span> :<span class="lineCov"> 416 : fko_encryption_type(const char * const enc_data)</span> -<span class="lineNum"> 668 </span> : : { -<span class="lineNum"> 669 </span> : : int enc_data_len; -<span class="lineNum"> 670 </span> : : -<span class="lineNum"> 671 </span> : : /* Sanity check the data. -<span class="lineNum"> 672 </span> : : */ -<span class="lineNum"> 673 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(enc_data == NULL)</span> -<span class="lineNum"> 674 </span> : : return(FKO_ENCRYPTION_INVALID_DATA); -<span class="lineNum"> 675 </span> : : -<span class="lineNum"> 676 </span> :<span class="lineCov"> 416 : enc_data_len = strnlen(enc_data, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 677 </span> : : -<span class="lineNum"> 678 </span> [<span class="branchCov" title="Branch 1 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 416 : if(! is_valid_encoded_msg_len(enc_data_len))</span> -<span class="lineNum"> 679 </span> : : return(FKO_ENCRYPTION_UNKNOWN); -<span class="lineNum"> 680 </span> : : -<span class="lineNum"> 681 </span> [<span class="branchCov" title="Branch 0 was taken 387 times"> + </span><span class="branchCov" title="Branch 1 was taken 29 times"> + </span>]:<span class="lineCov"> 416 : if(enc_data_len &gt;= MIN_GNUPG_MSG_SIZE)</span> -<span class="lineNum"> 682 </span> : : return(FKO_ENCRYPTION_GPG); -<span class="lineNum"> 683 </span> : : -<span class="lineNum"> 684 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 387 times"> + </span>]:<span class="lineCov"> 387 : else if(enc_data_len &lt; MIN_GNUPG_MSG_SIZE</span> -<span class="lineNum"> 685 </span> :<span class="lineCov"> 387 : &amp;&amp; enc_data_len &gt;= MIN_SPA_ENCODED_MSG_SIZE)</span> -<span class="lineNum"> 686 </span> : : return(FKO_ENCRYPTION_RIJNDAEL); -<span class="lineNum"> 687 </span> : : -<span class="lineNum"> 688 </span> : : else -<span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : return(FKO_ENCRYPTION_UNKNOWN);</span> -<span class="lineNum"> 690 </span> : : } -<span class="lineNum"> 691 </span> : : -<span class="lineNum"> 692 </span> : : /* Set the GPG recipient key name. -<a name="693"><span class="lineNum"> 693 </span> : : */</a> -<span class="lineNum"> 694 </span> : : int -<span class="lineNum"> 695 </span> :<span class="lineCov"> 2 : fko_set_gpg_recipient(fko_ctx_t ctx, const char * const recip)</span> -<span class="lineNum"> 696 </span> : : { -<span class="lineNum"> 697 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 698 </span> : : int res; -<span class="lineNum"> 699 </span> :<span class="lineCov"> 2 : gpgme_key_t key = NULL;</span> -<span class="lineNum"> 700 </span> : : -<span class="lineNum"> 701 </span> : : /* Must be initialized -<span class="lineNum"> 702 </span> : : */ -<span class="lineNum"> 703 </span>[<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 2 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 704 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 705 </span> : : -<span class="lineNum"> 706 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 707 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 708 </span> : : -<span class="lineNum"> 709 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(ctx-&gt;gpg_recipient != NULL)</span> -<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_recipient);</span> -<span class="lineNum"> 711 </span> : : -<span class="lineNum"> 712 </span> :<span class="lineCov"> 2 : ctx-&gt;gpg_recipient = strdup(recip);</span> -<span class="lineNum"> 713 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(ctx-&gt;gpg_recipient == NULL)</span> -<span class="lineNum"> 714 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 715 </span> : : -<span class="lineNum"> 716 </span> : : /* Get the key. -<span class="lineNum"> 717 </span> : : */ -<span class="lineNum"> 718 </span> :<span class="lineCov"> 2 : res = get_gpg_key(ctx, &amp;key, 0);</span> -<span class="lineNum"> 719 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 720 </span> : : { -<span class="lineNum"> 721 </span> :<span class="lineCov"> 2 : free(ctx-&gt;gpg_recipient);</span> -<span class="lineNum"> 722 </span> :<span class="lineCov"> 2 : ctx-&gt;gpg_recipient = NULL;</span> -<span class="lineNum"> 723 </span> :<span class="lineCov"> 2 : return(res);</span> -<span class="lineNum"> 724 </span> : : } -<span class="lineNum"> 725 </span> : : -<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : ctx-&gt;recipient_key = key;</span> -<span class="lineNum"> 727 </span> : : -<span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 729 </span> : : -<span class="lineNum"> 730 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 731 </span> : : #else -<span class="lineNum"> 732 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 733 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 734 </span> : : } -<span class="lineNum"> 735 </span> : : -<span class="lineNum"> 736 </span> : : /* Set the GPG home dir. -<a name="737"><span class="lineNum"> 737 </span> : : */</a> -<span class="lineNum"> 738 </span> : : int -<span class="lineNum"> 739 </span> :<span class="lineCov"> 1 : fko_set_gpg_exe(fko_ctx_t ctx, const char * const gpg_exe)</span> -<span class="lineNum"> 740 </span> : : { -<span class="lineNum"> 741 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 742 </span> : : struct stat st; -<span class="lineNum"> 743 </span> : : -<span class="lineNum"> 744 </span> : : /* Must be initialized -<span class="lineNum"> 745 </span> : : */ -<span class="lineNum"> 746 </span>[<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 747 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 748 </span> : : -<span class="lineNum"> 749 </span> : : /* If we are unable to stat the given path/file and determine if it -<span class="lineNum"> 750 </span> : : * is a regular file or symbolic link, then return with error. -<span class="lineNum"> 751 </span> : : */ -<span class="lineNum"> 752 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : if(stat(gpg_exe, &amp;st) != 0)</span> -<span class="lineNum"> 753 </span> : : return(FKO_ERROR_GPGME_BAD_GPG_EXE); -<span class="lineNum"> 754 </span> : : -<span class="lineNum"> 755 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!S_ISREG(st.st_mode) &amp;&amp; !S_ISLNK(st.st_mode))</span> -<span class="lineNum"> 756 </span> : : return(FKO_ERROR_GPGME_BAD_GPG_EXE); -<span class="lineNum"> 757 </span> : : -<span class="lineNum"> 758 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_exe != NULL)</span> -<span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_exe);</span> -<span class="lineNum"> 760 </span> : : -<span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_exe = strdup(gpg_exe);</span> -<span class="lineNum"> 762 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_exe == NULL)</span> -<span class="lineNum"> 763 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 764 </span> : : -<span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 766 </span> : : #else -<span class="lineNum"> 767 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 768 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 769 </span> : : } -<span class="lineNum"> 770 </span> : : -<span class="lineNum"> 771 </span> : : /* Get the GPG home dir. -<a name="772"><span class="lineNum"> 772 </span> : : */</a> -<span class="lineNum"> 773 </span> : : int -<span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_exe(fko_ctx_t ctx, char **gpg_exe)</span> -<span class="lineNum"> 775 </span> : : { -<span class="lineNum"> 776 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 777 </span> : : /* Must be initialized -<span class="lineNum"> 778 </span> : : */ -<span class="lineNum"> 779 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 780 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 781 </span> : : -<span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : *gpg_exe = ctx-&gt;gpg_exe;</span> -<span class="lineNum"> 783 </span> : : -<span class="lineNum"> 784 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 785 </span> : : #else -<span class="lineNum"> 786 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 787 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 788 </span> : : } -<span class="lineNum"> 789 </span> : : -<span class="lineNum"> 790 </span> : : /* Get the GPG recipient key name. -<a name="791"><span class="lineNum"> 791 </span> : : */</a> -<span class="lineNum"> 792 </span> : : int -<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_recipient(fko_ctx_t ctx, char **recipient)</span> -<span class="lineNum"> 794 </span> : : { -<span class="lineNum"> 795 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 796 </span> : : /* Must be initialized -<span class="lineNum"> 797 </span> : : */ -<span class="lineNum"> 798 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 799 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 800 </span> : : -<span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : *recipient = ctx-&gt;gpg_recipient;</span> -<span class="lineNum"> 802 </span> : : -<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 804 </span> : : #else -<span class="lineNum"> 805 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 806 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 807 </span> : : } -<span class="lineNum"> 808 </span> : : -<span class="lineNum"> 809 </span> : : /* Set the GPG signer key name. -<a name="810"><span class="lineNum"> 810 </span> : : */</a> -<span class="lineNum"> 811 </span> : : int -<span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signer(fko_ctx_t ctx, const char * const signer)</span> -<span class="lineNum"> 813 </span> : : { -<span class="lineNum"> 814 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 815 </span> : : int res; -<span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : gpgme_key_t key = NULL;</span> -<span class="lineNum"> 817 </span> : : -<span class="lineNum"> 818 </span> : : /* Must be initialized -<span class="lineNum"> 819 </span> : : */ -<span class="lineNum"> 820 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 821 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 822 </span> : : -<span class="lineNum"> 823 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 824 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 825 </span> : : -<span class="lineNum"> 826 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_signer != NULL)</span> -<span class="lineNum"> 827 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_signer);</span> -<span class="lineNum"> 828 </span> : : -<span class="lineNum"> 829 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_signer = strdup(signer);</span> -<span class="lineNum"> 830 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_signer == NULL)</span> -<span class="lineNum"> 831 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 832 </span> : : -<span class="lineNum"> 833 </span> : : /* Get the key. -<span class="lineNum"> 834 </span> : : */ -<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : res = get_gpg_key(ctx, &amp;key, 1);</span> -<span class="lineNum"> 836 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 837 </span> : : { -<span class="lineNum"> 838 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_signer);</span> -<span class="lineNum"> 839 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_signer = NULL;</span> -<span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 841 </span> : : } -<span class="lineNum"> 842 </span> : : -<span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : ctx-&gt;signer_key = key;</span> -<span class="lineNum"> 844 </span> : : -<span class="lineNum"> 845 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 846 </span> : : -<span class="lineNum"> 847 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 848 </span> : : #else -<span class="lineNum"> 849 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 850 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 851 </span> : : } -<span class="lineNum"> 852 </span> : : -<span class="lineNum"> 853 </span> : : /* Get the GPG signer key name. -<a name="854"><span class="lineNum"> 854 </span> : : */</a> -<span class="lineNum"> 855 </span> : : int -<span class="lineNum"> 856 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signer(fko_ctx_t ctx, char **signer)</span> -<span class="lineNum"> 857 </span> : : { -<span class="lineNum"> 858 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 859 </span> : : /* Must be initialized -<span class="lineNum"> 860 </span> : : */ -<span class="lineNum"> 861 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 862 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 863 </span> : : -<span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : *signer = ctx-&gt;gpg_signer;</span> -<span class="lineNum"> 865 </span> : : -<span class="lineNum"> 866 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 867 </span> : : #else -<span class="lineNum"> 868 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 869 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 870 </span> : : } -<span class="lineNum"> 871 </span> : : -<span class="lineNum"> 872 </span> : : /* Set the GPG home dir. -<a name="873"><span class="lineNum"> 873 </span> : : */</a> -<span class="lineNum"> 874 </span> : : int -<span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_home_dir(fko_ctx_t ctx, const char * const gpg_home_dir)</span> -<span class="lineNum"> 876 </span> : : { -<span class="lineNum"> 877 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 878 </span> : : struct stat st; -<span class="lineNum"> 879 </span> : : -<span class="lineNum"> 880 </span> : : /* Must be initialized -<span class="lineNum"> 881 </span> : : */ -<span class="lineNum"> 882 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 883 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 884 </span> : : -<span class="lineNum"> 885 </span> : : /* If we are unable to stat the given dir, then return with error. -<span class="lineNum"> 886 </span> : : */ -<span class="lineNum"> 887 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(gpg_home_dir, &amp;st) != 0)</span> -<span class="lineNum"> 888 </span> : : return(FKO_ERROR_GPGME_BAD_HOME_DIR); -<span class="lineNum"> 889 </span> : : -<span class="lineNum"> 890 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!S_ISDIR(st.st_mode))</span> -<span class="lineNum"> 891 </span> : : return(FKO_ERROR_GPGME_BAD_HOME_DIR); -<span class="lineNum"> 892 </span> : : -<span class="lineNum"> 893 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_home_dir != NULL)</span> -<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_home_dir);</span> -<span class="lineNum"> 895 </span> : : -<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : ctx-&gt;gpg_home_dir = strdup(gpg_home_dir);</span> -<span class="lineNum"> 897 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_home_dir == NULL)</span> -<span class="lineNum"> 898 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 899 </span> : : -<span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 901 </span> : : #else -<span class="lineNum"> 902 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 903 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 904 </span> : : } -<span class="lineNum"> 905 </span> : : -<span class="lineNum"> 906 </span> : : /* Get the GPG home dir. -<a name="907"><span class="lineNum"> 907 </span> : : */</a> -<span class="lineNum"> 908 </span> : : int -<span class="lineNum"> 909 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_home_dir(fko_ctx_t ctx, char **home_dir)</span> -<span class="lineNum"> 910 </span> : : { -<span class="lineNum"> 911 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 912 </span> : : /* Must be initialized -<span class="lineNum"> 913 </span> : : */ -<span class="lineNum"> 914 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 915 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 916 </span> : : -<span class="lineNum"> 917 </span> :<span class="lineNoCov"> 0 : *home_dir = ctx-&gt;gpg_home_dir;</span> -<span class="lineNum"> 918 </span> : : -<span class="lineNum"> 919 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 920 </span> : : #else -<span class="lineNum"> 921 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 922 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 923 </span> : : } -<a name="924"><span class="lineNum"> 924 </span> : : </a> -<span class="lineNum"> 925 </span> : : int -<span class="lineNum"> 926 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signature_verify(fko_ctx_t ctx, const unsigned char val)</span> -<span class="lineNum"> 927 </span> : : { -<span class="lineNum"> 928 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 929 </span> : : /* Must be initialized -<span class="lineNum"> 930 </span> : : */ -<span class="lineNum"> 931 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 932 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 933 </span> : : -<span class="lineNum"> 934 </span> :<span class="lineNoCov"> 0 : ctx-&gt;verify_gpg_sigs = (val != 0) ? 1 : 0;</span> -<span class="lineNum"> 935 </span> : : -<span class="lineNum"> 936 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 937 </span> : : #else -<span class="lineNum"> 938 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 939 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 940 </span> : : } -<a name="941"><span class="lineNum"> 941 </span> : : </a> -<span class="lineNum"> 942 </span> : : int -<span class="lineNum"> 943 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_verify(fko_ctx_t ctx, unsigned char * const val)</span> -<span class="lineNum"> 944 </span> : : { -<span class="lineNum"> 945 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 946 </span> : : /* Must be initialized -<span class="lineNum"> 947 </span> : : */ -<span class="lineNum"> 948 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 949 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 950 </span> : : -<span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : *val = ctx-&gt;verify_gpg_sigs;</span> -<span class="lineNum"> 952 </span> : : -<span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 954 </span> : : #else -<span class="lineNum"> 955 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 956 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 957 </span> : : } -<a name="958"><span class="lineNum"> 958 </span> : : </a> -<span class="lineNum"> 959 </span> : : int -<span class="lineNum"> 960 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_ignore_verify_error(fko_ctx_t ctx, const unsigned char val)</span> -<span class="lineNum"> 961 </span> : : { -<span class="lineNum"> 962 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 963 </span> : : /* Must be initialized -<span class="lineNum"> 964 </span> : : */ -<span class="lineNum"> 965 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 966 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 967 </span> : : -<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : ctx-&gt;ignore_gpg_sig_error = (val != 0) ? 1 : 0;</span> -<span class="lineNum"> 969 </span> : : -<span class="lineNum"> 970 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 971 </span> : : #else -<span class="lineNum"> 972 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 973 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 974 </span> : : } -<a name="975"><span class="lineNum"> 975 </span> : : </a> -<span class="lineNum"> 976 </span> : : int -<span class="lineNum"> 977 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_ignore_verify_error(fko_ctx_t ctx, unsigned char * const val)</span> -<span class="lineNum"> 978 </span> : : { -<span class="lineNum"> 979 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 980 </span> : : /* Must be initialized -<span class="lineNum"> 981 </span> : : */ -<span class="lineNum"> 982 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 983 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 984 </span> : : -<span class="lineNum"> 985 </span> :<span class="lineNoCov"> 0 : *val = ctx-&gt;ignore_gpg_sig_error;</span> -<span class="lineNum"> 986 </span> : : -<span class="lineNum"> 987 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 988 </span> : : #else -<span class="lineNum"> 989 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 990 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 991 </span> : : } -<span class="lineNum"> 992 </span> : : -<a name="993"><span class="lineNum"> 993 </span> : : </a> -<span class="lineNum"> 994 </span> : : int -<span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_fpr(fko_ctx_t ctx, char **fpr)</span> -<span class="lineNum"> 996 </span> : : { -<span class="lineNum"> 997 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 998 </span> : : /* Must be initialized -<span class="lineNum"> 999 </span> : : */ -<span class="lineNum"> 1000 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 1001 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 1002 </span> : : -<span class="lineNum"> 1003 </span> : : /* Must be using GPG encryption. -<span class="lineNum"> 1004 </span> : : */ -<span class="lineNum"> 1005 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 1006 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 1007 </span> : : -<span class="lineNum"> 1008 </span> : : /* Make sure we are supposed to verify signatures. -<span class="lineNum"> 1009 </span> : : */ -<span class="lineNum"> 1010 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> -<span class="lineNum"> 1011 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); -<span class="lineNum"> 1012 </span> : : -<span class="lineNum"> 1013 </span> : : /* Make sure we have a signature to work with. -<span class="lineNum"> 1014 </span> : : */ -<span class="lineNum"> 1015 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> -<span class="lineNum"> 1016 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); -<span class="lineNum"> 1017 </span> : : -<span class="lineNum"> 1018 </span> :<span class="lineNoCov"> 0 : *fpr = ctx-&gt;gpg_sigs-&gt;fpr;</span> -<span class="lineNum"> 1019 </span> : : -<span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 1021 </span> : : #else -<span class="lineNum"> 1022 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 1023 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 1024 </span> : : } -<a name="1025"><span class="lineNum"> 1025 </span> : : </a> -<span class="lineNum"> 1026 </span> : : int -<span class="lineNum"> 1027 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_id(fko_ctx_t ctx, char **id)</span> -<span class="lineNum"> 1028 </span> : : { -<span class="lineNum"> 1029 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 1030 </span> : : /* Must be initialized -<span class="lineNum"> 1031 </span> : : */ -<span class="lineNum"> 1032 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 1033 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 1034 </span> : : -<span class="lineNum"> 1035 </span> : : /* Must be using GPG encryption. -<span class="lineNum"> 1036 </span> : : */ -<span class="lineNum"> 1037 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 1038 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 1039 </span> : : -<span class="lineNum"> 1040 </span> : : /* Make sure we are supposed to verify signatures. -<span class="lineNum"> 1041 </span> : : */ -<span class="lineNum"> 1042 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> -<span class="lineNum"> 1043 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); -<span class="lineNum"> 1044 </span> : : -<span class="lineNum"> 1045 </span> : : /* Make sure we have a signature to work with. -<span class="lineNum"> 1046 </span> : : */ -<span class="lineNum"> 1047 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> -<span class="lineNum"> 1048 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); -<span class="lineNum"> 1049 </span> : : -<span class="lineNum"> 1050 </span> :<span class="lineNoCov"> 0 : *id = ctx-&gt;gpg_sigs-&gt;fpr + strlen(ctx-&gt;gpg_sigs-&gt;fpr) - 8;</span> -<span class="lineNum"> 1051 </span> : : -<span class="lineNum"> 1052 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 1053 </span> : : #else -<span class="lineNum"> 1054 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 1055 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 1056 </span> : : } -<a name="1057"><span class="lineNum"> 1057 </span> : : </a> -<span class="lineNum"> 1058 </span> : : int -<span class="lineNum"> 1059 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_summary(fko_ctx_t ctx, int *sigsum)</span> -<span class="lineNum"> 1060 </span> : : { -<span class="lineNum"> 1061 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 1062 </span> : : /* Must be initialized -<span class="lineNum"> 1063 </span> : : */ -<span class="lineNum"> 1064 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 1065 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 1066 </span> : : -<span class="lineNum"> 1067 </span> : : /* Must be using GPG encryption. -<span class="lineNum"> 1068 </span> : : */ -<span class="lineNum"> 1069 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 1070 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 1071 </span> : : -<span class="lineNum"> 1072 </span> : : /* Make sure we are supposed to verify signatures. -<span class="lineNum"> 1073 </span> : : */ -<span class="lineNum"> 1074 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> -<span class="lineNum"> 1075 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); -<span class="lineNum"> 1076 </span> : : -<span class="lineNum"> 1077 </span> : : /* Make sure we have a signature to work with. -<span class="lineNum"> 1078 </span> : : */ -<span class="lineNum"> 1079 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> -<span class="lineNum"> 1080 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); -<span class="lineNum"> 1081 </span> : : -<span class="lineNum"> 1082 </span> :<span class="lineNoCov"> 0 : *sigsum = ctx-&gt;gpg_sigs-&gt;summary;</span> -<span class="lineNum"> 1083 </span> : : -<span class="lineNum"> 1084 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 1085 </span> : : #else -<span class="lineNum"> 1086 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 1087 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 1088 </span> : : } -<a name="1089"><span class="lineNum"> 1089 </span> : : </a> -<span class="lineNum"> 1090 </span> : : int -<span class="lineNum"> 1091 </span> :<span class="lineNoCov"> 0 : fko_get_gpg_signature_status(fko_ctx_t ctx, int *sigstat)</span> -<span class="lineNum"> 1092 </span> : : { -<span class="lineNum"> 1093 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 1094 </span> : : /* Must be initialized -<span class="lineNum"> 1095 </span> : : */ -<span class="lineNum"> 1096 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 1097 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 1098 </span> : : -<span class="lineNum"> 1099 </span> : : /* Must be using GPG encryption. -<span class="lineNum"> 1100 </span> : : */ -<span class="lineNum"> 1101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 1102 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 1103 </span> : : -<span class="lineNum"> 1104 </span> : : /* Make sure we are supposed to verify signatures. -<span class="lineNum"> 1105 </span> : : */ -<span class="lineNum"> 1106 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> -<span class="lineNum"> 1107 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); -<span class="lineNum"> 1108 </span> : : -<span class="lineNum"> 1109 </span> : : /* Make sure we have a signature to work with. -<span class="lineNum"> 1110 </span> : : */ -<span class="lineNum"> 1111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> -<span class="lineNum"> 1112 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); -<span class="lineNum"> 1113 </span> : : -<span class="lineNum"> 1114 </span> :<span class="lineNoCov"> 0 : *sigstat = ctx-&gt;gpg_sigs-&gt;status;</span> -<span class="lineNum"> 1115 </span> : : -<span class="lineNum"> 1116 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 1117 </span> : : #else -<span class="lineNum"> 1118 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 1119 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 1120 </span> : : } -<a name="1121"><span class="lineNum"> 1121 </span> : : </a> -<span class="lineNum"> 1122 </span> : : int -<span class="lineNum"> 1123 </span> :<span class="lineNoCov"> 0 : fko_gpg_signature_id_match(fko_ctx_t ctx, const char * const id,</span> -<span class="lineNum"> 1124 </span> : : unsigned char * const result) -<span class="lineNum"> 1125 </span> : : { -<span class="lineNum"> 1126 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 1127 </span> : : char *curr_id; -<span class="lineNum"> 1128 </span> :<span class="lineNoCov"> 0 : int rv = FKO_SUCCESS;</span> -<span class="lineNum"> 1129 </span> : : -<span class="lineNum"> 1130 </span> : : /* Must be initialized -<span class="lineNum"> 1131 </span> : : */ -<span class="lineNum"> 1132 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 1133 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 1134 </span> : : -<span class="lineNum"> 1135 </span> : : /* Must be using GPG encryption. -<span class="lineNum"> 1136 </span> : : */ -<span class="lineNum"> 1137 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 1138 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 1139 </span> : : -<span class="lineNum"> 1140 </span> : : /* Make sure we are supposed to verify signatures. -<span class="lineNum"> 1141 </span> : : */ -<span class="lineNum"> 1142 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> -<span class="lineNum"> 1143 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); -<span class="lineNum"> 1144 </span> : : -<span class="lineNum"> 1145 </span> : : /* Make sure we have a signature to work with. -<span class="lineNum"> 1146 </span> : : */ -<span class="lineNum"> 1147 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> -<span class="lineNum"> 1148 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); -<span class="lineNum"> 1149 </span> : : -<span class="lineNum"> 1150 </span> :<span class="lineNoCov"> 0 : rv = fko_get_gpg_signature_id(ctx, &amp;curr_id);</span> -<span class="lineNum"> 1151 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rv != FKO_SUCCESS)</span> -<span class="lineNum"> 1152 </span> : : return rv; -<span class="lineNum"> 1153 </span> : : -<span class="lineNum"> 1154 </span> :<span class="lineNoCov"> 0 : *result = strcmp(id, curr_id) == 0 ? 1 : 0;</span> -<span class="lineNum"> 1155 </span> : : -<span class="lineNum"> 1156 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 1157 </span> : : #else -<span class="lineNum"> 1158 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 1159 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 1160 </span> : : } -<a name="1161"><span class="lineNum"> 1161 </span> : : </a> -<span class="lineNum"> 1162 </span> : : int -<span class="lineNum"> 1163 </span> :<span class="lineNoCov"> 0 : fko_gpg_signature_fpr_match(fko_ctx_t ctx, const char * const id,</span> -<span class="lineNum"> 1164 </span> : : unsigned char * const result) -<span class="lineNum"> 1165 </span> : : { -<span class="lineNum"> 1166 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 1167 </span> : : /* Must be initialized -<span class="lineNum"> 1168 </span> : : */ -<span class="lineNum"> 1169 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 1170 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 1171 </span> : : -<span class="lineNum"> 1172 </span> : : /* Must be using GPG encryption. -<span class="lineNum"> 1173 </span> : : */ -<span class="lineNum"> 1174 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encryption_type != FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 1175 </span> : : return(FKO_ERROR_WRONG_ENCRYPTION_TYPE); -<span class="lineNum"> 1176 </span> : : -<span class="lineNum"> 1177 </span> : : /* Make sure we are supposed to verify signatures. -<span class="lineNum"> 1178 </span> : : */ -<span class="lineNum"> 1179 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;verify_gpg_sigs == 0)</span> -<span class="lineNum"> 1180 </span> : : return(FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED); -<span class="lineNum"> 1181 </span> : : -<span class="lineNum"> 1182 </span> : : /* Make sure we have a signature to work with. -<span class="lineNum"> 1183 </span> : : */ -<span class="lineNum"> 1184 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;gpg_sigs == NULL)</span> -<span class="lineNum"> 1185 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); -<span class="lineNum"> 1186 </span> : : -<span class="lineNum"> 1187 </span> :<span class="lineNoCov"> 0 : *result = strcmp(id, ctx-&gt;gpg_sigs-&gt;fpr) == 0 ? 1 : 0;</span> -<span class="lineNum"> 1188 </span> : : -<span class="lineNum"> 1189 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 1190 </span> : : #else -<span class="lineNum"> 1191 </span> : : return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 1192 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 1193 </span> : : } -<span class="lineNum"> 1194 </span> : : -<span class="lineNum"> 1195 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html deleted file mode 100644 index 8cdc5e62..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_error.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_error.c<span style="font-size: 80%;"> (<a href="fko_error.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">145</td> - <td class="headerCovTableEntryLo">11.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">13</td> - <td class="headerCovTableEntry">146</td> - <td class="headerCovTableEntryLo">8.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_error.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_error.c.gcov.html#37">fko_errstr</a></td> - <td class="coverFnHi">176</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_error.c.gcov.html#475">fko_gpg_errstr</a></td> - <td class="coverFnHi">2</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html deleted file mode 100644 index b3df005b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.func.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_error.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_error.c<span style="font-size: 80%;"> (<a href="fko_error.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">145</td> - <td class="headerCovTableEntryLo">11.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">13</td> - <td class="headerCovTableEntry">146</td> - <td class="headerCovTableEntryLo">8.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_error.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_error.c.gcov.html#37">fko_errstr</a></td> - <td class="coverFnHi">176</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_error.c.gcov.html#475">fko_gpg_errstr</a></td> - <td class="coverFnHi">2</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html deleted file mode 100644 index 7f39d9f2..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_error.c.gcov.html +++ /dev/null @@ -1,606 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_error.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_error.c<span style="font-size: 80%;"> (source / <a href="fko_error.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">145</td> - <td class="headerCovTableEntryLo">11.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">13</td> - <td class="headerCovTableEntry">146</td> - <td class="headerCovTableEntryLo">8.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_error.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Error handling functions for libfko -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 35 </span> : : #include &lt;gpgme.h&gt; -<span class="lineNum"> 36 </span> : : #endif -<a name="37"><span class="lineNum"> 37 </span> : : </a> -<span class="lineNum"> 38 </span> : : const char* -<span class="lineNum"> 39 </span> :<span class="lineCov"> 176 : fko_errstr(const int err_code)</span> -<span class="lineNum"> 40 </span> : : { -<span class="lineNum"> 41 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 176 : switch (err_code)</span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchCov" title="Branch 6 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span><span class="branchNoCov" title="Branch 8 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 9 was not taken"> - </span><span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchNoCov" title="Branch 11 was not taken"> - </span><span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchNoCov" title="Branch 13 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchNoCov" title="Branch 15 was not taken"> - </span><span class="branchNoCov" title="Branch 16 was not taken"> - </span><span class="branchNoCov" title="Branch 17 was not taken"> - </span><span class="branchNoCov" title="Branch 18 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 19 was not taken"> - </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span><span class="branchNoCov" title="Branch 21 was not taken"> - </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span><span class="branchNoCov" title="Branch 23 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span><span class="branchNoCov" title="Branch 25 was not taken"> - </span><span class="branchNoCov" title="Branch 26 was not taken"> - </span><span class="branchNoCov" title="Branch 27 was not taken"> - </span><span class="branchNoCov" title="Branch 28 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 29 was not taken"> - </span><span class="branchNoCov" title="Branch 30 was not taken"> - </span><span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchNoCov" title="Branch 32 was not taken"> - </span><span class="branchNoCov" title="Branch 33 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 34 was not taken"> - </span><span class="branchNoCov" title="Branch 35 was not taken"> - </span><span class="branchNoCov" title="Branch 36 was not taken"> - </span><span class="branchNoCov" title="Branch 37 was not taken"> - </span><span class="branchNoCov" title="Branch 38 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 39 was not taken"> - </span><span class="branchNoCov" title="Branch 40 was not taken"> - </span><span class="branchNoCov" title="Branch 41 was not taken"> - </span><span class="branchNoCov" title="Branch 42 was not taken"> - </span><span class="branchNoCov" title="Branch 43 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 44 was not taken"> - </span><span class="branchNoCov" title="Branch 45 was not taken"> - </span><span class="branchNoCov" title="Branch 46 was not taken"> - </span><span class="branchNoCov" title="Branch 47 was not taken"> - </span><span class="branchNoCov" title="Branch 48 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 49 was not taken"> - </span><span class="branchNoCov" title="Branch 50 was not taken"> - </span><span class="branchNoCov" title="Branch 51 was not taken"> - </span><span class="branchNoCov" title="Branch 52 was not taken"> - </span><span class="branchNoCov" title="Branch 53 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 54 was not taken"> - </span><span class="branchNoCov" title="Branch 55 was not taken"> - </span><span class="branchNoCov" title="Branch 56 was not taken"> - </span><span class="branchNoCov" title="Branch 57 was not taken"> - </span><span class="branchNoCov" title="Branch 58 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 59 was not taken"> - </span><span class="branchNoCov" title="Branch 60 was not taken"> - </span><span class="branchNoCov" title="Branch 61 was not taken"> - </span><span class="branchNoCov" title="Branch 62 was not taken"> - </span><span class="branchNoCov" title="Branch 63 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchCov" title="Branch 64 was taken 29 times"> + </span><span class="branchNoCov" title="Branch 65 was not taken"> - </span><span class="branchNoCov" title="Branch 66 was not taken"> - </span><span class="branchNoCov" title="Branch 67 was not taken"> - </span><span class="branchNoCov" title="Branch 68 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 69 was not taken"> - </span><span class="branchNoCov" title="Branch 70 was not taken"> - </span><span class="branchNoCov" title="Branch 71 was not taken"> - </span><span class="branchNoCov" title="Branch 72 was not taken"> - </span><span class="branchNoCov" title="Branch 73 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 74 was not taken"> - </span><span class="branchNoCov" title="Branch 75 was not taken"> - </span><span class="branchNoCov" title="Branch 76 was not taken"> - </span><span class="branchNoCov" title="Branch 77 was not taken"> - </span><span class="branchNoCov" title="Branch 78 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 79 was not taken"> - </span><span class="branchNoCov" title="Branch 80 was not taken"> - </span><span class="branchNoCov" title="Branch 81 was not taken"> - </span><span class="branchNoCov" title="Branch 82 was not taken"> - </span><span class="branchNoCov" title="Branch 83 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 84 was not taken"> - </span><span class="branchNoCov" title="Branch 85 was not taken"> - </span><span class="branchNoCov" title="Branch 86 was not taken"> - </span><span class="branchCov" title="Branch 87 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 88 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchCov" title="Branch 89 was taken 3 times"> + </span><span class="branchCov" title="Branch 90 was taken 22 times"> + </span><span class="branchNoCov" title="Branch 91 was not taken"> - </span><span class="branchNoCov" title="Branch 92 was not taken"> - </span><span class="branchCov" title="Branch 93 was taken 1 time"> + </span> -<span class="lineNum"> </span><span class="branchCov" title="Branch 94 was taken 18 times"> + </span><span class="branchNoCov" title="Branch 95 was not taken"> - </span><span class="branchNoCov" title="Branch 96 was not taken"> - </span><span class="branchNoCov" title="Branch 97 was not taken"> - </span><span class="branchNoCov" title="Branch 98 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 99 was not taken"> - </span><span class="branchNoCov" title="Branch 100 was not taken"> - </span><span class="branchCov" title="Branch 101 was taken 97 times"> + </span><span class="branchNoCov" title="Branch 102 was not taken"> - </span><span class="branchNoCov" title="Branch 103 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 104 was not taken"> - </span><span class="branchNoCov" title="Branch 105 was not taken"> - </span><span class="branchNoCov" title="Branch 106 was not taken"> - </span><span class="branchNoCov" title="Branch 107 was not taken"> - </span><span class="branchNoCov" title="Branch 108 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 109 was not taken"> - </span><span class="branchNoCov" title="Branch 110 was not taken"> - </span><span class="branchNoCov" title="Branch 111 was not taken"> - </span><span class="branchNoCov" title="Branch 112 was not taken"> - </span><span class="branchNoCov" title="Branch 113 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 114 was not taken"> - </span><span class="branchNoCov" title="Branch 115 was not taken"> - </span><span class="branchNoCov" title="Branch 116 was not taken"> - </span><span class="branchNoCov" title="Branch 117 was not taken"> - </span><span class="branchNoCov" title="Branch 118 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 119 was not taken"> - </span><span class="branchNoCov" title="Branch 120 was not taken"> - </span><span class="branchNoCov" title="Branch 121 was not taken"> - </span><span class="branchNoCov" title="Branch 122 was not taken"> - </span><span class="branchNoCov" title="Branch 123 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 124 was not taken"> - </span><span class="branchNoCov" title="Branch 125 was not taken"> - </span><span class="branchNoCov" title="Branch 126 was not taken"> - </span><span class="branchNoCov" title="Branch 127 was not taken"> - </span><span class="branchCov" title="Branch 128 was taken 2 times"> + </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 129 was not taken"> - </span><span class="branchNoCov" title="Branch 130 was not taken"> - </span><span class="branchNoCov" title="Branch 131 was not taken"> - </span><span class="branchCov" title="Branch 132 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 133 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 134 was not taken"> - </span><span class="branchNoCov" title="Branch 135 was not taken"> - </span><span class="branchNoCov" title="Branch 136 was not taken"> - </span><span class="branchNoCov" title="Branch 137 was not taken"> - </span><span class="branchNoCov" title="Branch 138 was not taken"> - </span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 139 was not taken"> - </span>] -<span class="lineNum"> 42 </span> : : { -<span class="lineNum"> 43 </span> : : /* Start base FKO errors -<span class="lineNum"> 44 </span> : : */ -<span class="lineNum"> 45 </span> : : case FKO_SUCCESS: -<span class="lineNum"> 46 </span> : : return(&quot;Success&quot;); -<span class="lineNum"> 47 </span> : : -<span class="lineNum"> 48 </span> : : case FKO_ERROR_CTX_NOT_INITIALIZED: -<span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : return(&quot;FKO Context is not initialized&quot;);</span> -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> : : case FKO_ERROR_MEMORY_ALLOCATION: -<span class="lineNum"> 52 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to allocate memory&quot;);</span> -<span class="lineNum"> 53 </span> : : -<span class="lineNum"> 54 </span> : : case FKO_ERROR_FILESYSTEM_OPERATION: -<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : return(&quot;Read/write bytes mismatch&quot;);</span> -<span class="lineNum"> 56 </span> : : -<span class="lineNum"> 57 </span> : : case FKO_ERROR_INVALID_DATA: -<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data&quot;);</span> -<span class="lineNum"> 59 </span> : : -<span class="lineNum"> 60 </span> : : case FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE: -<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_CLIENT_TIMEOUT_NEGATIVE&quot;);</span> -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL: -<span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 65 </span> : : -<span class="lineNum"> 66 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII: -<span class="lineNum"> 67 </span> :<span class="lineCov"> 2 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NON_ASCII&quot;);</span> -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS: -<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_LT_MIN_FIELDS&quot;);</span> -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_GT_MAX_FIELDS: -<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_GT_MAX_FIELDS&quot;);</span> -<span class="lineNum"> 74 </span> : : -<span class="lineNum"> 75 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS: -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_WRONG_NUM_FIELDS&quot;);</span> -<span class="lineNum"> 77 </span> : : -<span class="lineNum"> 78 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE: -<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_ENC_MSG_LEN_MT_T_SIZE&quot;);</span> -<span class="lineNum"> 80 </span> : : -<span class="lineNum"> 81 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING: -<span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_RAND_MISSING&quot;);</span> -<span class="lineNum"> 83 </span> : : -<span class="lineNum"> 84 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING: -<span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_MISSING&quot;);</span> -<span class="lineNum"> 86 </span> : : -<span class="lineNum"> 87 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG: -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_TOOBIG&quot;);</span> -<span class="lineNum"> 89 </span> : : -<span class="lineNum"> 90 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL: -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_DECODEFAIL&quot;);</span> -<span class="lineNum"> 92 </span> : : -<span class="lineNum"> 93 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL: -<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_USERNAME_VALIDFAIL&quot;);</span> -<span class="lineNum"> 95 </span> : : -<span class="lineNum"> 96 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING: -<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_MISSING&quot;);</span> -<span class="lineNum"> 98 </span> : : -<span class="lineNum"> 99 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG: -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_TOOBIG&quot;);</span> -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL: -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMESTAMP_DECODEFAIL&quot;);</span> -<span class="lineNum"> 104 </span> : : -<span class="lineNum"> 105 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING: -<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_VERSION_MISSING&quot;);</span> -<span class="lineNum"> 107 </span> : : -<span class="lineNum"> 108 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG: -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_VERSION_TOOBIG&quot;);</span> -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING: -<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_MISSING&quot;);</span> -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG: -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_TOOBIG&quot;);</span> -<span class="lineNum"> 116 </span> : : -<span class="lineNum"> 117 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL: -<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MSGTYPE_DECODEFAIL&quot;);</span> -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING: -<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_MISSING&quot;);</span> -<span class="lineNum"> 122 </span> : : -<span class="lineNum"> 123 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG: -<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_TOOBIG&quot;);</span> -<span class="lineNum"> 125 </span> : : -<span class="lineNum"> 126 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL: -<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_DECODEFAIL&quot;);</span> -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL: -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_MESSAGE_VALIDFAIL&quot;);</span> -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL: -<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_ACCESS_VALIDFAIL&quot;);</span> -<span class="lineNum"> 134 </span> : : -<span class="lineNum"> 135 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING: -<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_MISSING&quot;);</span> -<span class="lineNum"> 137 </span> : : -<span class="lineNum"> 138 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG: -<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_TOOBIG&quot;);</span> -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL: -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_DECODEFAIL&quot;);</span> -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL: -<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_NATACCESS_VALIDFAIL&quot;);</span> -<span class="lineNum"> 146 </span> : : -<span class="lineNum"> 147 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING: -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_MISSING&quot;);</span> -<span class="lineNum"> 149 </span> : : -<span class="lineNum"> 150 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL: -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_SRVAUTH_DECODEFAIL&quot;);</span> -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG: -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_SPA_EXTRA_TOOBIG&quot;);</span> -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG: -<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_EXTRA_TOOBIG&quot;);</span> -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL: -<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_EXTRA_DECODEFAIL&quot;);</span> -<span class="lineNum"> 161 </span> : : -<span class="lineNum"> 162 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING: -<span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_MISSING&quot;);</span> -<span class="lineNum"> 164 </span> : : -<span class="lineNum"> 165 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG: -<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_TOOBIG&quot;);</span> -<span class="lineNum"> 167 </span> : : -<span class="lineNum"> 168 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL: -<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_VALIDFAIL&quot;);</span> -<span class="lineNum"> 170 </span> : : -<span class="lineNum"> 171 </span> : : case FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL: -<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_DECODE_TIMEOUT_DECODEFAIL&quot;);</span> -<span class="lineNum"> 173 </span> : : -<span class="lineNum"> 174 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG: -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_MESSAGE_TOOBIG&quot;);</span> -<span class="lineNum"> 176 </span> : : -<span class="lineNum"> 177 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL: -<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL: -<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_VALIDFAIL&quot;);</span> -<span class="lineNum"> 182 </span> : : -<span class="lineNum"> 183 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG: -<span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_DIGEST_TOOBIG&quot;);</span> -<span class="lineNum"> 185 </span> : : -<span class="lineNum"> 186 </span> : : case FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64: -<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCODE_NOTBASE64&quot;);</span> -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL: -<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 191 </span> : : -<span class="lineNum"> 192 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL: -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_DIGESTLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL: -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_PTLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 197 </span> : : -<span class="lineNum"> 198 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL: -<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_RESULT_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 200 </span> : : -<span class="lineNum"> 201 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL: -<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_DECODEFAIL&quot;);</span> -<span class="lineNum"> 203 </span> : : -<span class="lineNum"> 204 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL: -<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_CIPHERLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 206 </span> : : -<span class="lineNum"> 207 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING: -<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MESSAGE_MISSING&quot;);</span> -<span class="lineNum"> 209 </span> : : -<span class="lineNum"> 210 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL: -<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_DECRYPTED_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 212 </span> : : -<span class="lineNum"> 213 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL: -<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MESSAGE_VALIDFAIL&quot;);</span> -<span class="lineNum"> 215 </span> : : -<span class="lineNum"> 216 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL: -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_DIGEST_VALIDFAIL&quot;);</span> -<span class="lineNum"> 218 </span> : : -<span class="lineNum"> 219 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL: -<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 221 </span> : : -<span class="lineNum"> 222 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL: -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_RESULT_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL: -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_CIPHER_DECODEFAIL&quot;);</span> -<span class="lineNum"> 227 </span> : : -<span class="lineNum"> 228 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL: -<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSG_NULL&quot;);</span> -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL: -<span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_GPG_ENCODEDMSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 233 </span> : : -<span class="lineNum"> 234 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL: -<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_VALIDFAIL&quot;);</span> -<span class="lineNum"> 236 </span> : : -<span class="lineNum"> 237 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL: -<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_MODE_VALIDFAIL&quot;);</span> -<span class="lineNum"> 239 </span> : : -<span class="lineNum"> 240 </span> : : case FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN: -<span class="lineNum"> 241 </span> :<span class="lineCov"> 29 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_ENCRYPT_TYPE_UNKNOWN&quot;);</span> -<span class="lineNum"> 242 </span> : : -<span class="lineNum"> 243 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING: -<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING&quot;);</span> -<span class="lineNum"> 245 </span> : : -<span class="lineNum"> 246 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL: -<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 248 </span> : : -<span class="lineNum"> 249 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL: -<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 251 </span> : : -<span class="lineNum"> 252 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL: -<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 254 </span> : : -<span class="lineNum"> 255 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL: -<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL&quot;);</span> -<span class="lineNum"> 257 </span> : : -<span class="lineNum"> 258 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL: -<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL&quot;);</span> -<span class="lineNum"> 260 </span> : : -<span class="lineNum"> 261 </span> : : case FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL: -<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 263 </span> : : -<span class="lineNum"> 264 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL: -<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 266 </span> : : -<span class="lineNum"> 267 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL: -<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 269 </span> : : -<span class="lineNum"> 270 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL: -<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL&quot;);</span> -<span class="lineNum"> 272 </span> : : -<span class="lineNum"> 273 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL: -<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL&quot;);</span> -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> : : case FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL: -<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 278 </span> : : -<span class="lineNum"> 279 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING: -<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING&quot;);</span> -<span class="lineNum"> 281 </span> : : -<span class="lineNum"> 282 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL: -<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL&quot;);</span> -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY: -<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY&quot;);</span> -<span class="lineNum"> 287 </span> : : -<span class="lineNum"> 288 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING: -<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING&quot;);</span> -<span class="lineNum"> 290 </span> : : -<span class="lineNum"> 291 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING: -<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING&quot;);</span> -<span class="lineNum"> 293 </span> : : -<span class="lineNum"> 294 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING: -<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING&quot;);</span> -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> : : case FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING: -<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING&quot;);</span> -<span class="lineNum"> 299 </span> : : -<span class="lineNum"> 300 </span> : : case FKO_ERROR_INVALID_DATA_NAT_EMPTY: -<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_NAT_EMPTY&quot;);</span> -<span class="lineNum"> 302 </span> : : -<span class="lineNum"> 303 </span> : : case FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL: -<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL&quot;);</span> -<span class="lineNum"> 305 </span> : : -<span class="lineNum"> 306 </span> : : case FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING: -<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING&quot;);</span> -<span class="lineNum"> 308 </span> : : -<span class="lineNum"> 309 </span> : : case FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL: -<span class="lineNum"> 310 </span> :<span class="lineCov"> 1 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL&quot;);</span> -<span class="lineNum"> 311 </span> : : -<span class="lineNum"> 312 </span> : : case FKO_ERROR_INVALID_DATA_USER_MISSING: -<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_USER_MISSING&quot;);</span> -<span class="lineNum"> 314 </span> : : -<span class="lineNum"> 315 </span> : : case FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL: -<span class="lineNum"> 316 </span> :<span class="lineCov"> 3 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL&quot;);</span> -<span class="lineNum"> 317 </span> : : -<span class="lineNum"> 318 </span> : : case FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL: -<span class="lineNum"> 319 </span> :<span class="lineCov"> 22 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL&quot;);</span> -<span class="lineNum"> 320 </span> : : -<span class="lineNum"> 321 </span> : : case FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN: -<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN&quot;);</span> -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> : : case FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX: -<span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : return(&quot;Args contain invalid data: FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX&quot;);</span> -<span class="lineNum"> 326 </span> : : -<span class="lineNum"> 327 </span> : : case FKO_ERROR_DATA_TOO_LARGE: -<span class="lineNum"> 328 </span> :<span class="lineCov"> 1 : return(&quot;Value or Size of the data exceeded the max allowed&quot;);</span> -<span class="lineNum"> 329 </span> : : -<span class="lineNum"> 330 </span> : : case FKO_ERROR_INVALID_KEY_LEN: -<span class="lineNum"> 331 </span> :<span class="lineCov"> 18 : return(&quot;Invalid key length&quot;);</span> -<span class="lineNum"> 332 </span> : : -<span class="lineNum"> 333 </span> : : case FKO_ERROR_USERNAME_UNKNOWN: -<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to determine username&quot;);</span> -<span class="lineNum"> 335 </span> : : -<span class="lineNum"> 336 </span> : : case FKO_ERROR_INCOMPLETE_SPA_DATA: -<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : return(&quot;Missing or incomplete SPA data&quot;);</span> -<span class="lineNum"> 338 </span> : : -<span class="lineNum"> 339 </span> : : case FKO_ERROR_MISSING_ENCODED_DATA: -<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : return(&quot;There is no encoded data to process&quot;);</span> -<span class="lineNum"> 341 </span> : : -<span class="lineNum"> 342 </span> : : case FKO_ERROR_INVALID_DIGEST_TYPE: -<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid digest type&quot;);</span> -<span class="lineNum"> 344 </span> : : -<span class="lineNum"> 345 </span> : : case FKO_ERROR_INVALID_ALLOW_IP: -<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid allow IP address in the SPA message data&quot;);</span> -<span class="lineNum"> 347 </span> : : -<span class="lineNum"> 348 </span> : : case FKO_ERROR_INVALID_SPA_COMMAND_MSG: -<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid SPA command message format&quot;);</span> -<span class="lineNum"> 350 </span> : : -<span class="lineNum"> 351 </span> : : case FKO_ERROR_INVALID_SPA_ACCESS_MSG: -<span class="lineNum"> 352 </span> :<span class="lineCov"> 97 : return(&quot;Invalid SPA access message format&quot;);</span> -<span class="lineNum"> 353 </span> : : -<span class="lineNum"> 354 </span> : : case FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG: -<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid SPA nat_access message format&quot;);</span> -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> : : case FKO_ERROR_INVALID_ENCRYPTION_TYPE: -<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid encryption type&quot;);</span> -<span class="lineNum"> 359 </span> : : -<span class="lineNum"> 360 </span> : : case FKO_ERROR_WRONG_ENCRYPTION_TYPE: -<span class="lineNum"> 361 </span> :<span class="lineNoCov"> 0 : return(&quot;Wrong or inappropriate encryption type for this operation&quot;);</span> -<span class="lineNum"> 362 </span> : : -<span class="lineNum"> 363 </span> : : case FKO_ERROR_DECRYPTION_SIZE: -<span class="lineNum"> 364 </span> :<span class="lineNoCov"> 0 : return(&quot;Unexpected or invalid size for decrypted data&quot;);</span> -<span class="lineNum"> 365 </span> : : -<span class="lineNum"> 366 </span> : : case FKO_ERROR_DECRYPTION_FAILURE: -<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : return(&quot;Decryption failed or decrypted data is invalid&quot;);</span> -<span class="lineNum"> 368 </span> : : -<span class="lineNum"> 369 </span> : : case FKO_ERROR_DIGEST_VERIFICATION_FAILED: -<span class="lineNum"> 370 </span> :<span class="lineNoCov"> 0 : return(&quot;The computed digest did not match the digest in the spa data&quot;);</span> -<span class="lineNum"> 371 </span> : : -<span class="lineNum"> 372 </span> : : case FKO_ERROR_INVALID_HMAC_KEY_LEN: -<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : return(&quot;Invalid HMAC key length&quot;);</span> -<span class="lineNum"> 374 </span> : : -<span class="lineNum"> 375 </span> : : case FKO_ERROR_UNSUPPORTED_HMAC_MODE: -<span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : return(&quot;Unsupported HMAC mode (default: SHA256)&quot;);</span> -<span class="lineNum"> 377 </span> : : -<span class="lineNum"> 378 </span> : : case FKO_ERROR_UNSUPPORTED_FEATURE: -<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : return(&quot;Unsupported or unimplemented feature or function&quot;);</span> -<span class="lineNum"> 380 </span> : : -<span class="lineNum"> 381 </span> : : case FKO_ERROR_ZERO_OUT_DATA: -<span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : return(&quot;Could not zero out sensitive data&quot;);</span> -<span class="lineNum"> 383 </span> : : -<span class="lineNum"> 384 </span> : : case FKO_ERROR_UNKNOWN: -<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown/Unclassified error&quot;);</span> -<span class="lineNum"> 386 </span> : : -<span class="lineNum"> 387 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 388 </span> : : /* Start GPGME-related errors -<span class="lineNum"> 389 </span> : : */ -<span class="lineNum"> 390 </span> : : case FKO_ERROR_MISSING_GPG_KEY_DATA: -<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : return(&quot;Missing GPG key data (signer or recipient not set)&quot;);</span> -<span class="lineNum"> 392 </span> : : -<span class="lineNum"> 393 </span> : : case FKO_ERROR_GPGME_NO_OPENPGP: -<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : return(&quot;This GPGME implementation does not support OpenPGP&quot;);</span> -<span class="lineNum"> 395 </span> : : -<span class="lineNum"> 396 </span> : : case FKO_ERROR_GPGME_CONTEXT: -<span class="lineNum"> 397 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to create GPGME context&quot;);</span> -<span class="lineNum"> 398 </span> : : -<span class="lineNum"> 399 </span> : : case FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ: -<span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : return(&quot;Error creating the plaintext data object&quot;);</span> -<span class="lineNum"> 401 </span> : : -<span class="lineNum"> 402 </span> : : case FKO_ERROR_GPGME_SET_PROTOCOL: -<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to set GPGME to use OpenPGP protocol&quot;);</span> -<span class="lineNum"> 404 </span> : : -<span class="lineNum"> 405 </span> : : case FKO_ERROR_GPGME_CIPHER_DATA_OBJ: -<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : return(&quot;Error creating the encrypted data data object&quot;);</span> -<span class="lineNum"> 407 </span> : : -<span class="lineNum"> 408 </span> : : case FKO_ERROR_GPGME_BAD_PASSPHRASE: -<span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : return(&quot;The GPG passphrase was not valid&quot;);</span> -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> : : case FKO_ERROR_GPGME_ENCRYPT_SIGN: -<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : return(&quot;Error during the encrypt and sign operation&quot;);</span> -<span class="lineNum"> 413 </span> : : -<span class="lineNum"> 414 </span> : : case FKO_ERROR_GPGME_CONTEXT_SIGNER_KEY: -<span class="lineNum"> 415 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to create GPGME context for the signer key&quot;);</span> -<span class="lineNum"> 416 </span> : : -<span class="lineNum"> 417 </span> : : case FKO_ERROR_GPGME_SIGNER_KEYLIST_START: -<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : return(&quot;Error from signer keylist start operation&quot;);</span> -<span class="lineNum"> 419 </span> : : -<span class="lineNum"> 420 </span> : : case FKO_ERROR_GPGME_SIGNER_KEY_NOT_FOUND: -<span class="lineNum"> 421 </span> :<span class="lineNoCov"> 0 : return(&quot;The key for the given signer was not found&quot;);</span> -<span class="lineNum"> 422 </span> : : -<span class="lineNum"> 423 </span> : : case FKO_ERROR_GPGME_SIGNER_KEY_AMBIGUOUS: -<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : return(&quot;Ambiguous name/id for the signer key (mulitple matches)&quot;);</span> -<span class="lineNum"> 425 </span> : : -<span class="lineNum"> 426 </span> : : case FKO_ERROR_GPGME_ADD_SIGNER: -<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : return(&quot;Error adding the signer key to the gpgme context&quot;);</span> -<span class="lineNum"> 428 </span> : : -<span class="lineNum"> 429 </span> : : case FKO_ERROR_GPGME_CONTEXT_RECIPIENT_KEY: -<span class="lineNum"> 430 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to create GPGME context for the recipient key&quot;);</span> -<span class="lineNum"> 431 </span> : : -<span class="lineNum"> 432 </span> : : case FKO_ERROR_GPGME_RECIPIENT_KEYLIST_START: -<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : return(&quot;Error from signer keylist start operation&quot;);</span> -<span class="lineNum"> 434 </span> : : -<span class="lineNum"> 435 </span> : : case FKO_ERROR_GPGME_RECIPIENT_KEY_NOT_FOUND: -<span class="lineNum"> 436 </span> :<span class="lineCov"> 2 : return(&quot;The key for the given recipient was not found&quot;);</span> -<span class="lineNum"> 437 </span> : : -<span class="lineNum"> 438 </span> : : case FKO_ERROR_GPGME_RECIPIENT_KEY_AMBIGUOUS: -<span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : return(&quot;Ambiguous name/id for the recipient key (mulitple matches)&quot;);</span> -<span class="lineNum"> 440 </span> : : -<span class="lineNum"> 441 </span> : : case FKO_ERROR_GPGME_DECRYPT_FAILED: -<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : return(&quot;Decryption operation failed&quot;);</span> -<span class="lineNum"> 443 </span> : : -<span class="lineNum"> 444 </span> : : case FKO_ERROR_GPGME_DECRYPT_UNSUPPORTED_ALGORITHM: -<span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : return(&quot;Decryption operation failed due to unsupported algorithm&quot;);</span> -<span class="lineNum"> 446 </span> : : -<span class="lineNum"> 447 </span> : : case FKO_ERROR_GPGME_BAD_GPG_EXE: -<span class="lineNum"> 448 </span> :<span class="lineCov"> 1 : return(&quot;Unable to stat the given GPG executable&quot;);</span> -<span class="lineNum"> 449 </span> : : -<span class="lineNum"> 450 </span> : : case FKO_ERROR_GPGME_BAD_HOME_DIR: -<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to stat the given GPG home directory&quot;);</span> -<span class="lineNum"> 452 </span> : : -<span class="lineNum"> 453 </span> : : case FKO_ERROR_GPGME_SET_HOME_DIR: -<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to set the given GPG home directory&quot;);</span> -<span class="lineNum"> 455 </span> : : -<span class="lineNum"> 456 </span> : : case FKO_ERROR_GPGME_NO_SIGNATURE: -<span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : return(&quot;Missing GPG signature&quot;);</span> -<span class="lineNum"> 458 </span> : : -<span class="lineNum"> 459 </span> : : case FKO_ERROR_GPGME_BAD_SIGNATURE: -<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : return(&quot;Bad GPG signature&quot;);</span> -<span class="lineNum"> 461 </span> : : -<span class="lineNum"> 462 </span> : : case FKO_ERROR_GPGME_SIGNATURE_VERIFY_DISABLED: -<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : return(&quot;Trying to check signature with verification disabled&quot;);</span> -<span class="lineNum"> 464 </span> : : -<span class="lineNum"> 465 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 466 </span> : : } -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> : : #if !HAVE_LIBGPGME -<span class="lineNum"> 469 </span> : : if(err_code &gt; GPGME_ERR_START &amp;&amp; err_code &lt; FKO_LAST_ERROR) -<span class="lineNum"> 470 </span> : : return(&quot;GPG-related error code given, but GPG is not supported&quot;); -<span class="lineNum"> 471 </span> : : #endif -<span class="lineNum"> 472 </span> : : -<span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : return(&quot;Undefined Error&quot;);</span> -<span class="lineNum"> 474 </span> : : } -<a name="475"><span class="lineNum"> 475 </span> : : </a> -<span class="lineNum"> 476 </span> : : const char* -<span class="lineNum"> 477 </span> :<span class="lineCov"> 2 : fko_gpg_errstr(fko_ctx_t ctx)</span> -<span class="lineNum"> 478 </span> : : { -<span class="lineNum"> 479 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 480 </span> : : -<span class="lineNum"> 481 </span> : : /* Must be initialized -<span class="lineNum"> 482 </span> : : */ -<span class="lineNum"> 483 </span>[<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 2 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 484 </span> : : return(&quot;&quot;); -<span class="lineNum"> 485 </span> : : -<span class="lineNum"> 486 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(ctx-&gt;gpg_err)</span> -<span class="lineNum"> 487 </span> :<span class="lineCov"> 2 : return(gpgme_strerror(ctx-&gt;gpg_err));</span> -<span class="lineNum"> 488 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 489 </span> : : -<span class="lineNum"> 490 </span> : : return(&quot;&quot;); -<span class="lineNum"> 491 </span> : : } -<span class="lineNum"> 492 </span> : : -<span class="lineNum"> 493 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html deleted file mode 100644 index f3abf4a8..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func-sort-c.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_funcs.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_funcs.c<span style="font-size: 80%;"> (<a href="fko_funcs.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">117</td> - <td class="headerCovTableEntry">216</td> - <td class="headerCovTableEntryLo">54.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">70.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">74</td> - <td class="headerCovTableEntry">166</td> - <td class="headerCovTableEntryLo">44.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_funcs.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#520">fko_get_spa_data</a></td> - <td class="coverFnHi">1633</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#275">fko_destroy</a></td> - <td class="coverFnHi">982</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#436">fko_get_version</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#38">fko_new</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#465">fko_spa_data_final</a></td> - <td class="coverFnHi">434</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#161">fko_new_with_data</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#428">fko_base64_decode</a></td> - <td class="coverFnHi">123</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#422">fko_base64_encode</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#371">fko_key_gen</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#567">fko_set_spa_data</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html deleted file mode 100644 index bfac8a27..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.func.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_funcs.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_funcs.c<span style="font-size: 80%;"> (<a href="fko_funcs.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">117</td> - <td class="headerCovTableEntry">216</td> - <td class="headerCovTableEntryLo">54.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">70.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">74</td> - <td class="headerCovTableEntry">166</td> - <td class="headerCovTableEntryLo">44.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_funcs.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#428">fko_base64_decode</a></td> - <td class="coverFnHi">123</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#422">fko_base64_encode</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#275">fko_destroy</a></td> - <td class="coverFnHi">982</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#520">fko_get_spa_data</a></td> - <td class="coverFnHi">1633</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#436">fko_get_version</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#371">fko_key_gen</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#38">fko_new</a></td> - <td class="coverFnHi">566</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#161">fko_new_with_data</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#567">fko_set_spa_data</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_funcs.c.gcov.html#465">fko_spa_data_final</a></td> - <td class="coverFnHi">434</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html deleted file mode 100644 index 0d83000b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_funcs.c.gcov.html +++ /dev/null @@ -1,720 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_funcs.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_funcs.c<span style="font-size: 80%;"> (source / <a href="fko_funcs.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">117</td> - <td class="headerCovTableEntry">216</td> - <td class="headerCovTableEntryLo">54.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">70.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">74</td> - <td class="headerCovTableEntry">166</td> - <td class="headerCovTableEntryLo">44.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_funcs.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: General utility functions for libfko -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;base64.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;digest.h&quot; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : /* Initialize an fko context. -<a name="38"><span class="lineNum"> 38 </span> : : */</a> -<span class="lineNum"> 39 </span> : : int -<span class="lineNum"> 40 </span> :<span class="lineCov"> 566 : fko_new(fko_ctx_t *r_ctx)</span> -<span class="lineNum"> 41 </span> : : { -<span class="lineNum"> 42 </span> :<span class="lineCov"> 566 : fko_ctx_t ctx = NULL;</span> -<span class="lineNum"> 43 </span> : : int res; -<span class="lineNum"> 44 </span> : : char *ver; -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 47 </span> : : fiu_return_on(&quot;fko_new_calloc&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 48 </span> : : #endif -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> :<span class="lineCov"> 566 : ctx = calloc(1, sizeof *ctx);</span> -<span class="lineNum"> 51 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 566 : if(ctx == NULL)</span> -<span class="lineNum"> 52 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 53 </span> : : -<span class="lineNum"> 54 </span> : : /* Set default values and state. -<span class="lineNum"> 55 </span> : : * -<span class="lineNum"> 56 </span> : : * Note: We initialize the context early so that the fko_set_xxx -<span class="lineNum"> 57 </span> : : * functions can operate properly. If there are any problems during -<span class="lineNum"> 58 </span> : : * initialization, then fko_destroy() is called which will clean up -<span class="lineNum"> 59 </span> : : * the context. -<span class="lineNum"> 60 </span> : : */ -<span class="lineNum"> 61 </span> :<span class="lineCov"> 566 : ctx-&gt;initval = FKO_CTX_INITIALIZED;</span> -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> : : /* Set the version string. -<span class="lineNum"> 64 </span> : : */ -<span class="lineNum"> 65 </span> :<span class="lineCov"> 566 : ver = strdup(FKO_PROTOCOL_VERSION);</span> -<span class="lineNum"> 66 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(ver == NULL)</span> -<span class="lineNum"> 67 </span> : : { -<span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_MEMORY_ALLOCATION);</span> -<span class="lineNum"> 71 </span> : : } -<span class="lineNum"> 72 </span> :<span class="lineCov"> 566 : ctx-&gt;version = ver;</span> -<span class="lineNum"> 73 </span> : : -<span class="lineNum"> 74 </span> : : /* Rand value. -<span class="lineNum"> 75 </span> : : */ -<span class="lineNum"> 76 </span> :<span class="lineCov"> 566 : res = fko_set_rand_value(ctx, NULL);</span> -<span class="lineNum"> 77 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 78 </span> : : { -<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 82 </span> : : } -<span class="lineNum"> 83 </span> : : -<span class="lineNum"> 84 </span> : : /* Username. -<span class="lineNum"> 85 </span> : : */ -<span class="lineNum"> 86 </span> :<span class="lineCov"> 566 : res = fko_set_username(ctx, NULL);</span> -<span class="lineNum"> 87 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 88 </span> : : { -<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 92 </span> : : } -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> : : /* Timestamp. -<span class="lineNum"> 95 </span> : : */ -<span class="lineNum"> 96 </span> :<span class="lineCov"> 566 : res = fko_set_timestamp(ctx, 0);</span> -<span class="lineNum"> 97 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 98 </span> : : { -<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 102 </span> : : } -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> : : /* Default Digest Type. -<span class="lineNum"> 105 </span> : : */ -<span class="lineNum"> 106 </span> :<span class="lineCov"> 566 : res = fko_set_spa_digest_type(ctx, FKO_DEFAULT_DIGEST);</span> -<span class="lineNum"> 107 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 108 </span> : : { -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 112 </span> : : } -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : /* Default Message Type. -<span class="lineNum"> 115 </span> : : */ -<span class="lineNum"> 116 </span> :<span class="lineCov"> 566 : res = fko_set_spa_message_type(ctx, FKO_DEFAULT_MSG_TYPE);</span> -<span class="lineNum"> 117 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 118 </span> : : { -<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 122 </span> : : } -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> : : /* Default Encryption Type. -<span class="lineNum"> 125 </span> : : */ -<span class="lineNum"> 126 </span> :<span class="lineCov"> 566 : res = fko_set_spa_encryption_type(ctx, FKO_DEFAULT_ENCRYPTION);</span> -<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 128 </span> : : { -<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 132 </span> : : } -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> : : /* Default is Rijndael in CBC mode -<span class="lineNum"> 135 </span> : : */ -<span class="lineNum"> 136 </span> :<span class="lineCov"> 566 : res = fko_set_spa_encryption_mode(ctx, FKO_DEFAULT_ENC_MODE);</span> -<span class="lineNum"> 137 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 138 </span> : : { -<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 142 </span> : : } -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 145 </span> : : /* Set gpg signature verify on. -<span class="lineNum"> 146 </span> : : */ -<span class="lineNum"> 147 </span> :<span class="lineCov"> 566 : ctx-&gt;verify_gpg_sigs = 1;</span> -<span class="lineNum"> 148 </span> : : -<span class="lineNum"> 149 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 150 </span> : : -<span class="lineNum"> 151 </span> :<span class="lineCov"> 566 : FKO_SET_CTX_INITIALIZED(ctx);</span> -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> :<span class="lineCov"> 566 : *r_ctx = ctx;</span> -<span class="lineNum"> 154 </span> : : -<span class="lineNum"> 155 </span> :<span class="lineCov"> 566 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 156 </span> : : } -<span class="lineNum"> 157 </span> : : -<span class="lineNum"> 158 </span> : : /* Initialize an fko context with external (encrypted/encoded) data. -<span class="lineNum"> 159 </span> : : * This is used to create a context with the purpose of decoding -<span class="lineNum"> 160 </span> : : * and parsing the provided data into the context data. -<a name="161"><span class="lineNum"> 161 </span> : : */</a> -<span class="lineNum"> 162 </span> : : int -<span class="lineNum"> 163 </span> :<span class="lineCov"> 416 : fko_new_with_data(fko_ctx_t *r_ctx, const char * const enc_msg,</span> -<span class="lineNum"> 164 </span> : : const char * const dec_key, const int dec_key_len, -<span class="lineNum"> 165 </span> : : int encryption_mode, const char * const hmac_key, -<span class="lineNum"> 166 </span> : : const int hmac_key_len, const int hmac_type) -<span class="lineNum"> 167 </span> : : { -<span class="lineNum"> 168 </span> :<span class="lineCov"> 416 : fko_ctx_t ctx = NULL;</span> -<span class="lineNum"> 169 </span> :<span class="lineCov"> 416 : int res = FKO_SUCCESS; /* Are we optimistic or what? */</span> -<span class="lineNum"> 170 </span> : : int enc_msg_len; -<span class="lineNum"> 171 </span> : : -<span class="lineNum"> 172 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 173 </span> : : fiu_return_on(&quot;fko_new_with_data_msg&quot;, -<span class="lineNum"> 174 </span> : : FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING); -<span class="lineNum"> 175 </span> : : #endif -<span class="lineNum"> 176 </span> : : -<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(enc_msg == NULL)</span> -<span class="lineNum"> 178 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_NEW_ENCMSG_MISSING); -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 181 </span> : : fiu_return_on(&quot;fko_new_with_data_keylen&quot;, -<span class="lineNum"> 182 </span> : : FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 183 </span> : : #endif -<span class="lineNum"> 184 </span> : : -<span class="lineNum"> 185 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(dec_key_len &lt; 0 || hmac_key_len &lt; 0)</span> -<span class="lineNum"> 186 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 187 </span> : : -<span class="lineNum"> 188 </span> :<span class="lineCov"> 416 : ctx = calloc(1, sizeof *ctx);</span> -<span class="lineNum"> 189 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(ctx == NULL)</span> -<span class="lineNum"> 190 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 191 </span> : : -<span class="lineNum"> 192 </span> :<span class="lineCov"> 416 : enc_msg_len = strnlen(enc_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 193 </span> : : -<span class="lineNum"> 194 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(! is_valid_encoded_msg_len(enc_msg_len))</span> -<span class="lineNum"> 195 </span> : : { -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : free(ctx);</span> -<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_INVALID_DATA_FUNCS_NEW_MSGLEN_VALIDFAIL);</span> -<span class="lineNum"> 198 </span> : : } -<span class="lineNum"> 199 </span> : : -<span class="lineNum"> 200 </span> : : /* First, add the data to the context. -<span class="lineNum"> 201 </span> : : */ -<span class="lineNum"> 202 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg = strdup(enc_msg);</span> -<span class="lineNum"> 203 </span> :<span class="lineCov"> 416 : ctx-&gt;encrypted_msg_len = enc_msg_len;</span> -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(ctx-&gt;encrypted_msg == NULL)</span> -<span class="lineNum"> 206 </span> : : { -<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : free(ctx);</span> -<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_MEMORY_ALLOCATION);</span> -<span class="lineNum"> 209 </span> : : } -<span class="lineNum"> 210 </span> : : -<span class="lineNum"> 211 </span> : : /* Default Encryption Mode (Rijndael in CBC mode) -<span class="lineNum"> 212 </span> : : */ -<span class="lineNum"> 213 </span> :<span class="lineCov"> 416 : ctx-&gt;initval = FKO_CTX_INITIALIZED;</span> -<span class="lineNum"> 214 </span> :<span class="lineCov"> 416 : res = fko_set_spa_encryption_mode(ctx, encryption_mode);</span> -<span class="lineNum"> 215 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 216 </span> : : { -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 220 </span> : : } -<span class="lineNum"> 221 </span> : : -<span class="lineNum"> 222 </span> : : /* HMAC digest type -<span class="lineNum"> 223 </span> : : */ -<span class="lineNum"> 224 </span> :<span class="lineCov"> 416 : res = fko_set_spa_hmac_type(ctx, hmac_type);</span> -<span class="lineNum"> 225 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 226 </span> : : { -<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 230 </span> : : } -<span class="lineNum"> 231 </span> : : -<span class="lineNum"> 232 </span> : : /* Check HMAC if the access stanza had an HMAC key -<span class="lineNum"> 233 </span> : : */ -<span class="lineNum"> 234 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 416 : if(hmac_key_len &gt; 0 &amp;&amp; hmac_key != NULL)</span> -<span class="lineNum"> 235 </span> :<span class="lineCov"> 345 : res = fko_verify_hmac(ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 236 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 237 </span> : : { -<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 241 </span> : : } -<span class="lineNum"> 242 </span> : : -<span class="lineNum"> 243 </span> : : /* Consider it initialized here. -<span class="lineNum"> 244 </span> : : */ -<span class="lineNum"> 245 </span> :<span class="lineCov"> 416 : FKO_SET_CTX_INITIALIZED(ctx);</span> -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> : : /* If a decryption key is provided, go ahead and decrypt and decode. -<span class="lineNum"> 248 </span> : : */ -<span class="lineNum"> 249 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 416 times"> + </span>]:<span class="lineCov"> 416 : if(dec_key != NULL)</span> -<span class="lineNum"> 250 </span> : : { -<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : res = fko_decrypt_spa_data(ctx, dec_key, dec_key_len);</span> -<span class="lineNum"> 252 </span> : : -<span class="lineNum"> 253 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 254 </span> : : { -<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : *r_ctx = NULL; /* Make sure the caller ctx is null just in case */</span> -<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 259 </span> : : } -<span class="lineNum"> 260 </span> : : } -<span class="lineNum"> 261 </span> : : -<span class="lineNum"> 262 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 263 </span> : : /* Set gpg signature verify on. -<span class="lineNum"> 264 </span> : : */ -<span class="lineNum"> 265 </span> :<span class="lineCov"> 416 : ctx-&gt;verify_gpg_sigs = 1;</span> -<span class="lineNum"> 266 </span> : : -<span class="lineNum"> 267 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 268 </span> : : -<span class="lineNum"> 269 </span> :<span class="lineCov"> 416 : *r_ctx = ctx;</span> -<span class="lineNum"> 270 </span> : : -<span class="lineNum"> 271 </span> :<span class="lineCov"> 416 : return(res);</span> -<span class="lineNum"> 272 </span> : : } -<span class="lineNum"> 273 </span> : : -<span class="lineNum"> 274 </span> : : /* Destroy a context and free its resources -<a name="275"><span class="lineNum"> 275 </span> : : */</a> -<span class="lineNum"> 276 </span> : : int -<span class="lineNum"> 277 </span> :<span class="lineCov"> 982 : fko_destroy(fko_ctx_t ctx)</span> -<span class="lineNum"> 278 </span> : : { -<span class="lineNum"> 279 </span> :<span class="lineCov"> 982 : int zero_free_rv = FKO_SUCCESS;</span> -<span class="lineNum"> 280 </span> : : -<span class="lineNum"> 281 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 282 </span> : : fko_gpg_sig_t gsig, tgsig; -<span class="lineNum"> 283 </span> : : #endif -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span>[<span class="branchCov" title="Branch 0 was taken 982 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 982 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 982 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 286 </span> : : return(zero_free_rv); -<span class="lineNum"> 287 </span> : : -<span class="lineNum"> 288 </span> [<span class="branchCov" title="Branch 0 was taken 951 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;rand_val != NULL)</span> -<span class="lineNum"> 289 </span> :<span class="lineCov"> 951 : free(ctx-&gt;rand_val);</span> -<span class="lineNum"> 290 </span> : : -<span class="lineNum"> 291 </span> [<span class="branchCov" title="Branch 0 was taken 951 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;username != NULL)</span> -<span class="lineNum"> 292 </span> :<span class="lineCov"> 951 : free(ctx-&gt;username);</span> -<span class="lineNum"> 293 </span> : : -<span class="lineNum"> 294 </span> [<span class="branchCov" title="Branch 0 was taken 951 times"> + </span><span class="branchCov" title="Branch 1 was taken 31 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;version != NULL)</span> -<span class="lineNum"> 295 </span> :<span class="lineCov"> 951 : free(ctx-&gt;version);</span> -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> [<span class="branchCov" title="Branch 0 was taken 852 times"> + </span><span class="branchCov" title="Branch 1 was taken 130 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;message != NULL)</span> -<span class="lineNum"> 298 </span> :<span class="lineCov"> 852 : free(ctx-&gt;message);</span> -<span class="lineNum"> 299 </span> : : -<span class="lineNum"> 300 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;nat_access != NULL)</span> -<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;nat_access);</span> -<span class="lineNum"> 302 </span> : : -<span class="lineNum"> 303 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;server_auth != NULL)</span> -<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> -<span class="lineNum"> 305 </span> : : -<span class="lineNum"> 306 </span> [<span class="branchCov" title="Branch 0 was taken 819 times"> + </span><span class="branchCov" title="Branch 1 was taken 163 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;digest != NULL)</span> -<span class="lineNum"> 307 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 819 times"> + </span>]:<span class="lineCov"> 819 : if(zero_free(ctx-&gt;digest, ctx-&gt;digest_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 309 </span> : : -<span class="lineNum"> 310 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;raw_digest != NULL)</span> -<span class="lineNum"> 311 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(ctx-&gt;raw_digest, ctx-&gt;raw_digest_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 313 </span> : : -<span class="lineNum"> 314 </span> [<span class="branchCov" title="Branch 0 was taken 821 times"> + </span><span class="branchCov" title="Branch 1 was taken 161 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;encoded_msg != NULL)</span> -<span class="lineNum"> 315 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 821 times"> + </span>]:<span class="lineCov"> 821 : if(zero_free(ctx-&gt;encoded_msg, ctx-&gt;encoded_msg_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 317 </span> : : -<span class="lineNum"> 318 </span> [<span class="branchCov" title="Branch 0 was taken 832 times"> + </span><span class="branchCov" title="Branch 1 was taken 150 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;encrypted_msg != NULL)</span> -<span class="lineNum"> 319 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 832 times"> + </span>]:<span class="lineCov"> 832 : if(zero_free(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 321 </span> : : -<span class="lineNum"> 322 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchCov" title="Branch 1 was taken 290 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;msg_hmac != NULL)</span> -<span class="lineNum"> 323 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 692 times"> + </span>]:<span class="lineCov"> 692 : if(zero_free(ctx-&gt;msg_hmac, ctx-&gt;msg_hmac_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 325 </span> : : -<span class="lineNum"> 326 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 327 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_exe != NULL)</span> -<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_exe);</span> -<span class="lineNum"> 329 </span> : : -<span class="lineNum"> 330 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_home_dir != NULL)</span> -<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_home_dir);</span> -<span class="lineNum"> 332 </span> : : -<span class="lineNum"> 333 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_recipient != NULL)</span> -<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_recipient);</span> -<span class="lineNum"> 335 </span> : : -<span class="lineNum"> 336 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_signer != NULL)</span> -<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;gpg_signer);</span> -<span class="lineNum"> 338 </span> : : -<span class="lineNum"> 339 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;recipient_key != NULL)</span> -<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(ctx-&gt;recipient_key);</span> -<span class="lineNum"> 341 </span> : : -<span class="lineNum"> 342 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;signer_key != NULL)</span> -<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(ctx-&gt;signer_key);</span> -<span class="lineNum"> 344 </span> : : -<span class="lineNum"> 345 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 980 times"> + </span>]:<span class="lineCov"> 982 : if(ctx-&gt;gpg_ctx != NULL)</span> -<span class="lineNum"> 346 </span> :<span class="lineCov"> 2 : gpgme_release(ctx-&gt;gpg_ctx);</span> -<span class="lineNum"> 347 </span> : : -<span class="lineNum"> 348 </span> :<span class="lineCov"> 982 : gsig = ctx-&gt;gpg_sigs;</span> -<span class="lineNum"> 349 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 982 times"> + </span>]:<span class="lineCov"> 982 : while(gsig != NULL)</span> -<span class="lineNum"> 350 </span> : : { -<span class="lineNum"> 351 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gsig-&gt;fpr != NULL)</span> -<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : free(gsig-&gt;fpr);</span> -<span class="lineNum"> 353 </span> : : -<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : tgsig = gsig;</span> -<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : gsig = gsig-&gt;next;</span> -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : free(tgsig);</span> -<span class="lineNum"> 358 </span> : : } -<span class="lineNum"> 359 </span> : : -<span class="lineNum"> 360 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 361 </span> : : -<span class="lineNum"> 362 </span> : : memset(ctx, 0x0, sizeof(*ctx)); -<span class="lineNum"> 363 </span> : : -<span class="lineNum"> 364 </span> :<span class="lineCov"> 982 : free(ctx);</span> -<span class="lineNum"> 365 </span> : : -<span class="lineNum"> 366 </span> :<span class="lineCov"> 982 : return(zero_free_rv);</span> -<span class="lineNum"> 367 </span> : : } -<span class="lineNum"> 368 </span> : : -<span class="lineNum"> 369 </span> : : /* Generate Rijndael and HMAC keys from /dev/random and base64 -<span class="lineNum"> 370 </span> : : * encode them -<a name="371"><span class="lineNum"> 371 </span> : : */</a> -<span class="lineNum"> 372 </span> : : int -<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : fko_key_gen(char * const key_base64, const int key_len,</span> -<span class="lineNum"> 374 </span> : : char * const hmac_key_base64, const int hmac_key_len, -<span class="lineNum"> 375 </span> : : const int hmac_type) -<span class="lineNum"> 376 </span> : : { -<span class="lineNum"> 377 </span> : : unsigned char key[RIJNDAEL_MAX_KEYSIZE]; -<span class="lineNum"> 378 </span> : : unsigned char hmac_key[SHA512_BLOCK_LEN]; -<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : int klen = key_len;</span> -<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : int hmac_klen = hmac_key_len;</span> -<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : int b64_len = 0;</span> -<span class="lineNum"> 382 </span> : : -<span class="lineNum"> 383 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len == FKO_DEFAULT_KEY_LEN)</span> -<span class="lineNum"> 384 </span> :<span class="lineNoCov"> 0 : klen = RIJNDAEL_MAX_KEYSIZE;</span> -<span class="lineNum"> 385 </span> : : -<span class="lineNum"> 386 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(hmac_key_len == FKO_DEFAULT_KEY_LEN)</span> -<span class="lineNum"> 387 </span> : : { -<span class="lineNum"> 388 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(hmac_type == FKO_DEFAULT_HMAC_MODE</span> -<span class="lineNum"> 389 </span> : : || hmac_type == FKO_HMAC_SHA256) -<span class="lineNum"> 390 </span> : : hmac_klen = SHA256_BLOCK_LEN; -<span class="lineNum"> 391 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_MD5)</span> -<span class="lineNum"> 392 </span> : : hmac_klen = MD5_DIGEST_LEN; -<span class="lineNum"> 393 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_SHA1)</span> -<span class="lineNum"> 394 </span> : : hmac_klen = SHA1_DIGEST_LEN; -<span class="lineNum"> 395 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_SHA384)</span> -<span class="lineNum"> 396 </span> : : hmac_klen = SHA384_BLOCK_LEN; -<span class="lineNum"> 397 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(hmac_type == FKO_HMAC_SHA512)</span> -<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : hmac_klen = SHA512_BLOCK_LEN;</span> -<span class="lineNum"> 399 </span> : : } -<span class="lineNum"> 400 </span> : : -<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((klen &lt; 1) || (klen &gt; RIJNDAEL_MAX_KEYSIZE))</span> -<span class="lineNum"> 402 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEYLEN_VALIDFAIL); -<span class="lineNum"> 403 </span> : : -<span class="lineNum"> 404 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((hmac_klen &lt; 1) || (hmac_klen &gt; SHA512_BLOCK_LEN))</span> -<span class="lineNum"> 405 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMACLEN_VALIDFAIL); -<span class="lineNum"> 406 </span> : : -<span class="lineNum"> 407 </span> :<span class="lineNoCov"> 0 : get_random_data(key, klen);</span> -<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : get_random_data(hmac_key, hmac_klen);</span> -<span class="lineNum"> 409 </span> : : -<span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : b64_len = b64_encode(key, key_base64, klen);</span> -<span class="lineNum"> 411 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_len &lt; klen)</span> -<span class="lineNum"> 412 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_KEY_ENCODEFAIL); -<span class="lineNum"> 413 </span> : : -<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : b64_len = b64_encode(hmac_key, hmac_key_base64, hmac_klen);</span> -<span class="lineNum"> 415 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(b64_len &lt; hmac_klen)</span> -<span class="lineNum"> 416 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_GEN_HMAC_ENCODEFAIL); -<span class="lineNum"> 417 </span> : : -<span class="lineNum"> 418 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 419 </span> : : } -<span class="lineNum"> 420 </span> : : -<span class="lineNum"> 421 </span> : : /* Provide an FKO wrapper around base64 encode/decode functions -<a name="422"><span class="lineNum"> 422 </span> : : */</a> -<span class="lineNum"> 423 </span> : : int -<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : fko_base64_encode(unsigned char * const in, char * const out, int in_len)</span> -<span class="lineNum"> 425 </span> : : { -<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : return b64_encode(in, out, in_len);</span> -<span class="lineNum"> 427 </span> : : } -<a name="428"><span class="lineNum"> 428 </span> : : </a> -<span class="lineNum"> 429 </span> : : int -<span class="lineNum"> 430 </span> :<span class="lineCov"> 123 : fko_base64_decode(const char * const in, unsigned char *out)</span> -<span class="lineNum"> 431 </span> : : { -<span class="lineNum"> 432 </span> :<span class="lineCov"> 123 : return b64_decode(in, out);</span> -<span class="lineNum"> 433 </span> : : } -<span class="lineNum"> 434 </span> : : -<span class="lineNum"> 435 </span> : : /* Return the fko version -<a name="436"><span class="lineNum"> 436 </span> : : */</a> -<span class="lineNum"> 437 </span> : : int -<span class="lineNum"> 438 </span> :<span class="lineCov"> 801 : fko_get_version(fko_ctx_t ctx, char **version)</span> -<span class="lineNum"> 439 </span> : : { -<span class="lineNum"> 440 </span> : : -<span class="lineNum"> 441 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 442 </span> : : fiu_return_on(&quot;fko_get_version_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 443 </span> : : #endif -<span class="lineNum"> 444 </span> : : -<span class="lineNum"> 445 </span> : : /* Must be initialized -<span class="lineNum"> 446 </span> : : */ -<span class="lineNum"> 447 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 448 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 449 </span> : : -<span class="lineNum"> 450 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(version == NULL)</span> -<span class="lineNum"> 451 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 452 </span> : : -<span class="lineNum"> 453 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 454 </span> : : fiu_return_on(&quot;fko_get_version_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 455 </span> : : #endif -<span class="lineNum"> 456 </span> : : -<span class="lineNum"> 457 </span> :<span class="lineCov"> 801 : *version = ctx-&gt;version;</span> -<span class="lineNum"> 458 </span> : : -<span class="lineNum"> 459 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 460 </span> : : } -<span class="lineNum"> 461 </span> : : -<span class="lineNum"> 462 </span> : : /* Final update and encoding of data in the context. -<span class="lineNum"> 463 </span> : : * This does require all requisite fields be properly -<span class="lineNum"> 464 </span> : : * set. -<a name="465"><span class="lineNum"> 465 </span> : : */</a> -<span class="lineNum"> 466 </span> : : int -<span class="lineNum"> 467 </span> :<span class="lineCov"> 434 : fko_spa_data_final(fko_ctx_t ctx,</span> -<span class="lineNum"> 468 </span> : : const char * const enc_key, const int enc_key_len, -<span class="lineNum"> 469 </span> : : const char * const hmac_key, const int hmac_key_len) -<span class="lineNum"> 470 </span> : : { -<span class="lineNum"> 471 </span> : : char *tbuf; -<span class="lineNum"> 472 </span> :<span class="lineCov"> 434 : int res = 0, data_with_hmac_len = 0;</span> -<span class="lineNum"> 473 </span> : : -<span class="lineNum"> 474 </span> : : /* Must be initialized -<span class="lineNum"> 475 </span> : : */ -<span class="lineNum"> 476 </span>[<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 434 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 477 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 478 </span> : : -<span class="lineNum"> 479 </span> [<span class="branchCov" title="Branch 0 was taken 434 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 434 : if(enc_key_len &lt; 0)</span> -<span class="lineNum"> 480 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 481 </span> : : -<span class="lineNum"> 482 </span> :<span class="lineCov"> 434 : res = fko_encrypt_spa_data(ctx, enc_key, enc_key_len);</span> -<span class="lineNum"> 483 </span> : : -<span class="lineNum"> 484 </span> : : /* Now calculate hmac if so configured -<span class="lineNum"> 485 </span> : : */ -<span class="lineNum"> 486 </span>[<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 347 times"> + </span><span class="branchCov" title="Branch 3 was taken 69 times"> + </span>]:<span class="lineCov"> 434 : if (res == FKO_SUCCESS &amp;&amp; ctx-&gt;hmac_type != FKO_HMAC_UNKNOWN)</span> -<span class="lineNum"> 487 </span> : : { -<span class="lineNum"> 488 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if(hmac_key_len &lt; 0)</span> -<span class="lineNum"> 489 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 490 </span> : : -<span class="lineNum"> 491 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if(hmac_key == NULL)</span> -<span class="lineNum"> 492 </span> : : return(FKO_ERROR_INVALID_KEY_LEN); -<span class="lineNum"> 493 </span> : : -<span class="lineNum"> 494 </span> :<span class="lineCov"> 347 : res = fko_set_spa_hmac(ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 495 </span> : : -<span class="lineNum"> 496 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if (res == FKO_SUCCESS)</span> -<span class="lineNum"> 497 </span> : : { -<span class="lineNum"> 498 </span> : : /* Now that we have the hmac, append it to the -<span class="lineNum"> 499 </span> : : * encrypted data (which has already been base64-encoded -<span class="lineNum"> 500 </span> : : * and the trailing '=' chars stripped off). -<span class="lineNum"> 501 </span> : : */ -<span class="lineNum"> 502 </span> : : data_with_hmac_len -<span class="lineNum"> 503 </span> :<span class="lineCov"> 347 : = ctx-&gt;encrypted_msg_len+1+ctx-&gt;msg_hmac_len+1;</span> -<span class="lineNum"> 504 </span> : : -<span class="lineNum"> 505 </span> :<span class="lineCov"> 347 : tbuf = realloc(ctx-&gt;encrypted_msg, data_with_hmac_len);</span> -<span class="lineNum"> 506 </span> [<span class="branchCov" title="Branch 0 was taken 347 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 347 : if (tbuf == NULL)</span> -<span class="lineNum"> 507 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 508 </span> : : -<span class="lineNum"> 509 </span> :<span class="lineCov"> 347 : strlcat(tbuf, ctx-&gt;msg_hmac, data_with_hmac_len);</span> -<span class="lineNum"> 510 </span> : : -<span class="lineNum"> 511 </span> :<span class="lineCov"> 347 : ctx-&gt;encrypted_msg = tbuf;</span> -<span class="lineNum"> 512 </span> :<span class="lineCov"> 347 : ctx-&gt;encrypted_msg_len = data_with_hmac_len;</span> -<span class="lineNum"> 513 </span> : : } -<span class="lineNum"> 514 </span> : : } -<span class="lineNum"> 515 </span> : : -<span class="lineNum"> 516 </span> :<span class="lineCov"> 434 : return res;</span> -<span class="lineNum"> 517 </span> : : } -<span class="lineNum"> 518 </span> : : -<span class="lineNum"> 519 </span> : : /* Return the fko SPA encrypted data. -<a name="520"><span class="lineNum"> 520 </span> : : */</a> -<span class="lineNum"> 521 </span> : : int -<span class="lineNum"> 522 </span> :<span class="lineCov"> 1633 : fko_get_spa_data(fko_ctx_t ctx, char **spa_data)</span> -<span class="lineNum"> 523 </span> : : { -<span class="lineNum"> 524 </span> : : -<span class="lineNum"> 525 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 526 </span> : : fiu_return_on(&quot;fko_get_spa_data_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 527 </span> : : #endif -<span class="lineNum"> 528 </span> : : -<span class="lineNum"> 529 </span> : : /* Must be initialized -<span class="lineNum"> 530 </span> : : */ -<span class="lineNum"> 531 </span>[<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1633 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 532 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 533 </span> : : -<span class="lineNum"> 534 </span> [<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1633 : if(spa_data == NULL)</span> -<span class="lineNum"> 535 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 538 </span> : : fiu_return_on(&quot;fko_get_spa_data_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 539 </span> : : #endif -<span class="lineNum"> 540 </span> : : -<span class="lineNum"> 541 </span> : : /* We expect to have encrypted data to process. If not, we bail. -<span class="lineNum"> 542 </span> : : */ -<span class="lineNum"> 543 </span> [<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 3266 : if(ctx-&gt;encrypted_msg == NULL || ! is_valid_encoded_msg_len(</span> -<span class="lineNum"> 544 </span> :<span class="lineCov"> 1633 : strnlen(ctx-&gt;encrypted_msg, MAX_SPA_ENCODED_MSG_SIZE)))</span> -<span class="lineNum"> 545 </span> : : return(FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 546 </span> : : -<span class="lineNum"> 547 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 548 </span> : : fiu_return_on(&quot;fko_get_spa_data_encoded&quot;, FKO_ERROR_MISSING_ENCODED_DATA); -<span class="lineNum"> 549 </span> : : #endif -<span class="lineNum"> 550 </span> : : -<span class="lineNum"> 551 </span> :<span class="lineCov"> 1633 : *spa_data = ctx-&gt;encrypted_msg;</span> -<span class="lineNum"> 552 </span> : : -<span class="lineNum"> 553 </span> : : /* Notice we omit the first 10 bytes if Rijndael encryption is -<span class="lineNum"> 554 </span> : : * used (to eliminate the consistent 'Salted__' string), and -<span class="lineNum"> 555 </span> : : * in GnuPG mode we eliminate the consistent 'hQ' base64 encoded -<span class="lineNum"> 556 </span> : : * prefix -<span class="lineNum"> 557 </span> : : */ -<span class="lineNum"> 558 </span> [<span class="branchCov" title="Branch 0 was taken 1633 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1633 : if(ctx-&gt;encryption_type == FKO_ENCRYPTION_RIJNDAEL)</span> -<span class="lineNum"> 559 </span> :<span class="lineCov"> 1633 : *spa_data += B64_RIJNDAEL_SALT_STR_LEN;</span> -<span class="lineNum"> 560 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;encryption_type == FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : *spa_data += B64_GPG_PREFIX_STR_LEN;</span> -<span class="lineNum"> 562 </span> : : -<span class="lineNum"> 563 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 564 </span> : : } -<span class="lineNum"> 565 </span> : : -<span class="lineNum"> 566 </span> : : /* Set the fko SPA encrypted data. -<a name="567"><span class="lineNum"> 567 </span> : : */</a> -<span class="lineNum"> 568 </span> : : int -<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : fko_set_spa_data(fko_ctx_t ctx, const char * const enc_msg)</span> -<span class="lineNum"> 570 </span> : : { -<span class="lineNum"> 571 </span> : : int enc_msg_len; -<span class="lineNum"> 572 </span> : : -<span class="lineNum"> 573 </span> : : /* Must be initialized -<span class="lineNum"> 574 </span> : : */ -<span class="lineNum"> 575 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 576 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 577 </span> : : -<span class="lineNum"> 578 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(enc_msg == NULL)</span> -<span class="lineNum"> 579 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); -<span class="lineNum"> 580 </span> : : -<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : enc_msg_len = strnlen(enc_msg, MAX_SPA_ENCODED_MSG_SIZE);</span> -<span class="lineNum"> 582 </span> : : -<span class="lineNum"> 583 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_encoded_msg_len(enc_msg_len))</span> -<span class="lineNum"> 584 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); -<span class="lineNum"> 585 </span> : : -<span class="lineNum"> 586 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg != NULL)</span> -<span class="lineNum"> 587 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;encrypted_msg);</span> -<span class="lineNum"> 588 </span> : : -<span class="lineNum"> 589 </span> : : /* First, add the data to the context. -<span class="lineNum"> 590 </span> : : */ -<span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg = strdup(enc_msg);</span> -<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len = enc_msg_len;</span> -<span class="lineNum"> 593 </span> : : -<span class="lineNum"> 594 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;encrypted_msg == NULL)</span> -<span class="lineNum"> 595 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 596 </span> : : -<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 598 </span> : : } -<span class="lineNum"> 599 </span> : : -<span class="lineNum"> 600 </span> : : #if AFL_FUZZING -<span class="lineNum"> 601 </span> : : /* provide a way to set the encrypted data directly without base64 encoding. -<span class="lineNum"> 602 </span> : : * This allows direct AFL fuzzing against decryption routines. -<span class="lineNum"> 603 </span> : : */ -<span class="lineNum"> 604 </span> : : int -<span class="lineNum"> 605 </span> : : fko_afl_set_spa_data(fko_ctx_t ctx, const char * const enc_msg, const int enc_msg_len) -<span class="lineNum"> 606 </span> : : { -<span class="lineNum"> 607 </span> : : /* Must be initialized -<span class="lineNum"> 608 </span> : : */ -<span class="lineNum"> 609 </span> : : if(!CTX_INITIALIZED(ctx)) -<span class="lineNum"> 610 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 611 </span> : : -<span class="lineNum"> 612 </span> : : if(enc_msg == NULL) -<span class="lineNum"> 613 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); -<span class="lineNum"> 614 </span> : : -<span class="lineNum"> 615 </span> : : if(! is_valid_encoded_msg_len(enc_msg_len)) -<span class="lineNum"> 616 </span> : : return(FKO_ERROR_INVALID_DATA_FUNCS_SET_MSGLEN_VALIDFAIL); -<span class="lineNum"> 617 </span> : : -<span class="lineNum"> 618 </span> : : if(ctx-&gt;encrypted_msg != NULL) -<span class="lineNum"> 619 </span> : : free(ctx-&gt;encrypted_msg); -<span class="lineNum"> 620 </span> : : -<span class="lineNum"> 621 </span> : : /* Copy the raw encrypted data into the context -<span class="lineNum"> 622 </span> : : */ -<span class="lineNum"> 623 </span> : : ctx-&gt;encrypted_msg = calloc(1, enc_msg_len); -<span class="lineNum"> 624 </span> : : if(ctx-&gt;encrypted_msg == NULL) -<span class="lineNum"> 625 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 626 </span> : : -<span class="lineNum"> 627 </span> : : memcpy(ctx-&gt;encrypted_msg, enc_msg, enc_msg_len); -<span class="lineNum"> 628 </span> : : -<span class="lineNum"> 629 </span> : : ctx-&gt;encrypted_msg_len = enc_msg_len; -<span class="lineNum"> 630 </span> : : -<span class="lineNum"> 631 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 632 </span> : : } -<span class="lineNum"> 633 </span> : : #endif -<span class="lineNum"> 634 </span> : : -<span class="lineNum"> 635 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html deleted file mode 100644 index b1939fee..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func-sort-c.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_hmac.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_hmac.c<span style="font-size: 80%;"> (<a href="fko_hmac.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">79</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryLo">73.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">42</td> - <td class="headerCovTableEntry">96</td> - <td class="headerCovTableEntryLo">43.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_hmac.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#186">fko_set_spa_hmac_type</a></td> - <td class="coverFnHi">1122</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#216">fko_get_spa_hmac_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#168">fko_get_spa_hmac</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#231">fko_set_spa_hmac</a></td> - <td class="coverFnHi">692</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#36">fko_verify_hmac</a></td> - <td class="coverFnHi">345</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html deleted file mode 100644 index 31906463..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.func.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_hmac.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_hmac.c<span style="font-size: 80%;"> (<a href="fko_hmac.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">79</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryLo">73.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">42</td> - <td class="headerCovTableEntry">96</td> - <td class="headerCovTableEntryLo">43.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_hmac.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#168">fko_get_spa_hmac</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#216">fko_get_spa_hmac_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#231">fko_set_spa_hmac</a></td> - <td class="coverFnHi">692</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#186">fko_set_spa_hmac_type</a></td> - <td class="coverFnHi">1122</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_hmac.c.gcov.html#36">fko_verify_hmac</a></td> - <td class="coverFnHi">345</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html deleted file mode 100644 index 9b736f56..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_hmac.c.gcov.html +++ /dev/null @@ -1,416 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_hmac.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_hmac.c<span style="font-size: 80%;"> (source / <a href="fko_hmac.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">79</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryLo">73.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">42</td> - <td class="headerCovTableEntry">96</td> - <td class="headerCovTableEntryLo">43.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_hmac.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Provide HMAC support to SPA communications -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;cipher_funcs.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;hmac.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;base64.h&quot; -<a name="36"><span class="lineNum"> 36 </span> : : </a> -<span class="lineNum"> 37 </span> : : int -<span class="lineNum"> 38 </span> :<span class="lineCov"> 345 : fko_verify_hmac(fko_ctx_t ctx,</span> -<span class="lineNum"> 39 </span> : : const char * const hmac_key, const int hmac_key_len) -<span class="lineNum"> 40 </span> : : { -<span class="lineNum"> 41 </span> :<span class="lineCov"> 345 : char *hmac_digest_from_data = NULL;</span> -<span class="lineNum"> 42 </span> :<span class="lineCov"> 345 : char *tbuf = NULL;</span> -<span class="lineNum"> 43 </span> :<span class="lineCov"> 345 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 44 </span> :<span class="lineCov"> 345 : int hmac_b64_digest_len = 0, zero_free_rv = FKO_SUCCESS;</span> -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : /* Must be initialized -<span class="lineNum"> 47 </span> : : */ -<span class="lineNum"> 48 </span>[<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 345 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 49 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(hmac_key == NULL)</span> -<span class="lineNum"> 52 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 53 </span> : : -<span class="lineNum"> 54 </span> [<span class="branchCov" title="Branch 1 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 345 : if (! is_valid_encoded_msg_len(ctx-&gt;encrypted_msg_len))</span> -<span class="lineNum"> 55 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_MSGLEN_VALIDFAIL); -<span class="lineNum"> 56 </span> : : -<span class="lineNum"> 57 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(hmac_key_len &lt; 0 || hmac_key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 58 </span> : : return(FKO_ERROR_INVALID_HMAC_KEY_LEN); -<span class="lineNum"> 59 </span> : : -<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(ctx-&gt;hmac_type == FKO_HMAC_MD5)</span> -<span class="lineNum"> 61 </span> : : hmac_b64_digest_len = MD5_B64_LEN; -<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 271 times"> + </span><span class="branchCov" title="Branch 1 was taken 74 times"> + </span>]:<span class="lineCov"> 345 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA1)</span> -<span class="lineNum"> 63 </span> : : hmac_b64_digest_len = SHA1_B64_LEN; -<span class="lineNum"> 64 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 271 times"> + </span>]:<span class="lineCov"> 271 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA256)</span> -<span class="lineNum"> 65 </span> : : hmac_b64_digest_len = SHA256_B64_LEN; -<span class="lineNum"> 66 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA384)</span> -<span class="lineNum"> 67 </span> : : hmac_b64_digest_len = SHA384_B64_LEN; -<span class="lineNum"> 68 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA512)</span> -<span class="lineNum"> 69 </span> : : hmac_b64_digest_len = SHA512_B64_LEN; -<span class="lineNum"> 70 </span> : : else -<span class="lineNum"> 71 </span> : : return(FKO_ERROR_UNSUPPORTED_HMAC_MODE); -<span class="lineNum"> 72 </span> : : -<span class="lineNum"> 73 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if((ctx-&gt;encrypted_msg_len - hmac_b64_digest_len)</span> -<span class="lineNum"> 74 </span> : : &lt; MIN_SPA_ENCODED_MSG_SIZE) -<span class="lineNum"> 75 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_ENCMSGLEN_VALIDFAIL); -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : /* Get digest value -<span class="lineNum"> 78 </span> : : */ -<span class="lineNum"> 79 </span> :<span class="lineCov"> 690 : hmac_digest_from_data = strndup((ctx-&gt;encrypted_msg</span> -<span class="lineNum"> 80 </span> :<span class="lineCov"> 345 : + ctx-&gt;encrypted_msg_len - hmac_b64_digest_len),</span> -<span class="lineNum"> 81 </span> : : hmac_b64_digest_len); -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(hmac_digest_from_data == NULL)</span> -<span class="lineNum"> 84 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> : : /* Now we chop the HMAC digest off of the encrypted msg -<span class="lineNum"> 87 </span> : : */ -<span class="lineNum"> 88 </span> :<span class="lineCov"> 345 : tbuf = strndup(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 89 </span> : : ctx-&gt;encrypted_msg_len - hmac_b64_digest_len); -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(tbuf == NULL)</span> -<span class="lineNum"> 92 </span> : : { -<span class="lineNum"> 93 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(hmac_digest_from_data, strnlen(hmac_digest_from_data,</span> -<span class="lineNum"> 94 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) == FKO_SUCCESS) -<span class="lineNum"> 95 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 96 </span> : : else -<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_ZERO_OUT_DATA);</span> -<span class="lineNum"> 98 </span> : : } -<span class="lineNum"> 99 </span> : : -<span class="lineNum"> 100 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(zero_free(ctx-&gt;encrypted_msg, ctx-&gt;encrypted_msg_len) != FKO_SUCCESS)</span> -<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 102 </span> : : -<span class="lineNum"> 103 </span> :<span class="lineCov"> 345 : ctx-&gt;encrypted_msg = tbuf;</span> -<span class="lineNum"> 104 </span> :<span class="lineCov"> 345 : ctx-&gt;encrypted_msg_len -= hmac_b64_digest_len;</span> -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(ctx-&gt;encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> -<span class="lineNum"> 107 </span> : : { -<span class="lineNum"> 108 </span> : : /* See if we need to add the &quot;hQ&quot; string to the front of the -<span class="lineNum"> 109 </span> : : * encrypted data. -<span class="lineNum"> 110 </span> : : */ -<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! ctx-&gt;added_gpg_prefix)</span> -<span class="lineNum"> 112 </span> : : { -<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : res = add_gpg_prefix(ctx);</span> -<span class="lineNum"> 114 </span> : : } -<span class="lineNum"> 115 </span> : : } -<span class="lineNum"> 116 </span> : : else -<span class="lineNum"> 117 </span> : : { -<span class="lineNum"> 118 </span> : : /* See if we need to add the &quot;Salted__&quot; string to the front of the -<span class="lineNum"> 119 </span> : : * encrypted data. -<span class="lineNum"> 120 </span> : : */ -<span class="lineNum"> 121 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(! ctx-&gt;added_salted_str)</span> -<span class="lineNum"> 122 </span> : : { -<span class="lineNum"> 123 </span> :<span class="lineCov"> 345 : res = add_salted_str(ctx);</span> -<span class="lineNum"> 124 </span> : : } -<span class="lineNum"> 125 </span> : : } -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if (res != FKO_SUCCESS)</span> -<span class="lineNum"> 128 </span> : : { -<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free(hmac_digest_from_data, strnlen(hmac_digest_from_data,</span> -<span class="lineNum"> 130 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) -<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 132 </span> : : -<span class="lineNum"> 133 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(zero_free_rv == FKO_SUCCESS)</span> -<span class="lineNum"> 134 </span> : : return(res); -<span class="lineNum"> 135 </span> : : else -<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : return(zero_free_rv);</span> -<span class="lineNum"> 137 </span> : : } -<span class="lineNum"> 138 </span> : : -<span class="lineNum"> 139 </span> : : /* Calculate the HMAC from the encrypted data and then -<span class="lineNum"> 140 </span> : : * compare -<span class="lineNum"> 141 </span> : : */ -<span class="lineNum"> 142 </span> :<span class="lineCov"> 345 : res = fko_set_spa_hmac_type(ctx, ctx-&gt;hmac_type);</span> -<span class="lineNum"> 143 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(res == FKO_SUCCESS)</span> -<span class="lineNum"> 144 </span> : : { -<span class="lineNum"> 145 </span> :<span class="lineCov"> 345 : res = fko_set_spa_hmac(ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 146 </span> : : -<span class="lineNum"> 147 </span> [<span class="branchCov" title="Branch 0 was taken 345 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 345 : if(res == FKO_SUCCESS)</span> -<span class="lineNum"> 148 </span> : : { -<span class="lineNum"> 149 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(constant_runtime_cmp(hmac_digest_from_data,</span> -<span class="lineNum"> 150 </span> :<span class="lineCov"> 345 : ctx-&gt;msg_hmac, hmac_b64_digest_len) != 0)</span> -<span class="lineNum"> 151 </span> : : { -<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : res = FKO_ERROR_INVALID_DATA_HMAC_COMPAREFAIL;</span> -<span class="lineNum"> 153 </span> : : } -<span class="lineNum"> 154 </span> : : } -<span class="lineNum"> 155 </span> : : } -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> [<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(zero_free(hmac_digest_from_data, strnlen(hmac_digest_from_data,</span> -<span class="lineNum"> 158 </span> : : MAX_SPA_ENCODED_MSG_SIZE)) != FKO_SUCCESS) -<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : zero_free_rv = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 160 </span> : : -<span class="lineNum"> 161 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 345 times"> + </span>]:<span class="lineCov"> 345 : if(res == FKO_SUCCESS)</span> -<span class="lineNum"> 162 </span> : : return(zero_free_rv); -<span class="lineNum"> 163 </span> : : else -<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 165 </span> : : } -<span class="lineNum"> 166 </span> : : -<span class="lineNum"> 167 </span> : : /* Return the fko HMAC data -<a name="168"><span class="lineNum"> 168 </span> : : */</a> -<span class="lineNum"> 169 </span> : : int -<span class="lineNum"> 170 </span> :<span class="lineCov"> 801 : fko_get_spa_hmac(fko_ctx_t ctx, char **hmac_data)</span> -<span class="lineNum"> 171 </span> : : { -<span class="lineNum"> 172 </span> : : /* Must be initialized -<span class="lineNum"> 173 </span> : : */ -<span class="lineNum"> 174 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 175 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 176 </span> : : -<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(hmac_data == NULL)</span> -<span class="lineNum"> 178 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> :<span class="lineCov"> 801 : *hmac_data = ctx-&gt;msg_hmac;</span> -<span class="lineNum"> 181 </span> : : -<span class="lineNum"> 182 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 183 </span> : : } -<span class="lineNum"> 184 </span> : : -<span class="lineNum"> 185 </span> : : /* Set the HMAC type -<a name="186"><span class="lineNum"> 186 </span> : : */</a> -<span class="lineNum"> 187 </span> : : int -<span class="lineNum"> 188 </span> :<span class="lineCov"> 1122 : fko_set_spa_hmac_type(fko_ctx_t ctx, const short hmac_type)</span> -<span class="lineNum"> 189 </span> : : { -<span class="lineNum"> 190 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 191 </span> : : fiu_return_on(&quot;fko_set_spa_hmac_type_init&quot;, -<span class="lineNum"> 192 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 193 </span> : : #endif -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> : : /* Must be initialized -<span class="lineNum"> 196 </span> : : */ -<span class="lineNum"> 197 </span>[<span class="branchCov" title="Branch 0 was taken 1122 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1122 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1122 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 198 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 199 </span> : : -<span class="lineNum"> 200 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 201 </span> : : fiu_return_on(&quot;fko_set_spa_hmac_type_val&quot;, -<span class="lineNum"> 202 </span> : : FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL); -<span class="lineNum"> 203 </span> : : #endif -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> [<span class="branchCov" title="Branch 0 was taken 1122 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1122 : if(hmac_type &lt; 0 || hmac_type &gt;= FKO_LAST_HMAC_MODE)</span> -<span class="lineNum"> 206 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_TYPE_VALIDFAIL); -<span class="lineNum"> 207 </span> : : -<span class="lineNum"> 208 </span> :<span class="lineCov"> 1122 : ctx-&gt;hmac_type = hmac_type;</span> -<span class="lineNum"> 209 </span> : : -<span class="lineNum"> 210 </span> :<span class="lineCov"> 1122 : ctx-&gt;state |= FKO_HMAC_MODE_MODIFIED;</span> -<span class="lineNum"> 211 </span> : : -<span class="lineNum"> 212 </span> :<span class="lineCov"> 1122 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 213 </span> : : } -<span class="lineNum"> 214 </span> : : -<span class="lineNum"> 215 </span> : : /* Return the fko HMAC type -<a name="216"><span class="lineNum"> 216 </span> : : */</a> -<span class="lineNum"> 217 </span> : : int -<span class="lineNum"> 218 </span> :<span class="lineCov"> 801 : fko_get_spa_hmac_type(fko_ctx_t ctx, short *hmac_type)</span> -<span class="lineNum"> 219 </span> : : { -<span class="lineNum"> 220 </span> : : /* Must be initialized -<span class="lineNum"> 221 </span> : : */ -<span class="lineNum"> 222 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 223 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(hmac_type == NULL)</span> -<span class="lineNum"> 226 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 227 </span> : : -<span class="lineNum"> 228 </span> :<span class="lineCov"> 801 : *hmac_type = ctx-&gt;hmac_type;</span> -<span class="lineNum"> 229 </span> : : -<span class="lineNum"> 230 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<a name="231"><span class="lineNum"> 231 </span> : : }</a> -<span class="lineNum"> 232 </span> : : -<span class="lineNum"> 233 </span> :<span class="lineCov"> 692 : int fko_set_spa_hmac(fko_ctx_t ctx,</span> -<span class="lineNum"> 234 </span> : : const char * const hmac_key, const int hmac_key_len) -<span class="lineNum"> 235 </span> : : { -<span class="lineNum"> 236 </span> :<span class="lineCov"> 692 : unsigned char hmac[SHA512_DIGEST_STR_LEN] = {0};</span> -<span class="lineNum"> 237 </span> :<span class="lineCov"> 692 : char *hmac_base64 = NULL;</span> -<span class="lineNum"> 238 </span> :<span class="lineCov"> 692 : int hmac_digest_str_len = 0;</span> -<span class="lineNum"> 239 </span> :<span class="lineCov"> 692 : int hmac_digest_len = 0;</span> -<span class="lineNum"> 240 </span> : : -<span class="lineNum"> 241 </span> : : /* Must be initialized -<span class="lineNum"> 242 </span> : : */ -<span class="lineNum"> 243 </span>[<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 692 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 244 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 245 </span> : : -<span class="lineNum"> 246 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if(hmac_key == NULL)</span> -<span class="lineNum"> 247 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 248 </span> : : -<span class="lineNum"> 249 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if(hmac_key_len &lt; 0 || hmac_key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 250 </span> : : return(FKO_ERROR_INVALID_HMAC_KEY_LEN); -<span class="lineNum"> 251 </span> : : -<span class="lineNum"> 252 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 692 times"> + </span>]:<span class="lineCov"> 692 : if(ctx-&gt;hmac_type == FKO_HMAC_MD5)</span> -<span class="lineNum"> 253 </span> : : { -<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : hmac_md5(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 256 </span> : : -<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : hmac_digest_len = MD5_DIGEST_LEN;</span> -<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : hmac_digest_str_len = MD5_DIGEST_STR_LEN;</span> -<span class="lineNum"> 259 </span> : : } -<span class="lineNum"> 260 </span> [<span class="branchCov" title="Branch 0 was taken 148 times"> + </span><span class="branchCov" title="Branch 1 was taken 544 times"> + </span>]:<span class="lineCov"> 692 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA1)</span> -<span class="lineNum"> 261 </span> : : { -<span class="lineNum"> 262 </span> :<span class="lineCov"> 148 : hmac_sha1(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 263 </span> :<span class="lineCov"> 148 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 264 </span> : : -<span class="lineNum"> 265 </span> :<span class="lineCov"> 148 : hmac_digest_len = SHA1_DIGEST_LEN;</span> -<span class="lineNum"> 266 </span> :<span class="lineCov"> 148 : hmac_digest_str_len = SHA1_DIGEST_STR_LEN;</span> -<span class="lineNum"> 267 </span> : : } -<span class="lineNum"> 268 </span> [<span class="branchCov" title="Branch 0 was taken 544 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 544 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA256)</span> -<span class="lineNum"> 269 </span> : : { -<span class="lineNum"> 270 </span> :<span class="lineCov"> 544 : hmac_sha256(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 271 </span> :<span class="lineCov"> 544 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 272 </span> : : -<span class="lineNum"> 273 </span> :<span class="lineCov"> 544 : hmac_digest_len = SHA256_DIGEST_LEN;</span> -<span class="lineNum"> 274 </span> :<span class="lineCov"> 544 : hmac_digest_str_len = SHA256_DIGEST_STR_LEN;</span> -<span class="lineNum"> 275 </span> : : } -<span class="lineNum"> 276 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA384)</span> -<span class="lineNum"> 277 </span> : : { -<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : hmac_sha384(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 280 </span> : : -<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : hmac_digest_len = SHA384_DIGEST_LEN;</span> -<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : hmac_digest_str_len = SHA384_DIGEST_STR_LEN;</span> -<span class="lineNum"> 283 </span> : : } -<span class="lineNum"> 284 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(ctx-&gt;hmac_type == FKO_HMAC_SHA512)</span> -<span class="lineNum"> 285 </span> : : { -<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : hmac_sha512(ctx-&gt;encrypted_msg,</span> -<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : ctx-&gt;encrypted_msg_len, hmac, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 288 </span> : : -<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : hmac_digest_len = SHA512_DIGEST_LEN;</span> -<span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : hmac_digest_str_len = SHA512_DIGEST_STR_LEN;</span> -<span class="lineNum"> 291 </span> : : } -<span class="lineNum"> 292 </span> : : -<span class="lineNum"> 293 </span> :<span class="lineCov"> 692 : hmac_base64 = calloc(1, MD_HEX_SIZE(hmac_digest_len)+1);</span> -<span class="lineNum"> 294 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if (hmac_base64 == NULL)</span> -<span class="lineNum"> 295 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 296 </span> : : -<span class="lineNum"> 297 </span> :<span class="lineCov"> 692 : b64_encode(hmac, hmac_base64, hmac_digest_len);</span> -<span class="lineNum"> 298 </span> :<span class="lineCov"> 692 : strip_b64_eq(hmac_base64);</span> -<span class="lineNum"> 299 </span> : : -<span class="lineNum"> 300 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 692 times"> + </span>]:<span class="lineCov"> 692 : if(ctx-&gt;msg_hmac != NULL)</span> -<span class="lineNum"> 301 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;msg_hmac);</span> -<span class="lineNum"> 302 </span> : : -<span class="lineNum"> 303 </span> :<span class="lineCov"> 692 : ctx-&gt;msg_hmac = strdup(hmac_base64);</span> -<span class="lineNum"> 304 </span> : : -<span class="lineNum"> 305 </span> :<span class="lineCov"> 692 : free(hmac_base64);</span> -<span class="lineNum"> 306 </span> : : -<span class="lineNum"> 307 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : if(ctx-&gt;msg_hmac == NULL)</span> -<span class="lineNum"> 308 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 309 </span> : : -<span class="lineNum"> 310 </span> :<span class="lineCov"> 692 : ctx-&gt;msg_hmac_len = strnlen(ctx-&gt;msg_hmac, hmac_digest_str_len);</span> -<span class="lineNum"> 311 </span> : : -<span class="lineNum"> 312 </span> [<span class="branchCov" title="Branch 0 was taken 692 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 692 : switch(ctx-&gt;msg_hmac_len)</span> -<span class="lineNum"> 313 </span> : : { -<span class="lineNum"> 314 </span> : : case MD5_B64_LEN: -<span class="lineNum"> 315 </span> : : break; -<span class="lineNum"> 316 </span> : : case SHA1_B64_LEN: -<span class="lineNum"> 317 </span> : : break; -<span class="lineNum"> 318 </span> : : case SHA256_B64_LEN: -<span class="lineNum"> 319 </span> : : break; -<span class="lineNum"> 320 </span> : : case SHA384_B64_LEN: -<span class="lineNum"> 321 </span> : : break; -<span class="lineNum"> 322 </span> : : case SHA512_B64_LEN: -<span class="lineNum"> 323 </span> : : break; -<span class="lineNum"> 324 </span> : : default: -<span class="lineNum"> 325 </span> : : return(FKO_ERROR_INVALID_DATA_HMAC_LEN_VALIDFAIL); -<span class="lineNum"> 326 </span> : : } -<span class="lineNum"> 327 </span> : : -<span class="lineNum"> 328 </span> :<span class="lineCov"> 692 : return FKO_SUCCESS;</span> -<span class="lineNum"> 329 </span> : : } -<span class="lineNum"> 330 </span> : : -<span class="lineNum"> 331 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html deleted file mode 100644 index e8b44c7f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func-sort-c.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_message.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_message.c<span style="font-size: 80%;"> (<a href="fko_message.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">86</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryMed">79.6 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryMed">80.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">60</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryLo">55.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_message.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#335">validate_proto_port_spec</a></td> - <td class="coverFnHi">2837</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#74">have_port</a></td> - <td class="coverFnHi">2760</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#110">fko_set_spa_message_type</a></td> - <td class="coverFnHi">1132</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#268">validate_access_msg</a></td> - <td class="coverFnHi">949</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#35">have_allow_ip</a></td> - <td class="coverFnHi">949</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#138">fko_get_spa_message_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#215">fko_get_spa_message</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#166">fko_set_spa_message</a></td> - <td class="coverFnHi">565</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#242">validate_cmd_msg</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#302">validate_nat_access_msg</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html deleted file mode 100644 index aa1e6b47..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.func.html +++ /dev/null @@ -1,121 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_message.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_message.c<span style="font-size: 80%;"> (<a href="fko_message.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">86</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryMed">79.6 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryMed">80.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">60</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryLo">55.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_message.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#215">fko_get_spa_message</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#138">fko_get_spa_message_type</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#166">fko_set_spa_message</a></td> - <td class="coverFnHi">565</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#110">fko_set_spa_message_type</a></td> - <td class="coverFnHi">1132</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#35">have_allow_ip</a></td> - <td class="coverFnHi">949</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#74">have_port</a></td> - <td class="coverFnHi">2760</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#268">validate_access_msg</a></td> - <td class="coverFnHi">949</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#242">validate_cmd_msg</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#302">validate_nat_access_msg</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_message.c.gcov.html#335">validate_proto_port_spec</a></td> - <td class="coverFnHi">2837</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html deleted file mode 100644 index 09d27f3b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_message.c.gcov.html +++ /dev/null @@ -1,449 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_message.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_message.c<span style="font-size: 80%;"> (source / <a href="fko_message.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">86</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryMed">79.6 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryMed">80.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">60</td> - <td class="headerCovTableEntry">108</td> - <td class="headerCovTableEntryLo">55.6 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_message.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa message (access req/command/etc) based -<span class="lineNum"> 7 </span> : : * on the current spa data. -<span class="lineNum"> 8 </span> : : * -<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 12 </span> : : * -<span class="lineNum"> 13 </span> : : * License (GNU General Public License): -<span class="lineNum"> 14 </span> : : * -<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 19 </span> : : * -<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 24 </span> : : * -<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 28 </span> : : * USA -<span class="lineNum"> 29 </span> : : * -<span class="lineNum"> 30 </span> : : ***************************************************************************** -<span class="lineNum"> 31 </span> : : */ -<span class="lineNum"> 32 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;fko_message.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;fko.h&quot; -<a name="35"><span class="lineNum"> 35 </span> : : </a> -<span class="lineNum"> 36 </span> : : static int -<span class="lineNum"> 37 </span> :<span class="lineCov"> 949 : have_allow_ip(const char *msg)</span> -<span class="lineNum"> 38 </span> : : { -<span class="lineNum"> 39 </span> :<span class="lineCov"> 949 : const char *ndx = msg;</span> -<span class="lineNum"> 40 </span> : : char ip_str[MAX_IPV4_STR_LEN]; -<span class="lineNum"> 41 </span> :<span class="lineCov"> 949 : int dot_ctr = 0, char_ctr = 0;</span> -<span class="lineNum"> 42 </span> :<span class="lineCov"> 949 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> [<span class="branchCov" title="Branch 0 was taken 6643 times"> + </span><span class="branchCov" title="Branch 1 was taken 949 times"> + </span>]:<span class="lineCov"> 7592 : while(*ndx != ',' &amp;&amp; *ndx != '\0')</span> -<span class="lineNum"> 45 </span> : : { -<span class="lineNum"> 46 </span> :<span class="lineCov"> 6643 : ip_str[char_ctr] = *ndx;</span> -<span class="lineNum"> 47 </span> :<span class="lineCov"> 6643 : char_ctr++;</span> -<span class="lineNum"> 48 </span> [<span class="branchCov" title="Branch 0 was taken 6643 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 6643 : if(char_ctr &gt;= MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 49 </span> : : { -<span class="lineNum"> 50 </span> : : res = FKO_ERROR_INVALID_ALLOW_IP; -<span class="lineNum"> 51 </span> : : break; -<span class="lineNum"> 52 </span> : : } -<span class="lineNum"> 53 </span> [<span class="branchCov" title="Branch 0 was taken 3796 times"> + </span><span class="branchCov" title="Branch 1 was taken 2847 times"> + </span>]:<span class="lineCov"> 6643 : if(*ndx == '.')</span> -<span class="lineNum"> 54 </span> : : dot_ctr++; -<span class="lineNum"> 55 </span> [<span class="branchCov" title="Branch 1 was taken 3796 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 3796 : else if(isdigit(*ndx) == 0)</span> -<span class="lineNum"> 56 </span> : : { -<span class="lineNum"> 57 </span> : : res = FKO_ERROR_INVALID_ALLOW_IP; -<span class="lineNum"> 58 </span> : : break; -<span class="lineNum"> 59 </span> : : } -<span class="lineNum"> 60 </span> :<span class="lineCov"> 6643 : ndx++;</span> -<span class="lineNum"> 61 </span> : : } -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> [<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 949 : if(char_ctr &lt; MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 64 </span> :<span class="lineCov"> 949 : ip_str[char_ctr] = '\0';</span> -<span class="lineNum"> 65 </span> : : else -<span class="lineNum"> 66 </span> : : res = FKO_ERROR_INVALID_ALLOW_IP; -<span class="lineNum"> 67 </span> : : -<span class="lineNum"> 68 </span> [<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 949 : if(res == FKO_SUCCESS)</span> -<span class="lineNum"> 69 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 949 times"> + </span>]:<span class="lineCov"> 949 : if (! is_valid_ipv4_addr(ip_str))</span> -<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : res = FKO_ERROR_INVALID_ALLOW_IP;</span> -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> :<span class="lineCov"> 949 : return(res);</span> -<span class="lineNum"> 73 </span> : : } -<a name="74"><span class="lineNum"> 74 </span> : : </a> -<span class="lineNum"> 75 </span> : : static int -<span class="lineNum"> 76 </span> :<span class="lineCov"> 2760 : have_port(const char *msg)</span> -<span class="lineNum"> 77 </span> : : { -<span class="lineNum"> 78 </span> :<span class="lineCov"> 2760 : const char *ndx = msg;</span> -<span class="lineNum"> 79 </span> :<span class="lineCov"> 2760 : char port_str[MAX_PORT_STR_LEN+1] = {0};</span> -<span class="lineNum"> 80 </span> :<span class="lineCov"> 2760 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> -<span class="lineNum"> 81 </span> :<span class="lineCov"> 2760 : int port_str_len=0, i=0, is_err;</span> -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> [<span class="branchCov" title="Branch 0 was taken 2760 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2760 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 84 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_PORT_MISSING); -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> : : /* Must have at least one digit for the port number -<span class="lineNum"> 87 </span> : : */ -<span class="lineNum"> 88 </span> [<span class="branchCov" title="Branch 1 was taken 2759 times"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 2760 : if(isdigit(*ndx) == 0)</span> -<span class="lineNum"> 89 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> [<span class="branchCov" title="Branch 0 was taken 8250 times"> + </span><span class="branchCov" title="Branch 1 was taken 2745 times"> + </span>]:<span class="lineCov"> 10995 : while(*ndx != '\0' &amp;&amp; *ndx != ',')</span> -<span class="lineNum"> 92 </span> : : { -<span class="lineNum"> 93 </span> :<span class="lineCov"> 8250 : port_str_len++;</span> -<span class="lineNum"> 94 </span>[<span class="branchCov" title="Branch 0 was taken 8237 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 8236 times"> + </span><span class="branchCov" title="Branch 3 was taken 1 time"> + </span>]:<span class="lineCov"> 8250 : if((isdigit(*ndx) == 0) || (port_str_len &gt; MAX_PORT_STR_LEN))</span> -<span class="lineNum"> 95 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); -<span class="lineNum"> 96 </span> :<span class="lineCov"> 8236 : port_str[i] = *ndx;</span> -<span class="lineNum"> 97 </span> :<span class="lineCov"> 8236 : ndx++;</span> -<span class="lineNum"> 98 </span> :<span class="lineCov"> 8236 : i++;</span> -<span class="lineNum"> 99 </span> : : } -<span class="lineNum"> 100 </span> :<span class="lineCov"> 2745 : port_str[i] = '\0';</span> -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> :<span class="lineCov"> 2745 : strtol_wrapper(port_str, 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 103 </span> [<span class="branchCov" title="Branch 0 was taken 2740 times"> + </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 2745 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 104 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> :<span class="lineCov"> 2740 : return FKO_SUCCESS;</span> -<span class="lineNum"> 107 </span> : : } -<span class="lineNum"> 108 </span> : : -<span class="lineNum"> 109 </span> : : /* Set the SPA message type. -<a name="110"><span class="lineNum"> 110 </span> : : */</a> -<span class="lineNum"> 111 </span> : : int -<span class="lineNum"> 112 </span> :<span class="lineCov"> 1132 : fko_set_spa_message_type(fko_ctx_t ctx, const short msg_type)</span> -<span class="lineNum"> 113 </span> : : { -<span class="lineNum"> 114 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 115 </span> : : fiu_return_on(&quot;fko_set_spa_message_type_init&quot;, -<span class="lineNum"> 116 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 117 </span> : : #endif -<span class="lineNum"> 118 </span> : : /* Must be initialized -<span class="lineNum"> 119 </span> : : */ -<span class="lineNum"> 120 </span>[<span class="branchCov" title="Branch 0 was taken 1132 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1132 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1132 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 121 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 122 </span> : : -<span class="lineNum"> 123 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 124 </span> : : fiu_return_on(&quot;fko_set_spa_message_type_val&quot;, -<span class="lineNum"> 125 </span> : : FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL); -<span class="lineNum"> 126 </span> : : #endif -<span class="lineNum"> 127 </span> [<span class="branchCov" title="Branch 0 was taken 1132 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1132 : if(msg_type &lt; 0 || msg_type &gt;= FKO_LAST_MSG_TYPE)</span> -<span class="lineNum"> 128 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_TYPE_VALIDFAIL); -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> :<span class="lineCov"> 1132 : ctx-&gt;message_type = msg_type;</span> -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> :<span class="lineCov"> 1132 : ctx-&gt;state |= FKO_SPA_MSG_TYPE_MODIFIED;</span> -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> :<span class="lineCov"> 1132 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 135 </span> : : } -<span class="lineNum"> 136 </span> : : -<span class="lineNum"> 137 </span> : : /* Return the SPA message type. -<a name="138"><span class="lineNum"> 138 </span> : : */</a> -<span class="lineNum"> 139 </span> : : int -<span class="lineNum"> 140 </span> :<span class="lineCov"> 801 : fko_get_spa_message_type(fko_ctx_t ctx, short *msg_type)</span> -<span class="lineNum"> 141 </span> : : { -<span class="lineNum"> 142 </span> : : -<span class="lineNum"> 143 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 144 </span> : : fiu_return_on(&quot;fko_get_spa_message_type_init&quot;, -<span class="lineNum"> 145 </span> : : FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 146 </span> : : #endif -<span class="lineNum"> 147 </span> : : -<span class="lineNum"> 148 </span> : : /* Must be initialized -<span class="lineNum"> 149 </span> : : */ -<span class="lineNum"> 150 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 151 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(msg_type == NULL)</span> -<span class="lineNum"> 154 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 157 </span> : : fiu_return_on(&quot;fko_get_spa_message_type_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 158 </span> : : #endif -<span class="lineNum"> 159 </span> : : -<span class="lineNum"> 160 </span> :<span class="lineCov"> 801 : *msg_type = ctx-&gt;message_type;</span> -<span class="lineNum"> 161 </span> : : -<span class="lineNum"> 162 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 163 </span> : : } -<span class="lineNum"> 164 </span> : : -<span class="lineNum"> 165 </span> : : /* Set the SPA MESSAGE data -<a name="166"><span class="lineNum"> 166 </span> : : */</a> -<span class="lineNum"> 167 </span> : : int -<span class="lineNum"> 168 </span> :<span class="lineCov"> 565 : fko_set_spa_message(fko_ctx_t ctx, const char * const msg)</span> -<span class="lineNum"> 169 </span> : : { -<span class="lineNum"> 170 </span> :<span class="lineCov"> 565 : int res = FKO_ERROR_UNKNOWN;</span> -<span class="lineNum"> 171 </span> : : -<span class="lineNum"> 172 </span> : : /* Context must be initialized. -<span class="lineNum"> 173 </span> : : */ -<span class="lineNum"> 174 </span>[<span class="branchCov" title="Branch 0 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 565 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 175 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 176 </span> : : -<span class="lineNum"> 177 </span> : : /* Gotta have a valid string. -<span class="lineNum"> 178 </span> : : */ -<span class="lineNum"> 179 </span>[<span class="branchCov" title="Branch 0 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 565 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 565 : if(msg == NULL || strnlen(msg, MAX_SPA_MESSAGE_SIZE) == 0)</span> -<span class="lineNum"> 180 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_EMPTY); -<span class="lineNum"> 181 </span> : : -<span class="lineNum"> 182 </span> : : /* --DSS XXX: Bail out for now. But consider just -<span class="lineNum"> 183 </span> : : * truncating in the future... -<span class="lineNum"> 184 </span> : : */ -<span class="lineNum"> 185 </span> [<span class="branchCov" title="Branch 0 was taken 564 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 565 : if(strnlen(msg, MAX_SPA_MESSAGE_SIZE) == MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 186 </span> : : return(FKO_ERROR_DATA_TOO_LARGE); -<span class="lineNum"> 187 </span> : : -<span class="lineNum"> 188 </span> : : /* Basic message type and format checking... -<span class="lineNum"> 189 </span> : : */ -<span class="lineNum"> 190 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 564 times"> + </span>]:<span class="lineCov"> 564 : if(ctx-&gt;message_type == FKO_COMMAND_MSG)</span> -<span class="lineNum"> 191 </span> :<span class="lineNoCov"> 0 : res = validate_cmd_msg(msg);</span> -<span class="lineNum"> 192 </span> : : else -<span class="lineNum"> 193 </span> :<span class="lineCov"> 564 : res = validate_access_msg(msg);</span> -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> [<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchCov" title="Branch 1 was taken 97 times"> + </span>]:<span class="lineCov"> 564 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 196 </span> : : return(res); -<span class="lineNum"> 197 </span> : : -<span class="lineNum"> 198 </span> : : /* Just in case this is a subsquent call to this function. We -<span class="lineNum"> 199 </span> : : * do not want to be leaking memory. -<span class="lineNum"> 200 </span> : : */ -<span class="lineNum"> 201 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 467 times"> + </span>]:<span class="lineCov"> 467 : if(ctx-&gt;message != NULL)</span> -<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;message);</span> -<span class="lineNum"> 203 </span> : : -<span class="lineNum"> 204 </span> :<span class="lineCov"> 467 : ctx-&gt;message = strdup(msg);</span> -<span class="lineNum"> 205 </span> : : -<span class="lineNum"> 206 </span> :<span class="lineCov"> 467 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 207 </span> : : -<span class="lineNum"> 208 </span> [<span class="branchCov" title="Branch 0 was taken 467 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 467 : if(ctx-&gt;message == NULL)</span> -<span class="lineNum"> 209 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 210 </span> : : -<span class="lineNum"> 211 </span> :<span class="lineCov"> 467 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 212 </span> : : } -<span class="lineNum"> 213 </span> : : -<span class="lineNum"> 214 </span> : : /* Return the SPA message data. -<a name="215"><span class="lineNum"> 215 </span> : : */</a> -<span class="lineNum"> 216 </span> : : int -<span class="lineNum"> 217 </span> :<span class="lineCov"> 801 : fko_get_spa_message(fko_ctx_t ctx, char **msg)</span> -<span class="lineNum"> 218 </span> : : { -<span class="lineNum"> 219 </span> : : -<span class="lineNum"> 220 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 221 </span> : : fiu_return_on(&quot;fko_get_spa_message_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 222 </span> : : #endif -<span class="lineNum"> 223 </span> : : -<span class="lineNum"> 224 </span> : : /* Must be initialized -<span class="lineNum"> 225 </span> : : */ -<span class="lineNum"> 226 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 227 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 228 </span> : : -<span class="lineNum"> 229 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(msg == NULL)</span> -<span class="lineNum"> 230 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 231 </span> : : -<span class="lineNum"> 232 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 233 </span> : : fiu_return_on(&quot;fko_get_spa_message_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 234 </span> : : #endif -<span class="lineNum"> 235 </span> : : -<span class="lineNum"> 236 </span> :<span class="lineCov"> 801 : *msg = ctx-&gt;message;</span> -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 239 </span> : : } -<span class="lineNum"> 240 </span> : : -<span class="lineNum"> 241 </span> : : /* Validate a command message format. -<a name="242"><span class="lineNum"> 242 </span> : : */</a> -<span class="lineNum"> 243 </span> : : int -<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : validate_cmd_msg(const char *msg)</span> -<span class="lineNum"> 245 </span> : : { -<span class="lineNum"> 246 </span> : : const char *ndx; -<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : int startlen = strnlen(msg, MAX_SPA_CMD_LEN);</span> -<span class="lineNum"> 249 </span> : : -<span class="lineNum"> 250 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(startlen == MAX_SPA_CMD_LEN)</span> -<span class="lineNum"> 251 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_CMD_MISSING); -<span class="lineNum"> 252 </span> : : -<span class="lineNum"> 253 </span> : : /* Should always have a valid allow IP regardless of message type -<span class="lineNum"> 254 </span> : : */ -<span class="lineNum"> 255 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = have_allow_ip(msg)) != FKO_SUCCESS)</span> -<span class="lineNum"> 256 </span> : : return(FKO_ERROR_INVALID_SPA_COMMAND_MSG); -<span class="lineNum"> 257 </span> : : -<span class="lineNum"> 258 </span> : : /* Commands are fairly free-form so all we can really verify is -<span class="lineNum"> 259 </span> : : * there is something at all. Get past the IP and comma, and make -<span class="lineNum"> 260 </span> : : * sure we have some string leftover... -<span class="lineNum"> 261 </span> : : */ -<span class="lineNum"> 262 </span> :<span class="lineNoCov"> 0 : ndx = strchr(msg, ',');</span> -<span class="lineNum"> 263 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL || (1+(ndx - msg)) &gt;= startlen)</span> -<span class="lineNum"> 264 </span> : : return(FKO_ERROR_INVALID_SPA_COMMAND_MSG); -<span class="lineNum"> 265 </span> : : -<span class="lineNum"> 266 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 267 </span> : : } -<a name="268"><span class="lineNum"> 268 </span> : : </a> -<span class="lineNum"> 269 </span> : : int -<span class="lineNum"> 270 </span> :<span class="lineCov"> 949 : validate_access_msg(const char *msg)</span> -<span class="lineNum"> 271 </span> : : { -<span class="lineNum"> 272 </span> : : const char *ndx; -<span class="lineNum"> 273 </span> :<span class="lineCov"> 949 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 274 </span> :<span class="lineCov"> 949 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> [<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 949 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 277 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_ACCESS_MISSING); -<span class="lineNum"> 278 </span> : : -<span class="lineNum"> 279 </span> : : /* Should always have a valid allow IP regardless of message type -<span class="lineNum"> 280 </span> : : */ -<span class="lineNum"> 281 </span> [<span class="branchCov" title="Branch 1 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 949 : if((res = have_allow_ip(msg)) != FKO_SUCCESS)</span> -<span class="lineNum"> 282 </span> : : return(res); -<span class="lineNum"> 283 </span> : : -<span class="lineNum"> 284 </span> : : /* Position ourselves beyond the allow IP and make sure we are -<span class="lineNum"> 285 </span> : : * still good. -<span class="lineNum"> 286 </span> : : */ -<span class="lineNum"> 287 </span> :<span class="lineCov"> 949 : ndx = strchr(msg, ',');</span> -<span class="lineNum"> 288 </span>[<span class="branchCov" title="Branch 0 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 949 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 949 : if(ndx == NULL || (1+(ndx - msg)) &gt;= startlen)</span> -<span class="lineNum"> 289 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); -<span class="lineNum"> 290 </span> : : -<span class="lineNum"> 291 </span> : : /* Look for a comma to see if this is a multi-part access request. -<span class="lineNum"> 292 </span> : : */ -<span class="lineNum"> 293 </span> : : do { -<span class="lineNum"> 294 </span> :<span class="lineCov"> 2837 : ndx++;</span> -<span class="lineNum"> 295 </span> :<span class="lineCov"> 2837 : res = validate_proto_port_spec(ndx);</span> -<span class="lineNum"> 296 </span> [<span class="branchCov" title="Branch 0 was taken 2740 times"> + </span><span class="branchCov" title="Branch 1 was taken 97 times"> + </span>]:<span class="lineCov"> 2837 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 297 </span> : : break; -<span class="lineNum"> 298 </span> [<span class="branchCov" title="Branch 0 was taken 1888 times"> + </span><span class="branchCov" title="Branch 1 was taken 852 times"> + </span>]:<span class="lineCov"> 2740 : } while((ndx = strchr(ndx, ',')));</span> -<span class="lineNum"> 299 </span> : : -<span class="lineNum"> 300 </span> :<span class="lineCov"> 949 : return(res);</span> -<span class="lineNum"> 301 </span> : : } -<a name="302"><span class="lineNum"> 302 </span> : : </a> -<span class="lineNum"> 303 </span> : : int -<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : validate_nat_access_msg(const char *msg)</span> -<span class="lineNum"> 305 </span> : : { -<span class="lineNum"> 306 </span> : : const char *ndx; -<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> -<span class="lineNum"> 309 </span> : : -<span class="lineNum"> 310 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 311 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_NAT_MISSING); -<span class="lineNum"> 312 </span> : : -<span class="lineNum"> 313 </span> : : /* Should always have a valid allow IP regardless of message type -<span class="lineNum"> 314 </span> : : */ -<span class="lineNum"> 315 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = have_allow_ip(msg)) != FKO_SUCCESS)</span> -<span class="lineNum"> 316 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); -<span class="lineNum"> 317 </span> : : -<span class="lineNum"> 318 </span> : : /* Position ourselves beyond the allow IP and make sure we have -<span class="lineNum"> 319 </span> : : * a single port value -<span class="lineNum"> 320 </span> : : */ -<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : ndx = strchr(msg, ',');</span> -<span class="lineNum"> 322 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL || (1+(ndx - msg)) &gt;= startlen)</span> -<span class="lineNum"> 323 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); -<span class="lineNum"> 324 </span> : : -<span class="lineNum"> 325 </span> :<span class="lineNoCov"> 0 : ndx++;</span> -<span class="lineNum"> 326 </span> : : -<span class="lineNum"> 327 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = have_port(ndx)) != FKO_SUCCESS)</span> -<span class="lineNum"> 328 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); -<span class="lineNum"> 329 </span> : : -<span class="lineNum"> 330 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(msg[startlen-1] == ',')</span> -<span class="lineNum"> 331 </span> : : return(FKO_ERROR_INVALID_SPA_NAT_ACCESS_MSG); -<span class="lineNum"> 332 </span> : : -<span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 334 </span> : : } -<a name="335"><span class="lineNum"> 335 </span> : : </a> -<span class="lineNum"> 336 </span> : : int -<span class="lineNum"> 337 </span> :<span class="lineCov"> 2837 : validate_proto_port_spec(const char *msg)</span> -<span class="lineNum"> 338 </span> : : { -<span class="lineNum"> 339 </span> :<span class="lineCov"> 2837 : int startlen = strnlen(msg, MAX_SPA_MESSAGE_SIZE);</span> -<span class="lineNum"> 340 </span> :<span class="lineCov"> 2837 : const char *ndx = msg;</span> -<span class="lineNum"> 341 </span> : : -<span class="lineNum"> 342 </span> [<span class="branchCov" title="Branch 0 was taken 2837 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2837 : if(startlen == MAX_SPA_MESSAGE_SIZE)</span> -<span class="lineNum"> 343 </span> : : return(FKO_ERROR_INVALID_DATA_MESSAGE_PORTPROTO_MISSING); -<span class="lineNum"> 344 </span> : : -<span class="lineNum"> 345 </span> : : /* Now check for proto/port string. -<span class="lineNum"> 346 </span> : : */ -<span class="lineNum"> 347 </span> [<span class="branchCov" title="Branch 0 was taken 70 times"> + </span><span class="branchCov" title="Branch 1 was taken 2767 times"> + </span>]:<span class="lineCov"> 2837 : if(strncmp(ndx, &quot;tcp&quot;, 3)</span> -<span class="lineNum"> 348 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 70 : &amp;&amp; strncmp(ndx, &quot;udp&quot;, 3)</span> -<span class="lineNum"> 349 </span> [<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 67 : &amp;&amp; strncmp(ndx, &quot;icmp&quot;, 4)</span> -<span class="lineNum"> 350 </span> [<span class="branchCov" title="Branch 0 was taken 40 times"> + </span><span class="branchCov" title="Branch 1 was taken 27 times"> + </span>]:<span class="lineCov"> 67 : &amp;&amp; strncmp(ndx, &quot;none&quot;, 4))</span> -<span class="lineNum"> 351 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); -<span class="lineNum"> 352 </span> : : -<span class="lineNum"> 353 </span> :<span class="lineCov"> 2810 : ndx = strchr(ndx, '/');</span> -<span class="lineNum"> 354 </span>[<span class="branchCov" title="Branch 0 was taken 2801 times"> + </span><span class="branchCov" title="Branch 1 was taken 9 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 2760 times"> + </span><span class="branchCov" title="Branch 3 was taken 41 times"> + </span>]:<span class="lineCov"> 2810 : if(ndx == NULL || ((1+(ndx - msg)) &gt; MAX_PROTO_STR_LEN))</span> -<span class="lineNum"> 355 </span> : : return(FKO_ERROR_INVALID_SPA_ACCESS_MSG); -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> : : /* Skip over the '/' and make sure we only have digits. -<span class="lineNum"> 358 </span> : : */ -<span class="lineNum"> 359 </span> :<span class="lineCov"> 2760 : ndx++;</span> -<span class="lineNum"> 360 </span> : : -<span class="lineNum"> 361 </span> :<span class="lineCov"> 2760 : return have_port(ndx);</span> -<span class="lineNum"> 362 </span> : : } -<span class="lineNum"> 363 </span> : : -<span class="lineNum"> 364 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html deleted file mode 100644 index 3ff7f53c..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_nat_access.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_nat_access.c<span style="font-size: 80%;"> (<a href="fko_nat_access.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">21</td> - <td class="headerCovTableEntryLo">23.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntryLo">10.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_nat_access.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_nat_access.c.gcov.html#103">fko_get_spa_nat_access</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_nat_access.c.gcov.html#35">fko_set_spa_nat_access</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html deleted file mode 100644 index b420ebfd..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.func.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_nat_access.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_nat_access.c<span style="font-size: 80%;"> (<a href="fko_nat_access.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">21</td> - <td class="headerCovTableEntryLo">23.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntryLo">10.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_nat_access.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_nat_access.c.gcov.html#103">fko_get_spa_nat_access</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_nat_access.c.gcov.html#35">fko_set_spa_nat_access</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html deleted file mode 100644 index 6697face..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_nat_access.c.gcov.html +++ /dev/null @@ -1,214 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_nat_access.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_nat_access.c<span style="font-size: 80%;"> (source / <a href="fko_nat_access.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">21</td> - <td class="headerCovTableEntryLo">23.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntryLo">10.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_nat_access.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa nat access request data. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : /* Set the SPA Nat Access data -<a name="35"><span class="lineNum"> 35 </span> : : */</a> -<span class="lineNum"> 36 </span> : : int -<span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : fko_set_spa_nat_access(fko_ctx_t ctx, const char * const msg)</span> -<span class="lineNum"> 38 </span> : : { -<span class="lineNum"> 39 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 40 </span> : : -<span class="lineNum"> 41 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 42 </span> : : fiu_return_on(&quot;fko_set_spa_nat_access_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 43 </span> : : #endif -<span class="lineNum"> 44 </span> : : -<span class="lineNum"> 45 </span> : : /* Context must be initialized. -<span class="lineNum"> 46 </span> : : */ -<span class="lineNum"> 47 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 48 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : /* Gotta have a valid string. -<span class="lineNum"> 51 </span> : : */ -<span class="lineNum"> 52 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(msg == NULL || strnlen(msg, MAX_SPA_NAT_ACCESS_SIZE) == 0)</span> -<span class="lineNum"> 53 </span> : : return(FKO_ERROR_INVALID_DATA_NAT_EMPTY); -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 56 </span> : : fiu_return_on(&quot;fko_set_spa_nat_access_empty&quot;, FKO_ERROR_INVALID_DATA_NAT_EMPTY); -<span class="lineNum"> 57 </span> : : #endif -<span class="lineNum"> 58 </span> : : -<span class="lineNum"> 59 </span> : : /* --DSS XXX: Bail out for now. But consider just -<span class="lineNum"> 60 </span> : : * truncating in the future... -<span class="lineNum"> 61 </span> : : */ -<span class="lineNum"> 62 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strnlen(msg, MAX_SPA_NAT_ACCESS_SIZE) == MAX_SPA_NAT_ACCESS_SIZE)</span> -<span class="lineNum"> 63 </span> : : return(FKO_ERROR_DATA_TOO_LARGE); -<span class="lineNum"> 64 </span> : : -<span class="lineNum"> 65 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 66 </span> : : fiu_return_on(&quot;fko_set_spa_nat_access_large&quot;, FKO_ERROR_DATA_TOO_LARGE); -<span class="lineNum"> 67 </span> : : #endif -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((res = validate_nat_access_msg(msg)) != FKO_SUCCESS)</span> -<span class="lineNum"> 70 </span> : : return(res); -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : /* Just in case this is a subsquent call to this function. We -<span class="lineNum"> 73 </span> : : * do not want to be leaking memory. -<span class="lineNum"> 74 </span> : : */ -<span class="lineNum"> 75 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access != NULL)</span> -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;nat_access);</span> -<span class="lineNum"> 77 </span> : : -<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : ctx-&gt;nat_access = strdup(msg);</span> -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 81 </span> : : -<span class="lineNum"> 82 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;nat_access == NULL)</span> -<span class="lineNum"> 83 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> : : /* If we set the nat_access message Then we force the message_type -<span class="lineNum"> 86 </span> : : * as well. Technically, the message type should be set already. -<span class="lineNum"> 87 </span> : : * This will serve a half-protective measure. -<span class="lineNum"> 88 </span> : : * --DSS XXX: should do this better. -<span class="lineNum"> 89 </span> : : */ -<span class="lineNum"> 90 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;client_timeout &gt; 0)</span> -<span class="lineNum"> 91 </span> : : { -<span class="lineNum"> 92 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;message_type != FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 94 </span> : : } -<span class="lineNum"> 95 </span> : : else -<span class="lineNum"> 96 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;message_type != FKO_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : ctx-&gt;message_type = FKO_NAT_ACCESS_MSG;</span> -<span class="lineNum"> 98 </span> : : -<span class="lineNum"> 99 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 100 </span> : : } -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> : : /* Return the SPA message data. -<a name="103"><span class="lineNum"> 103 </span> : : */</a> -<span class="lineNum"> 104 </span> : : int -<span class="lineNum"> 105 </span> :<span class="lineCov"> 801 : fko_get_spa_nat_access(fko_ctx_t ctx, char **nat_access)</span> -<span class="lineNum"> 106 </span> : : { -<span class="lineNum"> 107 </span> : : -<span class="lineNum"> 108 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 109 </span> : : fiu_return_on(&quot;fko_get_spa_nat_access_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 110 </span> : : #endif -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : /* Must be initialized -<span class="lineNum"> 113 </span> : : */ -<span class="lineNum"> 114 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 115 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 116 </span> : : -<span class="lineNum"> 117 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(nat_access == NULL)</span> -<span class="lineNum"> 118 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 121 </span> : : fiu_return_on(&quot;fko_get_spa_nat_access_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 122 </span> : : #endif -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> :<span class="lineCov"> 801 : *nat_access = ctx-&gt;nat_access;</span> -<span class="lineNum"> 125 </span> : : -<span class="lineNum"> 126 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 127 </span> : : } -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html deleted file mode 100644 index c50fc29a..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_rand_value.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_rand_value.c<span style="font-size: 80%;"> (<a href="fko_rand_value.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">26</td> - <td class="headerCovTableEntry">35</td> - <td class="headerCovTableEntryLo">74.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">46.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_rand_value.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_rand_value.c.gcov.html#164">fko_get_rand_value</a></td> - <td class="coverFnHi">806</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_rand_value.c.gcov.html#49">fko_set_rand_value</a></td> - <td class="coverFnHi">571</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html deleted file mode 100644 index 6a6b9ad9..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.func.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_rand_value.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_rand_value.c<span style="font-size: 80%;"> (<a href="fko_rand_value.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">26</td> - <td class="headerCovTableEntry">35</td> - <td class="headerCovTableEntryLo">74.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">46.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_rand_value.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_rand_value.c.gcov.html#164">fko_get_rand_value</a></td> - <td class="coverFnHi">806</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_rand_value.c.gcov.html#49">fko_set_rand_value</a></td> - <td class="coverFnHi">571</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html deleted file mode 100644 index 5b42b409..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_rand_value.c.gcov.html +++ /dev/null @@ -1,266 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_rand_value.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_rand_value.c<span style="font-size: 80%;"> (source / <a href="fko_rand_value.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">26</td> - <td class="headerCovTableEntry">35</td> - <td class="headerCovTableEntryLo">74.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">46.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_rand_value.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Generate a 16-byte random numeric value. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #ifdef WIN32 -<span class="lineNum"> 35 </span> : : #include &lt;sys/timeb.h&gt; -<span class="lineNum"> 36 </span> : : #include &lt;time.h&gt; -<span class="lineNum"> 37 </span> : : #else -<span class="lineNum"> 38 </span> : : #ifdef HAVE_SYS_TIME_H -<span class="lineNum"> 39 </span> : : #include &lt;sys/time.h&gt; -<span class="lineNum"> 40 </span> : : #ifdef TIME_WITH_SYS_TIME -<span class="lineNum"> 41 </span> : : #include &lt;time.h&gt; -<span class="lineNum"> 42 </span> : : #endif -<span class="lineNum"> 43 </span> : : #endif -<span class="lineNum"> 44 </span> : : -<span class="lineNum"> 45 </span> : : #define RAND_FILE &quot;/dev/urandom&quot; -<span class="lineNum"> 46 </span> : : #endif -<span class="lineNum"> 47 </span> : : -<span class="lineNum"> 48 </span> : : /* Set/Generate the SPA data random value string. -<a name="49"><span class="lineNum"> 49 </span> : : */</a> -<span class="lineNum"> 50 </span> : : int -<span class="lineNum"> 51 </span> :<span class="lineCov"> 571 : fko_set_rand_value(fko_ctx_t ctx, const char * const new_val)</span> -<span class="lineNum"> 52 </span> : : { -<span class="lineNum"> 53 </span> : : #ifdef WIN32 -<span class="lineNum"> 54 </span> : : struct _timeb tb; -<span class="lineNum"> 55 </span> : : #else -<span class="lineNum"> 56 </span> : : FILE *rfd; -<span class="lineNum"> 57 </span> : : struct timeval tv; -<span class="lineNum"> 58 </span> : : size_t amt_read; -<span class="lineNum"> 59 </span> : : #endif -<span class="lineNum"> 60 </span> : : unsigned long seed; -<span class="lineNum"> 61 </span> : : char *tmp_buf; -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 64 </span> : : fiu_return_on(&quot;fko_set_rand_value_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 65 </span> : : #endif -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> : : /* Context must be initialized. -<span class="lineNum"> 68 </span> : : */ -<span class="lineNum"> 69 </span>[<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 571 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 70 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : /* If a valid value was given, use it and return happy. -<span class="lineNum"> 73 </span> : : */ -<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 571 times"> + </span>]:<span class="lineCov"> 571 : if(new_val != NULL)</span> -<span class="lineNum"> 75 </span> : : { -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 78 </span> : : fiu_return_on(&quot;fko_set_rand_value_lenval&quot;, FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL); -<span class="lineNum"> 79 </span> : : #endif -<span class="lineNum"> 80 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strnlen(new_val, FKO_RAND_VAL_SIZE+1) != FKO_RAND_VAL_SIZE)</span> -<span class="lineNum"> 81 </span> : : return(FKO_ERROR_INVALID_DATA_RAND_LEN_VALIDFAIL); -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;rand_val != NULL)</span> -<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;rand_val);</span> -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 87 </span> : : fiu_return_on(&quot;fko_set_rand_value_strdup&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 88 </span> : : #endif -<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : ctx-&gt;rand_val = strdup(new_val);</span> -<span class="lineNum"> 90 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;rand_val == NULL)</span> -<span class="lineNum"> 91 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 92 </span> : : -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 96 </span> : : } -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : #ifdef WIN32 -<span class="lineNum"> 99 </span> : : _ftime_s(&amp;tb); -<span class="lineNum"> 100 </span> : : seed = ((tb.time * 1000) + tb.millitm) &amp; 0xFFFFFFFF; -<span class="lineNum"> 101 </span> : : #else -<span class="lineNum"> 102 </span> : : /* Attempt to read seed data from /dev/urandom. If that does not -<span class="lineNum"> 103 </span> : : * work, then fall back to a time-based method (less secure, but -<span class="lineNum"> 104 </span> : : * probably more portable). -<span class="lineNum"> 105 </span> : : */ -<span class="lineNum"> 106 </span> [<span class="branchCov" title="Branch 1 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 571 : if((rfd = fopen(RAND_FILE, &quot;r&quot;)) != NULL)</span> -<span class="lineNum"> 107 </span> : : { -<span class="lineNum"> 108 </span> : : /* Read seed from /dev/urandom -<span class="lineNum"> 109 </span> : : */ -<span class="lineNum"> 110 </span> :<span class="lineCov"> 571 : amt_read = fread(&amp;seed, 4, 1, rfd);</span> -<span class="lineNum"> 111 </span> :<span class="lineCov"> 571 : fclose(rfd);</span> -<span class="lineNum"> 112 </span> : : -<span class="lineNum"> 113 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 114 </span> : : fiu_return_on(&quot;fko_set_rand_value_read&quot;, FKO_ERROR_FILESYSTEM_OPERATION); -<span class="lineNum"> 115 </span> : : #endif -<span class="lineNum"> 116 </span> [<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 571 : if (amt_read != 1)</span> -<span class="lineNum"> 117 </span> : : return(FKO_ERROR_FILESYSTEM_OPERATION); -<span class="lineNum"> 118 </span> : : } -<span class="lineNum"> 119 </span> : : else -<span class="lineNum"> 120 </span> : : { -<span class="lineNum"> 121 </span> : : /* Seed based on time (current usecs). -<span class="lineNum"> 122 </span> : : */ -<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : gettimeofday(&amp;tv, NULL);</span> -<span class="lineNum"> 124 </span> : : -<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : seed = tv.tv_usec;</span> -<span class="lineNum"> 126 </span> : : } -<span class="lineNum"> 127 </span> : : #endif -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> :<span class="lineCov"> 571 : srand(seed);</span> -<span class="lineNum"> 130 </span> : : -<span class="lineNum"> 131 </span> [<span class="branchCov" title="Branch 0 was taken 5 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 571 : if(ctx-&gt;rand_val != NULL)</span> -<span class="lineNum"> 132 </span> :<span class="lineCov"> 5 : free(ctx-&gt;rand_val);</span> -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 135 </span> : : fiu_return_on(&quot;fko_set_rand_value_calloc1&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 136 </span> : : #endif -<span class="lineNum"> 137 </span> :<span class="lineCov"> 571 : ctx-&gt;rand_val = calloc(1, FKO_RAND_VAL_SIZE+1);</span> -<span class="lineNum"> 138 </span> [<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 571 : if(ctx-&gt;rand_val == NULL)</span> -<span class="lineNum"> 139 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 142 </span> : : fiu_return_on(&quot;fko_set_rand_value_calloc2&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 143 </span> : : #endif -<span class="lineNum"> 144 </span> :<span class="lineCov"> 571 : tmp_buf = calloc(1, FKO_RAND_VAL_SIZE+1);</span> -<span class="lineNum"> 145 </span> [<span class="branchCov" title="Branch 0 was taken 571 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 571 : if(tmp_buf == NULL)</span> -<span class="lineNum"> 146 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 147 </span> : : -<span class="lineNum"> 148 </span> :<span class="lineCov"> 571 : snprintf(ctx-&gt;rand_val, FKO_RAND_VAL_SIZE, &quot;%u&quot;, rand());</span> -<span class="lineNum"> 149 </span> : : -<span class="lineNum"> 150 </span> [<span class="branchCov" title="Branch 1 was taken 572 times"> + </span><span class="branchCov" title="Branch 2 was taken 571 times"> + </span>]:<span class="lineCov"> 1143 : while(strnlen(ctx-&gt;rand_val, FKO_RAND_VAL_SIZE+1) &lt; FKO_RAND_VAL_SIZE)</span> -<span class="lineNum"> 151 </span> : : { -<span class="lineNum"> 152 </span> :<span class="lineCov"> 572 : snprintf(tmp_buf, FKO_RAND_VAL_SIZE, &quot;%u&quot;, rand());</span> -<span class="lineNum"> 153 </span> :<span class="lineCov"> 572 : strlcat(ctx-&gt;rand_val, tmp_buf, FKO_RAND_VAL_SIZE+1);</span> -<span class="lineNum"> 154 </span> : : } -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> :<span class="lineCov"> 571 : free(tmp_buf);</span> -<span class="lineNum"> 157 </span> : : -<span class="lineNum"> 158 </span> :<span class="lineCov"> 571 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 159 </span> : : -<span class="lineNum"> 160 </span> :<span class="lineCov"> 571 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 161 </span> : : } -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> : : /* Return the current rand value. -<a name="164"><span class="lineNum"> 164 </span> : : */</a> -<span class="lineNum"> 165 </span> : : int -<span class="lineNum"> 166 </span> :<span class="lineCov"> 806 : fko_get_rand_value(fko_ctx_t ctx, char **rand_value)</span> -<span class="lineNum"> 167 </span> : : { -<span class="lineNum"> 168 </span> : : /* Must be initialized -<span class="lineNum"> 169 </span> : : */ -<span class="lineNum"> 170 </span>[<span class="branchCov" title="Branch 0 was taken 806 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 806 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 806 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 171 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 172 </span> : : -<span class="lineNum"> 173 </span> [<span class="branchCov" title="Branch 0 was taken 806 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 806 : if(rand_value == NULL)</span> -<span class="lineNum"> 174 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 175 </span> : : -<span class="lineNum"> 176 </span> :<span class="lineCov"> 806 : *rand_value = ctx-&gt;rand_val;</span> -<span class="lineNum"> 177 </span> : : -<span class="lineNum"> 178 </span> :<span class="lineCov"> 806 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 179 </span> : : } -<span class="lineNum"> 180 </span> : : -<span class="lineNum"> 181 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html deleted file mode 100644 index f6c03a55..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_server_auth.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_server_auth.c<span style="font-size: 80%;"> (<a href="fko_server_auth.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">15</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntryLo">15.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_server_auth.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_server_auth.c.gcov.html#89">fko_get_spa_server_auth</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_server_auth.c.gcov.html#35">fko_set_spa_server_auth</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html deleted file mode 100644 index 0c208929..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.func.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_server_auth.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_server_auth.c<span style="font-size: 80%;"> (<a href="fko_server_auth.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">15</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntryLo">15.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_server_auth.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_server_auth.c.gcov.html#89">fko_get_spa_server_auth</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_server_auth.c.gcov.html#35">fko_set_spa_server_auth</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html deleted file mode 100644 index a2263811..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_server_auth.c.gcov.html +++ /dev/null @@ -1,200 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_server_auth.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_server_auth.c<span style="font-size: 80%;"> (source / <a href="fko_server_auth.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">15</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntryLo">15.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_server_auth.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the spa server auth data. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : /* Set the SPA Server Auth data -<a name="35"><span class="lineNum"> 35 </span> : : */</a> -<span class="lineNum"> 36 </span> : : int -<span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : fko_set_spa_server_auth(fko_ctx_t ctx, const char * const msg)</span> -<span class="lineNum"> 38 </span> : : { -<span class="lineNum"> 39 </span> : : /**************************************** -<span class="lineNum"> 40 </span> : : * --DSS This is not supported yet -<span class="lineNum"> 41 </span> : : **************************************** -<span class="lineNum"> 42 </span> : : */ -<span class="lineNum"> 43 </span> : : //return(FKO_ERROR_UNSUPPORTED_FEATURE); -<span class="lineNum"> 44 </span> : : -<span class="lineNum"> 45 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 46 </span> : : fiu_return_on(&quot;fko_set_spa_server_auth_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 47 </span> : : #endif -<span class="lineNum"> 48 </span> : : -<span class="lineNum"> 49 </span> : : /* Context must be initialized. -<span class="lineNum"> 50 </span> : : */ -<span class="lineNum"> 51 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 52 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 53 </span> : : -<span class="lineNum"> 54 </span> : : /* Gotta have a valid string. -<span class="lineNum"> 55 </span> : : */ -<span class="lineNum"> 56 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(msg == NULL || strnlen(msg, MAX_SPA_SERVER_AUTH_SIZE) == 0)</span> -<span class="lineNum"> 57 </span> : : return(FKO_ERROR_INVALID_DATA_SRVAUTH_MISSING); -<span class="lineNum"> 58 </span> : : -<span class="lineNum"> 59 </span> : : /* --DSS XXX: Bail out for now. But consider just -<span class="lineNum"> 60 </span> : : * truncating in the future... -<span class="lineNum"> 61 </span> : : */ -<span class="lineNum"> 62 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strnlen(msg, MAX_SPA_SERVER_AUTH_SIZE) == MAX_SPA_SERVER_AUTH_SIZE)</span> -<span class="lineNum"> 63 </span> : : return(FKO_ERROR_DATA_TOO_LARGE); -<span class="lineNum"> 64 </span> : : -<span class="lineNum"> 65 </span> : : /* --DSS TODO: ??? -<span class="lineNum"> 66 </span> : : * Do we want to add message type and format checking here -<span class="lineNum"> 67 </span> : : * or continue to leave it to the implementor? -<span class="lineNum"> 68 </span> : : */ -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> : : /**/ -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : /* Just in case this is a subsquent call to this function. We -<span class="lineNum"> 73 </span> : : * do not want to be leaking memory. -<span class="lineNum"> 74 </span> : : */ -<span class="lineNum"> 75 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth != NULL)</span> -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : free(ctx-&gt;server_auth);</span> -<span class="lineNum"> 77 </span> : : -<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : ctx-&gt;server_auth = strdup(msg);</span> -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 81 </span> : : -<span class="lineNum"> 82 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx-&gt;server_auth == NULL)</span> -<span class="lineNum"> 83 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 86 </span> : : } -<span class="lineNum"> 87 </span> : : -<span class="lineNum"> 88 </span> : : /* Return the SPA message data. -<a name="89"><span class="lineNum"> 89 </span> : : */</a> -<span class="lineNum"> 90 </span> : : int -<span class="lineNum"> 91 </span> :<span class="lineCov"> 801 : fko_get_spa_server_auth(fko_ctx_t ctx, char **server_auth)</span> -<span class="lineNum"> 92 </span> : : { -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 95 </span> : : fiu_return_on(&quot;fko_get_spa_server_auth_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 96 </span> : : #endif -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : /* Must be initialized -<span class="lineNum"> 99 </span> : : */ -<span class="lineNum"> 100 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 101 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 102 </span> : : -<span class="lineNum"> 103 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(server_auth == NULL)</span> -<span class="lineNum"> 104 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 107 </span> : : fiu_return_on(&quot;fko_get_spa_server_auth_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 108 </span> : : #endif -<span class="lineNum"> 109 </span> : : -<span class="lineNum"> 110 </span> :<span class="lineCov"> 801 : *server_auth = ctx-&gt;server_auth;</span> -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 113 </span> : : } -<span class="lineNum"> 114 </span> : : -<span class="lineNum"> 115 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html deleted file mode 100644 index f439e90f..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func-sort-c.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_timestamp.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_timestamp.c<span style="font-size: 80%;"> (<a href="fko_timestamp.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryLo">58.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_timestamp.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_timestamp.c.gcov.html#36">fko_set_timestamp</a></td> - <td class="coverFnHi">1069</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_timestamp.c.gcov.html#68">fko_get_timestamp</a></td> - <td class="coverFnHi">801</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html deleted file mode 100644 index 555e413b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.func.html +++ /dev/null @@ -1,89 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_timestamp.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_timestamp.c<span style="font-size: 80%;"> (<a href="fko_timestamp.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryLo">58.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_timestamp.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_timestamp.c.gcov.html#68">fko_get_timestamp</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_timestamp.c.gcov.html#36">fko_set_timestamp</a></td> - <td class="coverFnHi">1069</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html deleted file mode 100644 index d1f64db2..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_timestamp.c.gcov.html +++ /dev/null @@ -1,179 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_timestamp.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_timestamp.c<span style="font-size: 80%;"> (source / <a href="fko_timestamp.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryLo">58.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_timestamp.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Get the current timestamp with optional offset applied. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : -<span class="lineNum"> 35 </span> : : /* Set the timestamp. -<a name="36"><span class="lineNum"> 36 </span> : : */</a> -<span class="lineNum"> 37 </span> : : int -<span class="lineNum"> 38 </span> :<span class="lineCov"> 1069 : fko_set_timestamp(fko_ctx_t ctx, const int offset)</span> -<span class="lineNum"> 39 </span> : : { -<span class="lineNum"> 40 </span> : : time_t ts; -<span class="lineNum"> 41 </span> : : -<span class="lineNum"> 42 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 43 </span> : : fiu_return_on(&quot;fko_set_timestamp_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 44 </span> : : #endif -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : /* Must be initialized -<span class="lineNum"> 47 </span> : : */ -<span class="lineNum"> 48 </span>[<span class="branchCov" title="Branch 0 was taken 1069 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1069 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1069 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 49 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> :<span class="lineCov"> 1069 : ts = time(NULL) + offset;</span> -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 54 </span> : : fiu_return_on(&quot;fko_set_timestamp_val&quot;, -<span class="lineNum"> 55 </span> : : FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL); -<span class="lineNum"> 56 </span> : : #endif -<span class="lineNum"> 57 </span> [<span class="branchCov" title="Branch 0 was taken 1068 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1069 : if(ts &lt; 0)</span> -<span class="lineNum"> 58 </span> : : return(FKO_ERROR_INVALID_DATA_TIMESTAMP_VALIDFAIL); -<span class="lineNum"> 59 </span> : : -<span class="lineNum"> 60 </span> :<span class="lineCov"> 1068 : ctx-&gt;timestamp = ts;</span> -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> :<span class="lineCov"> 1068 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> :<span class="lineCov"> 1068 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 65 </span> : : } -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> : : /* Return the current timestamp. -<a name="68"><span class="lineNum"> 68 </span> : : */</a> -<span class="lineNum"> 69 </span> : : int -<span class="lineNum"> 70 </span> :<span class="lineCov"> 801 : fko_get_timestamp(fko_ctx_t ctx, time_t *timestamp)</span> -<span class="lineNum"> 71 </span> : : { -<span class="lineNum"> 72 </span> : : -<span class="lineNum"> 73 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 74 </span> : : fiu_return_on(&quot;fko_get_timestamp_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 75 </span> : : #endif -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : /* Must be initialized -<span class="lineNum"> 78 </span> : : */ -<span class="lineNum"> 79 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 80 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 81 </span> : : -<span class="lineNum"> 82 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(timestamp == NULL)</span> -<span class="lineNum"> 83 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 86 </span> : : fiu_return_on(&quot;fko_get_timestamp_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 87 </span> : : #endif -<span class="lineNum"> 88 </span> : : -<span class="lineNum"> 89 </span> :<span class="lineCov"> 801 : *timestamp = ctx-&gt;timestamp;</span> -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 92 </span> : : } -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html deleted file mode 100644 index d82e07a5..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_user.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_user.c<span style="font-size: 80%;"> (<a href="fko_user.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntry">54</td> - <td class="headerCovTableEntryMed">85.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">49</td> - <td class="headerCovTableEntry">76</td> - <td class="headerCovTableEntryLo">64.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_user.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_user.c.gcov.html#161">validate_username</a></td> - <td class="coverFnHi">1763</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_user.c.gcov.html#39">fko_set_username</a></td> - <td class="coverFnHi">944</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_user.c.gcov.html#136">fko_get_username</a></td> - <td class="coverFnHi">801</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html deleted file mode 100644 index e2b1cf5b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.func.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_user.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_user.c<span style="font-size: 80%;"> (<a href="fko_user.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntry">54</td> - <td class="headerCovTableEntryMed">85.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">49</td> - <td class="headerCovTableEntry">76</td> - <td class="headerCovTableEntryLo">64.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_user.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_user.c.gcov.html#136">fko_get_username</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_user.c.gcov.html#39">fko_set_username</a></td> - <td class="coverFnHi">944</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_user.c.gcov.html#161">validate_username</a></td> - <td class="coverFnHi">1763</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html deleted file mode 100644 index 380c4730..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_user.c.gcov.html +++ /dev/null @@ -1,295 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_user.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_user.c<span style="font-size: 80%;"> (source / <a href="fko_user.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntry">54</td> - <td class="headerCovTableEntryMed">85.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">49</td> - <td class="headerCovTableEntry">76</td> - <td class="headerCovTableEntryLo">64.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_user.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Set/Get the current username. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #ifdef WIN32 -<span class="lineNum"> 35 </span> : : #include &lt;getlogin.h&gt; -<span class="lineNum"> 36 </span> : : #endif -<span class="lineNum"> 37 </span> : : -<span class="lineNum"> 38 </span> : : /* Get or Set the username for the fko context spa data. -<a name="39"><span class="lineNum"> 39 </span> : : */</a> -<span class="lineNum"> 40 </span> : : int -<span class="lineNum"> 41 </span> :<span class="lineCov"> 944 : fko_set_username(fko_ctx_t ctx, const char * const spoof_user)</span> -<span class="lineNum"> 42 </span> : : { -<span class="lineNum"> 43 </span> :<span class="lineCov"> 944 : char *username = NULL;</span> -<span class="lineNum"> 44 </span> :<span class="lineCov"> 944 : int res = FKO_SUCCESS, is_user_heap_allocated=0;</span> -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 47 </span> : : fiu_return_on(&quot;fko_set_username_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 48 </span> : : #endif -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : /* Must be initialized -<span class="lineNum"> 51 </span> : : */ -<span class="lineNum"> 52 </span>[<span class="branchCov" title="Branch 0 was taken 944 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 944 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 944 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 53 </span> : : return FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : /* If spoof_user was not passed in, check for a SPOOF_USER enviroment -<span class="lineNum"> 56 </span> : : * variable. If it is set, use its value. -<span class="lineNum"> 57 </span> : : */ -<span class="lineNum"> 58 </span>[<span class="branchCov" title="Branch 0 was taken 378 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>][<span class="branchNoCov" title="Branch 3 was not taken"> - </span><span class="branchCov" title="Branch 4 was taken 378 times"> + </span>]:<span class="lineCov"> 944 : if(spoof_user != NULL &amp;&amp; strnlen(spoof_user, MAX_SPA_USERNAME_SIZE))</span> -<span class="lineNum"> 59 </span> : : username = (char*)spoof_user; -<span class="lineNum"> 60 </span> : : else -<span class="lineNum"> 61 </span> :<span class="lineCov"> 566 : username = getenv(&quot;SPOOF_USER&quot;);</span> -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> : : /* Try to get the username from the system. -<span class="lineNum"> 64 </span> : : */ -<span class="lineNum"> 65 </span> [<span class="branchCov" title="Branch 0 was taken 566 times"> + </span><span class="branchCov" title="Branch 1 was taken 378 times"> + </span>]:<span class="lineCov"> 944 : if(username == NULL)</span> -<span class="lineNum"> 66 </span> : : { -<span class="lineNum"> 67 </span> : : /* Since we've already tried looking at an env variable, try -<span class="lineNum"> 68 </span> : : * LOGNAME next (and the cuserid() man page recommends this) -<span class="lineNum"> 69 </span> : : */ -<span class="lineNum"> 70 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 566 times"> + </span>]:<span class="lineCov"> 566 : if((username = getenv(&quot;LOGNAME&quot;)) == NULL)</span> -<span class="lineNum"> 71 </span> : : { -<span class="lineNum"> 72 </span> : : #ifdef _XOPEN_SOURCE -<span class="lineNum"> 73 </span> : : /* cuserid will return the effective user (i.e. su or setuid). -<span class="lineNum"> 74 </span> : : */ -<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : username = cuserid(NULL);</span> -<span class="lineNum"> 76 </span> : : #else -<span class="lineNum"> 77 </span> : : username = getlogin(); -<span class="lineNum"> 78 </span> : : #endif -<span class="lineNum"> 79 </span> : : /* if we still didn't get a username, continue falling back -<span class="lineNum"> 80 </span> : : */ -<span class="lineNum"> 81 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(username == NULL)</span> -<span class="lineNum"> 82 </span> : : { -<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((username = getenv(&quot;USER&quot;)) == NULL)</span> -<span class="lineNum"> 84 </span> : : { -<span class="lineNum"> 85 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 86 </span> : : fiu_return_on(&quot;fko_set_username_strdup1&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 87 </span> : : #endif -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : username = strdup(&quot;NO_USER&quot;);</span> -<span class="lineNum"> 89 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(username == NULL)</span> -<span class="lineNum"> 90 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 91 </span> : : is_user_heap_allocated = 1; -<span class="lineNum"> 92 </span> : : } -<span class="lineNum"> 93 </span> : : } -<span class="lineNum"> 94 </span> : : } -<span class="lineNum"> 95 </span> : : } -<span class="lineNum"> 96 </span> : : -<span class="lineNum"> 97 </span> : : /* Truncate the username if it is too long. -<span class="lineNum"> 98 </span> : : */ -<span class="lineNum"> 99 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 944 times"> + </span>]:<span class="lineCov"> 944 : if(strnlen(username, MAX_SPA_USERNAME_SIZE) == MAX_SPA_USERNAME_SIZE)</span> -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : *(username + MAX_SPA_USERNAME_SIZE - 1) = '\0';</span> -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> [<span class="branchCov" title="Branch 1 was taken 25 times"> + </span><span class="branchCov" title="Branch 2 was taken 919 times"> + </span>]:<span class="lineCov"> 944 : if((res = validate_username(username)) != FKO_SUCCESS)</span> -<span class="lineNum"> 103 </span> : : { -<span class="lineNum"> 104 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 25 times"> + </span>]:<span class="lineCov"> 25 : if(is_user_heap_allocated == 1)</span> -<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : free(username);</span> -<span class="lineNum"> 106 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 107 </span> : : fiu_return_on(&quot;fko_set_username_valuser&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 108 </span> : : #endif -<span class="lineNum"> 109 </span> :<span class="lineCov"> 25 : return res;</span> -<span class="lineNum"> 110 </span> : : } -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : /* Just in case this is a subsquent call to this function. We -<span class="lineNum"> 113 </span> : : * do not want to be leaking memory. -<span class="lineNum"> 114 </span> : : */ -<span class="lineNum"> 115 </span> [<span class="branchCov" title="Branch 0 was taken 353 times"> + </span><span class="branchCov" title="Branch 1 was taken 566 times"> + </span>]:<span class="lineCov"> 919 : if(ctx-&gt;username != NULL)</span> -<span class="lineNum"> 116 </span> :<span class="lineCov"> 353 : free(ctx-&gt;username);</span> -<span class="lineNum"> 117 </span> : : -<span class="lineNum"> 118 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 119 </span> : : fiu_return_on(&quot;fko_set_username_strdup2&quot;, FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 120 </span> : : #endif -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> :<span class="lineCov"> 919 : ctx-&gt;username = strdup(username);</span> -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> :<span class="lineCov"> 919 : ctx-&gt;state |= FKO_DATA_MODIFIED;</span> -<span class="lineNum"> 125 </span> : : -<span class="lineNum"> 126 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 919 times"> + </span>]:<span class="lineCov"> 919 : if(is_user_heap_allocated == 1)</span> -<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : free(username);</span> -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> [<span class="branchCov" title="Branch 0 was taken 919 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 919 : if(ctx-&gt;username == NULL)</span> -<span class="lineNum"> 130 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> :<span class="lineCov"> 919 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 133 </span> : : } -<span class="lineNum"> 134 </span> : : -<span class="lineNum"> 135 </span> : : /* Return the current username for this fko context. -<a name="136"><span class="lineNum"> 136 </span> : : */</a> -<span class="lineNum"> 137 </span> : : int -<span class="lineNum"> 138 </span> :<span class="lineCov"> 801 : fko_get_username(fko_ctx_t ctx, char **username)</span> -<span class="lineNum"> 139 </span> : : { -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 142 </span> : : fiu_return_on(&quot;fko_get_username_init&quot;, FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 143 </span> : : #endif -<span class="lineNum"> 144 </span> : : -<span class="lineNum"> 145 </span> : : /* Must be initialized -<span class="lineNum"> 146 </span> : : */ -<span class="lineNum"> 147 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 148 </span> : : return(FKO_ERROR_CTX_NOT_INITIALIZED); -<span class="lineNum"> 149 </span> : : -<span class="lineNum"> 150 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(username == NULL)</span> -<span class="lineNum"> 151 </span> : : return(FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 154 </span> : : fiu_return_on(&quot;fko_get_username_val&quot;, FKO_ERROR_INVALID_DATA); -<span class="lineNum"> 155 </span> : : #endif -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> :<span class="lineCov"> 801 : *username = ctx-&gt;username;</span> -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> :<span class="lineCov"> 801 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 160 </span> : : } -<a name="161"><span class="lineNum"> 161 </span> : : </a> -<span class="lineNum"> 162 </span> : : int -<span class="lineNum"> 163 </span> :<span class="lineCov"> 1763 : validate_username(const char *username)</span> -<span class="lineNum"> 164 </span> : : { -<span class="lineNum"> 165 </span> : : int i; -<span class="lineNum"> 166 </span> : : -<span class="lineNum"> 167 </span>[<span class="branchCov" title="Branch 0 was taken 1763 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 3 was taken 1763 times"> + </span><span class="branchNoCov" title="Branch 4 was not taken"> - </span>]:<span class="lineCov"> 1763 : if(username == NULL || strnlen(username, MAX_SPA_USERNAME_SIZE) == 0)</span> -<span class="lineNum"> 168 </span> : : return(FKO_ERROR_INVALID_DATA_USER_MISSING); -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> : : /* Exclude a few chars - this list is consistent with MS guidance since -<span class="lineNum"> 171 </span> : : * libfko runs on Windows: -<span class="lineNum"> 172 </span> : : * http://technet.microsoft.com/en-us/library/bb726984.aspx -<span class="lineNum"> 173 </span> : : */ -<span class="lineNum"> 174 </span> [<span class="branchCov" title="Branch 0 was taken 11290 times"> + </span><span class="branchCov" title="Branch 1 was taken 1738 times"> + </span>]:<span class="lineCov"> 13028 : for (i=0; i &lt; (int)strnlen(username, MAX_SPA_USERNAME_SIZE); i++)</span> -<span class="lineNum"> 175 </span> : : { -<span class="lineNum"> 176 </span> [<span class="branchCov" title="Branch 1 was taken 1023 times"> + </span><span class="branchCov" title="Branch 2 was taken 10267 times"> + </span>]:<span class="lineCov"> 11290 : if((isalnum(username[i]) == 0)</span> -<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 1012 times"> + </span><span class="branchCov" title="Branch 1 was taken 11 times"> + </span>]:<span class="lineCov"> 1023 : &amp;&amp; ((username[i] &lt; 0x20 || username[i] &gt; 0x7e)</span> -<span class="lineNum"> 178 </span> : : /* Not allowed chars: &quot; / \ [ ] : ; | = , + * ? &lt; &gt; -<span class="lineNum"> 179 </span> : : */ -<span class="lineNum"> 180 </span> [<span class="branchCov" title="Branch 0 was taken 1007 times"> + </span><span class="branchCov" title="Branch 1 was taken 5 times"> + </span>]:<span class="lineCov"> 1012 : || (username[i] == 0x22</span> -<span class="lineNum"> 181 </span> :<span class="lineCov"> 1012 : || username[i] == 0x2f</span> -<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 1007 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1007 : || username[i] == 0x5c</span> -<span class="lineNum"> 183 </span> [<span class="branchCov" title="Branch 0 was taken 1007 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1007 : || username[i] == 0x5b</span> -<span class="lineNum"> 184 </span> [<span class="branchCov" title="Branch 0 was taken 1004 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 1007 : || username[i] == 0x5d</span> -<span class="lineNum"> 185 </span> [<span class="branchCov" title="Branch 0 was taken 1004 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1004 : || username[i] == 0x3a</span> -<span class="lineNum"> 186 </span> [<span class="branchCov" title="Branch 0 was taken 1004 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1004 : || username[i] == 0x3b</span> -<span class="lineNum"> 187 </span> [<span class="branchCov" title="Branch 0 was taken 1003 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1004 : || username[i] == 0x7c</span> -<span class="lineNum"> 188 </span> [<span class="branchCov" title="Branch 0 was taken 1003 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1003 : || username[i] == 0x3d</span> -<span class="lineNum"> 189 </span> [<span class="branchCov" title="Branch 0 was taken 1002 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1003 : || username[i] == 0x2c</span> -<span class="lineNum"> 190 </span> [<span class="branchCov" title="Branch 0 was taken 1000 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 1002 : || username[i] == 0x2b</span> -<span class="lineNum"> 191 </span> [<span class="branchCov" title="Branch 0 was taken 998 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 1000 : || username[i] == 0x2a</span> -<span class="lineNum"> 192 </span> [<span class="branchCov" title="Branch 0 was taken 998 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 998 : || username[i] == 0x3f</span> -<span class="lineNum"> 193 </span> [<span class="branchCov" title="Branch 0 was taken 998 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 998 : || username[i] == 0x3c</span> -<span class="lineNum"> 194 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 998 times"> + </span>]:<span class="lineCov"> 998 : || username[i] == 0x3e)))</span> -<span class="lineNum"> 195 </span> : : { -<span class="lineNum"> 196 </span> [<span class="branchCov" title="Branch 0 was taken 22 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 25 : if(i == 0)</span> -<span class="lineNum"> 197 </span> : : { -<span class="lineNum"> 198 </span> : : return(FKO_ERROR_INVALID_DATA_USER_FIRSTCHAR_VALIDFAIL); -<span class="lineNum"> 199 </span> : : } -<span class="lineNum"> 200 </span> : : else -<span class="lineNum"> 201 </span> : : { -<span class="lineNum"> 202 </span> :<span class="lineCov"> 22 : return(FKO_ERROR_INVALID_DATA_USER_REMCHAR_VALIDFAIL);</span> -<span class="lineNum"> 203 </span> : : } -<span class="lineNum"> 204 </span> : : } -<span class="lineNum"> 205 </span> : : } -<span class="lineNum"> 206 </span> : : -<span class="lineNum"> 207 </span> : : return FKO_SUCCESS; -<span class="lineNum"> 208 </span> : : } -<span class="lineNum"> 209 </span> : : -<span class="lineNum"> 210 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html deleted file mode 100644 index 09ec05b6..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func-sort-c.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_util.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_util.c<span style="font-size: 80%;"> (<a href="fko_util.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">213</td> - <td class="headerCovTableEntry">273</td> - <td class="headerCovTableEntryMed">78.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">131</td> - <td class="headerCovTableEntry">246</td> - <td class="headerCovTableEntryLo">53.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fko_util.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#507">zero_buf</a></td> - <td class="coverFnHi">37967</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#419">strtol_wrapper</a></td> - <td class="coverFnHi">20672</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#569">append_msg_to_buf</a></td> - <td class="coverFnHi">14418</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#119">is_valid_ipv4_addr</a></td> - <td class="coverFnHi">8215</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#606">is_base64</a></td> - <td class="coverFnHi">7677</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#233">hmac_digest_strtoint</a></td> - <td class="coverFnHi">6176</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#355">enc_mode_strtoint</a></td> - <td class="coverFnHi">5625</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#478">zero_free</a></td> - <td class="coverFnHi">5489</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#105">is_valid_encoded_msg_len</a></td> - <td class="coverFnHi">5284</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#171">digest_strtoint</a></td> - <td class="coverFnHi">4540</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#83">constant_runtime_cmp</a></td> - <td class="coverFnHi">1145</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#391">enc_mode_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#200">digest_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#252">enc_type_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#636">dump_ctx_to_buffer</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#267">msg_type_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#300">hmac_digest_inttostr</a></td> - <td class="coverFnHi">664</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#335">is_valid_pt_msg_len</a></td> - <td class="coverFnHi">416</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html deleted file mode 100644 index ad662510..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.func.html +++ /dev/null @@ -1,153 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_util.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_util.c<span style="font-size: 80%;"> (<a href="fko_util.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">213</td> - <td class="headerCovTableEntry">273</td> - <td class="headerCovTableEntryMed">78.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">131</td> - <td class="headerCovTableEntry">246</td> - <td class="headerCovTableEntryLo">53.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fko_util.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#569">append_msg_to_buf</a></td> - <td class="coverFnHi">14418</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#83">constant_runtime_cmp</a></td> - <td class="coverFnHi">1145</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#200">digest_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#171">digest_strtoint</a></td> - <td class="coverFnHi">4540</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#636">dump_ctx_to_buffer</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#391">enc_mode_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#355">enc_mode_strtoint</a></td> - <td class="coverFnHi">5625</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#252">enc_type_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#300">hmac_digest_inttostr</a></td> - <td class="coverFnHi">664</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#233">hmac_digest_strtoint</a></td> - <td class="coverFnHi">6176</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#606">is_base64</a></td> - <td class="coverFnHi">7677</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#105">is_valid_encoded_msg_len</a></td> - <td class="coverFnHi">5284</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#119">is_valid_ipv4_addr</a></td> - <td class="coverFnHi">8215</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#335">is_valid_pt_msg_len</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#267">msg_type_inttostr</a></td> - <td class="coverFnHi">801</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#419">strtol_wrapper</a></td> - <td class="coverFnHi">20672</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#507">zero_buf</a></td> - <td class="coverFnHi">37967</td> - </tr> - <tr> - <td class="coverFn"><a href="fko_util.c.gcov.html#478">zero_free</a></td> - <td class="coverFnHi">5489</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html deleted file mode 100644 index 21b3c8e6..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/fko_util.c.gcov.html +++ /dev/null @@ -1,872 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/fko_util.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - fko_util.c<span style="font-size: 80%;"> (source / <a href="fko_util.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">213</td> - <td class="headerCovTableEntry">273</td> - <td class="headerCovTableEntryMed">78.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">131</td> - <td class="headerCovTableEntry">246</td> - <td class="headerCovTableEntryLo">53.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_util.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Provide a set of common utility functions that fwknop can use. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fko_util.h&quot; -<span class="lineNum"> 33 </span> : : #include &lt;errno.h&gt; -<span class="lineNum"> 34 </span> : : #include &lt;stdarg.h&gt; -<span class="lineNum"> 35 </span> : : -<span class="lineNum"> 36 </span> : : #ifndef WIN32 -<span class="lineNum"> 37 </span> : : /* for inet_aton() IP validation -<span class="lineNum"> 38 </span> : : */ -<span class="lineNum"> 39 </span> : : #include &lt;sys/socket.h&gt; -<span class="lineNum"> 40 </span> : : #include &lt;netinet/in.h&gt; -<span class="lineNum"> 41 </span> : : #include &lt;arpa/inet.h&gt; -<span class="lineNum"> 42 </span> : : #endif -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : /* Check for a FKO error returned by a function an return the error code */ -<span class="lineNum"> 45 </span> : : #define RETURN_ON_FKO_ERROR(e, f) do { if (((e)=(f)) != FKO_SUCCESS) { return (e); } } while(0); -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> : : #define FKO_ENCRYPTION_MODE_BUFSIZE 16 /*!&lt; Maximum size of an encryption mode string */ -<span class="lineNum"> 48 </span> : : #define FKO_ENC_MODE_SUPPORTED 0 /*!&lt; Defined a supported fko encryption mode */ -<span class="lineNum"> 49 </span> : : #define FKO_ENC_MODE_NOT_SUPPORTED !FKO_ENC_MODE_SUPPORTED /*!&lt; Defined an unsupported fko encryption mode */ -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> : : #define NULL_STRING &quot;&lt;NULL&gt;&quot; /*!&lt; String which represents a NULL buffer */ -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> : : /** -<span class="lineNum"> 54 </span> : : * Structure to handle an encryption mode string string and its associated integer value -<span class="lineNum"> 55 </span> : : */ -<span class="lineNum"> 56 </span> : : typedef struct fko_enc_mode_str -<span class="lineNum"> 57 </span> : : { -<span class="lineNum"> 58 </span> : : const char str[FKO_ENCRYPTION_MODE_BUFSIZE]; /*!&lt; String which represents an encryption mode value for the FKO library */ -<span class="lineNum"> 59 </span> : : int val; /*!&lt; Value of the encryption mode according to the FKO library */ -<span class="lineNum"> 60 </span> : : int supported; /*!&lt; SUPPORTED or NOT_SUPPORTED */ -<span class="lineNum"> 61 </span> : : } fko_enc_mode_str_t; -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> : : /** -<span class="lineNum"> 64 </span> : : * Array to associate all of encryption modes with their respective string -<span class="lineNum"> 65 </span> : : */ -<span class="lineNum"> 66 </span> : : static fko_enc_mode_str_t fko_enc_mode_strs[] = -<span class="lineNum"> 67 </span> : : { -<span class="lineNum"> 68 </span> : : { &quot;CBC&quot;, FKO_ENC_MODE_CBC, FKO_ENC_MODE_SUPPORTED }, -<span class="lineNum"> 69 </span> : : { &quot;ECB&quot;, FKO_ENC_MODE_ECB, FKO_ENC_MODE_SUPPORTED }, -<span class="lineNum"> 70 </span> : : { &quot;CFB&quot;, FKO_ENC_MODE_CFB, FKO_ENC_MODE_SUPPORTED }, -<span class="lineNum"> 71 </span> : : { &quot;PCBC&quot;, FKO_ENC_MODE_PCBC, FKO_ENC_MODE_NOT_SUPPORTED }, -<span class="lineNum"> 72 </span> : : { &quot;OFB&quot;, FKO_ENC_MODE_OFB, FKO_ENC_MODE_SUPPORTED }, -<span class="lineNum"> 73 </span> : : { &quot;CTR&quot;, FKO_ENC_MODE_CTR, FKO_ENC_MODE_SUPPORTED }, -<span class="lineNum"> 74 </span> : : { &quot;Asymmetric&quot;, FKO_ENC_MODE_ASYMMETRIC, FKO_ENC_MODE_SUPPORTED }, -<span class="lineNum"> 75 </span> : : { &quot;legacy&quot;, FKO_ENC_MODE_CBC_LEGACY_IV, FKO_ENC_MODE_SUPPORTED } -<span class="lineNum"> 76 </span> : : }; -<span class="lineNum"> 77 </span> : : -<span class="lineNum"> 78 </span> : : /* Compare all bytes with constant run time regardless of -<span class="lineNum"> 79 </span> : : * input characteristics (i.e. don't return early if a difference -<span class="lineNum"> 80 </span> : : * is found before comparing all bytes). This code was adapted -<span class="lineNum"> 81 </span> : : * from YaSSL which is GPLv2 after a timing bug was reported by -<span class="lineNum"> 82 </span> : : * Ryman through github (#85) -<a name="83"><span class="lineNum"> 83 </span> : : */</a> -<span class="lineNum"> 84 </span> : : int -<span class="lineNum"> 85 </span> :<span class="lineCov"> 1145 : constant_runtime_cmp(const char *a, const char *b, int len)</span> -<span class="lineNum"> 86 </span> : : { -<span class="lineNum"> 87 </span> :<span class="lineCov"> 1145 : int good = 0;</span> -<span class="lineNum"> 88 </span> :<span class="lineCov"> 1145 : int bad = 0;</span> -<span class="lineNum"> 89 </span> : : int i; -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> [<span class="branchCov" title="Branch 0 was taken 33604 times"> + </span><span class="branchCov" title="Branch 1 was taken 1145 times"> + </span>]:<span class="lineCov"> 34749 : for(i=0; i &lt; len; i++) {</span> -<span class="lineNum"> 92 </span> [<span class="branchCov" title="Branch 0 was taken 29515 times"> + </span><span class="branchCov" title="Branch 1 was taken 4089 times"> + </span>]:<span class="lineCov"> 33604 : if (a[i] == b[i])</span> -<span class="lineNum"> 93 </span> :<span class="lineCov"> 29515 : good++;</span> -<span class="lineNum"> 94 </span> : : else -<span class="lineNum"> 95 </span> :<span class="lineCov"> 4089 : bad++;</span> -<span class="lineNum"> 96 </span> : : } -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> [<span class="branchCov" title="Branch 0 was taken 415 times"> + </span><span class="branchCov" title="Branch 1 was taken 730 times"> + </span>]:<span class="lineCov"> 1145 : if (good == len)</span> -<span class="lineNum"> 99 </span> : : return 0; -<span class="lineNum"> 100 </span> : : else -<span class="lineNum"> 101 </span> :<span class="lineCov"> 415 : return 0 - bad;</span> -<span class="lineNum"> 102 </span> : : } -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> : : /* Validate encoded message length -<a name="105"><span class="lineNum"> 105 </span> : : */</a> -<span class="lineNum"> 106 </span> : : int -<span class="lineNum"> 107 </span> :<span class="lineCov"> 5284 : is_valid_encoded_msg_len(const int len)</span> -<span class="lineNum"> 108 </span> : : { -<span class="lineNum"> 109 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 110 </span> : : fiu_return_on(&quot;is_valid_encoded_msg_len_val&quot;, 0); -<span class="lineNum"> 111 </span> : : #endif -<span class="lineNum"> 112 </span> [<span class="branchCov" title="Branch 0 was taken 5284 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 5284 : if(len &lt; MIN_SPA_ENCODED_MSG_SIZE || len &gt;= MAX_SPA_ENCODED_MSG_SIZE)</span> -<span class="lineNum"> 113 </span> : : return(0); -<span class="lineNum"> 114 </span> : : -<span class="lineNum"> 115 </span> :<span class="lineCov"> 5284 : return(1);</span> -<span class="lineNum"> 116 </span> : : } -<span class="lineNum"> 117 </span> : : -<span class="lineNum"> 118 </span> : : /* Validate an IPv4 address -<a name="119"><span class="lineNum"> 119 </span> : : */</a> -<span class="lineNum"> 120 </span> : : int -<span class="lineNum"> 121 </span> :<span class="lineCov"> 8215 : is_valid_ipv4_addr(const char * const ip_str)</span> -<span class="lineNum"> 122 </span> : : { -<span class="lineNum"> 123 </span> :<span class="lineCov"> 8215 : const char *ndx = ip_str;</span> -<span class="lineNum"> 124 </span> :<span class="lineCov"> 8215 : int dot_ctr = 0, char_ctr = 0;</span> -<span class="lineNum"> 125 </span> :<span class="lineCov"> 8215 : int res = 1;</span> -<span class="lineNum"> 126 </span> : : #if HAVE_SYS_SOCKET_H -<span class="lineNum"> 127 </span> : : struct in_addr in; -<span class="lineNum"> 128 </span> : : #endif -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> [<span class="branchCov" title="Branch 0 was taken 8215 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 8215 : if(ip_str == NULL)</span> -<span class="lineNum"> 131 </span> : : return 0; -<span class="lineNum"> 132 </span> : : -<span class="lineNum"> 133 </span> [<span class="branchCov" title="Branch 0 was taken 47902 times"> + </span><span class="branchCov" title="Branch 1 was taken 4997 times"> + </span>]:<span class="lineCov"> 52899 : while(*ndx != '\0')</span> -<span class="lineNum"> 134 </span> : : { -<span class="lineNum"> 135 </span> :<span class="lineCov"> 47902 : char_ctr++;</span> -<span class="lineNum"> 136 </span> [<span class="branchCov" title="Branch 0 was taken 47902 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 47902 : if(char_ctr &gt;= MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 137 </span> : : { -<span class="lineNum"> 138 </span> : : res = 0; -<span class="lineNum"> 139 </span> : : break; -<span class="lineNum"> 140 </span> : : } -<span class="lineNum"> 141 </span> [<span class="branchCov" title="Branch 0 was taken 14402 times"> + </span><span class="branchCov" title="Branch 1 was taken 33500 times"> + </span>]:<span class="lineCov"> 47902 : if(*ndx == '.')</span> -<span class="lineNum"> 142 </span> :<span class="lineCov"> 14402 : dot_ctr++;</span> -<span class="lineNum"> 143 </span> [<span class="branchCov" title="Branch 1 was taken 30282 times"> + </span><span class="branchCov" title="Branch 2 was taken 3218 times"> + </span>]:<span class="lineCov"> 33500 : else if(isdigit(*ndx) == 0)</span> -<span class="lineNum"> 144 </span> : : { -<span class="lineNum"> 145 </span> : : res = 0; -<span class="lineNum"> 146 </span> : : break; -<span class="lineNum"> 147 </span> : : } -<span class="lineNum"> 148 </span> :<span class="lineCov"> 44684 : ndx++;</span> -<span class="lineNum"> 149 </span> : : } -<span class="lineNum"> 150 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8215 times"> + </span>]:<span class="lineCov"> 8215 : if(char_ctr &gt;= MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : res = 0;</span> -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> [<span class="branchCov" title="Branch 0 was taken 667 times"> + </span><span class="branchCov" title="Branch 1 was taken 7548 times"> + </span>]:<span class="lineCov"> 8215 : if ((res == 1) &amp;&amp; (char_ctr &lt; MIN_IPV4_STR_LEN))</span> -<span class="lineNum"> 154 </span> :<span class="lineCov"> 667 : res = 0;</span> -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> [<span class="branchCov" title="Branch 0 was taken 329 times"> + </span><span class="branchCov" title="Branch 1 was taken 7886 times"> + </span>]:<span class="lineCov"> 8215 : if((res == 1) &amp;&amp; dot_ctr != 3)</span> -<span class="lineNum"> 157 </span> :<span class="lineCov"> 329 : res = 0;</span> -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> : : #if HAVE_SYS_SOCKET_H -<span class="lineNum"> 160 </span> : : /* Stronger IP validation now that we have a candidate that looks -<span class="lineNum"> 161 </span> : : * close enough -<span class="lineNum"> 162 </span> : : */ -<span class="lineNum"> 163 </span>[<span class="branchCov" title="Branch 0 was taken 4001 times"> + </span><span class="branchCov" title="Branch 1 was taken 4214 times"> + </span>][<span class="branchCov" title="Branch 3 was taken 4 times"> + </span><span class="branchCov" title="Branch 4 was taken 3997 times"> + </span>]:<span class="lineCov"> 8215 : if((res == 1) &amp;&amp; (inet_aton(ip_str, &amp;in) == 0))</span> -<span class="lineNum"> 164 </span> :<span class="lineCov"> 4 : res = 0;</span> -<span class="lineNum"> 165 </span> : : #endif -<span class="lineNum"> 166 </span> : : -<span class="lineNum"> 167 </span> :<span class="lineCov"> 8215 : return(res);</span> -<span class="lineNum"> 168 </span> : : } -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> : : /* Convert a digest_type string to its integer value. -<a name="171"><span class="lineNum"> 171 </span> : : */</a> -<span class="lineNum"> 172 </span> : : short -<span class="lineNum"> 173 </span> :<span class="lineCov"> 4540 : digest_strtoint(const char *dt_str)</span> -<span class="lineNum"> 174 </span> : : { -<span class="lineNum"> 175 </span> [<span class="branchCov" title="Branch 0 was taken 4540 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 4540 : if(strcasecmp(dt_str, &quot;md5&quot;) == 0)</span> -<span class="lineNum"> 176 </span> : : return(FKO_DIGEST_MD5); -<span class="lineNum"> 177 </span> [<span class="branchCov" title="Branch 0 was taken 4366 times"> + </span><span class="branchCov" title="Branch 1 was taken 174 times"> + </span>]:<span class="lineCov"> 4540 : else if(strcasecmp(dt_str, &quot;sha1&quot;) == 0)</span> -<span class="lineNum"> 178 </span> : : return(FKO_DIGEST_SHA1); -<span class="lineNum"> 179 </span> [<span class="branchCov" title="Branch 0 was taken 2261 times"> + </span><span class="branchCov" title="Branch 1 was taken 2105 times"> + </span>]:<span class="lineCov"> 4366 : else if(strcasecmp(dt_str, &quot;sha256&quot;) == 0)</span> -<span class="lineNum"> 180 </span> : : return(FKO_DIGEST_SHA256); -<span class="lineNum"> 181 </span> [<span class="branchCov" title="Branch 0 was taken 2261 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2261 : else if(strcasecmp(dt_str, &quot;sha384&quot;) == 0)</span> -<span class="lineNum"> 182 </span> : : return(FKO_DIGEST_SHA384); -<span class="lineNum"> 183 </span> [<span class="branchCov" title="Branch 0 was taken 2261 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2261 : else if(strcasecmp(dt_str, &quot;sha512&quot;) == 0)</span> -<span class="lineNum"> 184 </span> : : return(FKO_DIGEST_SHA512); -<span class="lineNum"> 185 </span> : : else -<span class="lineNum"> 186 </span> :<span class="lineCov"> 2261 : return(-1);</span> -<span class="lineNum"> 187 </span> : : } -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> : : /** -<span class="lineNum"> 190 </span> : : * \brief Return a digest string according to a digest integer value -<span class="lineNum"> 191 </span> : : * -<span class="lineNum"> 192 </span> : : * This function checks the digest integer is valid, and write the digest -<span class="lineNum"> 193 </span> : : * string associated. -<span class="lineNum"> 194 </span> : : * -<span class="lineNum"> 195 </span> : : * \param digest Digest inetger value (FKO_DIGEST_MD5, FKO_DIGEST_SHA1 ...) -<span class="lineNum"> 196 </span> : : * \param digest_str Buffer to write the digest string -<span class="lineNum"> 197 </span> : : * \param digest_size size of the digest string buffer -<span class="lineNum"> 198 </span> : : * -<span class="lineNum"> 199 </span> : : * \return -1 if the digest integer value is not supported, 0 otherwise -<a name="200"><span class="lineNum"> 200 </span> : : */</a> -<span class="lineNum"> 201 </span> : : short -<span class="lineNum"> 202 </span> :<span class="lineCov"> 801 : digest_inttostr(int digest, char* digest_str, size_t digest_size)</span> -<span class="lineNum"> 203 </span> : : { -<span class="lineNum"> 204 </span> :<span class="lineCov"> 801 : short digest_not_valid = 0;</span> -<span class="lineNum"> 205 </span> : : -<span class="lineNum"> 206 </span> : : memset(digest_str, 0, digest_size); -<span class="lineNum"> 207 </span> : : -<span class="lineNum"> 208 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 105 times"> + </span><span class="branchCov" title="Branch 2 was taken 696 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 801 : switch (digest)</span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] -<span class="lineNum"> 209 </span> : : { -<span class="lineNum"> 210 </span> : : case FKO_DIGEST_MD5: -<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;MD5&quot;, digest_size);</span> -<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 213 </span> : : case FKO_DIGEST_SHA1: -<span class="lineNum"> 214 </span> :<span class="lineCov"> 105 : strlcpy(digest_str, &quot;SHA1&quot;, digest_size);</span> -<span class="lineNum"> 215 </span> :<span class="lineCov"> 105 : break;</span> -<span class="lineNum"> 216 </span> : : case FKO_DIGEST_SHA256: -<span class="lineNum"> 217 </span> :<span class="lineCov"> 696 : strlcpy(digest_str, &quot;SHA256&quot;, digest_size);</span> -<span class="lineNum"> 218 </span> :<span class="lineCov"> 696 : break;</span> -<span class="lineNum"> 219 </span> : : case FKO_DIGEST_SHA384: -<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA384&quot;, digest_size);</span> -<span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 222 </span> : : case FKO_DIGEST_SHA512: -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA512&quot;, digest_size);</span> -<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 225 </span> : : default: -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;Unknown&quot;, digest_size);</span> -<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : digest_not_valid = -1;</span> -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 229 </span> : : } -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> :<span class="lineCov"> 801 : return digest_not_valid;</span> -<span class="lineNum"> 232 </span> : : } -<a name="233"><span class="lineNum"> 233 </span> : : </a> -<span class="lineNum"> 234 </span> : : short -<span class="lineNum"> 235 </span> :<span class="lineCov"> 6176 : hmac_digest_strtoint(const char *dt_str)</span> -<span class="lineNum"> 236 </span> : : { -<span class="lineNum"> 237 </span> [<span class="branchCov" title="Branch 0 was taken 6176 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 6176 : if(strcasecmp(dt_str, &quot;md5&quot;) == 0)</span> -<span class="lineNum"> 238 </span> : : return(FKO_HMAC_MD5); -<span class="lineNum"> 239 </span> [<span class="branchCov" title="Branch 0 was taken 5462 times"> + </span><span class="branchCov" title="Branch 1 was taken 714 times"> + </span>]:<span class="lineCov"> 6176 : else if(strcasecmp(dt_str, &quot;sha1&quot;) == 0)</span> -<span class="lineNum"> 240 </span> : : return(FKO_HMAC_SHA1); -<span class="lineNum"> 241 </span> [<span class="branchCov" title="Branch 0 was taken 2619 times"> + </span><span class="branchCov" title="Branch 1 was taken 2843 times"> + </span>]:<span class="lineCov"> 5462 : else if(strcasecmp(dt_str, &quot;sha256&quot;) == 0)</span> -<span class="lineNum"> 242 </span> : : return(FKO_HMAC_SHA256); -<span class="lineNum"> 243 </span> [<span class="branchCov" title="Branch 0 was taken 2619 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2619 : else if(strcasecmp(dt_str, &quot;sha384&quot;) == 0)</span> -<span class="lineNum"> 244 </span> : : return(FKO_HMAC_SHA384); -<span class="lineNum"> 245 </span> [<span class="branchCov" title="Branch 0 was taken 2606 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>]:<span class="lineCov"> 2619 : else if(strcasecmp(dt_str, &quot;sha512&quot;) == 0)</span> -<span class="lineNum"> 246 </span> : : return(FKO_HMAC_SHA512); -<span class="lineNum"> 247 </span> : : else -<span class="lineNum"> 248 </span> :<span class="lineCov"> 2606 : return(-1);</span> -<span class="lineNum"> 249 </span> : : } -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> : : /* Return encryption type string representation -<a name="252"><span class="lineNum"> 252 </span> : : */</a> -<span class="lineNum"> 253 </span> : : const char * -<span class="lineNum"> 254 </span> :<span class="lineCov"> 801 : enc_type_inttostr(const int type)</span> -<span class="lineNum"> 255 </span> : : { -<span class="lineNum"> 256 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(type == FKO_ENC_MODE_UNKNOWN)</span> -<span class="lineNum"> 257 </span> : : return(&quot;Unknown encryption type&quot;); -<span class="lineNum"> 258 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : else if(type == FKO_ENCRYPTION_RIJNDAEL)</span> -<span class="lineNum"> 259 </span> : : return(&quot;Rijndael&quot;); -<span class="lineNum"> 260 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_ENCRYPTION_GPG)</span> -<span class="lineNum"> 261 </span> : : return(&quot;GPG&quot;); -<span class="lineNum"> 262 </span> : : -<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown encryption type&quot;);</span> -<span class="lineNum"> 264 </span> : : } -<span class="lineNum"> 265 </span> : : -<span class="lineNum"> 266 </span> : : /* Return message type string representation -<a name="267"><span class="lineNum"> 267 </span> : : */</a> -<span class="lineNum"> 268 </span> : : const char * -<span class="lineNum"> 269 </span> :<span class="lineCov"> 801 : msg_type_inttostr(const int type)</span> -<span class="lineNum"> 270 </span> : : { -<span class="lineNum"> 271 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : if(type == FKO_COMMAND_MSG)</span> -<span class="lineNum"> 272 </span> : : return(&quot;Command msg&quot;); -<span class="lineNum"> 273 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 799 times"> + </span>]:<span class="lineCov"> 801 : else if(type == FKO_ACCESS_MSG)</span> -<span class="lineNum"> 274 </span> : : return(&quot;Access msg&quot;); -<span class="lineNum"> 275 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : else if(type == FKO_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 276 </span> : : return(&quot;NAT access msg&quot;); -<span class="lineNum"> 277 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : else if(type == FKO_CLIENT_TIMEOUT_ACCESS_MSG)</span> -<span class="lineNum"> 278 </span> : : return(&quot;Client timeout access msg&quot;); -<span class="lineNum"> 279 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 280 </span> : : return(&quot;Client timeout NAT access msg&quot;); -<span class="lineNum"> 281 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 282 </span> : : return(&quot;Local NAT access msg&quot;); -<span class="lineNum"> 283 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 284 </span> : : return(&quot;Client timeout local NAT access msg&quot;); -<span class="lineNum"> 285 </span> : : -<span class="lineNum"> 286 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown message type&quot;);</span> -<span class="lineNum"> 287 </span> : : } -<span class="lineNum"> 288 </span> : : -<span class="lineNum"> 289 </span> : : /** -<span class="lineNum"> 290 </span> : : * \brief Return a hmac digest string according to a hmac digest integer value -<span class="lineNum"> 291 </span> : : * -<span class="lineNum"> 292 </span> : : * This function checks if the digest integer is valid, and write the digest -<span class="lineNum"> 293 </span> : : * string associated. -<span class="lineNum"> 294 </span> : : * -<span class="lineNum"> 295 </span> : : * \param digest Digest inetger value (FKO_HMAC_MD5, FKO_HMAC_SHA1 ...) -<span class="lineNum"> 296 </span> : : * \param digest_str Buffer to write the digest string -<span class="lineNum"> 297 </span> : : * \param digest_size size of the digest string buffer -<span class="lineNum"> 298 </span> : : * -<span class="lineNum"> 299 </span> : : * \return -1 if the digest integer value is not supported, 0 otherwise -<a name="300"><span class="lineNum"> 300 </span> : : */</a> -<span class="lineNum"> 301 </span> : : short -<span class="lineNum"> 302 </span> :<span class="lineCov"> 664 : hmac_digest_inttostr(int digest, char* digest_str, size_t digest_size)</span> -<span class="lineNum"> 303 </span> : : { -<span class="lineNum"> 304 </span> :<span class="lineCov"> 664 : short digest_not_valid = 0;</span> -<span class="lineNum"> 305 </span> : : -<span class="lineNum"> 306 </span> : : memset(digest_str, 0, digest_size); -<span class="lineNum"> 307 </span> : : -<span class="lineNum"> 308 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 136 times"> + </span><span class="branchCov" title="Branch 2 was taken 528 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 664 : switch (digest)</span> -<span class="lineNum"> </span> <span class="branchNoCov" title="Branch 4 was not taken"> - </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] -<span class="lineNum"> 309 </span> : : { -<span class="lineNum"> 310 </span> : : case FKO_HMAC_MD5: -<span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;MD5&quot;, digest_size);</span> -<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 313 </span> : : case FKO_HMAC_SHA1: -<span class="lineNum"> 314 </span> :<span class="lineCov"> 136 : strlcpy(digest_str, &quot;SHA1&quot;, digest_size);</span> -<span class="lineNum"> 315 </span> :<span class="lineCov"> 136 : break;</span> -<span class="lineNum"> 316 </span> : : case FKO_HMAC_SHA256: -<span class="lineNum"> 317 </span> :<span class="lineCov"> 528 : strlcpy(digest_str, &quot;SHA256&quot;, digest_size);</span> -<span class="lineNum"> 318 </span> :<span class="lineCov"> 528 : break;</span> -<span class="lineNum"> 319 </span> : : case FKO_HMAC_SHA384: -<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA384&quot;, digest_size);</span> -<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 322 </span> : : case FKO_HMAC_SHA512: -<span class="lineNum"> 323 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;SHA512&quot;, digest_size);</span> -<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 325 </span> : : default: -<span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_str, &quot;Unknown&quot;, digest_size);</span> -<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : digest_not_valid = -1;</span> -<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 329 </span> : : } -<span class="lineNum"> 330 </span> : : -<span class="lineNum"> 331 </span> :<span class="lineCov"> 664 : return digest_not_valid;</span> -<span class="lineNum"> 332 </span> : : } -<span class="lineNum"> 333 </span> : : -<span class="lineNum"> 334 </span> : : /* Validate plaintext input size -<a name="335"><span class="lineNum"> 335 </span> : : */</a> -<span class="lineNum"> 336 </span> : : int -<span class="lineNum"> 337 </span> :<span class="lineCov"> 416 : is_valid_pt_msg_len(const int len)</span> -<span class="lineNum"> 338 </span> : : { -<span class="lineNum"> 339 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 340 </span> : : fiu_return_on(&quot;is_valid_pt_msg_len_val&quot;, 0); -<span class="lineNum"> 341 </span> : : #endif -<span class="lineNum"> 342 </span> [<span class="branchCov" title="Branch 0 was taken 416 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 416 : if(len &lt; MIN_SPA_PLAINTEXT_MSG_SIZE || len &gt;= MAX_SPA_PLAINTEXT_MSG_SIZE)</span> -<span class="lineNum"> 343 </span> : : return(0); -<span class="lineNum"> 344 </span> : : -<span class="lineNum"> 345 </span> :<span class="lineCov"> 416 : return(1);</span> -<span class="lineNum"> 346 </span> : : } -<span class="lineNum"> 347 </span> : : -<span class="lineNum"> 348 </span> : : /** -<span class="lineNum"> 349 </span> : : * @brief Convert an encryption mode string to its integer value. -<span class="lineNum"> 350 </span> : : * -<span class="lineNum"> 351 </span> : : * @param enc_mode_str Encryption mode string (CBC,ECB...) -<span class="lineNum"> 352 </span> : : * -<span class="lineNum"> 353 </span> : : * @return -1 if the encryption mode string is not supported, -<span class="lineNum"> 354 </span> : : * otherwise the encryption mode value -<a name="355"><span class="lineNum"> 355 </span> : : */</a> -<span class="lineNum"> 356 </span> : : int -<span class="lineNum"> 357 </span> :<span class="lineCov"> 5625 : enc_mode_strtoint(const char *enc_mode_str)</span> -<span class="lineNum"> 358 </span> : : { -<span class="lineNum"> 359 </span> : : unsigned char ndx_enc_mode; -<span class="lineNum"> 360 </span> :<span class="lineCov"> 5625 : int enc_mode_int = -1; /* Encryption mode integer value */</span> -<span class="lineNum"> 361 </span> : : fko_enc_mode_str_t *enc_mode_str_pt; -<span class="lineNum"> 362 </span> : : -<span class="lineNum"> 363 </span> : : /* Look into the fko_enc_mode_strs array to find out the right encryption mode */ -<span class="lineNum"> 364 </span> [<span class="branchCov" title="Branch 0 was taken 31879 times"> + </span><span class="branchCov" title="Branch 1 was taken 2818 times"> + </span>]:<span class="lineCov"> 34697 : for (ndx_enc_mode = 0 ; ndx_enc_mode &lt; ARRAY_SIZE(fko_enc_mode_strs) ; ndx_enc_mode++)</span> -<span class="lineNum"> 365 </span> : : { -<span class="lineNum"> 366 </span> :<span class="lineCov"> 31879 : enc_mode_str_pt = &amp;(fko_enc_mode_strs[ndx_enc_mode]);</span> -<span class="lineNum"> 367 </span> : : -<span class="lineNum"> 368 </span> : : /* If the encryption mode matches, grab it */ -<span class="lineNum"> 369 </span> [<span class="branchCov" title="Branch 0 was taken 2825 times"> + </span><span class="branchCov" title="Branch 1 was taken 29054 times"> + </span>]:<span class="lineCov"> 31879 : if ( (strcasecmp(enc_mode_str, enc_mode_str_pt-&gt;str) == 0)</span> -<span class="lineNum"> 370 </span> [<span class="branchCov" title="Branch 0 was taken 2807 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 2825 : &amp;&amp; (enc_mode_str_pt-&gt;supported == FKO_ENC_MODE_SUPPORTED) )</span> -<span class="lineNum"> 371 </span> : : { -<span class="lineNum"> 372 </span> :<span class="lineCov"> 2807 : enc_mode_int = enc_mode_str_pt-&gt;val;</span> -<span class="lineNum"> 373 </span> :<span class="lineCov"> 2807 : break;</span> -<span class="lineNum"> 374 </span> : : } -<span class="lineNum"> 375 </span> : : } -<span class="lineNum"> 376 </span> : : -<span class="lineNum"> 377 </span> :<span class="lineCov"> 5625 : return enc_mode_int;</span> -<span class="lineNum"> 378 </span> : : } -<span class="lineNum"> 379 </span> : : -<span class="lineNum"> 380 </span> : : /** -<span class="lineNum"> 381 </span> : : * @brief Return an encryption mode string according to an enc_mode integer value -<span class="lineNum"> 382 </span> : : * -<span class="lineNum"> 383 </span> : : * This function checks if the encryption mode integer is valid, and write the -<span class="lineNum"> 384 </span> : : * encryption mode string associated. -<span class="lineNum"> 385 </span> : : * -<span class="lineNum"> 386 </span> : : * @param enc_mode Encryption mode integer value (FKO_ENC_MODE_CBC, FKO_ENC_MODE_ECB ...) -<span class="lineNum"> 387 </span> : : * @param enc_mode_str Buffer to write the encryption mode string to -<span class="lineNum"> 388 </span> : : * @param enc_mode_size Size of the encryption mode string buffer -<span class="lineNum"> 389 </span> : : * -<span class="lineNum"> 390 </span> : : * @return -1 if the encryption mode integer value is not supported, 0 otherwise -<a name="391"><span class="lineNum"> 391 </span> : : */</a> -<span class="lineNum"> 392 </span> : : short -<span class="lineNum"> 393 </span> :<span class="lineCov"> 801 : enc_mode_inttostr(int enc_mode, char* enc_mode_str, size_t enc_mode_size)</span> -<span class="lineNum"> 394 </span> : : { -<span class="lineNum"> 395 </span> :<span class="lineCov"> 801 : short enc_mode_error = -1;</span> -<span class="lineNum"> 396 </span> : : unsigned char ndx_enc_mode; -<span class="lineNum"> 397 </span> : : fko_enc_mode_str_t *enc_mode_str_pt; -<span class="lineNum"> 398 </span> : : -<span class="lineNum"> 399 </span> : : /* Initialize the protocol string */ -<span class="lineNum"> 400 </span> : : memset(enc_mode_str, 0, enc_mode_size); -<span class="lineNum"> 401 </span> : : -<span class="lineNum"> 402 </span> : : /* Look into the fko_enc_mode_strs array to find out the right protocol */ -<span class="lineNum"> 403 </span> [<span class="branchCov" title="Branch 0 was taken 887 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 887 : for (ndx_enc_mode = 0 ; ndx_enc_mode &lt; ARRAY_SIZE(fko_enc_mode_strs) ; ndx_enc_mode++)</span> -<span class="lineNum"> 404 </span> : : { -<span class="lineNum"> 405 </span> :<span class="lineCov"> 887 : enc_mode_str_pt = &amp;(fko_enc_mode_strs[ndx_enc_mode]);</span> -<span class="lineNum"> 406 </span> : : -<span class="lineNum"> 407 </span> : : /* If the encryption mode matches, grab it */ -<span class="lineNum"> 408 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchCov" title="Branch 1 was taken 86 times"> + </span>]:<span class="lineCov"> 887 : if ( (enc_mode_str_pt-&gt;val == enc_mode)</span> -<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : &amp;&amp; (enc_mode_str_pt-&gt;supported == FKO_ENC_MODE_SUPPORTED) )</span> -<span class="lineNum"> 410 </span> : : { -<span class="lineNum"> 411 </span> :<span class="lineCov"> 801 : strlcpy(enc_mode_str, enc_mode_str_pt-&gt;str, enc_mode_size);</span> -<span class="lineNum"> 412 </span> :<span class="lineCov"> 801 : enc_mode_error = 0;</span> -<span class="lineNum"> 413 </span> :<span class="lineCov"> 801 : break;</span> -<span class="lineNum"> 414 </span> : : } -<span class="lineNum"> 415 </span> : : } -<span class="lineNum"> 416 </span> : : -<span class="lineNum"> 417 </span> :<span class="lineCov"> 801 : return enc_mode_error;</span> -<span class="lineNum"> 418 </span> : : } -<a name="419"><span class="lineNum"> 419 </span> : : </a> -<span class="lineNum"> 420 </span> : : int -<span class="lineNum"> 421 </span> :<span class="lineCov"> 20672 : strtol_wrapper(const char * const str, const int min,</span> -<span class="lineNum"> 422 </span> : : const int max, const int exit_upon_err, int *err) -<span class="lineNum"> 423 </span> : : { -<span class="lineNum"> 424 </span> : : int val; -<span class="lineNum"> 425 </span> : : -<span class="lineNum"> 426 </span> :<span class="lineCov"> 20672 : errno = 0;</span> -<span class="lineNum"> 427 </span> :<span class="lineCov"> 20672 : *err = FKO_SUCCESS;</span> -<span class="lineNum"> 428 </span> : : -<span class="lineNum"> 429 </span> :<span class="lineCov"> 20672 : val = strtol(str, (char **) NULL, 10);</span> -<span class="lineNum"> 430 </span> : : -<span class="lineNum"> 431 </span>[<span class="branchCov" title="Branch 0 was taken 20501 times"> + </span><span class="branchCov" title="Branch 1 was taken 171 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 20501 times"> + </span>]:<span class="lineCov"> 20672 : if ((errno == ERANGE || (errno != 0 &amp;&amp; val == 0)))</span> -<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] -<span class="lineNum"> 432 </span> : : { -<span class="lineNum"> 433 </span> :<span class="lineCov"> 171 : *err = errno;</span> -<span class="lineNum"> 434 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 171 times"> + </span>]:<span class="lineCov"> 171 : if(exit_upon_err == EXIT_UPON_ERR)</span> -<span class="lineNum"> 435 </span> : : { -<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : perror(&quot;strtol&quot;);</span> -<span class="lineNum"> 437 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] Value %d out of range [(%d)-(%d)]\n&quot;,</span> -<span class="lineNum"> 438 </span> : : val, min, max); -<span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 440 </span> : : } -<span class="lineNum"> 441 </span> : : } -<span class="lineNum"> 442 </span> : : -<span class="lineNum"> 443 </span> [<span class="branchCov" title="Branch 0 was taken 222 times"> + </span><span class="branchCov" title="Branch 1 was taken 20450 times"> + </span>]:<span class="lineCov"> 20672 : if(val &lt; min)</span> -<span class="lineNum"> 444 </span> : : { -<span class="lineNum"> 445 </span> :<span class="lineCov"> 222 : *err = FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN;</span> -<span class="lineNum"> 446 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 222 times"> + </span>]:<span class="lineCov"> 222 : if(exit_upon_err == EXIT_UPON_ERR)</span> -<span class="lineNum"> 447 </span> : : { -<span class="lineNum"> 448 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] Value %d out of range [(%d)-(%d)]\n&quot;,</span> -<span class="lineNum"> 449 </span> : : val, min, max); -<span class="lineNum"> 450 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 451 </span> : : } -<span class="lineNum"> 452 </span> : : } -<span class="lineNum"> 453 </span> : : -<span class="lineNum"> 454 </span> : : /* allow max == -1 to be an exception where we don't care about the -<span class="lineNum"> 455 </span> : : * maximum - note that the ERANGE check is still in place above -<span class="lineNum"> 456 </span> : : */ -<span class="lineNum"> 457 </span> [<span class="branchCov" title="Branch 0 was taken 2008 times"> + </span><span class="branchCov" title="Branch 1 was taken 18664 times"> + </span>]:<span class="lineCov"> 20672 : if((max &gt;= 0) &amp;&amp; (val &gt; max))</span> -<span class="lineNum"> 458 </span> : : { -<span class="lineNum"> 459 </span> :<span class="lineCov"> 2008 : *err = FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX;</span> -<span class="lineNum"> 460 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2008 times"> + </span>]:<span class="lineCov"> 2008 : if(exit_upon_err == EXIT_UPON_ERR)</span> -<span class="lineNum"> 461 </span> : : { -<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] Value %d out of range [(%d)-(%d)]\n&quot;,</span> -<span class="lineNum"> 463 </span> : : val, min, max); -<span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 465 </span> : : } -<span class="lineNum"> 466 </span> : : } -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 469 </span> : : fiu_return_on(&quot;strtol_wrapper_lt_min&quot;, -<span class="lineNum"> 470 </span> : : FKO_ERROR_INVALID_DATA_UTIL_STRTOL_LT_MIN); -<span class="lineNum"> 471 </span> : : fiu_return_on(&quot;strtol_wrapper_gt_max&quot;, -<span class="lineNum"> 472 </span> : : FKO_ERROR_INVALID_DATA_UTIL_STRTOL_GT_MAX); -<span class="lineNum"> 473 </span> : : #endif -<span class="lineNum"> 474 </span> : : -<span class="lineNum"> 475 </span> :<span class="lineCov"> 20672 : return val;</span> -<span class="lineNum"> 476 </span> : : } -<span class="lineNum"> 477 </span> : : -<a name="478"><span class="lineNum"> 478 </span> : : /* zero out a buffer before free()</a> -<span class="lineNum"> 479 </span> : : */ -<span class="lineNum"> 480 </span> :<span class="lineCov"> 5489 : int zero_free(char *buf, int len)</span> -<span class="lineNum"> 481 </span> : : { -<span class="lineNum"> 482 </span> :<span class="lineCov"> 5489 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 483 </span> : : -<span class="lineNum"> 484 </span> [<span class="branchCov" title="Branch 0 was taken 5489 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 5489 : if(buf == NULL)</span> -<span class="lineNum"> 485 </span> : : return res; -<span class="lineNum"> 486 </span> : : -<span class="lineNum"> 487 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 5489 times"> + </span>]:<span class="lineCov"> 5489 : if(len == 0)</span> -<span class="lineNum"> 488 </span> : : { -<span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : free(buf); /* always free() if buf != NULL */</span> -<span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 491 </span> : : } -<span class="lineNum"> 492 </span> : : -<span class="lineNum"> 493 </span> :<span class="lineCov"> 5489 : res = zero_buf(buf, len);</span> -<span class="lineNum"> 494 </span> : : -<span class="lineNum"> 495 </span> :<span class="lineCov"> 5489 : free(buf);</span> -<span class="lineNum"> 496 </span> : : -<span class="lineNum"> 497 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 498 </span> : : fiu_return_on(&quot;zero_free_err&quot;, FKO_ERROR_ZERO_OUT_DATA); -<span class="lineNum"> 499 </span> : : #endif -<span class="lineNum"> 500 </span> : : -<span class="lineNum"> 501 </span> :<span class="lineCov"> 5489 : return res;</span> -<span class="lineNum"> 502 </span> : : } -<span class="lineNum"> 503 </span> : : -<span class="lineNum"> 504 </span> : : /* zero out sensitive information in a way that isn't optimized out by the compiler -<span class="lineNum"> 505 </span> : : * since we force a comparision and return an error if there is a problem (though -<span class="lineNum"> 506 </span> : : * the caller should do something with this information too). -<a name="507"><span class="lineNum"> 507 </span> : : */</a> -<span class="lineNum"> 508 </span> : : int -<span class="lineNum"> 509 </span> :<span class="lineCov"> 37967 : zero_buf(char *buf, int len)</span> -<span class="lineNum"> 510 </span> : : { -<span class="lineNum"> 511 </span> :<span class="lineCov"> 37967 : int i, res = FKO_SUCCESS;</span> -<span class="lineNum"> 512 </span> : : -<span class="lineNum"> 513 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 514 </span> : : fiu_return_on(&quot;zero_buf_err&quot;, FKO_ERROR_ZERO_OUT_DATA); -<span class="lineNum"> 515 </span> : : #endif -<span class="lineNum"> 516 </span> : : -<span class="lineNum"> 517 </span> [<span class="branchCov" title="Branch 0 was taken 37967 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 37967 : if(buf == NULL || len == 0)</span> -<span class="lineNum"> 518 </span> : : return res; -<span class="lineNum"> 519 </span> : : -<span class="lineNum"> 520 </span> [<span class="branchCov" title="Branch 0 was taken 37967 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 37967 : if(len &lt; 0 || len &gt; MAX_SPA_ENCODED_MSG_SIZE)</span> -<span class="lineNum"> 521 </span> : : return FKO_ERROR_ZERO_OUT_DATA; -<span class="lineNum"> 522 </span> : : -<span class="lineNum"> 523 </span> [<span class="branchCov" title="Branch 0 was taken 2560399 times"> + </span><span class="branchCov" title="Branch 1 was taken 37967 times"> + </span>]:<span class="lineCov"> 2598366 : for(i=0; i &lt; len; i++)</span> -<span class="lineNum"> 524 </span> :<span class="lineCov"> 2560399 : buf[i] = 0x0;</span> -<span class="lineNum"> 525 </span> : : -<span class="lineNum"> 526 </span> [<span class="branchCov" title="Branch 0 was taken 2560399 times"> + </span><span class="branchCov" title="Branch 1 was taken 37967 times"> + </span>]:<span class="lineCov"> 2598366 : for(i=0; i &lt; len; i++)</span> -<span class="lineNum"> 527 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2560399 times"> + </span>]:<span class="lineCov"> 2560399 : if(buf[i] != 0x0)</span> -<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : res = FKO_ERROR_ZERO_OUT_DATA;</span> -<span class="lineNum"> 529 </span> : : -<span class="lineNum"> 530 </span> :<span class="lineCov"> 37967 : return res;</span> -<span class="lineNum"> 531 </span> : : } -<span class="lineNum"> 532 </span> : : -<span class="lineNum"> 533 </span> : : #if defined(WIN32) || !defined(HAVE_STRNDUP) -<span class="lineNum"> 534 </span> : : /* Windows does not have strndup, so we well implement it here. -<span class="lineNum"> 535 </span> : : * This was the Public Domain C Library (PDCLib). -<span class="lineNum"> 536 </span> : : */ -<span class="lineNum"> 537 </span> : : char -<span class="lineNum"> 538 </span> : : *strndup( const char * s, size_t len ) -<span class="lineNum"> 539 </span> : : { -<span class="lineNum"> 540 </span> : : char* ns = NULL; -<span class="lineNum"> 541 </span> : : if(s) { -<span class="lineNum"> 542 </span> : : ns = calloc(1, len + 1); -<span class="lineNum"> 543 </span> : : if(ns) { -<span class="lineNum"> 544 </span> : : ns[len] = 0; -<span class="lineNum"> 545 </span> : : // strncpy to be pedantic about modification in multithreaded -<span class="lineNum"> 546 </span> : : // applications -<span class="lineNum"> 547 </span> : : return strncpy(ns, s, len); -<span class="lineNum"> 548 </span> : : } -<span class="lineNum"> 549 </span> : : } -<span class="lineNum"> 550 </span> : : return ns; -<span class="lineNum"> 551 </span> : : } -<span class="lineNum"> 552 </span> : : #endif -<span class="lineNum"> 553 </span> : : -<span class="lineNum"> 554 </span> : : /** -<span class="lineNum"> 555 </span> : : * @brief Add a printf style message to a buffer -<span class="lineNum"> 556 </span> : : * -<span class="lineNum"> 557 </span> : : * This function allows to append a printf style message to a buffer -<span class="lineNum"> 558 </span> : : * and prevents buffer overflow by taking care of the size the buffer. -<span class="lineNum"> 559 </span> : : * It returns the number of bytes really written to the buffer. -<span class="lineNum"> 560 </span> : : * Thus if an error is encoutered during the process the number of bytes -<span class="lineNum"> 561 </span> : : * written is set to 0. This way the user knows exactly how many bytes -<span class="lineNum"> 562 </span> : : * can be appended afterwards. -<span class="lineNum"> 563 </span> : : * -<span class="lineNum"> 564 </span> : : * @param buf Buffer to write the formated message to -<span class="lineNum"> 565 </span> : : * @param buf_size Maximum number of bytes to write to the buffer -<span class="lineNum"> 566 </span> : : * @param msg Message to format and to append to the buffer -<span class="lineNum"> 567 </span> : : * -<span class="lineNum"> 568 </span> : : * @return the number of bytes written to the buffer -<a name="569"><span class="lineNum"> 569 </span> : : */</a> -<span class="lineNum"> 570 </span> : : static int -<span class="lineNum"> 571 </span> :<span class="lineCov"> 14418 : append_msg_to_buf(char *buf, size_t buf_size, const char* msg, ...)</span> -<span class="lineNum"> 572 </span> : : { -<span class="lineNum"> 573 </span> :<span class="lineCov"> 14418 : int bytes_written = 0; /* Number of bytes written to buf */</span> -<span class="lineNum"> 574 </span> : : va_list ap; -<span class="lineNum"> 575 </span> : : -<span class="lineNum"> 576 </span> : : /* Check if the buffer is valid */ -<span class="lineNum"> 577 </span> [<span class="branchCov" title="Branch 0 was taken 14418 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 14418 : if (buf_size &gt; 0)</span> -<span class="lineNum"> 578 </span> : : { -<span class="lineNum"> 579 </span> :<span class="lineCov"> 14418 : va_start(ap, msg);</span> -<span class="lineNum"> 580 </span> : : -<span class="lineNum"> 581 </span> : : /* Format the message like a printf message */ -<span class="lineNum"> 582 </span> :<span class="lineCov"> 14418 : bytes_written = vsnprintf(buf, buf_size, msg, ap);</span> -<span class="lineNum"> 583 </span> : : -<span class="lineNum"> 584 </span> : : /* It looks like the message has been truncated or an error occured*/ -<span class="lineNum"> 585 </span> [<span class="branchCov" title="Branch 0 was taken 14418 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 14418 : if (bytes_written &lt; 0)</span> -<span class="lineNum"> 586 </span> : : bytes_written = 0; -<span class="lineNum"> 587 </span> : : -<span class="lineNum"> 588 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 14418 times"> + </span>]:<span class="lineCov"> 14418 : else if (bytes_written &gt;= buf_size)</span> -<span class="lineNum"> 589 </span> :<span class="lineNoCov"> 0 : bytes_written = buf_size;</span> -<span class="lineNum"> 590 </span> : : -<span class="lineNum"> 591 </span> : : /* The messsage has been formatted correctly */ -<span class="lineNum"> 592 </span> : : else; -<span class="lineNum"> 593 </span> : : -<span class="lineNum"> 594 </span> :<span class="lineCov"> 14418 : va_end(ap);</span> -<span class="lineNum"> 595 </span> : : } -<span class="lineNum"> 596 </span> : : -<span class="lineNum"> 597 </span> : : /* No valid buffer has been supplied, thus we do not write anything */ -<span class="lineNum"> 598 </span> : : else; -<span class="lineNum"> 599 </span> : : -<span class="lineNum"> 600 </span> : : /* Return the number of bytes written to the buffer */ -<span class="lineNum"> 601 </span> :<span class="lineCov"> 14418 : return bytes_written;</span> -<span class="lineNum"> 602 </span> : : } -<span class="lineNum"> 603 </span> : : -<span class="lineNum"> 604 </span> : : /* Determine if a buffer contains only characters from the base64 -<span class="lineNum"> 605 </span> : : * encoding set -<a name="606"><span class="lineNum"> 606 </span> : : */</a> -<span class="lineNum"> 607 </span> : : int -<span class="lineNum"> 608 </span> :<span class="lineCov"> 7677 : is_base64(const unsigned char * const buf, const unsigned short int len)</span> -<span class="lineNum"> 609 </span> : : { -<span class="lineNum"> 610 </span> : : unsigned short int i; -<span class="lineNum"> 611 </span> :<span class="lineCov"> 7677 : int rv = 1;</span> -<span class="lineNum"> 612 </span> : : -<span class="lineNum"> 613 </span> [<span class="branchCov" title="Branch 0 was taken 169585 times"> + </span><span class="branchCov" title="Branch 1 was taken 4397 times"> + </span>]:<span class="lineCov"> 173982 : for(i=0; i&lt;len; i++)</span> -<span class="lineNum"> 614 </span> : : { -<span class="lineNum"> 615 </span>[<span class="branchCov" title="Branch 1 was taken 11928 times"> + </span><span class="branchCov" title="Branch 2 was taken 157657 times"> + </span>][<span class="branchCov" title="Branch 3 was taken 9892 times"> + </span><span class="branchCov" title="Branch 4 was taken 2036 times"> + </span>]:<span class="lineCov"> 169585 : if(!(isalnum(buf[i]) || buf[i] == '/' || buf[i] == '+' || buf[i] == '='))</span> -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 5 was taken 5176 times"> + </span><span class="branchCov" title="Branch 6 was taken 4716 times"> + </span>][<span class="branchCov" title="Branch 7 was taken 1896 times"> + </span><span class="branchCov" title="Branch 8 was taken 3280 times"> + </span>] -<span class="lineNum"> 616 </span> : : { -<span class="lineNum"> 617 </span> : : rv = 0; -<span class="lineNum"> 618 </span> : : break; -<span class="lineNum"> 619 </span> : : } -<span class="lineNum"> 620 </span> : : } -<span class="lineNum"> 621 </span> : : -<span class="lineNum"> 622 </span> :<span class="lineCov"> 7677 : return rv;</span> -<span class="lineNum"> 623 </span> : : } -<span class="lineNum"> 624 </span> : : -<span class="lineNum"> 625 </span> : : /** -<span class="lineNum"> 626 </span> : : * @brief Dump a FKO context to a buffer -<span class="lineNum"> 627 </span> : : * -<span class="lineNum"> 628 </span> : : * This function parses a FKO context and decodes each field to dump them to a -<span class="lineNum"> 629 </span> : : * buffer in a comprehensible way. -<span class="lineNum"> 630 </span> : : * -<span class="lineNum"> 631 </span> : : * @param ctx FKO context to dump -<span class="lineNum"> 632 </span> : : * @param dump_buf Buffer where to store the dump of the context -<span class="lineNum"> 633 </span> : : * @param dump_buf_len Number of bytes available in the dump_buf array -<span class="lineNum"> 634 </span> : : * -<span class="lineNum"> 635 </span> : : * @return a FKO error code. FKO_SUCCESS if successful. -<a name="636"><span class="lineNum"> 636 </span> : : */</a> -<span class="lineNum"> 637 </span> : : int -<span class="lineNum"> 638 </span> :<span class="lineCov"> 801 : dump_ctx_to_buffer(fko_ctx_t ctx, char *dump_buf, size_t dump_buf_len)</span> -<span class="lineNum"> 639 </span> : : { -<span class="lineNum"> 640 </span> :<span class="lineCov"> 801 : int cp = 0;</span> -<span class="lineNum"> 641 </span> :<span class="lineCov"> 801 : int err = FKO_LAST_ERROR;</span> -<span class="lineNum"> 642 </span> : : -<span class="lineNum"> 643 </span> :<span class="lineCov"> 801 : char *rand_val = NULL;</span> -<span class="lineNum"> 644 </span> :<span class="lineCov"> 801 : char *username = NULL;</span> -<span class="lineNum"> 645 </span> :<span class="lineCov"> 801 : char *version = NULL;</span> -<span class="lineNum"> 646 </span> :<span class="lineCov"> 801 : char *spa_message = NULL;</span> -<span class="lineNum"> 647 </span> :<span class="lineCov"> 801 : char *nat_access = NULL;</span> -<span class="lineNum"> 648 </span> :<span class="lineCov"> 801 : char *server_auth = NULL;</span> -<span class="lineNum"> 649 </span> :<span class="lineCov"> 801 : char *enc_data = NULL;</span> -<span class="lineNum"> 650 </span> :<span class="lineCov"> 801 : char *hmac_data = NULL;</span> -<span class="lineNum"> 651 </span> :<span class="lineCov"> 801 : char *spa_digest = NULL;</span> -<span class="lineNum"> 652 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 653 </span> :<span class="lineCov"> 801 : char *gpg_signer = NULL;</span> -<span class="lineNum"> 654 </span> :<span class="lineCov"> 801 : char *gpg_recip = NULL;</span> -<span class="lineNum"> 655 </span> :<span class="lineCov"> 801 : char *gpg_sig_id = NULL;</span> -<span class="lineNum"> 656 </span> :<span class="lineCov"> 801 : unsigned char gpg_sig_verify = 0;</span> -<span class="lineNum"> 657 </span> :<span class="lineCov"> 801 : unsigned char gpg_ignore_verify = 0;</span> -<span class="lineNum"> 658 </span> :<span class="lineCov"> 801 : char *gpg_sig_fpr = NULL;</span> -<span class="lineNum"> 659 </span> :<span class="lineCov"> 801 : char *gpg_home_dir = NULL;</span> -<span class="lineNum"> 660 </span> :<span class="lineCov"> 801 : char *gpg_exe = NULL;</span> -<span class="lineNum"> 661 </span> :<span class="lineCov"> 801 : int gpg_sigsum = -1;</span> -<span class="lineNum"> 662 </span> :<span class="lineCov"> 801 : int gpg_sig_stat = -1;</span> -<span class="lineNum"> 663 </span> : : #endif -<span class="lineNum"> 664 </span> :<span class="lineCov"> 801 : char *spa_data = NULL;</span> -<span class="lineNum"> 665 </span> :<span class="lineCov"> 801 : char digest_str[24] = {0};</span> -<span class="lineNum"> 666 </span> :<span class="lineCov"> 801 : char hmac_str[24] = {0};</span> -<span class="lineNum"> 667 </span> :<span class="lineCov"> 801 : char enc_mode_str[FKO_ENCRYPTION_MODE_BUFSIZE] = {0};</span> -<span class="lineNum"> 668 </span> : : -<span class="lineNum"> 669 </span> :<span class="lineCov"> 801 : time_t timestamp = 0;</span> -<span class="lineNum"> 670 </span> :<span class="lineCov"> 801 : short msg_type = -1;</span> -<span class="lineNum"> 671 </span> :<span class="lineCov"> 801 : short digest_type = -1;</span> -<span class="lineNum"> 672 </span> :<span class="lineCov"> 801 : short hmac_type = -1;</span> -<span class="lineNum"> 673 </span> :<span class="lineCov"> 801 : short encryption_type = -1;</span> -<span class="lineNum"> 674 </span> :<span class="lineCov"> 801 : int encryption_mode = -1;</span> -<span class="lineNum"> 675 </span> :<span class="lineCov"> 801 : int client_timeout = -1;</span> -<span class="lineNum"> 676 </span> : : -<span class="lineNum"> 677 </span> : : /* Zero-ed the buffer */ -<span class="lineNum"> 678 </span> : : memset(dump_buf, 0, dump_buf_len); -<span class="lineNum"> 679 </span> : : -<span class="lineNum"> 680 </span> : : /* Make sure the FKO context is initialized before printing it */ -<span class="lineNum"> 681 </span>[<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 801 : if(!CTX_INITIALIZED(ctx))</span> -<span class="lineNum"> 682 </span> : : err = FKO_ERROR_CTX_NOT_INITIALIZED; -<span class="lineNum"> 683 </span> : : -<span class="lineNum"> 684 </span> : : else -<span class="lineNum"> 685 </span> : : { -<span class="lineNum"> 686 </span> : : /* Parse the FKO context and collect data */ -<span class="lineNum"> 687 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_rand_value(ctx, &amp;rand_val));</span> -<span class="lineNum"> 688 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_username(ctx, &amp;username));</span> -<span class="lineNum"> 689 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_timestamp(ctx, &amp;timestamp));</span> -<span class="lineNum"> 690 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_version(ctx, &amp;version));</span> -<span class="lineNum"> 691 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_message_type(ctx, &amp;msg_type));</span> -<span class="lineNum"> 692 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_message(ctx, &amp;spa_message));</span> -<span class="lineNum"> 693 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_nat_access(ctx, &amp;nat_access));</span> -<span class="lineNum"> 694 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_server_auth(ctx, &amp;server_auth));</span> -<span class="lineNum"> 695 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_client_timeout(ctx, &amp;client_timeout));</span> -<span class="lineNum"> 696 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_digest_type(ctx, &amp;digest_type));</span> -<span class="lineNum"> 697 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_hmac_type(ctx, &amp;hmac_type));</span> -<span class="lineNum"> 698 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_encryption_type(ctx, &amp;encryption_type));</span> -<span class="lineNum"> 699 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_encryption_mode(ctx, &amp;encryption_mode));</span> -<span class="lineNum"> 700 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_encoded_data(ctx, &amp;enc_data));</span> -<span class="lineNum"> 701 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_hmac(ctx, &amp;hmac_data));</span> -<span class="lineNum"> 702 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_digest(ctx, &amp;spa_digest));</span> -<span class="lineNum"> 703 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : RETURN_ON_FKO_ERROR(err, fko_get_spa_data(ctx, &amp;spa_data));</span> -<span class="lineNum"> 704 </span> : : -<span class="lineNum"> 705 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 706 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : if(encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> -<span class="lineNum"> 707 </span> : : { -<span class="lineNum"> 708 </span> : : /* Populate GPG variables -<span class="lineNum"> 709 </span> : : */ -<span class="lineNum"> 710 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_signer(ctx, &amp;gpg_signer));</span> -<span class="lineNum"> 711 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_recipient(ctx, &amp;gpg_recip));</span> -<span class="lineNum"> 712 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_signature_verify(ctx, &amp;gpg_sig_verify));</span> -<span class="lineNum"> 713 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_ignore_verify_error(ctx, &amp;gpg_ignore_verify));</span> -<span class="lineNum"> 714 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_home_dir(ctx, &amp;gpg_home_dir));</span> -<span class="lineNum"> 715 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : RETURN_ON_FKO_ERROR(err, fko_get_gpg_exe(ctx, &amp;gpg_exe));</span> -<span class="lineNum"> 716 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_id(ctx, &amp;gpg_sig_id) != FKO_SUCCESS)</span> -<span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : gpg_sig_id = NULL;</span> -<span class="lineNum"> 718 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_summary(ctx, &amp;gpg_sigsum) != FKO_SUCCESS)</span> -<span class="lineNum"> 719 </span> :<span class="lineNoCov"> 0 : gpg_sigsum = -1;</span> -<span class="lineNum"> 720 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_status(ctx, &amp;gpg_sig_stat) != FKO_SUCCESS)</span> -<span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : gpg_sig_stat = -1;</span> -<span class="lineNum"> 722 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_get_gpg_signature_fpr(ctx, &amp;gpg_sig_fpr) != FKO_SUCCESS)</span> -<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : gpg_sig_fpr = NULL;</span> -<span class="lineNum"> 724 </span> : : } -<span class="lineNum"> 725 </span> : : #endif -<span class="lineNum"> 726 </span> : : -<span class="lineNum"> 727 </span> : : /* Convert the digest integer to a string */ -<span class="lineNum"> 728 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : if (digest_inttostr(digest_type, digest_str, sizeof(digest_str)) != 0)</span> -<span class="lineNum"> 729 </span> : : return (FKO_ERROR_INVALID_DIGEST_TYPE); -<span class="lineNum"> 730 </span> : : -<span class="lineNum"> 731 </span> : : /* Convert the encryption mode integer to a string */ -<span class="lineNum"> 732 </span> [<span class="branchCov" title="Branch 1 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 801 : if (enc_mode_inttostr(encryption_mode, enc_mode_str, sizeof(enc_mode_str)) != 0)</span> -<span class="lineNum"> 733 </span> : : return (FKO_ERROR_INVALID_ENCRYPTION_TYPE); -<span class="lineNum"> 734 </span> : : -<span class="lineNum"> 735 </span> : : /* Convert the HMAC digest integer to a string if a HMAC message is available */ -<span class="lineNum"> 736 </span> [<span class="branchCov" title="Branch 0 was taken 664 times"> + </span><span class="branchCov" title="Branch 1 was taken 137 times"> + </span>]:<span class="lineCov"> 801 : if (ctx-&gt;msg_hmac_len != 0)</span> -<span class="lineNum"> 737 </span> : : { -<span class="lineNum"> 738 </span> [<span class="branchCov" title="Branch 1 was taken 664 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 664 : if (hmac_digest_inttostr(hmac_type, hmac_str, sizeof(hmac_str)) != 0)</span> -<span class="lineNum"> 739 </span> : : return (FKO_ERROR_UNSUPPORTED_HMAC_MODE); -<span class="lineNum"> 740 </span> : : } -<span class="lineNum"> 741 </span> : : -<span class="lineNum"> 742 </span> : : /* Fill in the buffer to dump */ -<span class="lineNum"> 743 </span> :<span class="lineCov"> 801 : cp = append_msg_to_buf(dump_buf, dump_buf_len, &quot;SPA Field Values:\n=================\n&quot;);</span> -<span class="lineNum"> 744 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Random Value: %s\n&quot;, rand_val == NULL ? NULL_STRING : rand_val);</span> -<span class="lineNum"> 745 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Username: %s\n&quot;, username == NULL ? NULL_STRING : username);</span> -<span class="lineNum"> 746 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Timestamp: %u\n&quot;, (unsigned int) timestamp);</span> -<span class="lineNum"> 747 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; FKO Version: %s\n&quot;, version == NULL ? NULL_STRING : version);</span> -<span class="lineNum"> 748 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Message Type: %i (%s)\n&quot;, msg_type, msg_type_inttostr(msg_type));</span> -<span class="lineNum"> 749 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Message String: %s\n&quot;, spa_message == NULL ? NULL_STRING : spa_message);</span> -<span class="lineNum"> 750 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Nat Access: %s\n&quot;, nat_access == NULL ? NULL_STRING : nat_access);</span> -<span class="lineNum"> 751 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Server Auth: %s\n&quot;, server_auth == NULL ? NULL_STRING : server_auth);</span> -<span class="lineNum"> 752 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Client Timeout: %u\n&quot;, client_timeout);</span> -<span class="lineNum"> 753 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Digest Type: %u (%s)\n&quot;, digest_type, digest_str);</span> -<span class="lineNum"> 754 </span> [<span class="branchCov" title="Branch 0 was taken 94 times"> + </span><span class="branchCov" title="Branch 1 was taken 707 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; HMAC Type: %u (%s)\n&quot;, hmac_type, hmac_type == 0 ? &quot;None&quot; : hmac_str);</span> -<span class="lineNum"> 755 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;Encryption Type: %d (%s)\n&quot;, encryption_type, enc_type_inttostr(encryption_type));</span> -<span class="lineNum"> 756 </span> :<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;Encryption Mode: %d (%s)\n&quot;, encryption_mode, enc_mode_str);</span> -<span class="lineNum"> 757 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 758 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 801 times"> + </span>]:<span class="lineCov"> 801 : if(encryption_mode == FKO_ENC_MODE_ASYMMETRIC)</span> -<span class="lineNum"> 759 </span> : : { -<span class="lineNum"> 760 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG signer: %s\n&quot;, gpg_signer == NULL ? NULL_STRING : gpg_signer);</span> -<span class="lineNum"> 761 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG recipient: %s\n&quot;, gpg_recip == NULL ? NULL_STRING : gpg_recip);</span> -<span class="lineNum"> 762 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig verify: %s\n&quot;, gpg_sig_verify == 0 ? &quot;No&quot; : &quot;Yes&quot;);</span> -<span class="lineNum"> 763 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG ignore sig: %s\n&quot;, gpg_ignore_verify == 0 ? &quot;No&quot; : &quot;Yes&quot;);</span> -<span class="lineNum"> 764 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig ID: %s\n&quot;, gpg_sig_id == NULL ? NULL_STRING : gpg_sig_id);</span> -<span class="lineNum"> 765 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig fpr: %s\n&quot;, gpg_sig_fpr == NULL ? NULL_STRING : gpg_sig_fpr);</span> -<span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;GPG sig summary: %d\n&quot;, gpg_sigsum);</span> -<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG sig status: %d\n&quot;, gpg_sig_stat);</span> -<span class="lineNum"> 768 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG home dir: %s\n&quot;, gpg_home_dir == NULL ? NULL_STRING : gpg_home_dir);</span> -<span class="lineNum"> 769 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; GPG exe: %s\n&quot;, gpg_exe == NULL ? GPG_EXE : gpg_exe);</span> -<span class="lineNum"> 770 </span> : : } -<span class="lineNum"> 771 </span> : : #endif -<span class="lineNum"> 772 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Encoded Data: %s\n&quot;, enc_data == NULL ? NULL_STRING : enc_data);</span> -<span class="lineNum"> 773 </span> [<span class="branchCov" title="Branch 0 was taken 801 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot;SPA Data Digest: %s\n&quot;, spa_digest == NULL ? NULL_STRING : spa_digest);</span> -<span class="lineNum"> 774 </span> [<span class="branchCov" title="Branch 0 was taken 664 times"> + </span><span class="branchCov" title="Branch 1 was taken 137 times"> + </span>]:<span class="lineCov"> 801 : cp += append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; HMAC: %s\n&quot;, hmac_data == NULL ? NULL_STRING : hmac_data);</span> -<span class="lineNum"> 775 </span> :<span class="lineCov"> 801 : append_msg_to_buf(dump_buf+cp, dump_buf_len-cp, &quot; Final SPA Data: %s\n&quot;, spa_data);</span> -<span class="lineNum"> 776 </span> : : -<span class="lineNum"> 777 </span> :<span class="lineCov"> 801 : err = FKO_SUCCESS;</span> -<span class="lineNum"> 778 </span> : : } -<span class="lineNum"> 779 </span> : : -<span class="lineNum"> 780 </span> :<span class="lineCov"> 801 : return (err);</span> -<span class="lineNum"> 781 </span> : : } -<span class="lineNum"> 782 </span> : : -<span class="lineNum"> 783 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html deleted file mode 100644 index 014da9c9..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func-sort-c.html +++ /dev/null @@ -1,105 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/gpgme_funcs.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - gpgme_funcs.c<span style="font-size: 80%;"> (<a href="gpgme_funcs.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntry">190</td> - <td class="headerCovTableEntryLo">14.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntry">86</td> - <td class="headerCovTableEntryLo">10.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="gpgme_funcs.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#182">get_gpg_key</a></td> - <td class="coverFnHi">2</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#37">init_gpgme</a></td> - <td class="coverFnHi">2</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#415">gpgme_decrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#109">process_sigs.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#271">gpgme_encrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#86">my_passphrase_cb</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html deleted file mode 100644 index 8a0da44b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.func.html +++ /dev/null @@ -1,105 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/gpgme_funcs.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - gpgme_funcs.c<span style="font-size: 80%;"> (<a href="gpgme_funcs.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntry">190</td> - <td class="headerCovTableEntryLo">14.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntry">86</td> - <td class="headerCovTableEntryLo">10.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="gpgme_funcs.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#182">get_gpg_key</a></td> - <td class="coverFnHi">2</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#415">gpgme_decrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#271">gpgme_encrypt</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#37">init_gpgme</a></td> - <td class="coverFnHi">2</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#86">my_passphrase_cb</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="gpgme_funcs.c.gcov.html#109">process_sigs.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html deleted file mode 100644 index 02099795..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/gpgme_funcs.c.gcov.html +++ /dev/null @@ -1,627 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/gpgme_funcs.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - gpgme_funcs.c<span style="font-size: 80%;"> (source / <a href="gpgme_funcs.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">28</td> - <td class="headerCovTableEntry">190</td> - <td class="headerCovTableEntryLo">14.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntry">86</td> - <td class="headerCovTableEntryLo">10.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: gpgme_funcs.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: gpgme-related functions for GPG encryptions support in libfko. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : -<span class="lineNum"> 32 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;fko.h&quot; -<span class="lineNum"> 34 </span> : : -<span class="lineNum"> 35 </span> : : #if HAVE_LIBGPGME -<span class="lineNum"> 36 </span> : : #include &quot;gpgme_funcs.h&quot; -<a name="37"><span class="lineNum"> 37 </span> : : </a> -<span class="lineNum"> 38 </span> : : int -<span class="lineNum"> 39 </span> :<span class="lineCov"> 2 : init_gpgme(fko_ctx_t fko_ctx)</span> -<span class="lineNum"> 40 </span> : : { -<span class="lineNum"> 41 </span> : : gpgme_error_t err; -<span class="lineNum"> 42 </span> : : -<span class="lineNum"> 43 </span> : : /* If we already have a context, we are done. -<span class="lineNum"> 44 </span> : : */ -<span class="lineNum"> 45 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(fko_ctx-&gt;have_gpgme_context)</span> -<span class="lineNum"> 46 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 47 </span> : : -<span class="lineNum"> 48 </span> : : /* Because the gpgme manual says you should. -<span class="lineNum"> 49 </span> : : */ -<span class="lineNum"> 50 </span> :<span class="lineCov"> 2 : gpgme_check_version(NULL);</span> -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> : : /* Check for OpenPGP support -<span class="lineNum"> 53 </span> : : */ -<span class="lineNum"> 54 </span> :<span class="lineCov"> 2 : err = gpgme_engine_check_version(GPGME_PROTOCOL_OpenPGP);</span> -<span class="lineNum"> 55 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 56 </span> : : { -<span class="lineNum"> 57 </span> : : /* GPG engine is not available. -<span class="lineNum"> 58 </span> : : */ -<span class="lineNum"> 59 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_NO_OPENPGP);</span> -<span class="lineNum"> 61 </span> : : } -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> : : /* Extract the current gpgme engine information. -<span class="lineNum"> 64 </span> : : */ -<span class="lineNum"> 65 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : gpgme_set_engine_info(</span> -<span class="lineNum"> 66 </span> : : GPGME_PROTOCOL_OpenPGP, -<span class="lineNum"> 67 </span> :<span class="lineCov"> 2 : (fko_ctx-&gt;gpg_exe != NULL) ? fko_ctx-&gt;gpg_exe : GPG_EXE,</span> -<span class="lineNum"> 68 </span> :<span class="lineCov"> 2 : fko_ctx-&gt;gpg_home_dir /* If this is NULL, the default is used */</span> -<span class="lineNum"> 69 </span> : : ); -<span class="lineNum"> 70 </span> : : -<span class="lineNum"> 71 </span> : : /* Create our gpgme context -<span class="lineNum"> 72 </span> : : */ -<span class="lineNum"> 73 </span> :<span class="lineCov"> 2 : err = gpgme_new(&amp;(fko_ctx-&gt;gpg_ctx));</span> -<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 75 </span> : : { -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CONTEXT);</span> -<span class="lineNum"> 78 </span> : : } -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> :<span class="lineCov"> 2 : fko_ctx-&gt;have_gpgme_context = 1;</span> -<span class="lineNum"> 81 </span> : : -<span class="lineNum"> 82 </span> :<span class="lineCov"> 2 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 83 </span> : : } -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> : : /* Callback function that supplies the password when gpgme needs it. -<a name="86"><span class="lineNum"> 86 </span> : : */</a> -<span class="lineNum"> 87 </span> : : gpgme_error_t -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : my_passphrase_cb(</span> -<span class="lineNum"> 89 </span> : : void *pw, const char *uid_hint, const char *passphrase_info, -<span class="lineNum"> 90 </span> : : int prev_was_bad, int fd) -<span class="lineNum"> 91 </span> : : { -<span class="lineNum"> 92 </span> : : /* We only need to try once as it is fed by the program -<span class="lineNum"> 93 </span> : : * (for now --DSS). -<span class="lineNum"> 94 </span> : : */ -<span class="lineNum"> 95 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(prev_was_bad)</span> -<span class="lineNum"> 96 </span> : : return(GPG_ERR_CANCELED); -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(fd, (const char*)pw, strlen((const char*)pw))</span> -<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : != strlen((const char*)pw))</span> -<span class="lineNum"> 100 </span> : : return(GPG_ERR_SYSTEM_ERROR); /* Must be a GPG error, but which one? */ -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(fd, &quot;\n&quot;, 1) != 1)</span> -<span class="lineNum"> 103 </span> : : return(GPG_ERR_SYSTEM_ERROR); /* Must be a GPG error, but which one? */ -<span class="lineNum"> 104 </span> : : -<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 106 </span> : : } -<span class="lineNum"> 107 </span> : : -<span class="lineNum"> 108 </span> : : /* Verify gpg signatures in a verify_result set. -<a name="109"><span class="lineNum"> 109 </span> : : */</a> -<span class="lineNum"> 110 </span> : : static int -<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : process_sigs(fko_ctx_t fko_ctx, gpgme_verify_result_t vres)</span> -<span class="lineNum"> 112 </span> : : { -<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : unsigned int sig_cnt = 0;</span> -<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : gpgme_signature_t sig = vres-&gt;signatures;</span> -<span class="lineNum"> 115 </span> : : fko_gpg_sig_t fgs; -<span class="lineNum"> 116 </span> : : -<span class="lineNum"> 117 </span> : : /* only want to see one signature (for now). -<span class="lineNum"> 118 </span> : : */ -<span class="lineNum"> 119 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!sig)</span> -<span class="lineNum"> 120 </span> : : return(FKO_ERROR_GPGME_NO_SIGNATURE); -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> : : /* Iterate over the sigs and store the info we are interested in -<span class="lineNum"> 123 </span> : : * to the context. -<span class="lineNum"> 124 </span> : : * -<span class="lineNum"> 125 </span> : : * NOTE: At present, we support only a single signature. However, -<span class="lineNum"> 126 </span> : : * that may change in a future release. We go a head and -<span class="lineNum"> 127 </span> : : * grab all signatures even though we will only use the first -<span class="lineNum"> 128 </span> : : * one. --DSS -<span class="lineNum"> 129 </span> : : */ -<span class="lineNum"> 130 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(sig != NULL)</span> -<span class="lineNum"> 131 </span> : : { -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : fgs = calloc(1, sizeof(struct fko_gpg_sig));</span> -<span class="lineNum"> 133 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgs == NULL)</span> -<span class="lineNum"> 134 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> : : /* Grab the summary and status values. -<span class="lineNum"> 137 </span> : : */ -<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : fgs-&gt;summary = sig-&gt;summary;</span> -<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : fgs-&gt;status = sig-&gt;status;</span> -<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : fgs-&gt;validity = sig-&gt;validity;</span> -<span class="lineNum"> 141 </span> : : -<span class="lineNum"> 142 </span> : : /* Grab the signature fingerprint. -<span class="lineNum"> 143 </span> : : */ -<span class="lineNum"> 144 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig-&gt;fpr != NULL)</span> -<span class="lineNum"> 145 </span> : : { -<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : fgs-&gt;fpr = strdup(sig-&gt;fpr);</span> -<span class="lineNum"> 147 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgs-&gt;fpr == NULL)</span> -<span class="lineNum"> 148 </span> : : { -<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : free(fgs);</span> -<span class="lineNum"> 150 </span> : : return(FKO_ERROR_MEMORY_ALLOCATION); -<span class="lineNum"> 151 </span> : : } -<span class="lineNum"> 152 </span> : : } -<span class="lineNum"> 153 </span> : : -<span class="lineNum"> 154 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig_cnt == 0)</span> -<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_sigs = fgs;</span> -<span class="lineNum"> 156 </span> : : else -<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_sigs-&gt;next = fgs;</span> -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : sig_cnt++;</span> -<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : sig = sig-&gt;next;</span> -<span class="lineNum"> 161 </span> : : } -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> : : /* If we are ignoring bad signatures, return success here. -<span class="lineNum"> 164 </span> : : */ -<span class="lineNum"> 165 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;ignore_gpg_sig_error != 0)</span> -<span class="lineNum"> 166 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 167 </span> : : -<span class="lineNum"> 168 </span> : : /* Otherwise, we check them here and respond accordingly. -<span class="lineNum"> 169 </span> : : */ -<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : fgs = fko_ctx-&gt;gpg_sigs;</span> -<span class="lineNum"> 171 </span> : : -<span class="lineNum"> 172 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fgs-&gt;status != GPG_ERR_NO_ERROR || fgs-&gt;validity &lt; 3) {</span> -<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = fgs-&gt;status;</span> -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> : : return(FKO_ERROR_GPGME_BAD_SIGNATURE); -<span class="lineNum"> 176 </span> : : } -<span class="lineNum"> 177 </span> : : -<span class="lineNum"> 178 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 179 </span> : : } -<span class="lineNum"> 180 </span> : : -<span class="lineNum"> 181 </span> : : /* Get the GPG key for the given name or ID. -<a name="182"><span class="lineNum"> 182 </span> : : */</a> -<span class="lineNum"> 183 </span> : : int -<span class="lineNum"> 184 </span> :<span class="lineCov"> 2 : get_gpg_key(fko_ctx_t fko_ctx, gpgme_key_t *mykey, const int signer)</span> -<span class="lineNum"> 185 </span> : : { -<span class="lineNum"> 186 </span> : : int res; -<span class="lineNum"> 187 </span> : : const char *name; -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> :<span class="lineCov"> 2 : gpgme_ctx_t list_ctx = NULL;</span> -<span class="lineNum"> 190 </span> :<span class="lineCov"> 2 : gpgme_key_t key = NULL;</span> -<span class="lineNum"> 191 </span> :<span class="lineCov"> 2 : gpgme_key_t key2 = NULL;</span> -<span class="lineNum"> 192 </span> : : gpgme_error_t err; -<span class="lineNum"> 193 </span> : : -<span class="lineNum"> 194 </span> : : /* Create a gpgme context for the list -<span class="lineNum"> 195 </span> : : */ -<span class="lineNum"> 196 </span> : : /* Initialize gpgme -<span class="lineNum"> 197 </span> : : */ -<span class="lineNum"> 198 </span> :<span class="lineCov"> 2 : res = init_gpgme(fko_ctx);</span> -<span class="lineNum"> 199 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 200 </span> : : { -<span class="lineNum"> 201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(signer)</span> -<span class="lineNum"> 202 </span> : : return(FKO_ERROR_GPGME_CONTEXT_SIGNER_KEY); -<span class="lineNum"> 203 </span> : : else -<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CONTEXT_RECIPIENT_KEY);</span> -<span class="lineNum"> 205 </span> : : } -<span class="lineNum"> 206 </span> : : -<span class="lineNum"> 207 </span> :<span class="lineCov"> 2 : list_ctx = fko_ctx-&gt;gpg_ctx;</span> -<span class="lineNum"> 208 </span> : : -<span class="lineNum"> 209 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if(signer)</span> -<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : name = fko_ctx-&gt;gpg_signer;</span> -<span class="lineNum"> 211 </span> : : else -<span class="lineNum"> 212 </span> :<span class="lineCov"> 2 : name = fko_ctx-&gt;gpg_recipient;</span> -<span class="lineNum"> 213 </span> : : -<span class="lineNum"> 214 </span> :<span class="lineCov"> 2 : err = gpgme_op_keylist_start(list_ctx, name, signer);</span> -<span class="lineNum"> 215 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : if (err)</span> -<span class="lineNum"> 216 </span> : : { -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : gpgme_release(list_ctx);</span> -<span class="lineNum"> 218 </span> : : -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(signer)</span> -<span class="lineNum"> 222 </span> : : return(FKO_ERROR_GPGME_SIGNER_KEYLIST_START); -<span class="lineNum"> 223 </span> : : else -<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_RECIPIENT_KEYLIST_START);</span> -<span class="lineNum"> 225 </span> : : } -<span class="lineNum"> 226 </span> : : -<span class="lineNum"> 227 </span> : : /* Grab the first key in the list (we hope it is the only one). -<span class="lineNum"> 228 </span> : : */ -<span class="lineNum"> 229 </span> :<span class="lineCov"> 2 : err = gpgme_op_keylist_next(list_ctx, &amp;key);</span> -<span class="lineNum"> 230 </span> [<span class="branchCov" title="Branch 1 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 2 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 231 </span> : : { -<span class="lineNum"> 232 </span> : : /* Key not found -<span class="lineNum"> 233 </span> : : */ -<span class="lineNum"> 234 </span> :<span class="lineCov"> 2 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 235 </span> : : -<span class="lineNum"> 236 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 2 : if(signer)</span> -<span class="lineNum"> 237 </span> : : return(FKO_ERROR_GPGME_SIGNER_KEY_NOT_FOUND); -<span class="lineNum"> 238 </span> : : else -<span class="lineNum"> 239 </span> :<span class="lineCov"> 2 : return(FKO_ERROR_GPGME_RECIPIENT_KEY_NOT_FOUND);</span> -<span class="lineNum"> 240 </span> : : } -<span class="lineNum"> 241 </span> : : -<span class="lineNum"> 242 </span> : : /* We try to get the next key match. If we do, then the name is -<span class="lineNum"> 243 </span> : : * ambiguous, so we return an error. -<span class="lineNum"> 244 </span> : : */ -<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_keylist_next(list_ctx, &amp;key2);</span> -<span class="lineNum"> 246 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) == GPG_ERR_NO_ERROR) /* Note: look for NO error */</span> -<span class="lineNum"> 247 </span> : : { -<span class="lineNum"> 248 </span> : : /* Ambiguous specfication of key -<span class="lineNum"> 249 </span> : : */ -<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(key);</span> -<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(key2);</span> -<span class="lineNum"> 252 </span> : : -<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 254 </span> : : -<span class="lineNum"> 255 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(signer)</span> -<span class="lineNum"> 256 </span> : : return(FKO_ERROR_GPGME_SIGNER_KEY_AMBIGUOUS); -<span class="lineNum"> 257 </span> : : else -<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_RECIPIENT_KEY_AMBIGUOUS);</span> -<span class="lineNum"> 259 </span> : : } -<span class="lineNum"> 260 </span> : : -<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : gpgme_op_keylist_end(list_ctx);</span> -<span class="lineNum"> 262 </span> : : -<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : gpgme_key_unref(key2);</span> -<span class="lineNum"> 264 </span> : : -<span class="lineNum"> 265 </span> :<span class="lineNoCov"> 0 : *mykey = key;</span> -<span class="lineNum"> 266 </span> : : -<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : return(FKO_SUCCESS);</span> -<span class="lineNum"> 268 </span> : : } -<span class="lineNum"> 269 </span> : : -<span class="lineNum"> 270 </span> : : /* The main GPG encryption routine for libfko. -<a name="271"><span class="lineNum"> 271 </span> : : */</a> -<span class="lineNum"> 272 </span> : : int -<span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : gpgme_encrypt(fko_ctx_t fko_ctx, unsigned char *indata, size_t in_len,</span> -<span class="lineNum"> 274 </span> : : const char *pw, unsigned char **out, size_t *out_len) -<span class="lineNum"> 275 </span> : : { -<span class="lineNum"> 276 </span> : : char *tmp_buf; -<span class="lineNum"> 277 </span> : : int res; -<span class="lineNum"> 278 </span> : : -<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : gpgme_ctx_t gpg_ctx = NULL;</span> -<span class="lineNum"> 280 </span> :<span class="lineNoCov"> 0 : gpgme_data_t cipher = NULL;</span> -<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : gpgme_data_t plaintext = NULL;</span> -<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : gpgme_key_t key[2] = { NULL, NULL };</span> -<span class="lineNum"> 283 </span> : : gpgme_error_t err; -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span> : : /* Initialize gpgme -<span class="lineNum"> 286 </span> : : */ -<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : res = init_gpgme(fko_ctx);</span> -<span class="lineNum"> 288 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 289 </span> : : return(res); -<span class="lineNum"> 290 </span> : : -<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : gpg_ctx = fko_ctx-&gt;gpg_ctx;</span> -<span class="lineNum"> 292 </span> : : -<span class="lineNum"> 293 </span> : : /* Initialize the plaintext data (place into gpgme_data object) -<span class="lineNum"> 294 </span> : : */ -<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new_from_mem(&amp;plaintext, (char*)indata, in_len, 1);</span> -<span class="lineNum"> 296 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 297 </span> : : { -<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 301 </span> : : -<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ);</span> -<span class="lineNum"> 303 </span> : : } -<span class="lineNum"> 304 </span> : : -<span class="lineNum"> 305 </span> : : /* Set protocol -<span class="lineNum"> 306 </span> : : */ -<span class="lineNum"> 307 </span> :<span class="lineNoCov"> 0 : err = gpgme_set_protocol(gpg_ctx, GPGME_PROTOCOL_OpenPGP);</span> -<span class="lineNum"> 308 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 309 </span> : : { -<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 311 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 313 </span> : : -<span class="lineNum"> 314 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 315 </span> : : -<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_SET_PROTOCOL);</span> -<span class="lineNum"> 317 </span> : : } -<span class="lineNum"> 318 </span> : : -<span class="lineNum"> 319 </span> : : /* Set ascii-armor off (we will be base64-encoding the encrypted data -<span class="lineNum"> 320 </span> : : * ourselves. -<span class="lineNum"> 321 </span> : : */ -<span class="lineNum"> 322 </span> :<span class="lineNoCov"> 0 : gpgme_set_armor(gpg_ctx, 0);</span> -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> : : /* The gpgme_encrypt.... functions take a recipient key array, so we add -<span class="lineNum"> 325 </span> : : * our single key here. -<span class="lineNum"> 326 </span> : : */ -<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : key[0] = fko_ctx-&gt;recipient_key;</span> -<span class="lineNum"> 328 </span> : : -<span class="lineNum"> 329 </span> : : /* Create the buffer for our encrypted data. -<span class="lineNum"> 330 </span> : : */ -<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new(&amp;cipher);</span> -<span class="lineNum"> 332 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 333 </span> : : { -<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 336 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 337 </span> : : -<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 339 </span> : : -<span class="lineNum"> 340 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CIPHER_DATA_OBJ);</span> -<span class="lineNum"> 341 </span> : : } -<span class="lineNum"> 342 </span> : : -<span class="lineNum"> 343 </span> : : /* Here we add the signer to the gpgme context if there is one. -<span class="lineNum"> 344 </span> : : */ -<span class="lineNum"> 345 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;gpg_signer != NULL) {</span> -<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : gpgme_signers_clear(gpg_ctx);</span> -<span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : err = gpgme_signers_add(gpg_ctx, fko_ctx-&gt;signer_key);</span> -<span class="lineNum"> 348 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 349 </span> : : { -<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> -<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 354 </span> : : -<span class="lineNum"> 355 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_ADD_SIGNER);</span> -<span class="lineNum"> 358 </span> : : } -<span class="lineNum"> 359 </span> : : } -<span class="lineNum"> 360 </span> : : -<span class="lineNum"> 361 </span> : : /* Set the passphrase callback. -<span class="lineNum"> 362 </span> : : */ -<span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : gpgme_set_passphrase_cb(gpg_ctx, my_passphrase_cb, (void*)pw);</span> -<span class="lineNum"> 364 </span> : : -<span class="lineNum"> 365 </span> : : /* Encrypt and sign (if a sig was provided) the SPA data. -<span class="lineNum"> 366 </span> : : */ -<span class="lineNum"> 367 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;gpg_signer == NULL)</span> -<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_encrypt(</span> -<span class="lineNum"> 369 </span> : : gpg_ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, plaintext, cipher -<span class="lineNum"> 370 </span> : : ); -<span class="lineNum"> 371 </span> : : else -<span class="lineNum"> 372 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_encrypt_sign(</span> -<span class="lineNum"> 373 </span> : : gpg_ctx, key, GPGME_ENCRYPT_ALWAYS_TRUST, plaintext, cipher -<span class="lineNum"> 374 </span> : : ); -<span class="lineNum"> 375 </span> : : -<span class="lineNum"> 376 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 377 </span> : : { -<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> -<span class="lineNum"> 380 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 382 </span> : : -<span class="lineNum"> 383 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 384 </span> : : -<span class="lineNum"> 385 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpgme_err_code(err) == GPG_ERR_CANCELED)</span> -<span class="lineNum"> 386 </span> : : return(FKO_ERROR_GPGME_BAD_PASSPHRASE); -<span class="lineNum"> 387 </span> : : -<span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_ENCRYPT_SIGN);</span> -<span class="lineNum"> 389 </span> : : } -<span class="lineNum"> 390 </span> : : -<span class="lineNum"> 391 </span> : : /* Done with the plaintext. -<span class="lineNum"> 392 </span> : : */ -<span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 394 </span> : : -<span class="lineNum"> 395 </span> : : /* Get the encrypted data and its length from the gpgme data object. -<span class="lineNum"> 396 </span> : : * BTW, this does free the memory used by cipher. -<span class="lineNum"> 397 </span> : : */ -<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : tmp_buf = gpgme_data_release_and_get_mem(cipher, out_len);</span> -<span class="lineNum"> 399 </span> : : -<span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : *out = calloc(1, *out_len); /* This is freed upon fko_ctx destruction. */</span> -<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*out == NULL)</span> -<span class="lineNum"> 402 </span> : : res = FKO_ERROR_MEMORY_ALLOCATION; -<span class="lineNum"> 403 </span> : : else -<span class="lineNum"> 404 </span> : : { -<span class="lineNum"> 405 </span> :<span class="lineNoCov"> 0 : memcpy(*out, tmp_buf, *out_len);</span> -<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : res = FKO_SUCCESS;</span> -<span class="lineNum"> 407 </span> : : } -<span class="lineNum"> 408 </span> : : -<span class="lineNum"> 409 </span> :<span class="lineNoCov"> 0 : gpgme_free(tmp_buf);</span> -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 412 </span> : : } -<span class="lineNum"> 413 </span> : : -<span class="lineNum"> 414 </span> : : /* The main GPG decryption routine for libfko. -<a name="415"><span class="lineNum"> 415 </span> : : */</a> -<span class="lineNum"> 416 </span> : : int -<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : gpgme_decrypt(fko_ctx_t fko_ctx, unsigned char *indata,</span> -<span class="lineNum"> 418 </span> : : size_t in_len, const char *pw, unsigned char **out, size_t *out_len) -<span class="lineNum"> 419 </span> : : { -<span class="lineNum"> 420 </span> : : char *tmp_buf; -<span class="lineNum"> 421 </span> : : int res; -<span class="lineNum"> 422 </span> : : -<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : gpgme_ctx_t gpg_ctx = NULL;</span> -<span class="lineNum"> 424 </span> :<span class="lineNoCov"> 0 : gpgme_data_t cipher = NULL;</span> -<span class="lineNum"> 425 </span> :<span class="lineNoCov"> 0 : gpgme_data_t plaintext = NULL;</span> -<span class="lineNum"> 426 </span> : : gpgme_error_t err; -<span class="lineNum"> 427 </span> : : gpgme_decrypt_result_t decrypt_res; -<span class="lineNum"> 428 </span> : : gpgme_verify_result_t verify_res; -<span class="lineNum"> 429 </span> : : -<span class="lineNum"> 430 </span> : : /* Initialize gpgme -<span class="lineNum"> 431 </span> : : */ -<span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : res = init_gpgme(fko_ctx);</span> -<span class="lineNum"> 433 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 434 </span> : : return(res); -<span class="lineNum"> 435 </span> : : -<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : gpg_ctx = fko_ctx-&gt;gpg_ctx;</span> -<span class="lineNum"> 437 </span> : : -<span class="lineNum"> 438 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new(&amp;plaintext);</span> -<span class="lineNum"> 439 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 440 </span> : : { -<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 442 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 443 </span> : : -<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 445 </span> : : -<span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_PLAINTEXT_DATA_OBJ);</span> -<span class="lineNum"> 447 </span> : : } -<span class="lineNum"> 448 </span> : : -<span class="lineNum"> 449 </span> : : /* Initialize the cipher data (place into gpgme_data object) -<span class="lineNum"> 450 </span> : : */ -<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : err = gpgme_data_new_from_mem(&amp;cipher, (char*)indata, in_len, 0);</span> -<span class="lineNum"> 452 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 453 </span> : : { -<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 457 </span> : : -<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 459 </span> : : -<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_CIPHER_DATA_OBJ);</span> -<span class="lineNum"> 461 </span> : : } -<span class="lineNum"> 462 </span> : : -<span class="lineNum"> 463 </span> : : /* Set the passphrase callback. -<span class="lineNum"> 464 </span> : : */ -<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : gpgme_set_passphrase_cb(gpg_ctx, my_passphrase_cb, (void*)pw);</span> -<span class="lineNum"> 466 </span> : : -<span class="lineNum"> 467 </span> : : /* Now decrypt and verify. -<span class="lineNum"> 468 </span> : : */ -<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : err = gpgme_op_decrypt_verify(gpg_ctx, cipher, plaintext);</span> -<span class="lineNum"> 470 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gpg_err_code(err) != GPG_ERR_NO_ERROR)</span> -<span class="lineNum"> 471 </span> : : { -<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> -<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 476 </span> : : -<span class="lineNum"> 477 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_err = err;</span> -<span class="lineNum"> 478 </span> : : -<span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_DECRYPT_FAILED);</span> -<span class="lineNum"> 480 </span> : : } -<span class="lineNum"> 481 </span> : : -<span class="lineNum"> 482 </span> : : /* Done with the cipher text. -<span class="lineNum"> 483 </span> : : */ -<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(cipher);</span> -<span class="lineNum"> 485 </span> : : -<span class="lineNum"> 486 </span> : : /* We check the &quot;usupported_algorithm&quot; flag in the decrypt result. -<span class="lineNum"> 487 </span> : : */ -<span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : decrypt_res = gpgme_op_decrypt_result(gpg_ctx);</span> -<span class="lineNum"> 489 </span> : : -<span class="lineNum"> 490 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(decrypt_res-&gt;unsupported_algorithm)</span> -<span class="lineNum"> 491 </span> : : { -<span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 494 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 495 </span> : : -<span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : return(FKO_ERROR_GPGME_DECRYPT_UNSUPPORTED_ALGORITHM);</span> -<span class="lineNum"> 497 </span> : : } -<span class="lineNum"> 498 </span> : : -<span class="lineNum"> 499 </span> : : /* Now verify the signatures if so configured. -<span class="lineNum"> 500 </span> : : */ -<span class="lineNum"> 501 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_ctx-&gt;verify_gpg_sigs)</span> -<span class="lineNum"> 502 </span> : : { -<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : verify_res = gpgme_op_verify_result(gpg_ctx);</span> -<span class="lineNum"> 504 </span> : : -<span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : res = process_sigs(fko_ctx, verify_res);</span> -<span class="lineNum"> 506 </span> : : -<span class="lineNum"> 507 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 508 </span> : : { -<span class="lineNum"> 509 </span> :<span class="lineNoCov"> 0 : gpgme_data_release(plaintext);</span> -<span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : gpgme_release(gpg_ctx);</span> -<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : fko_ctx-&gt;gpg_ctx = NULL;</span> -<span class="lineNum"> 512 </span> : : -<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 514 </span> : : } -<span class="lineNum"> 515 </span> : : } -<span class="lineNum"> 516 </span> : : -<span class="lineNum"> 517 </span> : : /* Get the encrypted data and its length from the gpgme data object. -<span class="lineNum"> 518 </span> : : */ -<span class="lineNum"> 519 </span> :<span class="lineNoCov"> 0 : tmp_buf = gpgme_data_release_and_get_mem(plaintext, out_len);</span> -<span class="lineNum"> 520 </span> : : -<span class="lineNum"> 521 </span> : : /* Use calloc here with an extra byte because I am not sure if all systems -<span class="lineNum"> 522 </span> : : * will include the terminating NULL with the decrypted data (which is -<span class="lineNum"> 523 </span> : : * expected to be a string). -<span class="lineNum"> 524 </span> : : */ -<span class="lineNum"> 525 </span> :<span class="lineNoCov"> 0 : *out = calloc(1, *out_len+1); /* This is freed upon fko_ctx destruction. */</span> -<span class="lineNum"> 526 </span> : : -<span class="lineNum"> 527 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*out == NULL)</span> -<span class="lineNum"> 528 </span> : : res = FKO_ERROR_MEMORY_ALLOCATION; -<span class="lineNum"> 529 </span> : : else -<span class="lineNum"> 530 </span> : : { -<span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : memcpy(*out, tmp_buf, *out_len);</span> -<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : res = FKO_SUCCESS;</span> -<span class="lineNum"> 533 </span> : : } -<span class="lineNum"> 534 </span> : : -<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : gpgme_free(tmp_buf);</span> -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 538 </span> : : } -<span class="lineNum"> 539 </span> : : -<span class="lineNum"> 540 </span> : : #endif /* HAVE_LIBGPGME */ -<span class="lineNum"> 541 </span> : : -<span class="lineNum"> 542 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html deleted file mode 100644 index 596dc7b0..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func-sort-c.html +++ /dev/null @@ -1,165 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/hmac.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - hmac.c<span style="font-size: 80%;"> (<a href="hmac.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">67</td> - <td class="headerCovTableEntry">148</td> - <td class="headerCovTableEntryLo">45.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntry">21</td> - <td class="headerCovTableEntryLo">42.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">22</td> - <td class="headerCovTableEntryLo">54.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="hmac.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#73">pad_init</a></td> - <td class="coverFnHi">692</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#240">hmac_sha256_init</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#282">hmac_sha256_final</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#274">hmac_sha256_update</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#294">hmac_sha256</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#203">hmac_sha1_update</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#223">hmac_sha1</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#211">hmac_sha1_final</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#169">hmac_sha1_init</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#398">hmac_sha512_update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#336">hmac_sha384_update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#373">hmac_sha512_init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#152">hmac_md5</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#311">hmac_sha384_init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#418">hmac_sha512</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#132">hmac_md5_update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#344">hmac_sha384_final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#406">hmac_sha512_final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#140">hmac_md5_final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#356">hmac_sha384</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#98">hmac_md5_init</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html deleted file mode 100644 index e52b0e03..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.func.html +++ /dev/null @@ -1,165 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/hmac.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - hmac.c<span style="font-size: 80%;"> (<a href="hmac.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">67</td> - <td class="headerCovTableEntry">148</td> - <td class="headerCovTableEntryLo">45.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntry">21</td> - <td class="headerCovTableEntryLo">42.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">22</td> - <td class="headerCovTableEntryLo">54.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="hmac.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#152">hmac_md5</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#140">hmac_md5_final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#98">hmac_md5_init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#132">hmac_md5_update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#223">hmac_sha1</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#211">hmac_sha1_final</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#169">hmac_sha1_init</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#203">hmac_sha1_update</a></td> - <td class="coverFnHi">148</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#294">hmac_sha256</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#282">hmac_sha256_final</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#240">hmac_sha256_init</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#274">hmac_sha256_update</a></td> - <td class="coverFnHi">544</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#356">hmac_sha384</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#344">hmac_sha384_final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#311">hmac_sha384_init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#336">hmac_sha384_update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#418">hmac_sha512</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#406">hmac_sha512_final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#373">hmac_sha512_init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#398">hmac_sha512_update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="hmac.c.gcov.html#73">pad_init</a></td> - <td class="coverFnHi">692</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html deleted file mode 100644 index 29553e9d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/hmac.c.gcov.html +++ /dev/null @@ -1,517 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/hmac.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - hmac.c<span style="font-size: 80%;"> (source / <a href="hmac.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">67</td> - <td class="headerCovTableEntry">148</td> - <td class="headerCovTableEntryLo">45.3 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntry">21</td> - <td class="headerCovTableEntryLo">42.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">22</td> - <td class="headerCovTableEntryLo">54.5 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fko_hmac.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Provide HMAC support to SPA communications -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : -<span class="lineNum"> 32 </span> : : #include &quot;hmac.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : typedef struct { -<span class="lineNum"> 35 </span> : : MD5Context ctx_inside; -<span class="lineNum"> 36 </span> : : MD5Context ctx_outside; -<span class="lineNum"> 37 </span> : : -<span class="lineNum"> 38 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 39 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 40 </span> : : } hmac_md5_ctx; -<span class="lineNum"> 41 </span> : : -<span class="lineNum"> 42 </span> : : typedef struct { -<span class="lineNum"> 43 </span> : : SHA1_INFO ctx_inside; -<span class="lineNum"> 44 </span> : : SHA1_INFO ctx_outside; -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 47 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 48 </span> : : } hmac_sha1_ctx; -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : typedef struct { -<span class="lineNum"> 51 </span> : : SHA256_CTX ctx_inside; -<span class="lineNum"> 52 </span> : : SHA256_CTX ctx_outside; -<span class="lineNum"> 53 </span> : : -<span class="lineNum"> 54 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 55 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 56 </span> : : } hmac_sha256_ctx; -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> : : typedef struct { -<span class="lineNum"> 59 </span> : : SHA384_CTX ctx_inside; -<span class="lineNum"> 60 </span> : : SHA384_CTX ctx_outside; -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 63 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 64 </span> : : } hmac_sha384_ctx; -<span class="lineNum"> 65 </span> : : -<span class="lineNum"> 66 </span> : : typedef struct { -<span class="lineNum"> 67 </span> : : SHA512_CTX ctx_inside; -<span class="lineNum"> 68 </span> : : SHA512_CTX ctx_outside; -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> : : unsigned char block_inner_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 71 </span> : : unsigned char block_outer_pad[MAX_DIGEST_BLOCK_LEN]; -<span class="lineNum"> 72 </span> : : } hmac_sha512_ctx; -<a name="73"><span class="lineNum"> 73 </span> : : </a> -<span class="lineNum"> 74 </span> : : static void -<span class="lineNum"> 75 </span> :<span class="lineCov"> 692 : pad_init(unsigned char *inner_pad, unsigned char *outer_pad,</span> -<span class="lineNum"> 76 </span> : : const unsigned char * const key, const int key_len) -<span class="lineNum"> 77 </span> : : { -<span class="lineNum"> 78 </span> :<span class="lineCov"> 692 : int i = 0;</span> -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> [<span class="branchCov" title="Branch 0 was taken 27758 times"> + </span><span class="branchCov" title="Branch 1 was taken 692 times"> + </span>]:<span class="lineCov"> 28450 : for (i=0; i &lt; MAX_DIGEST_BLOCK_LEN &amp;&amp; i &lt; key_len; i++) {</span> -<span class="lineNum"> 81 </span> :<span class="lineCov"> 27758 : inner_pad[i] = key[i] ^ 0x36;</span> -<span class="lineNum"> 82 </span> :<span class="lineCov"> 27758 : outer_pad[i] = key[i] ^ 0x5c;</span> -<span class="lineNum"> 83 </span> : : } -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> [<span class="branchCov" title="Branch 0 was taken 670 times"> + </span><span class="branchCov" title="Branch 1 was taken 22 times"> + </span>]:<span class="lineCov"> 692 : if(i &lt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 86 </span> : : { -<span class="lineNum"> 87 </span> [<span class="branchCov" title="Branch 0 was taken 60818 times"> + </span><span class="branchCov" title="Branch 1 was taken 670 times"> + </span>]:<span class="lineCov"> 61488 : while(i &lt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 88 </span> : : { -<span class="lineNum"> 89 </span> :<span class="lineCov"> 60818 : inner_pad[i] = 0x36;</span> -<span class="lineNum"> 90 </span> :<span class="lineCov"> 60818 : outer_pad[i] = 0x5c;</span> -<span class="lineNum"> 91 </span> :<span class="lineCov"> 60818 : i++;</span> -<span class="lineNum"> 92 </span> : : } -<span class="lineNum"> 93 </span> : : } -<span class="lineNum"> 94 </span> :<span class="lineCov"> 692 : return;</span> -<span class="lineNum"> 95 </span> : : } -<span class="lineNum"> 96 </span> : : -<span class="lineNum"> 97 </span> : : /* Begin MD5 HMAC functions -<a name="98"><span class="lineNum"> 98 </span> : : */</a> -<span class="lineNum"> 99 </span> : : static void -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : hmac_md5_init(hmac_md5_ctx *ctx, const char *key, const int key_len)</span> -<span class="lineNum"> 101 </span> : : { -<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : unsigned char init_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : int final_len = key_len;</span> -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> -<span class="lineNum"> 108 </span> : : -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : memcpy(init_key, key, final_len);</span> -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(MD5_BLOCK_LEN &lt; key_len)</span> -<span class="lineNum"> 112 </span> : : { -<span class="lineNum"> 113 </span> : : /* Calculate the digest of the key -<span class="lineNum"> 114 </span> : : */ -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : md5(final_key, init_key, final_len);</span> -<span class="lineNum"> 116 </span> : : } -<span class="lineNum"> 117 </span> : : else -<span class="lineNum"> 118 </span> : : { -<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : memcpy(final_key, init_key, key_len);</span> -<span class="lineNum"> 120 </span> : : } -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : MD5Init(&amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, MD5_BLOCK_LEN);</span> -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : MD5Init(&amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, MD5_BLOCK_LEN);</span> -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 131 </span> : : } -<a name="132"><span class="lineNum"> 132 </span> : : </a> -<span class="lineNum"> 133 </span> : : static void -<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : hmac_md5_update(hmac_md5_ctx *ctx, const char *msg,</span> -<span class="lineNum"> 135 </span> : : unsigned int msg_len) -<span class="lineNum"> 136 </span> : : { -<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> -<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 139 </span> : : } -<a name="140"><span class="lineNum"> 140 </span> : : </a> -<span class="lineNum"> 141 </span> : : static void -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : hmac_md5_final(hmac_md5_ctx *ctx, unsigned char *hmac)</span> -<span class="lineNum"> 143 </span> : : { -<span class="lineNum"> 144 </span> : : unsigned char digest_inside[MD5_DIGEST_LEN]; -<span class="lineNum"> 145 </span> : : -<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : MD5Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : MD5Update(&amp;ctx-&gt;ctx_outside, digest_inside, MD5_DIGEST_LEN);</span> -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : MD5Final(hmac, &amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 149 </span> : : -<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 151 </span> : : } -<a name="152"><span class="lineNum"> 152 </span> : : </a> -<span class="lineNum"> 153 </span> : : void -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : hmac_md5(const char *msg, const unsigned int msg_len,</span> -<span class="lineNum"> 155 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) -<span class="lineNum"> 156 </span> : : { -<span class="lineNum"> 157 </span> : : hmac_md5_ctx ctx; -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); -<span class="lineNum"> 160 </span> : : -<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : hmac_md5_init(&amp;ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : hmac_md5_update(&amp;ctx, msg, msg_len);</span> -<span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : hmac_md5_final(&amp;ctx, hmac);</span> -<span class="lineNum"> 164 </span> : : -<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 166 </span> : : } -<span class="lineNum"> 167 </span> : : -<span class="lineNum"> 168 </span> : : /* Begin SHA1 HMAC functions -<a name="169"><span class="lineNum"> 169 </span> : : */</a> -<span class="lineNum"> 170 </span> : : static void -<span class="lineNum"> 171 </span> :<span class="lineCov"> 148 : hmac_sha1_init(hmac_sha1_ctx *ctx, const char *key, const int key_len)</span> -<span class="lineNum"> 172 </span> : : { -<span class="lineNum"> 173 </span> :<span class="lineCov"> 148 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 174 </span> :<span class="lineCov"> 148 : unsigned char init_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 175 </span> :<span class="lineCov"> 148 : int final_len = key_len;</span> -<span class="lineNum"> 176 </span> : : -<span class="lineNum"> 177 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 148 times"> + </span>]:<span class="lineCov"> 148 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> :<span class="lineCov"> 148 : memcpy(init_key, key, final_len);</span> -<span class="lineNum"> 181 </span> : : -<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 100 times"> + </span><span class="branchCov" title="Branch 1 was taken 48 times"> + </span>]:<span class="lineCov"> 148 : if(SHA1_BLOCK_LEN &lt; key_len)</span> -<span class="lineNum"> 183 </span> : : { -<span class="lineNum"> 184 </span> : : /* Calculate the digest of the key -<span class="lineNum"> 185 </span> : : */ -<span class="lineNum"> 186 </span> :<span class="lineCov"> 100 : sha1(final_key, init_key, final_len);</span> -<span class="lineNum"> 187 </span> : : } -<span class="lineNum"> 188 </span> : : else -<span class="lineNum"> 189 </span> : : { -<span class="lineNum"> 190 </span> :<span class="lineCov"> 48 : memcpy(final_key, init_key, key_len);</span> -<span class="lineNum"> 191 </span> : : } -<span class="lineNum"> 192 </span> : : -<span class="lineNum"> 193 </span> :<span class="lineCov"> 148 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> :<span class="lineCov"> 148 : sha1_init(&amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 196 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA1_BLOCK_LEN);</span> -<span class="lineNum"> 197 </span> : : -<span class="lineNum"> 198 </span> :<span class="lineCov"> 148 : sha1_init(&amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 199 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA1_BLOCK_LEN);</span> -<span class="lineNum"> 200 </span> : : -<span class="lineNum"> 201 </span> :<span class="lineCov"> 148 : return;</span> -<span class="lineNum"> 202 </span> : : } -<a name="203"><span class="lineNum"> 203 </span> : : </a> -<span class="lineNum"> 204 </span> : : static void -<span class="lineNum"> 205 </span> :<span class="lineCov"> 148 : hmac_sha1_update(hmac_sha1_ctx *ctx, const char *msg,</span> -<span class="lineNum"> 206 </span> : : unsigned int msg_len) -<span class="lineNum"> 207 </span> : : { -<span class="lineNum"> 208 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> -<span class="lineNum"> 209 </span> :<span class="lineCov"> 148 : return;</span> -<span class="lineNum"> 210 </span> : : } -<a name="211"><span class="lineNum"> 211 </span> : : </a> -<span class="lineNum"> 212 </span> : : static void -<span class="lineNum"> 213 </span> :<span class="lineCov"> 148 : hmac_sha1_final(hmac_sha1_ctx *ctx, unsigned char *hmac)</span> -<span class="lineNum"> 214 </span> : : { -<span class="lineNum"> 215 </span> : : unsigned char digest_inside[SHA1_DIGEST_LEN]; -<span class="lineNum"> 216 </span> : : -<span class="lineNum"> 217 </span> :<span class="lineCov"> 148 : sha1_final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 218 </span> :<span class="lineCov"> 148 : sha1_update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA1_DIGEST_LEN);</span> -<span class="lineNum"> 219 </span> :<span class="lineCov"> 148 : sha1_final(hmac, &amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> :<span class="lineCov"> 148 : return;</span> -<span class="lineNum"> 222 </span> : : } -<a name="223"><span class="lineNum"> 223 </span> : : </a> -<span class="lineNum"> 224 </span> : : void -<span class="lineNum"> 225 </span> :<span class="lineCov"> 148 : hmac_sha1(const char *msg, const unsigned int msg_len,</span> -<span class="lineNum"> 226 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) -<span class="lineNum"> 227 </span> : : { -<span class="lineNum"> 228 </span> : : hmac_sha1_ctx ctx; -<span class="lineNum"> 229 </span> : : -<span class="lineNum"> 230 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); -<span class="lineNum"> 231 </span> : : -<span class="lineNum"> 232 </span> :<span class="lineCov"> 148 : hmac_sha1_init(&amp;ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 233 </span> :<span class="lineCov"> 148 : hmac_sha1_update(&amp;ctx, msg, msg_len);</span> -<span class="lineNum"> 234 </span> :<span class="lineCov"> 148 : hmac_sha1_final(&amp;ctx, hmac);</span> -<span class="lineNum"> 235 </span> : : -<span class="lineNum"> 236 </span> :<span class="lineCov"> 148 : return;</span> -<span class="lineNum"> 237 </span> : : } -<span class="lineNum"> 238 </span> : : -<span class="lineNum"> 239 </span> : : /* Begin SHA256 HMAC functions -<a name="240"><span class="lineNum"> 240 </span> : : */</a> -<span class="lineNum"> 241 </span> : : static void -<span class="lineNum"> 242 </span> :<span class="lineCov"> 544 : hmac_sha256_init(hmac_sha256_ctx *ctx, const char *key, const int key_len)</span> -<span class="lineNum"> 243 </span> : : { -<span class="lineNum"> 244 </span> :<span class="lineCov"> 544 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 245 </span> :<span class="lineCov"> 544 : unsigned char init_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 246 </span> :<span class="lineCov"> 544 : int final_len = key_len;</span> -<span class="lineNum"> 247 </span> : : -<span class="lineNum"> 248 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 544 times"> + </span>]:<span class="lineCov"> 544 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> :<span class="lineCov"> 544 : memcpy(init_key, key, final_len);</span> -<span class="lineNum"> 252 </span> : : -<span class="lineNum"> 253 </span> [<span class="branchCov" title="Branch 0 was taken 134 times"> + </span><span class="branchCov" title="Branch 1 was taken 410 times"> + </span>]:<span class="lineCov"> 544 : if(SHA256_BLOCK_LEN &lt; key_len)</span> -<span class="lineNum"> 254 </span> : : { -<span class="lineNum"> 255 </span> : : /* Calculate the digest of the key -<span class="lineNum"> 256 </span> : : */ -<span class="lineNum"> 257 </span> :<span class="lineCov"> 134 : sha256(final_key, init_key, final_len);</span> -<span class="lineNum"> 258 </span> : : } -<span class="lineNum"> 259 </span> : : else -<span class="lineNum"> 260 </span> : : { -<span class="lineNum"> 261 </span> :<span class="lineCov"> 410 : memcpy(final_key, init_key, key_len);</span> -<span class="lineNum"> 262 </span> : : } -<span class="lineNum"> 263 </span> : : -<span class="lineNum"> 264 </span> :<span class="lineCov"> 544 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> -<span class="lineNum"> 265 </span> : : -<span class="lineNum"> 266 </span> :<span class="lineCov"> 544 : SHA256_Init(&amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 267 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA256_BLOCK_LEN);</span> -<span class="lineNum"> 268 </span> : : -<span class="lineNum"> 269 </span> :<span class="lineCov"> 544 : SHA256_Init(&amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 270 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA256_BLOCK_LEN);</span> -<span class="lineNum"> 271 </span> : : -<span class="lineNum"> 272 </span> :<span class="lineCov"> 544 : return;</span> -<span class="lineNum"> 273 </span> : : } -<a name="274"><span class="lineNum"> 274 </span> : : </a> -<span class="lineNum"> 275 </span> : : static void -<span class="lineNum"> 276 </span> :<span class="lineCov"> 544 : hmac_sha256_update(hmac_sha256_ctx *ctx, const char *msg,</span> -<span class="lineNum"> 277 </span> : : unsigned int msg_len) -<span class="lineNum"> 278 </span> : : { -<span class="lineNum"> 279 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> -<span class="lineNum"> 280 </span> :<span class="lineCov"> 544 : return;</span> -<span class="lineNum"> 281 </span> : : } -<a name="282"><span class="lineNum"> 282 </span> : : </a> -<span class="lineNum"> 283 </span> : : static void -<span class="lineNum"> 284 </span> :<span class="lineCov"> 544 : hmac_sha256_final(hmac_sha256_ctx *ctx, unsigned char *hmac)</span> -<span class="lineNum"> 285 </span> : : { -<span class="lineNum"> 286 </span> : : unsigned char digest_inside[SHA256_DIGEST_LEN]; -<span class="lineNum"> 287 </span> : : -<span class="lineNum"> 288 </span> :<span class="lineCov"> 544 : SHA256_Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 289 </span> :<span class="lineCov"> 544 : SHA256_Update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA256_DIGEST_LEN);</span> -<span class="lineNum"> 290 </span> :<span class="lineCov"> 544 : SHA256_Final(hmac, &amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 291 </span> : : -<span class="lineNum"> 292 </span> :<span class="lineCov"> 544 : return;</span> -<span class="lineNum"> 293 </span> : : } -<a name="294"><span class="lineNum"> 294 </span> : : </a> -<span class="lineNum"> 295 </span> : : void -<span class="lineNum"> 296 </span> :<span class="lineCov"> 544 : hmac_sha256(const char *msg, const unsigned int msg_len,</span> -<span class="lineNum"> 297 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) -<span class="lineNum"> 298 </span> : : { -<span class="lineNum"> 299 </span> : : hmac_sha256_ctx ctx; -<span class="lineNum"> 300 </span> : : -<span class="lineNum"> 301 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); -<span class="lineNum"> 302 </span> : : -<span class="lineNum"> 303 </span> :<span class="lineCov"> 544 : hmac_sha256_init(&amp;ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 304 </span> :<span class="lineCov"> 544 : hmac_sha256_update(&amp;ctx, msg, msg_len);</span> -<span class="lineNum"> 305 </span> :<span class="lineCov"> 544 : hmac_sha256_final(&amp;ctx, hmac);</span> -<span class="lineNum"> 306 </span> : : -<span class="lineNum"> 307 </span> :<span class="lineCov"> 544 : return;</span> -<span class="lineNum"> 308 </span> : : } -<span class="lineNum"> 309 </span> : : -<span class="lineNum"> 310 </span> : : /* Begin SHA384 HMAC functions -<a name="311"><span class="lineNum"> 311 </span> : : */</a> -<span class="lineNum"> 312 </span> : : static void -<span class="lineNum"> 313 </span> :<span class="lineNoCov"> 0 : hmac_sha384_init(hmac_sha384_ctx *ctx, const char *key, const int key_len)</span> -<span class="lineNum"> 314 </span> : : { -<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : int final_len = key_len;</span> -<span class="lineNum"> 317 </span> : : -<span class="lineNum"> 318 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> -<span class="lineNum"> 320 </span> : : -<span class="lineNum"> 321 </span> : : /* When we eventually support arbitrary key sizes, take the digest -<span class="lineNum"> 322 </span> : : * of the key with: sha384(final_key, init_key, final_len); -<span class="lineNum"> 323 </span> : : */ -<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : memcpy(final_key, key, final_len);</span> -<span class="lineNum"> 325 </span> : : -<span class="lineNum"> 326 </span> :<span class="lineNoCov"> 0 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> -<span class="lineNum"> 327 </span> : : -<span class="lineNum"> 328 </span> :<span class="lineNoCov"> 0 : SHA384_Init(&amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 329 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA384_BLOCK_LEN);</span> -<span class="lineNum"> 330 </span> : : -<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : SHA384_Init(&amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA384_BLOCK_LEN);</span> -<span class="lineNum"> 333 </span> : : -<span class="lineNum"> 334 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 335 </span> : : } -<a name="336"><span class="lineNum"> 336 </span> : : </a> -<span class="lineNum"> 337 </span> : : static void -<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : hmac_sha384_update(hmac_sha384_ctx *ctx, const char *msg,</span> -<span class="lineNum"> 339 </span> : : unsigned int msg_len) -<span class="lineNum"> 340 </span> : : { -<span class="lineNum"> 341 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> -<span class="lineNum"> 342 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 343 </span> : : } -<a name="344"><span class="lineNum"> 344 </span> : : </a> -<span class="lineNum"> 345 </span> : : static void -<span class="lineNum"> 346 </span> :<span class="lineNoCov"> 0 : hmac_sha384_final(hmac_sha384_ctx *ctx, unsigned char *hmac)</span> -<span class="lineNum"> 347 </span> : : { -<span class="lineNum"> 348 </span> : : unsigned char digest_inside[SHA384_DIGEST_LEN]; -<span class="lineNum"> 349 </span> : : -<span class="lineNum"> 350 </span> :<span class="lineNoCov"> 0 : SHA384_Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : SHA384_Update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA384_DIGEST_LEN);</span> -<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : SHA384_Final(hmac, &amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 353 </span> : : -<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 355 </span> : : } -<a name="356"><span class="lineNum"> 356 </span> : : </a> -<span class="lineNum"> 357 </span> : : void -<span class="lineNum"> 358 </span> :<span class="lineNoCov"> 0 : hmac_sha384(const char *msg, const unsigned int msg_len,</span> -<span class="lineNum"> 359 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) -<span class="lineNum"> 360 </span> : : { -<span class="lineNum"> 361 </span> : : hmac_sha384_ctx ctx; -<span class="lineNum"> 362 </span> : : -<span class="lineNum"> 363 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); -<span class="lineNum"> 364 </span> : : -<span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : hmac_sha384_init(&amp;ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 366 </span> :<span class="lineNoCov"> 0 : hmac_sha384_update(&amp;ctx, msg, msg_len);</span> -<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : hmac_sha384_final(&amp;ctx, hmac);</span> -<span class="lineNum"> 368 </span> : : -<span class="lineNum"> 369 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 370 </span> : : } -<span class="lineNum"> 371 </span> : : -<span class="lineNum"> 372 </span> : : /* Begin SHA512 HMAC functions -<a name="373"><span class="lineNum"> 373 </span> : : */</a> -<span class="lineNum"> 374 </span> : : static void -<span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : hmac_sha512_init(hmac_sha512_ctx *ctx, const char *key, const int key_len)</span> -<span class="lineNum"> 376 </span> : : { -<span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : unsigned char final_key[MAX_DIGEST_BLOCK_LEN] = {0};</span> -<span class="lineNum"> 378 </span> :<span class="lineNoCov"> 0 : int final_len = key_len;</span> -<span class="lineNum"> 379 </span> : : -<span class="lineNum"> 380 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(key_len &gt; MAX_DIGEST_BLOCK_LEN)</span> -<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : final_len = MAX_DIGEST_BLOCK_LEN;</span> -<span class="lineNum"> 382 </span> : : -<span class="lineNum"> 383 </span> : : /* When we eventually support arbitrary key sizes, take the digest -<span class="lineNum"> 384 </span> : : * of the key with: sha512(final_key, init_key, final_len); -<span class="lineNum"> 385 </span> : : */ -<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : memcpy(final_key, key, final_len);</span> -<span class="lineNum"> 387 </span> : : -<span class="lineNum"> 388 </span> :<span class="lineNoCov"> 0 : pad_init(ctx-&gt;block_inner_pad, ctx-&gt;block_outer_pad, final_key, final_len);</span> -<span class="lineNum"> 389 </span> : : -<span class="lineNum"> 390 </span> :<span class="lineNoCov"> 0 : SHA512_Init(&amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_inside, ctx-&gt;block_inner_pad, SHA512_BLOCK_LEN);</span> -<span class="lineNum"> 392 </span> : : -<span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : SHA512_Init(&amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_outside, ctx-&gt;block_outer_pad, SHA512_BLOCK_LEN);</span> -<span class="lineNum"> 395 </span> : : -<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 397 </span> : : } -<a name="398"><span class="lineNum"> 398 </span> : : </a> -<span class="lineNum"> 399 </span> : : static void -<span class="lineNum"> 400 </span> :<span class="lineNoCov"> 0 : hmac_sha512_update(hmac_sha512_ctx *ctx, const char *msg,</span> -<span class="lineNum"> 401 </span> : : unsigned int msg_len) -<span class="lineNum"> 402 </span> : : { -<span class="lineNum"> 403 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_inside, (unsigned char *)msg, msg_len);</span> -<span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 405 </span> : : } -<a name="406"><span class="lineNum"> 406 </span> : : </a> -<span class="lineNum"> 407 </span> : : static void -<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : hmac_sha512_final(hmac_sha512_ctx *ctx, unsigned char *hmac)</span> -<span class="lineNum"> 409 </span> : : { -<span class="lineNum"> 410 </span> : : unsigned char digest_inside[SHA512_DIGEST_LEN]; -<span class="lineNum"> 411 </span> : : -<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : SHA512_Final(digest_inside, &amp;ctx-&gt;ctx_inside);</span> -<span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : SHA512_Update(&amp;ctx-&gt;ctx_outside, digest_inside, SHA512_DIGEST_LEN);</span> -<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : SHA512_Final(hmac, &amp;ctx-&gt;ctx_outside);</span> -<span class="lineNum"> 415 </span> : : -<span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 417 </span> : : } -<a name="418"><span class="lineNum"> 418 </span> : : </a> -<span class="lineNum"> 419 </span> : : void -<span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : hmac_sha512(const char *msg, const unsigned int msg_len,</span> -<span class="lineNum"> 421 </span> : : unsigned char *hmac, const char *hmac_key, const int hmac_key_len) -<span class="lineNum"> 422 </span> : : { -<span class="lineNum"> 423 </span> : : hmac_sha512_ctx ctx; -<span class="lineNum"> 424 </span> : : -<span class="lineNum"> 425 </span> : : memset(&amp;ctx, 0, sizeof(ctx)); -<span class="lineNum"> 426 </span> : : -<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : hmac_sha512_init(&amp;ctx, hmac_key, hmac_key_len);</span> -<span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : hmac_sha512_update(&amp;ctx, msg, msg_len);</span> -<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : hmac_sha512_final(&amp;ctx, hmac);</span> -<span class="lineNum"> 430 </span> : : -<span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 432 </span> : : } -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html deleted file mode 100644 index 85749690..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-b.html +++ /dev/null @@ -1,407 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">1704</td> - <td class="headerCovTableEntry">2851</td> - <td class="headerCovTableEntryLo">59.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">136</td> - <td class="headerCovTableEntry">195</td> - <td class="headerCovTableEntryLo">69.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">840</td> - <td class="headerCovTableEntry">2002</td> - <td class="headerCovTableEntryLo">42.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> - </tr> - <tr> - <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> - </td> - <td class="coverPerLo">11.0&nbsp;%</td> - <td class="coverNumLo">16 / 145</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">8.9&nbsp;%</td> - <td class="coverNumLo">13 / 146</td> - </tr> - <tr> - <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> - </td> - <td class="coverPerLo">14.7&nbsp;%</td> - <td class="coverNumLo">28 / 190</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">2 / 6</td> - <td class="coverPerLo">10.5&nbsp;%</td> - <td class="coverNumLo">9 / 86</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> - </td> - <td class="coverPerLo">23.8&nbsp;%</td> - <td class="coverNumLo">5 / 21</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">10.7&nbsp;%</td> - <td class="coverNumLo">3 / 28</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> - </td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">5 / 15</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">15.0&nbsp;%</td> - <td class="coverNumLo">3 / 20</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> - </td> - <td class="coverPerLo">36.3&nbsp;%</td> - <td class="coverNumLo">117 / 322</td> - <td class="coverPerLo">37.9&nbsp;%</td> - <td class="coverNumLo">11 / 29</td> - <td class="coverPerLo">22.1&nbsp;%</td> - <td class="coverNumLo">75 / 340</td> - </tr> - <tr> - <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> - </td> - <td class="coverPerLo">41.2&nbsp;%</td> - <td class="coverNumLo">94 / 228</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">4 / 12</td> - <td class="coverPerLo">28.9&nbsp;%</td> - <td class="coverNumLo">22 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> - </td> - <td class="coverPerLo">56.9&nbsp;%</td> - <td class="coverNumLo">41 / 72</td> - <td class="coverPerLo">60.0&nbsp;%</td> - <td class="coverNumLo">6 / 10</td> - <td class="coverPerLo">31.0&nbsp;%</td> - <td class="coverNumLo">18 / 58</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> - </td> - <td class="coverPerLo">73.1&nbsp;%</td> - <td class="coverNumLo">79 / 108</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerLo">43.8&nbsp;%</td> - <td class="coverNumLo">42 / 96</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> - </td> - <td class="coverPerLo">73.2&nbsp;%</td> - <td class="coverNumLo">139 / 190</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">14 / 14</td> - <td class="coverPerLo">44.5&nbsp;%</td> - <td class="coverNumLo">73 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">117 / 216</td> - <td class="coverPerLo">70.0&nbsp;%</td> - <td class="coverNumLo">7 / 10</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">74 / 166</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> - </td> - <td class="coverPerMed">78.1&nbsp;%</td> - <td class="coverNumMed">50 / 64</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">25 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> - </td> - <td class="coverPerLo">74.3&nbsp;%</td> - <td class="coverNumLo">26 / 35</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">46.7&nbsp;%</td> - <td class="coverNumLo">14 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> - </td> - <td class="coverPerMed">89.9&nbsp;%</td> - <td class="coverNumMed">107 / 119</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> - </td> - <td class="coverPerMed">78.0&nbsp;%</td> - <td class="coverNumMed">213 / 273</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">18 / 18</td> - <td class="coverPerLo">53.3&nbsp;%</td> - <td class="coverNumLo">131 / 246</td> - </tr> - <tr> - <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> - </td> - <td class="coverPerLo">45.3&nbsp;%</td> - <td class="coverNumLo">67 / 148</td> - <td class="coverPerLo">42.9&nbsp;%</td> - <td class="coverNumLo">9 / 21</td> - <td class="coverPerLo">54.5&nbsp;%</td> - <td class="coverNumLo">12 / 22</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> - </td> - <td class="coverPerMed">79.6&nbsp;%</td> - <td class="coverNumMed">86 / 108</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - <td class="coverPerLo">55.6&nbsp;%</td> - <td class="coverNumLo">60 / 108</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">7 / 12</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> - </td> - <td class="coverPerLo">71.4&nbsp;%</td> - <td class="coverNumLo">20 / 28</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">14 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> - </td> - <td class="coverPerMed">79.2&nbsp;%</td> - <td class="coverNumMed">95 / 120</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">6 / 7</td> - <td class="coverPerLo">58.9&nbsp;%</td> - <td class="coverNumLo">33 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> - </td> - <td class="coverPerMed">85.2&nbsp;%</td> - <td class="coverNumMed">46 / 54</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">64.5&nbsp;%</td> - <td class="coverNumLo">49 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> - </td> - <td class="coverPerHi">91.5&nbsp;%</td> - <td class="coverNumHi">97 / 106</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerMed">75.0&nbsp;%</td> - <td class="coverNumMed">18 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> - </td> - <td class="coverPerHi">94.1&nbsp;%</td> - <td class="coverNumHi">16 / 17</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">32 / 32</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerMed">85.0&nbsp;%</td> - <td class="coverNumMed">17 / 20</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">12 / 14</td> - </tr> - <tr> - <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> - </td> - <td class="coverPerHi">95.8&nbsp;%</td> - <td class="coverNumHi">159 / 166</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">11 / 11</td> - <td class="coverPerHi">90.4&nbsp;%</td> - <td class="coverNumHi">103 / 114</td> - </tr> - <tr> - <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> - </td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">25 / 50</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - <td class="coverPerHi">-</td> - <td class="coverNumHi">0 / 0</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html deleted file mode 100644 index 5ebfbf33..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-f.html +++ /dev/null @@ -1,407 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">1704</td> - <td class="headerCovTableEntry">2851</td> - <td class="headerCovTableEntryLo">59.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">136</td> - <td class="headerCovTableEntry">195</td> - <td class="headerCovTableEntryLo">69.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">840</td> - <td class="headerCovTableEntry">2002</td> - <td class="headerCovTableEntryLo">42.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> - </td> - <td class="coverPerLo">14.7&nbsp;%</td> - <td class="coverNumLo">28 / 190</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">2 / 6</td> - <td class="coverPerLo">10.5&nbsp;%</td> - <td class="coverNumLo">9 / 86</td> - </tr> - <tr> - <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> - </td> - <td class="coverPerLo">41.2&nbsp;%</td> - <td class="coverNumLo">94 / 228</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">4 / 12</td> - <td class="coverPerLo">28.9&nbsp;%</td> - <td class="coverNumLo">22 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> - </td> - <td class="coverPerLo">36.3&nbsp;%</td> - <td class="coverNumLo">117 / 322</td> - <td class="coverPerLo">37.9&nbsp;%</td> - <td class="coverNumLo">11 / 29</td> - <td class="coverPerLo">22.1&nbsp;%</td> - <td class="coverNumLo">75 / 340</td> - </tr> - <tr> - <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> - </td> - <td class="coverPerLo">45.3&nbsp;%</td> - <td class="coverNumLo">67 / 148</td> - <td class="coverPerLo">42.9&nbsp;%</td> - <td class="coverNumLo">9 / 21</td> - <td class="coverPerLo">54.5&nbsp;%</td> - <td class="coverNumLo">12 / 22</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> - </td> - <td class="coverPerLo">23.8&nbsp;%</td> - <td class="coverNumLo">5 / 21</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">10.7&nbsp;%</td> - <td class="coverNumLo">3 / 28</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> - </td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">5 / 15</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">15.0&nbsp;%</td> - <td class="coverNumLo">3 / 20</td> - </tr> - <tr> - <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> - </td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">25 / 50</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - <td class="coverPerHi">-</td> - <td class="coverNumHi">0 / 0</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> - </td> - <td class="coverPerLo">56.9&nbsp;%</td> - <td class="coverNumLo">41 / 72</td> - <td class="coverPerLo">60.0&nbsp;%</td> - <td class="coverNumLo">6 / 10</td> - <td class="coverPerLo">31.0&nbsp;%</td> - <td class="coverNumLo">18 / 58</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">117 / 216</td> - <td class="coverPerLo">70.0&nbsp;%</td> - <td class="coverNumLo">7 / 10</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">74 / 166</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> - </td> - <td class="coverPerMed">79.6&nbsp;%</td> - <td class="coverNumMed">86 / 108</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - <td class="coverPerLo">55.6&nbsp;%</td> - <td class="coverNumLo">60 / 108</td> - </tr> - <tr> - <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> - </td> - <td class="coverPerMed">79.2&nbsp;%</td> - <td class="coverNumMed">95 / 120</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">6 / 7</td> - <td class="coverPerLo">58.9&nbsp;%</td> - <td class="coverNumLo">33 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">12 / 14</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> - </td> - <td class="coverPerHi">94.1&nbsp;%</td> - <td class="coverNumHi">16 / 17</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> - </td> - <td class="coverPerLo">11.0&nbsp;%</td> - <td class="coverNumLo">16 / 145</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">8.9&nbsp;%</td> - <td class="coverNumLo">13 / 146</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> - </td> - <td class="coverPerLo">74.3&nbsp;%</td> - <td class="coverNumLo">26 / 35</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">46.7&nbsp;%</td> - <td class="coverNumLo">14 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> - </td> - <td class="coverPerLo">71.4&nbsp;%</td> - <td class="coverNumLo">20 / 28</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">14 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">7 / 12</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> - </td> - <td class="coverPerMed">85.2&nbsp;%</td> - <td class="coverNumMed">46 / 54</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">64.5&nbsp;%</td> - <td class="coverNumLo">49 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">32 / 32</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerMed">85.0&nbsp;%</td> - <td class="coverNumMed">17 / 20</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> - </td> - <td class="coverPerMed">78.1&nbsp;%</td> - <td class="coverNumMed">50 / 64</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">25 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> - </td> - <td class="coverPerMed">89.9&nbsp;%</td> - <td class="coverNumMed">107 / 119</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> - </td> - <td class="coverPerHi">91.5&nbsp;%</td> - <td class="coverNumHi">97 / 106</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerMed">75.0&nbsp;%</td> - <td class="coverNumMed">18 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> - </td> - <td class="coverPerLo">73.1&nbsp;%</td> - <td class="coverNumLo">79 / 108</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerLo">43.8&nbsp;%</td> - <td class="coverNumLo">42 / 96</td> - </tr> - <tr> - <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> - </td> - <td class="coverPerHi">95.8&nbsp;%</td> - <td class="coverNumHi">159 / 166</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">11 / 11</td> - <td class="coverPerHi">90.4&nbsp;%</td> - <td class="coverNumHi">103 / 114</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> - </td> - <td class="coverPerLo">73.2&nbsp;%</td> - <td class="coverNumLo">139 / 190</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">14 / 14</td> - <td class="coverPerLo">44.5&nbsp;%</td> - <td class="coverNumLo">73 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> - </td> - <td class="coverPerMed">78.0&nbsp;%</td> - <td class="coverNumMed">213 / 273</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">18 / 18</td> - <td class="coverPerLo">53.3&nbsp;%</td> - <td class="coverNumLo">131 / 246</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html deleted file mode 100644 index 1d2e35e0..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index-sort-l.html +++ /dev/null @@ -1,407 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">1704</td> - <td class="headerCovTableEntry">2851</td> - <td class="headerCovTableEntryLo">59.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">136</td> - <td class="headerCovTableEntry">195</td> - <td class="headerCovTableEntryLo">69.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">840</td> - <td class="headerCovTableEntry">2002</td> - <td class="headerCovTableEntryLo">42.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> - </td> - <td class="coverPerLo">11.0&nbsp;%</td> - <td class="coverNumLo">16 / 145</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">8.9&nbsp;%</td> - <td class="coverNumLo">13 / 146</td> - </tr> - <tr> - <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> - </td> - <td class="coverPerLo">14.7&nbsp;%</td> - <td class="coverNumLo">28 / 190</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">2 / 6</td> - <td class="coverPerLo">10.5&nbsp;%</td> - <td class="coverNumLo">9 / 86</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> - </td> - <td class="coverPerLo">23.8&nbsp;%</td> - <td class="coverNumLo">5 / 21</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">10.7&nbsp;%</td> - <td class="coverNumLo">3 / 28</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> - </td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">5 / 15</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">15.0&nbsp;%</td> - <td class="coverNumLo">3 / 20</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> - </td> - <td class="coverPerLo">36.3&nbsp;%</td> - <td class="coverNumLo">117 / 322</td> - <td class="coverPerLo">37.9&nbsp;%</td> - <td class="coverNumLo">11 / 29</td> - <td class="coverPerLo">22.1&nbsp;%</td> - <td class="coverNumLo">75 / 340</td> - </tr> - <tr> - <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> - </td> - <td class="coverPerLo">41.2&nbsp;%</td> - <td class="coverNumLo">94 / 228</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">4 / 12</td> - <td class="coverPerLo">28.9&nbsp;%</td> - <td class="coverNumLo">22 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> - </td> - <td class="coverPerLo">45.3&nbsp;%</td> - <td class="coverNumLo">67 / 148</td> - <td class="coverPerLo">42.9&nbsp;%</td> - <td class="coverNumLo">9 / 21</td> - <td class="coverPerLo">54.5&nbsp;%</td> - <td class="coverNumLo">12 / 22</td> - </tr> - <tr> - <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> - </td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">25 / 50</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - <td class="coverPerHi">-</td> - <td class="coverNumHi">0 / 0</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">117 / 216</td> - <td class="coverPerLo">70.0&nbsp;%</td> - <td class="coverNumLo">7 / 10</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">74 / 166</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> - </td> - <td class="coverPerLo">56.9&nbsp;%</td> - <td class="coverNumLo">41 / 72</td> - <td class="coverPerLo">60.0&nbsp;%</td> - <td class="coverNumLo">6 / 10</td> - <td class="coverPerLo">31.0&nbsp;%</td> - <td class="coverNumLo">18 / 58</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> - </td> - <td class="coverPerLo">71.4&nbsp;%</td> - <td class="coverNumLo">20 / 28</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">14 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> - </td> - <td class="coverPerLo">73.1&nbsp;%</td> - <td class="coverNumLo">79 / 108</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerLo">43.8&nbsp;%</td> - <td class="coverNumLo">42 / 96</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> - </td> - <td class="coverPerLo">73.2&nbsp;%</td> - <td class="coverNumLo">139 / 190</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">14 / 14</td> - <td class="coverPerLo">44.5&nbsp;%</td> - <td class="coverNumLo">73 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> - </td> - <td class="coverPerLo">74.3&nbsp;%</td> - <td class="coverNumLo">26 / 35</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">46.7&nbsp;%</td> - <td class="coverNumLo">14 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> - </td> - <td class="coverPerMed">78.0&nbsp;%</td> - <td class="coverNumMed">213 / 273</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">18 / 18</td> - <td class="coverPerLo">53.3&nbsp;%</td> - <td class="coverNumLo">131 / 246</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> - </td> - <td class="coverPerMed">78.1&nbsp;%</td> - <td class="coverNumMed">50 / 64</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">25 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> - </td> - <td class="coverPerMed">79.2&nbsp;%</td> - <td class="coverNumMed">95 / 120</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">6 / 7</td> - <td class="coverPerLo">58.9&nbsp;%</td> - <td class="coverNumLo">33 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> - </td> - <td class="coverPerMed">79.6&nbsp;%</td> - <td class="coverNumMed">86 / 108</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - <td class="coverPerLo">55.6&nbsp;%</td> - <td class="coverNumLo">60 / 108</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> - </td> - <td class="coverPerMed">85.2&nbsp;%</td> - <td class="coverNumMed">46 / 54</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">64.5&nbsp;%</td> - <td class="coverNumLo">49 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> - </td> - <td class="coverPerMed">89.9&nbsp;%</td> - <td class="coverNumMed">107 / 119</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> - </td> - <td class="coverPerHi">91.5&nbsp;%</td> - <td class="coverNumHi">97 / 106</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerMed">75.0&nbsp;%</td> - <td class="coverNumMed">18 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> - </td> - <td class="coverPerHi">94.1&nbsp;%</td> - <td class="coverNumHi">16 / 17</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> - </td> - <td class="coverPerHi">95.8&nbsp;%</td> - <td class="coverNumHi">159 / 166</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">11 / 11</td> - <td class="coverPerHi">90.4&nbsp;%</td> - <td class="coverNumHi">103 / 114</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">12 / 14</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">7 / 12</td> - </tr> - <tr> - <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">32 / 32</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerMed">85.0&nbsp;%</td> - <td class="coverNumMed">17 / 20</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html deleted file mode 100644 index a3a57978..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/index.html +++ /dev/null @@ -1,407 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - lib</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">1704</td> - <td class="headerCovTableEntry">2851</td> - <td class="headerCovTableEntryLo">59.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">136</td> - <td class="headerCovTableEntry">195</td> - <td class="headerCovTableEntryLo">69.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">840</td> - <td class="headerCovTableEntry">2002</td> - <td class="headerCovTableEntryLo">42.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="base64.c.gcov.html">base64.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">32 / 32</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerMed">85.0&nbsp;%</td> - <td class="coverNumMed">17 / 20</td> - </tr> - <tr> - <td class="coverFile"><a href="cipher_funcs.c.gcov.html">cipher_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.2%"><img src="../snow.png" width=21 height=10 alt="79.2%"></td></tr></table> - </td> - <td class="coverPerMed">79.2&nbsp;%</td> - <td class="coverNumMed">95 / 120</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">6 / 7</td> - <td class="coverPerLo">58.9&nbsp;%</td> - <td class="coverNumLo">33 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="digest.c.gcov.html">digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=50 height=10 alt="50.0%"><img src="../snow.png" width=50 height=10 alt="50.0%"></td></tr></table> - </td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">25 / 50</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - <td class="coverPerHi">-</td> - <td class="coverNumHi">0 / 0</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_client_timeout.c.gcov.html">fko_client_timeout.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="71.4%"><img src="../snow.png" width=29 height=10 alt="71.4%"></td></tr></table> - </td> - <td class="coverPerLo">71.4&nbsp;%</td> - <td class="coverNumLo">20 / 28</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">14 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_decode.c.gcov.html">fko_decode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.2%"><img src="../snow.png" width=27 height=10 alt="73.2%"></td></tr></table> - </td> - <td class="coverPerLo">73.2&nbsp;%</td> - <td class="coverNumLo">139 / 190</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">14 / 14</td> - <td class="coverPerLo">44.5&nbsp;%</td> - <td class="coverNumLo">73 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_digest.c.gcov.html">fko_digest.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=57 height=10 alt="56.9%"><img src="../snow.png" width=43 height=10 alt="56.9%"></td></tr></table> - </td> - <td class="coverPerLo">56.9&nbsp;%</td> - <td class="coverNumLo">41 / 72</td> - <td class="coverPerLo">60.0&nbsp;%</td> - <td class="coverNumLo">6 / 10</td> - <td class="coverPerLo">31.0&nbsp;%</td> - <td class="coverNumLo">18 / 58</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encode.c.gcov.html">fko_encode.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.1%"><img src="../snow.png" width=22 height=10 alt="78.1%"></td></tr></table> - </td> - <td class="coverPerMed">78.1&nbsp;%</td> - <td class="coverNumMed">50 / 64</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">25 / 56</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_encryption.c.gcov.html">fko_encryption.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="36.3%"><img src="../snow.png" width=64 height=10 alt="36.3%"></td></tr></table> - </td> - <td class="coverPerLo">36.3&nbsp;%</td> - <td class="coverNumLo">117 / 322</td> - <td class="coverPerLo">37.9&nbsp;%</td> - <td class="coverNumLo">11 / 29</td> - <td class="coverPerLo">22.1&nbsp;%</td> - <td class="coverNumLo">75 / 340</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_error.c.gcov.html">fko_error.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=11 height=10 alt="11.0%"><img src="../snow.png" width=89 height=10 alt="11.0%"></td></tr></table> - </td> - <td class="coverPerLo">11.0&nbsp;%</td> - <td class="coverNumLo">16 / 145</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">8.9&nbsp;%</td> - <td class="coverNumLo">13 / 146</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_funcs.c.gcov.html">fko_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">117 / 216</td> - <td class="coverPerLo">70.0&nbsp;%</td> - <td class="coverNumLo">7 / 10</td> - <td class="coverPerLo">44.6&nbsp;%</td> - <td class="coverNumLo">74 / 166</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_hmac.c.gcov.html">fko_hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=73 height=10 alt="73.1%"><img src="../snow.png" width=27 height=10 alt="73.1%"></td></tr></table> - </td> - <td class="coverPerLo">73.1&nbsp;%</td> - <td class="coverNumLo">79 / 108</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerLo">43.8&nbsp;%</td> - <td class="coverNumLo">42 / 96</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_message.c.gcov.html">fko_message.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="79.6%"><img src="../snow.png" width=20 height=10 alt="79.6%"></td></tr></table> - </td> - <td class="coverPerMed">79.6&nbsp;%</td> - <td class="coverNumMed">86 / 108</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - <td class="coverPerLo">55.6&nbsp;%</td> - <td class="coverNumLo">60 / 108</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_nat_access.c.gcov.html">fko_nat_access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=24 height=10 alt="23.8%"><img src="../snow.png" width=76 height=10 alt="23.8%"></td></tr></table> - </td> - <td class="coverPerLo">23.8&nbsp;%</td> - <td class="coverNumLo">5 / 21</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">10.7&nbsp;%</td> - <td class="coverNumLo">3 / 28</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_rand_value.c.gcov.html">fko_rand_value.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=74 height=10 alt="74.3%"><img src="../snow.png" width=26 height=10 alt="74.3%"></td></tr></table> - </td> - <td class="coverPerLo">74.3&nbsp;%</td> - <td class="coverNumLo">26 / 35</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">46.7&nbsp;%</td> - <td class="coverNumLo">14 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_server_auth.c.gcov.html">fko_server_auth.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=33 height=10 alt="33.3%"><img src="../snow.png" width=67 height=10 alt="33.3%"></td></tr></table> - </td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">5 / 15</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">1 / 2</td> - <td class="coverPerLo">15.0&nbsp;%</td> - <td class="coverNumLo">3 / 20</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_timestamp.c.gcov.html">fko_timestamp.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">2 / 2</td> - <td class="coverPerLo">58.3&nbsp;%</td> - <td class="coverNumLo">7 / 12</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_user.c.gcov.html">fko_user.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=85 height=10 alt="85.2%"><img src="../snow.png" width=15 height=10 alt="85.2%"></td></tr></table> - </td> - <td class="coverPerMed">85.2&nbsp;%</td> - <td class="coverNumMed">46 / 54</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">3 / 3</td> - <td class="coverPerLo">64.5&nbsp;%</td> - <td class="coverNumLo">49 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="fko_util.c.gcov.html">fko_util.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=78 height=10 alt="78.0%"><img src="../snow.png" width=22 height=10 alt="78.0%"></td></tr></table> - </td> - <td class="coverPerMed">78.0&nbsp;%</td> - <td class="coverNumMed">213 / 273</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">18 / 18</td> - <td class="coverPerLo">53.3&nbsp;%</td> - <td class="coverNumLo">131 / 246</td> - </tr> - <tr> - <td class="coverFile"><a href="gpgme_funcs.c.gcov.html">gpgme_funcs.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=15 height=10 alt="14.7%"><img src="../snow.png" width=85 height=10 alt="14.7%"></td></tr></table> - </td> - <td class="coverPerLo">14.7&nbsp;%</td> - <td class="coverNumLo">28 / 190</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">2 / 6</td> - <td class="coverPerLo">10.5&nbsp;%</td> - <td class="coverNumLo">9 / 86</td> - </tr> - <tr> - <td class="coverFile"><a href="hmac.c.gcov.html">hmac.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=45 height=10 alt="45.3%"><img src="../snow.png" width=55 height=10 alt="45.3%"></td></tr></table> - </td> - <td class="coverPerLo">45.3&nbsp;%</td> - <td class="coverNumLo">67 / 148</td> - <td class="coverPerLo">42.9&nbsp;%</td> - <td class="coverNumLo">9 / 21</td> - <td class="coverPerLo">54.5&nbsp;%</td> - <td class="coverNumLo">12 / 22</td> - </tr> - <tr> - <td class="coverFile"><a href="md5.c.gcov.html">md5.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=90 height=10 alt="89.9%"><img src="../snow.png" width=10 height=10 alt="89.9%"></td></tr></table> - </td> - <td class="coverPerMed">89.9&nbsp;%</td> - <td class="coverNumMed">107 / 119</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">5 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="rijndael.c.gcov.html">rijndael.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="95.8%"><img src="../snow.png" width=4 height=10 alt="95.8%"></td></tr></table> - </td> - <td class="coverPerHi">95.8&nbsp;%</td> - <td class="coverNumHi">159 / 166</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">11 / 11</td> - <td class="coverPerHi">90.4&nbsp;%</td> - <td class="coverNumHi">103 / 114</td> - </tr> - <tr> - <td class="coverFile"><a href="sha1.c.gcov.html">sha1.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.5%"><img src="../snow.png" width=8 height=10 alt="91.5%"></td></tr></table> - </td> - <td class="coverPerHi">91.5&nbsp;%</td> - <td class="coverNumHi">97 / 106</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">5 / 5</td> - <td class="coverPerMed">75.0&nbsp;%</td> - <td class="coverNumMed">18 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="sha2.c.gcov.html">sha2.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=41 height=10 alt="41.2%"><img src="../snow.png" width=59 height=10 alt="41.2%"></td></tr></table> - </td> - <td class="coverPerLo">41.2&nbsp;%</td> - <td class="coverNumLo">94 / 228</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">4 / 12</td> - <td class="coverPerLo">28.9&nbsp;%</td> - <td class="coverNumLo">22 / 76</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcat.c.gcov.html">strlcat.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.1%"><img src="../snow.png" width=6 height=10 alt="94.1%"></td></tr></table> - </td> - <td class="coverPerHi">94.1&nbsp;%</td> - <td class="coverNumHi">16 / 17</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">80.0&nbsp;%</td> - <td class="coverNumMed">8 / 10</td> - </tr> - <tr> - <td class="coverFile"><a href="strlcpy.c.gcov.html">strlcpy.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table> - </td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">12 / 12</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">1 / 1</td> - <td class="coverPerMed">85.7&nbsp;%</td> - <td class="coverNumMed">12 / 14</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html deleted file mode 100644 index 8d81e8be..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func-sort-c.html +++ /dev/null @@ -1,97 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/md5.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - md5.c<span style="font-size: 80%;"> (<a href="md5.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">107</td> - <td class="headerCovTableEntry">119</td> - <td class="headerCovTableEntryMed">89.9 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="md5.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#193">MD5Transform</a></td> - <td class="coverFnHi">2413</td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#124">MD5Final</a></td> - <td class="coverFnHi">2409</td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#58">MD5Init</a></td> - <td class="coverFnHi">2409</td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#73">MD5Update</a></td> - <td class="coverFnHi">2409</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html deleted file mode 100644 index 0cfe3c15..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.func.html +++ /dev/null @@ -1,97 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/md5.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - md5.c<span style="font-size: 80%;"> (<a href="md5.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">107</td> - <td class="headerCovTableEntry">119</td> - <td class="headerCovTableEntryMed">89.9 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="md5.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#124">MD5Final</a></td> - <td class="coverFnHi">2409</td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#58">MD5Init</a></td> - <td class="coverFnHi">2409</td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#193">MD5Transform</a></td> - <td class="coverFnHi">2413</td> - </tr> - <tr> - <td class="coverFn"><a href="md5.c.gcov.html#73">MD5Update</a></td> - <td class="coverFnHi">2409</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html deleted file mode 100644 index 60b7c536..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/md5.c.gcov.html +++ /dev/null @@ -1,363 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/md5.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - md5.c<span style="font-size: 80%;"> (source / <a href="md5.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">107</td> - <td class="headerCovTableEntry">119</td> - <td class="headerCovTableEntryMed">89.9 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: md5.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Implementation of the MD5 message-digest algorithm for libfwknop. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * This code implements the MD5 message-digest algorithm. -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * The algorithm is due to Ron Rivest. This code was -<span class="lineNum"> 11 </span> : : * written by Colin Plumb in 1993, no copyright is claimed. -<span class="lineNum"> 12 </span> : : * This code is in the public domain; do with it what you wish. -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * Equivalent code is available from RSA Data Security, Inc. -<span class="lineNum"> 15 </span> : : * This code has been tested against that, and is equivalent, -<span class="lineNum"> 16 </span> : : * except that you don't need to include two pages of legalese -<span class="lineNum"> 17 </span> : : * with every copy. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * To compute the message digest of a chunk of bytes, declare an -<span class="lineNum"> 20 </span> : : * MD5Context structure, pass it to MD5Init, call MD5Update as -<span class="lineNum"> 21 </span> : : * needed on buffers full of bytes, and then call MD5Final, which -<span class="lineNum"> 22 </span> : : * will fill a supplied 16-byte array with the digest. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 25 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 26 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -<span class="lineNum"> 27 </span> : : * -<span class="lineNum"> 28 </span> : : ***************************************************************************** -<span class="lineNum"> 29 </span> : : */ -<span class="lineNum"> 30 </span> : : #include &quot;md5.h&quot; -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : -<span class="lineNum"> 33 </span> : : #if BYTEORDER == 1234 -<span class="lineNum"> 34 </span> : : #define byteReverse(buf, len) /* Nothing */ -<span class="lineNum"> 35 </span> : : #elif BYTEORDER == 4321 -<span class="lineNum"> 36 </span> : : /* Note: this code is harmless on little-endian machines. -<span class="lineNum"> 37 </span> : : */ -<span class="lineNum"> 38 </span> : : void byteReverse(unsigned char *buf, unsigned longs) -<span class="lineNum"> 39 </span> : : { -<span class="lineNum"> 40 </span> : : uint32_t t; -<span class="lineNum"> 41 </span> : : do { -<span class="lineNum"> 42 </span> : : t = (uint32_t) ((unsigned) buf[3] &lt;&lt; 8 | buf[2]) &lt;&lt; 16 | -<span class="lineNum"> 43 </span> : : ((unsigned) buf[1] &lt;&lt; 8 | buf[0]); -<span class="lineNum"> 44 </span> : : *(uint32_t *) buf = t; -<span class="lineNum"> 45 </span> : : buf += 4; -<span class="lineNum"> 46 </span> : : } while (--longs); -<span class="lineNum"> 47 </span> : : } -<span class="lineNum"> 48 </span> : : #else -<span class="lineNum"> 49 </span> : : #define byteReverse(buf, len) /* Nothing */ -<span class="lineNum"> 50 </span> : : #ifndef WIN32 -<span class="lineNum"> 51 </span> : : #warning Undetermined or unsupported Byte Order... We will try LITTLE_ENDIAN -<span class="lineNum"> 52 </span> : : #endif -<span class="lineNum"> 53 </span> : : #endif -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : /* -<span class="lineNum"> 56 </span> : : * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious -<span class="lineNum"> 57 </span> : : * initialization constants. -<a name="58"><span class="lineNum"> 58 </span> : : */</a> -<span class="lineNum"> 59 </span> : : void -<span class="lineNum"> 60 </span> :<span class="lineCov"> 2409 : MD5Init(MD5Context *ctx)</span> -<span class="lineNum"> 61 </span> : : { -<span class="lineNum"> 62 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[0] = 0x67452301;</span> -<span class="lineNum"> 63 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[1] = 0xefcdab89;</span> -<span class="lineNum"> 64 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[2] = 0x98badcfe;</span> -<span class="lineNum"> 65 </span> :<span class="lineCov"> 2409 : ctx-&gt;buf[3] = 0x10325476;</span> -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> :<span class="lineCov"> 2409 : ctx-&gt;bits[0] = 0;</span> -<span class="lineNum"> 68 </span> :<span class="lineCov"> 2409 : ctx-&gt;bits[1] = 0;</span> -<span class="lineNum"> 69 </span> :<span class="lineCov"> 2409 : }</span> -<span class="lineNum"> 70 </span> : : -<span class="lineNum"> 71 </span> : : /* Update context to reflect the concatenation of another buffer full -<span class="lineNum"> 72 </span> : : * of bytes. -<a name="73"><span class="lineNum"> 73 </span> : : */</a> -<span class="lineNum"> 74 </span> : : void -<span class="lineNum"> 75 </span> :<span class="lineCov"> 2409 : MD5Update(MD5Context *ctx, unsigned char *buf, unsigned len)</span> -<span class="lineNum"> 76 </span> : : { -<span class="lineNum"> 77 </span> : : uint32_t t; -<span class="lineNum"> 78 </span> : : -<span class="lineNum"> 79 </span> : : /* Update bitcount -<span class="lineNum"> 80 </span> : : */ -<span class="lineNum"> 81 </span> :<span class="lineCov"> 2409 : t = ctx-&gt;bits[0];</span> -<span class="lineNum"> 82 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2409 times"> + </span>]:<span class="lineCov"> 2409 : if ((ctx-&gt;bits[0] = t + ((uint32_t) len &lt;&lt; 3)) &lt; t)</span> -<span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : ctx-&gt;bits[1]++; /* Carry from low to high */</span> -<span class="lineNum"> 84 </span> :<span class="lineCov"> 2409 : ctx-&gt;bits[1] += len &gt;&gt; 29;</span> -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> :<span class="lineCov"> 2409 : t = (t &gt;&gt; 3) &amp; 0x3f; /* Bytes already in shsInfo-&gt;data */</span> -<span class="lineNum"> 87 </span> : : -<span class="lineNum"> 88 </span> : : /* Handle any leading odd-sized chunks -<span class="lineNum"> 89 </span> : : */ -<span class="lineNum"> 90 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2409 times"> + </span>]:<span class="lineCov"> 2409 : if (t) {</span> -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : unsigned char *p = (unsigned char *) ctx-&gt;in + t;</span> -<span class="lineNum"> 92 </span> : : -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : t = 64 - t;</span> -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &lt; t) {</span> -<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : memcpy(p, buf, len);</span> -<span class="lineNum"> 97 </span> :<span class="lineCov"> 2409 : return;</span> -<span class="lineNum"> 98 </span> : : } -<span class="lineNum"> 99 </span> : : -<span class="lineNum"> 100 </span> :<span class="lineNoCov"> 0 : memcpy(p, buf, t);</span> -<span class="lineNum"> 101 </span> : : byteReverse(ctx-&gt;in, 16); -<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : buf += t;</span> -<span class="lineNum"> 104 </span> :<span class="lineCov"> 2409 : len -= t;</span> -<span class="lineNum"> 105 </span> : : } -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> : : /* Process data in 64-byte chunks -<span class="lineNum"> 108 </span> : : */ -<span class="lineNum"> 109 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2409 times"> + </span>]:<span class="lineCov"> 2409 : while (len &gt;= 64) {</span> -<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : memcpy(ctx-&gt;in, buf, 64);</span> -<span class="lineNum"> 111 </span> : : byteReverse(ctx-&gt;in, 16); -<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> -<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : buf += 64;</span> -<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : len -= 64;</span> -<span class="lineNum"> 115 </span> : : } -<span class="lineNum"> 116 </span> : : -<span class="lineNum"> 117 </span> : : /* Handle any remaining bytes of data. -<span class="lineNum"> 118 </span> : : */ -<span class="lineNum"> 119 </span> :<span class="lineCov"> 2409 : memcpy(ctx-&gt;in, buf, len);</span> -<span class="lineNum"> 120 </span> : : } -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> : : /* Final wrapup - pad to 64-byte boundary with the bit pattern -<span class="lineNum"> 123 </span> : : * 1 0* (64-bit count of bits processed, MSB-first) -<a name="124"><span class="lineNum"> 124 </span> : : */</a> -<span class="lineNum"> 125 </span> : : void -<span class="lineNum"> 126 </span> :<span class="lineCov"> 2409 : MD5Final(unsigned char digest[16], MD5Context *ctx)</span> -<span class="lineNum"> 127 </span> : : { -<span class="lineNum"> 128 </span> : : unsigned count; -<span class="lineNum"> 129 </span> : : unsigned char *p; -<span class="lineNum"> 130 </span> : : -<span class="lineNum"> 131 </span> : : /* Compute number of bytes mod 64 -<span class="lineNum"> 132 </span> : : */ -<span class="lineNum"> 133 </span> :<span class="lineCov"> 2409 : count = (ctx-&gt;bits[0] &gt;&gt; 3) &amp; 0x3F;</span> -<span class="lineNum"> 134 </span> : : -<span class="lineNum"> 135 </span> : : /* Set the first char of padding to 0x80. This is safe since there is -<span class="lineNum"> 136 </span> : : * always at least one byte free -<span class="lineNum"> 137 </span> : : */ -<span class="lineNum"> 138 </span> :<span class="lineCov"> 2409 : p = ctx-&gt;in + count;</span> -<span class="lineNum"> 139 </span> :<span class="lineCov"> 2409 : *p++ = 0x80;</span> -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> : : /* Bytes of padding needed to make 64 bytes -<span class="lineNum"> 142 </span> : : */ -<span class="lineNum"> 143 </span> :<span class="lineCov"> 2409 : count = 64 - 1 - count;</span> -<span class="lineNum"> 144 </span> : : -<span class="lineNum"> 145 </span> : : /* Pad out to 56 mod 64 -<span class="lineNum"> 146 </span> : : */ -<span class="lineNum"> 147 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 2405 times"> + </span>]:<span class="lineCov"> 2409 : if (count &lt; 8) {</span> -<span class="lineNum"> 148 </span> : : /* Two lots of padding: Pad the first block to 64 bytes -<span class="lineNum"> 149 </span> : : */ -<span class="lineNum"> 150 </span> :<span class="lineCov"> 4 : memset(p, 0, count);</span> -<span class="lineNum"> 151 </span> : : byteReverse(ctx-&gt;in, 16); -<span class="lineNum"> 152 </span> :<span class="lineCov"> 4 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> -<span class="lineNum"> 153 </span> : : -<span class="lineNum"> 154 </span> : : /* Now fill the next block with 56 bytes -<span class="lineNum"> 155 </span> : : */ -<span class="lineNum"> 156 </span> :<span class="lineCov"> 4 : memset(ctx-&gt;in, 0, 56);</span> -<span class="lineNum"> 157 </span> : : } else { -<span class="lineNum"> 158 </span> : : /* Pad block to 56 bytes -<span class="lineNum"> 159 </span> : : */ -<span class="lineNum"> 160 </span> :<span class="lineCov"> 2405 : memset(p, 0, count - 8);</span> -<span class="lineNum"> 161 </span> : : } -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> : : byteReverse(ctx-&gt;in, 14); -<span class="lineNum"> 164 </span> : : -<span class="lineNum"> 165 </span> : : /* Append length in bits and transform -<span class="lineNum"> 166 </span> : : */ -<span class="lineNum"> 167 </span> :<span class="lineCov"> 2409 : memcpy(&amp;(ctx-&gt;in[56]), &amp;(ctx-&gt;bits[0]), sizeof(uint32_t));</span> -<span class="lineNum"> 168 </span> :<span class="lineCov"> 2409 : memcpy(&amp;(ctx-&gt;in[60]), &amp;(ctx-&gt;bits[1]), sizeof(uint32_t));</span> -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> :<span class="lineCov"> 2409 : MD5Transform(ctx-&gt;buf, (uint32_t *) ctx-&gt;in);</span> -<span class="lineNum"> 171 </span> : : byteReverse((unsigned char *) ctx-&gt;buf, 4); -<span class="lineNum"> 172 </span> :<span class="lineCov"> 2409 : memcpy(digest, ctx-&gt;buf, 16);</span> -<span class="lineNum"> 173 </span> : : -<span class="lineNum"> 174 </span> : : memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */ -<span class="lineNum"> 175 </span> :<span class="lineCov"> 2409 : }</span> -<span class="lineNum"> 176 </span> : : -<span class="lineNum"> 177 </span> : : -<span class="lineNum"> 178 </span> : : /* The four core functions -<span class="lineNum"> 179 </span> : : */ -<span class="lineNum"> 180 </span> : : #define F1(x, y, z) (z ^ (x &amp; (y ^ z))) -<span class="lineNum"> 181 </span> : : #define F2(x, y, z) F1(z, x, y) -<span class="lineNum"> 182 </span> : : #define F3(x, y, z) (x ^ y ^ z) -<span class="lineNum"> 183 </span> : : #define F4(x, y, z) (y ^ (x | ~z)) -<span class="lineNum"> 184 </span> : : -<span class="lineNum"> 185 </span> : : /* This is the central step in the MD5 algorithm. -<span class="lineNum"> 186 </span> : : */ -<span class="lineNum"> 187 </span> : : #define MD5STEP(f, w, x, y, z, data, s) \ -<span class="lineNum"> 188 </span> : : ( w += f(x, y, z) + data, w = w&lt;&lt;s | w&gt;&gt;(32-s), w += x ) -<span class="lineNum"> 189 </span> : : -<span class="lineNum"> 190 </span> : : /* The core of the MD5 algorithm, this alters an existing MD5 hash to -<span class="lineNum"> 191 </span> : : * reflect the addition of 16 longwords of new data. MD5Update blocks -<span class="lineNum"> 192 </span> : : * the data and converts bytes into longwords for this routine. -<a name="193"><span class="lineNum"> 193 </span> : : */</a> -<span class="lineNum"> 194 </span> : : void -<span class="lineNum"> 195 </span> :<span class="lineCov"> 2413 : MD5Transform(uint32_t buf[4], uint32_t in[16])</span> -<span class="lineNum"> 196 </span> : : { -<span class="lineNum"> 197 </span> : : register uint32_t a, b, c, d; -<span class="lineNum"> 198 </span> : : -<span class="lineNum"> 199 </span> :<span class="lineCov"> 2413 : a = buf[0];</span> -<span class="lineNum"> 200 </span> :<span class="lineCov"> 2413 : b = buf[1];</span> -<span class="lineNum"> 201 </span> :<span class="lineCov"> 2413 : c = buf[2];</span> -<span class="lineNum"> 202 </span> :<span class="lineCov"> 2413 : d = buf[3];</span> -<span class="lineNum"> 203 </span> : : -<span class="lineNum"> 204 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);</span> -<span class="lineNum"> 205 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);</span> -<span class="lineNum"> 206 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);</span> -<span class="lineNum"> 207 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);</span> -<span class="lineNum"> 208 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);</span> -<span class="lineNum"> 209 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);</span> -<span class="lineNum"> 210 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);</span> -<span class="lineNum"> 211 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);</span> -<span class="lineNum"> 212 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);</span> -<span class="lineNum"> 213 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);</span> -<span class="lineNum"> 214 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);</span> -<span class="lineNum"> 215 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);</span> -<span class="lineNum"> 216 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);</span> -<span class="lineNum"> 217 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);</span> -<span class="lineNum"> 218 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);</span> -<span class="lineNum"> 219 </span> :<span class="lineCov"> 2413 : MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);</span> -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);</span> -<span class="lineNum"> 222 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);</span> -<span class="lineNum"> 223 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);</span> -<span class="lineNum"> 224 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);</span> -<span class="lineNum"> 225 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);</span> -<span class="lineNum"> 226 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);</span> -<span class="lineNum"> 227 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);</span> -<span class="lineNum"> 228 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);</span> -<span class="lineNum"> 229 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);</span> -<span class="lineNum"> 230 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);</span> -<span class="lineNum"> 231 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);</span> -<span class="lineNum"> 232 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);</span> -<span class="lineNum"> 233 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);</span> -<span class="lineNum"> 234 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);</span> -<span class="lineNum"> 235 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);</span> -<span class="lineNum"> 236 </span> :<span class="lineCov"> 2413 : MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);</span> -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);</span> -<span class="lineNum"> 239 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);</span> -<span class="lineNum"> 240 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);</span> -<span class="lineNum"> 241 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);</span> -<span class="lineNum"> 242 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);</span> -<span class="lineNum"> 243 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);</span> -<span class="lineNum"> 244 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);</span> -<span class="lineNum"> 245 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);</span> -<span class="lineNum"> 246 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);</span> -<span class="lineNum"> 247 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);</span> -<span class="lineNum"> 248 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);</span> -<span class="lineNum"> 249 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);</span> -<span class="lineNum"> 250 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);</span> -<span class="lineNum"> 251 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);</span> -<span class="lineNum"> 252 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);</span> -<span class="lineNum"> 253 </span> :<span class="lineCov"> 2413 : MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);</span> -<span class="lineNum"> 254 </span> : : -<span class="lineNum"> 255 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);</span> -<span class="lineNum"> 256 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);</span> -<span class="lineNum"> 257 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);</span> -<span class="lineNum"> 258 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);</span> -<span class="lineNum"> 259 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);</span> -<span class="lineNum"> 260 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);</span> -<span class="lineNum"> 261 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);</span> -<span class="lineNum"> 262 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);</span> -<span class="lineNum"> 263 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);</span> -<span class="lineNum"> 264 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);</span> -<span class="lineNum"> 265 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);</span> -<span class="lineNum"> 266 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);</span> -<span class="lineNum"> 267 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);</span> -<span class="lineNum"> 268 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);</span> -<span class="lineNum"> 269 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);</span> -<span class="lineNum"> 270 </span> :<span class="lineCov"> 2413 : MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);</span> -<span class="lineNum"> 271 </span> : : -<span class="lineNum"> 272 </span> :<span class="lineCov"> 2413 : buf[0] += a;</span> -<span class="lineNum"> 273 </span> :<span class="lineCov"> 2413 : buf[1] += b;</span> -<span class="lineNum"> 274 </span> :<span class="lineCov"> 2413 : buf[2] += c;</span> -<span class="lineNum"> 275 </span> :<span class="lineCov"> 2413 : buf[3] += d;</span> -<span class="lineNum"> 276 </span> :<span class="lineCov"> 2413 : } </span> -<span class="lineNum"> 277 </span> : : -<span class="lineNum"> 278 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html deleted file mode 100644 index c7d0e3c1..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func-sort-c.html +++ /dev/null @@ -1,125 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/rijndael.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - rijndael.c<span style="font-size: 80%;"> (<a href="rijndael.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">159</td> - <td class="headerCovTableEntry">166</td> - <td class="headerCovTableEntryHi">95.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">103</td> - <td class="headerCovTableEntry">114</td> - <td class="headerCovTableEntryHi">90.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="rijndael.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#277">mul</a></td> - <td class="coverFnHi">668096</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#367">key_addition32</a></td> - <td class="coverFnHi">89765</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#284">inv_mix_column</a></td> - <td class="coverFnHi">10439</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#376">key_addition32to8</a></td> - <td class="coverFnHi">6905</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#351">key_addition_8to32</a></td> - <td class="coverFnHi">6905</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#266">xtime</a></td> - <td class="coverFnHi">5621</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#397">rijndael_encrypt</a></td> - <td class="coverFnHi">3827</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#436">rijndael_decrypt</a></td> - <td class="coverFnHi">3078</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#305">rijndael_setup</a></td> - <td class="coverFnHi">803</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#469">block_encrypt</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#538">block_decrypt</a></td> - <td class="coverFnHi">387</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html deleted file mode 100644 index 3ae6a256..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.func.html +++ /dev/null @@ -1,125 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/rijndael.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - rijndael.c<span style="font-size: 80%;"> (<a href="rijndael.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">159</td> - <td class="headerCovTableEntry">166</td> - <td class="headerCovTableEntryHi">95.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">103</td> - <td class="headerCovTableEntry">114</td> - <td class="headerCovTableEntryHi">90.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="rijndael.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#538">block_decrypt</a></td> - <td class="coverFnHi">387</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#469">block_encrypt</a></td> - <td class="coverFnHi">416</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#284">inv_mix_column</a></td> - <td class="coverFnHi">10439</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#367">key_addition32</a></td> - <td class="coverFnHi">89765</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#376">key_addition32to8</a></td> - <td class="coverFnHi">6905</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#351">key_addition_8to32</a></td> - <td class="coverFnHi">6905</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#277">mul</a></td> - <td class="coverFnHi">668096</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#436">rijndael_decrypt</a></td> - <td class="coverFnHi">3078</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#397">rijndael_encrypt</a></td> - <td class="coverFnHi">3827</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#305">rijndael_setup</a></td> - <td class="coverFnHi">803</td> - </tr> - <tr> - <td class="coverFn"><a href="rijndael.c.gcov.html#266">xtime</a></td> - <td class="coverFnHi">5621</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html deleted file mode 100644 index ca03e6ab..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/rijndael.c.gcov.html +++ /dev/null @@ -1,702 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/rijndael.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - rijndael.c<span style="font-size: 80%;"> (source / <a href="rijndael.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">159</td> - <td class="headerCovTableEntry">166</td> - <td class="headerCovTableEntryHi">95.8 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">103</td> - <td class="headerCovTableEntry">114</td> - <td class="headerCovTableEntryHi">90.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: rijndael.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: rijndael - An implementation of the Rijndael cipher. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Copyright (C) 2000, 2001 Rafael R. Sevilla &lt;sevillar@team.ph.inter.net&gt; -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * Currently maintained by brian d foy, &lt;bdfoy@cpan.org&gt; -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;rijndael.h&quot; -<span class="lineNum"> 33 </span> : : #include &lt;stdlib.h&gt; -<span class="lineNum"> 34 </span> : : #include &lt;string.h&gt; -<span class="lineNum"> 35 </span> : : #include &lt;stdio.h&gt; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : /* These tables combine both the S-boxes and the mixcolumn transformation, so -<span class="lineNum"> 38 </span> : : that we can perform a round's encryption or by means of four table lookups -<span class="lineNum"> 39 </span> : : and four XOR's per column of state. They were generated by the -<span class="lineNum"> 40 </span> : : makertbls.pl script. */ -<span class="lineNum"> 41 </span> : : uint32_t dtbl[] = { -<span class="lineNum"> 42 </span> : : 0xa56363c6, 0x847c7cf8, 0x997777ee, 0x8d7b7bf6, -<span class="lineNum"> 43 </span> : : 0x0df2f2ff, 0xbd6b6bd6, 0xb16f6fde, 0x54c5c591, -<span class="lineNum"> 44 </span> : : 0x50303060, 0x03010102, 0xa96767ce, 0x7d2b2b56, -<span class="lineNum"> 45 </span> : : 0x19fefee7, 0x62d7d7b5, 0xe6abab4d, 0x9a7676ec, -<span class="lineNum"> 46 </span> : : 0x45caca8f, 0x9d82821f, 0x40c9c989, 0x877d7dfa, -<span class="lineNum"> 47 </span> : : 0x15fafaef, 0xeb5959b2, 0xc947478e, 0x0bf0f0fb, -<span class="lineNum"> 48 </span> : : 0xecadad41, 0x67d4d4b3, 0xfda2a25f, 0xeaafaf45, -<span class="lineNum"> 49 </span> : : 0xbf9c9c23, 0xf7a4a453, 0x967272e4, 0x5bc0c09b, -<span class="lineNum"> 50 </span> : : 0xc2b7b775, 0x1cfdfde1, 0xae93933d, 0x6a26264c, -<span class="lineNum"> 51 </span> : : 0x5a36366c, 0x413f3f7e, 0x02f7f7f5, 0x4fcccc83, -<span class="lineNum"> 52 </span> : : 0x5c343468, 0xf4a5a551, 0x34e5e5d1, 0x08f1f1f9, -<span class="lineNum"> 53 </span> : : 0x937171e2, 0x73d8d8ab, 0x53313162, 0x3f15152a, -<span class="lineNum"> 54 </span> : : 0x0c040408, 0x52c7c795, 0x65232346, 0x5ec3c39d, -<span class="lineNum"> 55 </span> : : 0x28181830, 0xa1969637, 0x0f05050a, 0xb59a9a2f, -<span class="lineNum"> 56 </span> : : 0x0907070e, 0x36121224, 0x9b80801b, 0x3de2e2df, -<span class="lineNum"> 57 </span> : : 0x26ebebcd, 0x6927274e, 0xcdb2b27f, 0x9f7575ea, -<span class="lineNum"> 58 </span> : : 0x1b090912, 0x9e83831d, 0x742c2c58, 0x2e1a1a34, -<span class="lineNum"> 59 </span> : : 0x2d1b1b36, 0xb26e6edc, 0xee5a5ab4, 0xfba0a05b, -<span class="lineNum"> 60 </span> : : 0xf65252a4, 0x4d3b3b76, 0x61d6d6b7, 0xceb3b37d, -<span class="lineNum"> 61 </span> : : 0x7b292952, 0x3ee3e3dd, 0x712f2f5e, 0x97848413, -<span class="lineNum"> 62 </span> : : 0xf55353a6, 0x68d1d1b9, 0x00000000, 0x2cededc1, -<span class="lineNum"> 63 </span> : : 0x60202040, 0x1ffcfce3, 0xc8b1b179, 0xed5b5bb6, -<span class="lineNum"> 64 </span> : : 0xbe6a6ad4, 0x46cbcb8d, 0xd9bebe67, 0x4b393972, -<span class="lineNum"> 65 </span> : : 0xde4a4a94, 0xd44c4c98, 0xe85858b0, 0x4acfcf85, -<span class="lineNum"> 66 </span> : : 0x6bd0d0bb, 0x2aefefc5, 0xe5aaaa4f, 0x16fbfbed, -<span class="lineNum"> 67 </span> : : 0xc5434386, 0xd74d4d9a, 0x55333366, 0x94858511, -<span class="lineNum"> 68 </span> : : 0xcf45458a, 0x10f9f9e9, 0x06020204, 0x817f7ffe, -<span class="lineNum"> 69 </span> : : 0xf05050a0, 0x443c3c78, 0xba9f9f25, 0xe3a8a84b, -<span class="lineNum"> 70 </span> : : 0xf35151a2, 0xfea3a35d, 0xc0404080, 0x8a8f8f05, -<span class="lineNum"> 71 </span> : : 0xad92923f, 0xbc9d9d21, 0x48383870, 0x04f5f5f1, -<span class="lineNum"> 72 </span> : : 0xdfbcbc63, 0xc1b6b677, 0x75dadaaf, 0x63212142, -<span class="lineNum"> 73 </span> : : 0x30101020, 0x1affffe5, 0x0ef3f3fd, 0x6dd2d2bf, -<span class="lineNum"> 74 </span> : : 0x4ccdcd81, 0x140c0c18, 0x35131326, 0x2fececc3, -<span class="lineNum"> 75 </span> : : 0xe15f5fbe, 0xa2979735, 0xcc444488, 0x3917172e, -<span class="lineNum"> 76 </span> : : 0x57c4c493, 0xf2a7a755, 0x827e7efc, 0x473d3d7a, -<span class="lineNum"> 77 </span> : : 0xac6464c8, 0xe75d5dba, 0x2b191932, 0x957373e6, -<span class="lineNum"> 78 </span> : : 0xa06060c0, 0x98818119, 0xd14f4f9e, 0x7fdcdca3, -<span class="lineNum"> 79 </span> : : 0x66222244, 0x7e2a2a54, 0xab90903b, 0x8388880b, -<span class="lineNum"> 80 </span> : : 0xca46468c, 0x29eeeec7, 0xd3b8b86b, 0x3c141428, -<span class="lineNum"> 81 </span> : : 0x79dedea7, 0xe25e5ebc, 0x1d0b0b16, 0x76dbdbad, -<span class="lineNum"> 82 </span> : : 0x3be0e0db, 0x56323264, 0x4e3a3a74, 0x1e0a0a14, -<span class="lineNum"> 83 </span> : : 0xdb494992, 0x0a06060c, 0x6c242448, 0xe45c5cb8, -<span class="lineNum"> 84 </span> : : 0x5dc2c29f, 0x6ed3d3bd, 0xefacac43, 0xa66262c4, -<span class="lineNum"> 85 </span> : : 0xa8919139, 0xa4959531, 0x37e4e4d3, 0x8b7979f2, -<span class="lineNum"> 86 </span> : : 0x32e7e7d5, 0x43c8c88b, 0x5937376e, 0xb76d6dda, -<span class="lineNum"> 87 </span> : : 0x8c8d8d01, 0x64d5d5b1, 0xd24e4e9c, 0xe0a9a949, -<span class="lineNum"> 88 </span> : : 0xb46c6cd8, 0xfa5656ac, 0x07f4f4f3, 0x25eaeacf, -<span class="lineNum"> 89 </span> : : 0xaf6565ca, 0x8e7a7af4, 0xe9aeae47, 0x18080810, -<span class="lineNum"> 90 </span> : : 0xd5baba6f, 0x887878f0, 0x6f25254a, 0x722e2e5c, -<span class="lineNum"> 91 </span> : : 0x241c1c38, 0xf1a6a657, 0xc7b4b473, 0x51c6c697, -<span class="lineNum"> 92 </span> : : 0x23e8e8cb, 0x7cdddda1, 0x9c7474e8, 0x211f1f3e, -<span class="lineNum"> 93 </span> : : 0xdd4b4b96, 0xdcbdbd61, 0x868b8b0d, 0x858a8a0f, -<span class="lineNum"> 94 </span> : : 0x907070e0, 0x423e3e7c, 0xc4b5b571, 0xaa6666cc, -<span class="lineNum"> 95 </span> : : 0xd8484890, 0x05030306, 0x01f6f6f7, 0x120e0e1c, -<span class="lineNum"> 96 </span> : : 0xa36161c2, 0x5f35356a, 0xf95757ae, 0xd0b9b969, -<span class="lineNum"> 97 </span> : : 0x91868617, 0x58c1c199, 0x271d1d3a, 0xb99e9e27, -<span class="lineNum"> 98 </span> : : 0x38e1e1d9, 0x13f8f8eb, 0xb398982b, 0x33111122, -<span class="lineNum"> 99 </span> : : 0xbb6969d2, 0x70d9d9a9, 0x898e8e07, 0xa7949433, -<span class="lineNum"> 100 </span> : : 0xb69b9b2d, 0x221e1e3c, 0x92878715, 0x20e9e9c9, -<span class="lineNum"> 101 </span> : : 0x49cece87, 0xff5555aa, 0x78282850, 0x7adfdfa5, -<span class="lineNum"> 102 </span> : : 0x8f8c8c03, 0xf8a1a159, 0x80898909, 0x170d0d1a, -<span class="lineNum"> 103 </span> : : 0xdabfbf65, 0x31e6e6d7, 0xc6424284, 0xb86868d0, -<span class="lineNum"> 104 </span> : : 0xc3414182, 0xb0999929, 0x772d2d5a, 0x110f0f1e, -<span class="lineNum"> 105 </span> : : 0xcbb0b07b, 0xfc5454a8, 0xd6bbbb6d, 0x3a16162c, -<span class="lineNum"> 106 </span> : : }; -<span class="lineNum"> 107 </span> : : -<span class="lineNum"> 108 </span> : : uint32_t itbl[] = { -<span class="lineNum"> 109 </span> : : 0x50a7f451, 0x5365417e, 0xc3a4171a, 0x965e273a, -<span class="lineNum"> 110 </span> : : 0xcb6bab3b, 0xf1459d1f, 0xab58faac, 0x9303e34b, -<span class="lineNum"> 111 </span> : : 0x55fa3020, 0xf66d76ad, 0x9176cc88, 0x254c02f5, -<span class="lineNum"> 112 </span> : : 0xfcd7e54f, 0xd7cb2ac5, 0x80443526, 0x8fa362b5, -<span class="lineNum"> 113 </span> : : 0x495ab1de, 0x671bba25, 0x980eea45, 0xe1c0fe5d, -<span class="lineNum"> 114 </span> : : 0x02752fc3, 0x12f04c81, 0xa397468d, 0xc6f9d36b, -<span class="lineNum"> 115 </span> : : 0xe75f8f03, 0x959c9215, 0xeb7a6dbf, 0xda595295, -<span class="lineNum"> 116 </span> : : 0x2d83bed4, 0xd3217458, 0x2969e049, 0x44c8c98e, -<span class="lineNum"> 117 </span> : : 0x6a89c275, 0x78798ef4, 0x6b3e5899, 0xdd71b927, -<span class="lineNum"> 118 </span> : : 0xb64fe1be, 0x17ad88f0, 0x66ac20c9, 0xb43ace7d, -<span class="lineNum"> 119 </span> : : 0x184adf63, 0x82311ae5, 0x60335197, 0x457f5362, -<span class="lineNum"> 120 </span> : : 0xe07764b1, 0x84ae6bbb, 0x1ca081fe, 0x942b08f9, -<span class="lineNum"> 121 </span> : : 0x58684870, 0x19fd458f, 0x876cde94, 0xb7f87b52, -<span class="lineNum"> 122 </span> : : 0x23d373ab, 0xe2024b72, 0x578f1fe3, 0x2aab5566, -<span class="lineNum"> 123 </span> : : 0x0728ebb2, 0x03c2b52f, 0x9a7bc586, 0xa50837d3, -<span class="lineNum"> 124 </span> : : 0xf2872830, 0xb2a5bf23, 0xba6a0302, 0x5c8216ed, -<span class="lineNum"> 125 </span> : : 0x2b1ccf8a, 0x92b479a7, 0xf0f207f3, 0xa1e2694e, -<span class="lineNum"> 126 </span> : : 0xcdf4da65, 0xd5be0506, 0x1f6234d1, 0x8afea6c4, -<span class="lineNum"> 127 </span> : : 0x9d532e34, 0xa055f3a2, 0x32e18a05, 0x75ebf6a4, -<span class="lineNum"> 128 </span> : : 0x39ec830b, 0xaaef6040, 0x069f715e, 0x51106ebd, -<span class="lineNum"> 129 </span> : : 0xf98a213e, 0x3d06dd96, 0xae053edd, 0x46bde64d, -<span class="lineNum"> 130 </span> : : 0xb58d5491, 0x055dc471, 0x6fd40604, 0xff155060, -<span class="lineNum"> 131 </span> : : 0x24fb9819, 0x97e9bdd6, 0xcc434089, 0x779ed967, -<span class="lineNum"> 132 </span> : : 0xbd42e8b0, 0x888b8907, 0x385b19e7, 0xdbeec879, -<span class="lineNum"> 133 </span> : : 0x470a7ca1, 0xe90f427c, 0xc91e84f8, 0x00000000, -<span class="lineNum"> 134 </span> : : 0x83868009, 0x48ed2b32, 0xac70111e, 0x4e725a6c, -<span class="lineNum"> 135 </span> : : 0xfbff0efd, 0x5638850f, 0x1ed5ae3d, 0x27392d36, -<span class="lineNum"> 136 </span> : : 0x64d90f0a, 0x21a65c68, 0xd1545b9b, 0x3a2e3624, -<span class="lineNum"> 137 </span> : : 0xb1670a0c, 0x0fe75793, 0xd296eeb4, 0x9e919b1b, -<span class="lineNum"> 138 </span> : : 0x4fc5c080, 0xa220dc61, 0x694b775a, 0x161a121c, -<span class="lineNum"> 139 </span> : : 0x0aba93e2, 0xe52aa0c0, 0x43e0223c, 0x1d171b12, -<span class="lineNum"> 140 </span> : : 0x0b0d090e, 0xadc78bf2, 0xb9a8b62d, 0xc8a91e14, -<span class="lineNum"> 141 </span> : : 0x8519f157, 0x4c0775af, 0xbbdd99ee, 0xfd607fa3, -<span class="lineNum"> 142 </span> : : 0x9f2601f7, 0xbcf5725c, 0xc53b6644, 0x347efb5b, -<span class="lineNum"> 143 </span> : : 0x7629438b, 0xdcc623cb, 0x68fcedb6, 0x63f1e4b8, -<span class="lineNum"> 144 </span> : : 0xcadc31d7, 0x10856342, 0x40229713, 0x2011c684, -<span class="lineNum"> 145 </span> : : 0x7d244a85, 0xf83dbbd2, 0x1132f9ae, 0x6da129c7, -<span class="lineNum"> 146 </span> : : 0x4b2f9e1d, 0xf330b2dc, 0xec52860d, 0xd0e3c177, -<span class="lineNum"> 147 </span> : : 0x6c16b32b, 0x99b970a9, 0xfa489411, 0x2264e947, -<span class="lineNum"> 148 </span> : : 0xc48cfca8, 0x1a3ff0a0, 0xd82c7d56, 0xef903322, -<span class="lineNum"> 149 </span> : : 0xc74e4987, 0xc1d138d9, 0xfea2ca8c, 0x360bd498, -<span class="lineNum"> 150 </span> : : 0xcf81f5a6, 0x28de7aa5, 0x268eb7da, 0xa4bfad3f, -<span class="lineNum"> 151 </span> : : 0xe49d3a2c, 0x0d927850, 0x9bcc5f6a, 0x62467e54, -<span class="lineNum"> 152 </span> : : 0xc2138df6, 0xe8b8d890, 0x5ef7392e, 0xf5afc382, -<span class="lineNum"> 153 </span> : : 0xbe805d9f, 0x7c93d069, 0xa92dd56f, 0xb31225cf, -<span class="lineNum"> 154 </span> : : 0x3b99acc8, 0xa77d1810, 0x6e639ce8, 0x7bbb3bdb, -<span class="lineNum"> 155 </span> : : 0x097826cd, 0xf418596e, 0x01b79aec, 0xa89a4f83, -<span class="lineNum"> 156 </span> : : 0x656e95e6, 0x7ee6ffaa, 0x08cfbc21, 0xe6e815ef, -<span class="lineNum"> 157 </span> : : 0xd99be7ba, 0xce366f4a, 0xd4099fea, 0xd67cb029, -<span class="lineNum"> 158 </span> : : 0xafb2a431, 0x31233f2a, 0x3094a5c6, 0xc066a235, -<span class="lineNum"> 159 </span> : : 0x37bc4e74, 0xa6ca82fc, 0xb0d090e0, 0x15d8a733, -<span class="lineNum"> 160 </span> : : 0x4a9804f1, 0xf7daec41, 0x0e50cd7f, 0x2ff69117, -<span class="lineNum"> 161 </span> : : 0x8dd64d76, 0x4db0ef43, 0x544daacc, 0xdf0496e4, -<span class="lineNum"> 162 </span> : : 0xe3b5d19e, 0x1b886a4c, 0xb81f2cc1, 0x7f516546, -<span class="lineNum"> 163 </span> : : 0x04ea5e9d, 0x5d358c01, 0x737487fa, 0x2e410bfb, -<span class="lineNum"> 164 </span> : : 0x5a1d67b3, 0x52d2db92, 0x335610e9, 0x1347d66d, -<span class="lineNum"> 165 </span> : : 0x8c61d79a, 0x7a0ca137, 0x8e14f859, 0x893c13eb, -<span class="lineNum"> 166 </span> : : 0xee27a9ce, 0x35c961b7, 0xede51ce1, 0x3cb1477a, -<span class="lineNum"> 167 </span> : : 0x59dfd29c, 0x3f73f255, 0x79ce1418, 0xbf37c773, -<span class="lineNum"> 168 </span> : : 0xeacdf753, 0x5baafd5f, 0x146f3ddf, 0x86db4478, -<span class="lineNum"> 169 </span> : : 0x81f3afca, 0x3ec468b9, 0x2c342438, 0x5f40a3c2, -<span class="lineNum"> 170 </span> : : 0x72c31d16, 0x0c25e2bc, 0x8b493c28, 0x41950dff, -<span class="lineNum"> 171 </span> : : 0x7101a839, 0xdeb30c08, 0x9ce4b4d8, 0x90c15664, -<span class="lineNum"> 172 </span> : : 0x6184cb7b, 0x70b632d5, 0x745c6c48, 0x4257b8d0, -<span class="lineNum"> 173 </span> : : }; -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> : : -<span class="lineNum"> 176 </span> : : /* Needed only for the key schedule and for final rounds */ -<span class="lineNum"> 177 </span> : : uint8_t sbox[256] = { -<span class="lineNum"> 178 </span> : : 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, -<span class="lineNum"> 179 </span> : : 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, -<span class="lineNum"> 180 </span> : : 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, -<span class="lineNum"> 181 </span> : : 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, -<span class="lineNum"> 182 </span> : : 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, -<span class="lineNum"> 183 </span> : : 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, -<span class="lineNum"> 184 </span> : : 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, -<span class="lineNum"> 185 </span> : : 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, -<span class="lineNum"> 186 </span> : : 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, -<span class="lineNum"> 187 </span> : : 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, -<span class="lineNum"> 188 </span> : : 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, -<span class="lineNum"> 189 </span> : : 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, -<span class="lineNum"> 190 </span> : : 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, -<span class="lineNum"> 191 </span> : : 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, -<span class="lineNum"> 192 </span> : : 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, -<span class="lineNum"> 193 </span> : : 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, -<span class="lineNum"> 194 </span> : : 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, -<span class="lineNum"> 195 </span> : : 22, -<span class="lineNum"> 196 </span> : : }; -<span class="lineNum"> 197 </span> : : -<span class="lineNum"> 198 </span> : : uint8_t isbox[256] = { -<span class="lineNum"> 199 </span> : : 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, -<span class="lineNum"> 200 </span> : : 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, -<span class="lineNum"> 201 </span> : : 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, -<span class="lineNum"> 202 </span> : : 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, -<span class="lineNum"> 203 </span> : : 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, -<span class="lineNum"> 204 </span> : : 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, -<span class="lineNum"> 205 </span> : : 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, -<span class="lineNum"> 206 </span> : : 228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, -<span class="lineNum"> 207 </span> : : 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, -<span class="lineNum"> 208 </span> : : 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, -<span class="lineNum"> 209 </span> : : 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, -<span class="lineNum"> 210 </span> : : 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, -<span class="lineNum"> 211 </span> : : 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, -<span class="lineNum"> 212 </span> : : 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81, -<span class="lineNum"> 213 </span> : : 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, -<span class="lineNum"> 214 </span> : : 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, -<span class="lineNum"> 215 </span> : : 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, -<span class="lineNum"> 216 </span> : : 125, -<span class="lineNum"> 217 </span> : : }; -<span class="lineNum"> 218 </span> : : -<span class="lineNum"> 219 </span> : : /* Used only by the key schedule */ -<span class="lineNum"> 220 </span> : : uint8_t Logtable[256] = { -<span class="lineNum"> 221 </span> : : 0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3, -<span class="lineNum"> 222 </span> : : 100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, -<span class="lineNum"> 223 </span> : : 193, 125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, -<span class="lineNum"> 224 </span> : : 9, 120, 101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, -<span class="lineNum"> 225 </span> : : 147, 218, 142, 150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, -<span class="lineNum"> 226 </span> : : 64, 70, 131, 56, 102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, -<span class="lineNum"> 227 </span> : : 152, 34, 136, 145, 16, 126, 110, 72, 195, 163, 182, 30, 66, 58, 107, -<span class="lineNum"> 228 </span> : : 40, 84, 250, 133, 61, 186, 43, 121, 10, 21, 155, 159, 94, 202, 78, -<span class="lineNum"> 229 </span> : : 212, 172, 229, 243, 115, 167, 87, 175, 88, 168, 80, 244, 234, 214, 116, -<span class="lineNum"> 230 </span> : : 79, 174, 233, 213, 231, 230, 173, 232, 44, 215, 117, 122, 235, 22, 11, -<span class="lineNum"> 231 </span> : : 245, 89, 203, 95, 176, 156, 169, 81, 160, 127, 12, 246, 111, 23, 196, -<span class="lineNum"> 232 </span> : : 73, 236, 216, 67, 31, 45, 164, 118, 123, 183, 204, 187, 62, 90, 251, -<span class="lineNum"> 233 </span> : : 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157, 151, 178, 135, 144, -<span class="lineNum"> 234 </span> : : 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209, 83, 57, 132, -<span class="lineNum"> 235 </span> : : 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171, 68, 17, -<span class="lineNum"> 236 </span> : : 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165, 103, -<span class="lineNum"> 237 </span> : : 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7, -<span class="lineNum"> 238 </span> : : }; -<span class="lineNum"> 239 </span> : : -<span class="lineNum"> 240 </span> : : uint8_t Alogtable[256] = { -<span class="lineNum"> 241 </span> : : 1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, -<span class="lineNum"> 242 </span> : : 53, 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, -<span class="lineNum"> 243 </span> : : 102, 170, 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, -<span class="lineNum"> 244 </span> : : 171, 230, 49, 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, -<span class="lineNum"> 245 </span> : : 211, 110, 178, 205, 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, -<span class="lineNum"> 246 </span> : : 8, 24, 40, 120, 136, 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, -<span class="lineNum"> 247 </span> : : 179, 206, 73, 219, 118, 154, 181, 196, 87, 249, 16, 48, 80, 240, 11, -<span class="lineNum"> 248 </span> : : 29, 39, 105, 187, 214, 97, 163, 254, 25, 43, 125, 135, 146, 173, 236, -<span class="lineNum"> 249 </span> : : 47, 113, 147, 174, 233, 32, 96, 160, 251, 22, 58, 78, 210, 109, 183, -<span class="lineNum"> 250 </span> : : 194, 93, 231, 50, 86, 250, 21, 63, 65, 195, 94, 226, 61, 71, 201, -<span class="lineNum"> 251 </span> : : 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, 159, 186, 213, 100, 172, -<span class="lineNum"> 252 </span> : : 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, 155, 182, 193, 88, -<span class="lineNum"> 253 </span> : : 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, 252, 31, 33, -<span class="lineNum"> 254 </span> : : 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, 69, 207, -<span class="lineNum"> 255 </span> : : 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, 18, -<span class="lineNum"> 256 </span> : : 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, -<span class="lineNum"> 257 </span> : : 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1, -<span class="lineNum"> 258 </span> : : }; -<span class="lineNum"> 259 </span> : : -<span class="lineNum"> 260 </span> : : #define ROTBYTE(x) (((x) &gt;&gt; 8) | (((x) &amp; 0xff) &lt;&lt; 24)) -<span class="lineNum"> 261 </span> : : #define ROTRBYTE(x) (((x) &lt;&lt; 8) | (((x) &gt;&gt; 24) &amp; 0xff)) -<span class="lineNum"> 262 </span> : : #define SUBBYTE(x, box) (((box)[((x) &amp; 0xff)]) | \ -<span class="lineNum"> 263 </span> : : ((box)[(((x) &gt;&gt; 8) &amp; 0xff)] &lt;&lt; 8) | \ -<span class="lineNum"> 264 </span> : : ((box)[(((x) &gt;&gt; 16) &amp; 0xff)] &lt;&lt; 16) | \ -<span class="lineNum"> 265 </span> : : ((box)[(((x) &gt;&gt; 24) &amp; 0xff)] &lt;&lt; 24)) -<a name="266"><span class="lineNum"> 266 </span> : : </a> -<span class="lineNum"> 267 </span> : : static uint8_t -<span class="lineNum"> 268 </span> :<span class="lineCov"> 5621 : xtime(uint8_t a)</span> -<span class="lineNum"> 269 </span> : : { -<span class="lineNum"> 270 </span> : : uint8_t b; -<span class="lineNum"> 271 </span> : : -<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 0 was taken 5621 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 5621 : b = (a &amp; 0x80) ? 0x1b : 0;</span> -<span class="lineNum"> 273 </span> :<span class="lineCov"> 5621 : a&lt;&lt;=1;</span> -<span class="lineNum"> 274 </span> :<span class="lineCov"> 5621 : a^=b;</span> -<span class="lineNum"> 275 </span> :<span class="lineCov"> 5621 : return(a);</span> -<span class="lineNum"> 276 </span> : : } -<a name="277"><span class="lineNum"> 277 </span> : : </a> -<span class="lineNum"> 278 </span> : : static uint8_t -<span class="lineNum"> 279 </span> :<span class="lineCov"> 668096 : mul(uint8_t a, uint8_t b)</span> -<span class="lineNum"> 280 </span> : : { -<span class="lineNum"> 281 </span> [<span class="branchCov" title="Branch 0 was taken 665900 times"> + </span><span class="branchCov" title="Branch 1 was taken 2196 times"> + </span>]:<span class="lineCov"> 668096 : if (a &amp;&amp; b) return Alogtable[(Logtable[a] + Logtable[b])%255];</span> -<span class="lineNum"> 282 </span> : : else return 0; -<span class="lineNum"> 283 </span> : : } -<a name="284"><span class="lineNum"> 284 </span> : : </a> -<span class="lineNum"> 285 </span> : : static void -<span class="lineNum"> 286 </span> :<span class="lineCov"> 10439 : inv_mix_column(uint32_t *a, uint32_t *b)</span> -<span class="lineNum"> 287 </span> : : { -<span class="lineNum"> 288 </span> : : uint8_t c[4][4]; -<span class="lineNum"> 289 </span> : : int i, j; -<span class="lineNum"> 290 </span> : : -<span class="lineNum"> 291 </span> [<span class="branchCov" title="Branch 0 was taken 41756 times"> + </span><span class="branchCov" title="Branch 1 was taken 10439 times"> + </span>]:<span class="lineCov"> 52195 : for(j = 0; j &lt; 4; j++) {</span> -<span class="lineNum"> 292 </span> [<span class="branchCov" title="Branch 0 was taken 167024 times"> + </span><span class="branchCov" title="Branch 1 was taken 41756 times"> + </span>]:<span class="lineCov"> 208780 : for(i = 0; i &lt; 4; i++) {</span> -<span class="lineNum"> 293 </span> :<span class="lineCov"> 167024 : c[j][i] = mul(0xe, (a[j] &gt;&gt; i*8) &amp; 0xff)</span> -<span class="lineNum"> 294 </span> :<span class="lineCov"> 167024 : ^ mul(0xb, (a[j] &gt;&gt; ((i+1)%4)*8) &amp; 0xff)</span> -<span class="lineNum"> 295 </span> :<span class="lineCov"> 167024 : ^ mul(0xd, (a[j] &gt;&gt; ((i+2)%4)*8) &amp; 0xff)</span> -<span class="lineNum"> 296 </span> :<span class="lineCov"> 167024 : ^ mul(0x9, (a[j] &gt;&gt; ((i+3)%4)*8) &amp; 0xff);</span> -<span class="lineNum"> 297 </span> : : } -<span class="lineNum"> 298 </span> : : } -<span class="lineNum"> 299 </span> [<span class="branchCov" title="Branch 0 was taken 41756 times"> + </span><span class="branchCov" title="Branch 1 was taken 10439 times"> + </span>]:<span class="lineCov"> 52195 : for(i = 0; i &lt; 4; i++) {</span> -<span class="lineNum"> 300 </span> :<span class="lineCov"> 41756 : b[i] = 0;</span> -<span class="lineNum"> 301 </span> [<span class="branchCov" title="Branch 0 was taken 167024 times"> + </span><span class="branchCov" title="Branch 1 was taken 41756 times"> + </span>]:<span class="lineCov"> 208780 : for(j = 0; j &lt; 4; j++)</span> -<span class="lineNum"> 302 </span> :<span class="lineCov"> 167024 : b[i] |= c[i][j] &lt;&lt; (j*8);</span> -<span class="lineNum"> 303 </span> : : } -<span class="lineNum"> 304 </span> :<span class="lineCov"> 10439 : }</span> -<a name="305"><span class="lineNum"> 305 </span> : : </a> -<span class="lineNum"> 306 </span> : : void -<span class="lineNum"> 307 </span> :<span class="lineCov"> 803 : rijndael_setup(RIJNDAEL_context *ctx, const size_t keysize, const uint8_t *key)</span> -<span class="lineNum"> 308 </span> : : { -<span class="lineNum"> 309 </span> : : int nk, nr, i, lastkey; -<span class="lineNum"> 310 </span> : : uint32_t temp, rcon; -<span class="lineNum"> 311 </span> : : -<span class="lineNum"> 312 </span> : : /* Truncate keysizes to the valid key sizes provided by Rijndael */ -<span class="lineNum"> 313 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 803 : if (keysize &gt;= RIJNDAEL_MAX_KEYSIZE) {</span> -<span class="lineNum"> 314 </span> : : nk = 8; -<span class="lineNum"> 315 </span> : : nr = 14; -<span class="lineNum"> 316 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } else if (keysize &gt;= 24) {</span> -<span class="lineNum"> 317 </span> : : nk = 6; -<span class="lineNum"> 318 </span> : : nr = 12; -<span class="lineNum"> 319 </span> : : } else { /* must be 16 or more */ -<span class="lineNum"> 320 </span> :<span class="lineNoCov"> 0 : nk = 4;</span> -<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : nr = 10;</span> -<span class="lineNum"> 322 </span> : : } -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> :<span class="lineCov"> 803 : lastkey = (RIJNDAEL_BLOCKSIZE/4) * (nr + 1);</span> -<span class="lineNum"> 325 </span> :<span class="lineCov"> 803 : ctx-&gt;nrounds = nr;</span> -<span class="lineNum"> 326 </span> :<span class="lineCov"> 803 : rcon = 1;</span> -<span class="lineNum"> 327 </span> [<span class="branchCov" title="Branch 0 was taken 6424 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 7227 : for (i=0; i&lt;nk; i++) {</span> -<span class="lineNum"> 328 </span> :<span class="lineCov"> 12848 : ctx-&gt;keys[i] = key[i*4] + (key[i*4+1]&lt;&lt;8) + (key[i*4+2]&lt;&lt;16) +</span> -<span class="lineNum"> 329 </span> :<span class="lineCov"> 6424 : (key[i*4+3]&lt;&lt;24);</span> -<span class="lineNum"> 330 </span> : : } -<span class="lineNum"> 331 </span> : : -<span class="lineNum"> 332 </span> [<span class="branchCov" title="Branch 0 was taken 41756 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 42559 : for (i=nk; i&lt;lastkey; i++) {</span> -<span class="lineNum"> 333 </span> :<span class="lineCov"> 41756 : temp = ctx-&gt;keys[i-1];</span> -<span class="lineNum"> 334 </span> [<span class="branchCov" title="Branch 0 was taken 5621 times"> + </span><span class="branchCov" title="Branch 1 was taken 36135 times"> + </span>]:<span class="lineCov"> 41756 : if (i % nk == 0) {</span> -<span class="lineNum"> 335 </span> :<span class="lineCov"> 5621 : temp = SUBBYTE(ROTBYTE(temp), sbox) ^ rcon;</span> -<span class="lineNum"> 336 </span> :<span class="lineCov"> 5621 : rcon = (uint32_t)xtime((uint8_t)rcon&amp;0xff);</span> -<span class="lineNum"> 337 </span>[<span class="branchCov" title="Branch 0 was taken 36135 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 4818 times"> + </span><span class="branchCov" title="Branch 3 was taken 31317 times"> + </span>]:<span class="lineCov"> 36135 : } else if (nk &gt; 6 &amp;&amp; (i%nk) == 4) {</span> -<span class="lineNum"> 338 </span> :<span class="lineCov"> 4818 : temp = SUBBYTE(temp, sbox);</span> -<span class="lineNum"> 339 </span> : : } -<span class="lineNum"> 340 </span> :<span class="lineCov"> 41756 : ctx-&gt;keys[i] = ctx-&gt;keys[i-nk] ^ temp;</span> -<span class="lineNum"> 341 </span> : : } -<span class="lineNum"> 342 </span> : : /* Generate the inverse keys */ -<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 3212 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 4015 : for (i=0; i&lt;4; i++) {</span> -<span class="lineNum"> 344 </span> :<span class="lineCov"> 3212 : ctx-&gt;ikeys[i] = ctx-&gt;keys[i];</span> -<span class="lineNum"> 345 </span> :<span class="lineCov"> 3212 : ctx-&gt;ikeys[lastkey-4 + i] = ctx-&gt;keys[lastkey-4 + i];</span> -<span class="lineNum"> 346 </span> : : } -<span class="lineNum"> 347 </span> [<span class="branchCov" title="Branch 0 was taken 10439 times"> + </span><span class="branchCov" title="Branch 1 was taken 803 times"> + </span>]:<span class="lineCov"> 11242 : for (i=4; i&lt;lastkey-4; i+=4)</span> -<span class="lineNum"> 348 </span> :<span class="lineCov"> 10439 : inv_mix_column(&amp;(ctx-&gt;keys[i]), &amp;(ctx-&gt;ikeys[i]));</span> -<span class="lineNum"> 349 </span> :<span class="lineCov"> 803 : }</span> -<span class="lineNum"> 350 </span> : : -<a name="351"><span class="lineNum"> 351 </span> : : /* Key addition that also packs every byte in the key to a word rep. */</a> -<span class="lineNum"> 352 </span> : : static void -<span class="lineNum"> 353 </span> :<span class="lineCov"> 6905 : key_addition_8to32(const uint8_t *txt, uint32_t *keys, uint32_t *out)</span> -<span class="lineNum"> 354 </span> : : { -<span class="lineNum"> 355 </span> : : const uint8_t *ptr; -<span class="lineNum"> 356 </span> : : int i, j; -<span class="lineNum"> 357 </span> : : uint32_t val; -<span class="lineNum"> 358 </span> : : -<span class="lineNum"> 359 </span> :<span class="lineCov"> 6905 : ptr = txt;</span> -<span class="lineNum"> 360 </span> [<span class="branchCov" title="Branch 0 was taken 27620 times"> + </span><span class="branchCov" title="Branch 1 was taken 6905 times"> + </span>]:<span class="lineCov"> 34525 : for (i=0; i&lt;4; i++) {</span> -<span class="lineNum"> 361 </span> : : val = 0; -<span class="lineNum"> 362 </span> [<span class="branchCov" title="Branch 0 was taken 110480 times"> + </span><span class="branchCov" title="Branch 1 was taken 27620 times"> + </span>]:<span class="lineCov"> 138100 : for (j=0; j&lt;4; j++)</span> -<span class="lineNum"> 363 </span> :<span class="lineCov"> 110480 : val |= (*ptr++ &lt;&lt; 8*j);</span> -<span class="lineNum"> 364 </span> :<span class="lineCov"> 27620 : out[i] = keys[i]^val;</span> -<span class="lineNum"> 365 </span> : : } -<span class="lineNum"> 366 </span> :<span class="lineCov"> 6905 : }</span> -<a name="367"><span class="lineNum"> 367 </span> : : </a> -<span class="lineNum"> 368 </span> : : static void -<span class="lineNum"> 369 </span> :<span class="lineCov"> 89765 : key_addition32(const uint32_t *txt, uint32_t *keys, uint32_t *out)</span> -<span class="lineNum"> 370 </span> : : { -<span class="lineNum"> 371 </span> : : int i; -<span class="lineNum"> 372 </span> : : -<span class="lineNum"> 373 </span> [<span class="branchCov" title="Branch 0 was taken 359060 times"> + </span><span class="branchCov" title="Branch 1 was taken 89765 times"> + </span>]:<span class="lineCov"> 448825 : for (i=0; i&lt;4; i++)</span> -<span class="lineNum"> 374 </span> :<span class="lineCov"> 359060 : out[i] = keys[i] ^ txt[i];</span> -<span class="lineNum"> 375 </span> :<span class="lineCov"> 89765 : }</span> -<a name="376"><span class="lineNum"> 376 </span> : : </a> -<span class="lineNum"> 377 </span> : : static void -<span class="lineNum"> 378 </span> :<span class="lineCov"> 6905 : key_addition32to8(const uint32_t *txt, uint32_t *keys, uint8_t *out)</span> -<span class="lineNum"> 379 </span> : : { -<span class="lineNum"> 380 </span> : : uint8_t *ptr; -<span class="lineNum"> 381 </span> : : int i, j; -<span class="lineNum"> 382 </span> : : uint32_t val; -<span class="lineNum"> 383 </span> : : -<span class="lineNum"> 384 </span> :<span class="lineCov"> 6905 : ptr = out;</span> -<span class="lineNum"> 385 </span> [<span class="branchCov" title="Branch 0 was taken 27620 times"> + </span><span class="branchCov" title="Branch 1 was taken 6905 times"> + </span>]:<span class="lineCov"> 34525 : for (i=0; i&lt;4; i++) {</span> -<span class="lineNum"> 386 </span> :<span class="lineCov"> 27620 : val = txt[i] ^ keys[i];</span> -<span class="lineNum"> 387 </span> [<span class="branchCov" title="Branch 0 was taken 110480 times"> + </span><span class="branchCov" title="Branch 1 was taken 27620 times"> + </span>]:<span class="lineCov"> 138100 : for (j=0; j&lt;4; j++)</span> -<span class="lineNum"> 388 </span> :<span class="lineCov"> 110480 : *ptr++ = (val &gt;&gt; 8*j) &amp; 0xff;</span> -<span class="lineNum"> 389 </span> : : } -<span class="lineNum"> 390 </span> :<span class="lineCov"> 6905 : }</span> -<span class="lineNum"> 391 </span> : : -<span class="lineNum"> 392 </span> : : static int idx[4][4] = { -<span class="lineNum"> 393 </span> : : { 0, 1, 2, 3 }, -<span class="lineNum"> 394 </span> : : { 1, 2, 3, 0 }, -<span class="lineNum"> 395 </span> : : { 2, 3, 0, 1 }, -<span class="lineNum"> 396 </span> : : { 3, 0, 1, 2 } }; -<a name="397"><span class="lineNum"> 397 </span> : : </a> -<span class="lineNum"> 398 </span> : : void -<span class="lineNum"> 399 </span> :<span class="lineCov"> 3827 : rijndael_encrypt(RIJNDAEL_context *ctx,</span> -<span class="lineNum"> 400 </span> : : const uint8_t *plaintext, -<span class="lineNum"> 401 </span> : : uint8_t *ciphertext) -<span class="lineNum"> 402 </span> : : { -<span class="lineNum"> 403 </span> : : int r, j; -<span class="lineNum"> 404 </span> : : uint32_t wtxt[4], t[4]; /* working ciphertext */ -<span class="lineNum"> 405 </span> : : uint32_t e; -<span class="lineNum"> 406 </span> : : -<span class="lineNum"> 407 </span> :<span class="lineCov"> 3827 : key_addition_8to32(plaintext, &amp;(ctx-&gt;keys[0]), wtxt);</span> -<span class="lineNum"> 408 </span> [<span class="branchCov" title="Branch 1 was taken 49751 times"> + </span><span class="branchCov" title="Branch 2 was taken 3827 times"> + </span>]:<span class="lineCov"> 53578 : for (r=1; r&lt;ctx-&gt;nrounds; r++) {</span> -<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 199004 times"> + </span><span class="branchCov" title="Branch 1 was taken 49751 times"> + </span>]:<span class="lineCov"> 248755 : for (j=0; j&lt;4; j++) {</span> -<span class="lineNum"> 410 </span> :<span class="lineCov"> 398008 : t[j] = dtbl[wtxt[j] &amp; 0xff] ^</span> -<span class="lineNum"> 411 </span> :<span class="lineCov"> 199004 : ROTRBYTE(dtbl[(wtxt[idx[1][j]] &gt;&gt; 8) &amp; 0xff]^</span> -<span class="lineNum"> 412 </span> : : ROTRBYTE(dtbl[(wtxt[idx[2][j]] &gt;&gt; 16) &amp; 0xff] ^ -<span class="lineNum"> 413 </span> : : ROTRBYTE(dtbl[(wtxt[idx[3][j]] &gt;&gt; 24) &amp; 0xff]))); -<span class="lineNum"> 414 </span> : : } -<span class="lineNum"> 415 </span> :<span class="lineCov"> 49751 : key_addition32(t, &amp;(ctx-&gt;keys[r*4]), wtxt);</span> -<span class="lineNum"> 416 </span> : : } -<span class="lineNum"> 417 </span> : : /* last round is special: there is no mixcolumn, so we can't use the big -<span class="lineNum"> 418 </span> : : tables. */ -<span class="lineNum"> 419 </span> [<span class="branchCov" title="Branch 0 was taken 15308 times"> + </span><span class="branchCov" title="Branch 1 was taken 3827 times"> + </span>]:<span class="lineCov"> 19135 : for (j=0; j&lt;4; j++) {</span> -<span class="lineNum"> 420 </span> :<span class="lineCov"> 15308 : e = wtxt[j] &amp; 0xff;</span> -<span class="lineNum"> 421 </span> :<span class="lineCov"> 15308 : e |= (wtxt[idx[1][j]]) &amp; (0xff &lt;&lt; 8 );</span> -<span class="lineNum"> 422 </span> :<span class="lineCov"> 15308 : e |= (wtxt[idx[2][j]]) &amp; (0xff &lt;&lt; 16);</span> -<span class="lineNum"> 423 </span> :<span class="lineCov"> 15308 : e |= (wtxt[idx[3][j]]) &amp; (0xffU &lt;&lt; 24);</span> -<span class="lineNum"> 424 </span> :<span class="lineCov"> 15308 : t[j] = e;</span> -<span class="lineNum"> 425 </span> : : } -<span class="lineNum"> 426 </span> [<span class="branchCov" title="Branch 0 was taken 15308 times"> + </span><span class="branchCov" title="Branch 1 was taken 3827 times"> + </span>]:<span class="lineCov"> 19135 : for (j=0; j&lt;4; j++)</span> -<span class="lineNum"> 427 </span> :<span class="lineCov"> 15308 : t[j] = SUBBYTE(t[j], sbox);</span> -<span class="lineNum"> 428 </span> :<span class="lineCov"> 3827 : key_addition32to8(t, &amp;(ctx-&gt;keys[4*ctx-&gt;nrounds]), ciphertext);</span> -<span class="lineNum"> 429 </span> :<span class="lineCov"> 3827 : }</span> -<span class="lineNum"> 430 </span> : : -<span class="lineNum"> 431 </span> : : static int iidx[4][4] = { -<span class="lineNum"> 432 </span> : : { 0, 1, 2, 3 }, -<span class="lineNum"> 433 </span> : : { 3, 0, 1, 2 }, -<span class="lineNum"> 434 </span> : : { 2, 3, 0, 1 }, -<span class="lineNum"> 435 </span> : : { 1, 2, 3, 0 } }; -<a name="436"><span class="lineNum"> 436 </span> : : </a> -<span class="lineNum"> 437 </span> : : void -<span class="lineNum"> 438 </span> :<span class="lineCov"> 3078 : rijndael_decrypt(RIJNDAEL_context *ctx,</span> -<span class="lineNum"> 439 </span> : : const uint8_t *ciphertext, -<span class="lineNum"> 440 </span> : : uint8_t *plaintext) -<span class="lineNum"> 441 </span> : : { -<span class="lineNum"> 442 </span> : : int r, j; -<span class="lineNum"> 443 </span> : : uint32_t wtxt[4], t[4]; /* working ciphertext */ -<span class="lineNum"> 444 </span> : : uint32_t e; -<span class="lineNum"> 445 </span> : : -<span class="lineNum"> 446 </span> :<span class="lineCov"> 3078 : key_addition_8to32(ciphertext, &amp;(ctx-&gt;ikeys[4*ctx-&gt;nrounds]), wtxt);</span> -<span class="lineNum"> 447 </span> [<span class="branchCov" title="Branch 0 was taken 40014 times"> + </span><span class="branchCov" title="Branch 1 was taken 3078 times"> + </span>]:<span class="lineCov"> 43092 : for (r=ctx-&gt;nrounds-1; r&gt; 0; r--) {</span> -<span class="lineNum"> 448 </span> [<span class="branchCov" title="Branch 0 was taken 160056 times"> + </span><span class="branchCov" title="Branch 1 was taken 40014 times"> + </span>]:<span class="lineCov"> 200070 : for (j=0; j&lt;4; j++) {</span> -<span class="lineNum"> 449 </span> :<span class="lineCov"> 320112 : t[j] = itbl[wtxt[j] &amp; 0xff] ^</span> -<span class="lineNum"> 450 </span> :<span class="lineCov"> 160056 : ROTRBYTE(itbl[(wtxt[iidx[1][j]] &gt;&gt; 8) &amp; 0xff]^</span> -<span class="lineNum"> 451 </span> : : ROTRBYTE(itbl[(wtxt[iidx[2][j]] &gt;&gt; 16) &amp; 0xff] ^ -<span class="lineNum"> 452 </span> : : ROTRBYTE(itbl[(wtxt[iidx[3][j]] &gt;&gt; 24) &amp; 0xff]))); -<span class="lineNum"> 453 </span> : : } -<span class="lineNum"> 454 </span> :<span class="lineCov"> 40014 : key_addition32(t, &amp;(ctx-&gt;ikeys[r*4]), wtxt);</span> -<span class="lineNum"> 455 </span> : : } -<span class="lineNum"> 456 </span> : : /* last round is special: there is no mixcolumn, so we can't use the big -<span class="lineNum"> 457 </span> : : tables. */ -<span class="lineNum"> 458 </span> [<span class="branchCov" title="Branch 0 was taken 12312 times"> + </span><span class="branchCov" title="Branch 1 was taken 3078 times"> + </span>]:<span class="lineCov"> 15390 : for (j=0; j&lt;4; j++) {</span> -<span class="lineNum"> 459 </span> :<span class="lineCov"> 12312 : e = wtxt[j] &amp; 0xff;</span> -<span class="lineNum"> 460 </span> :<span class="lineCov"> 12312 : e |= (wtxt[iidx[1][j]]) &amp; (0xff &lt;&lt; 8);</span> -<span class="lineNum"> 461 </span> :<span class="lineCov"> 12312 : e |= (wtxt[iidx[2][j]]) &amp; (0xff &lt;&lt; 16);</span> -<span class="lineNum"> 462 </span> :<span class="lineCov"> 12312 : e |= (wtxt[iidx[3][j]]) &amp; (0xffU &lt;&lt; 24);</span> -<span class="lineNum"> 463 </span> :<span class="lineCov"> 12312 : t[j] = e;</span> -<span class="lineNum"> 464 </span> : : } -<span class="lineNum"> 465 </span> [<span class="branchCov" title="Branch 0 was taken 12312 times"> + </span><span class="branchCov" title="Branch 1 was taken 3078 times"> + </span>]:<span class="lineCov"> 15390 : for (j=0; j&lt;4; j++)</span> -<span class="lineNum"> 466 </span> :<span class="lineCov"> 12312 : t[j] = SUBBYTE(t[j], isbox);</span> -<span class="lineNum"> 467 </span> :<span class="lineCov"> 3078 : key_addition32to8(t, &amp;(ctx-&gt;ikeys[0]), plaintext);</span> -<span class="lineNum"> 468 </span> :<span class="lineCov"> 3078 : }</span> -<a name="469"><span class="lineNum"> 469 </span> : : </a> -<span class="lineNum"> 470 </span> : : void -<span class="lineNum"> 471 </span> :<span class="lineCov"> 416 : block_encrypt(RIJNDAEL_context *ctx, uint8_t *input, int inputlen,</span> -<span class="lineNum"> 472 </span> : : uint8_t *output, uint8_t *iv) -<span class="lineNum"> 473 </span> : : { -<span class="lineNum"> 474 </span> : : int i, j, nblocks, carry_flg; -<span class="lineNum"> 475 </span> : : uint8_t block[RIJNDAEL_BLOCKSIZE], block2[RIJNDAEL_BLOCKSIZE];//, oldptxt; -<span class="lineNum"> 476 </span> : : -<span class="lineNum"> 477 </span> :<span class="lineCov"> 416 : nblocks = inputlen / RIJNDAEL_BLOCKSIZE;</span> -<span class="lineNum"> 478 </span> : : -<span class="lineNum"> 479 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 391 times"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchCov" title="Branch 3 was taken 2 times"> + </span> :<span class="lineCov"> 416 : switch (ctx-&gt;mode) {</span> -<span class="lineNum"> </span> <span class="branchCov" title="Branch 4 was taken 4 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] -<span class="lineNum"> 480 </span> : : case MODE_ECB: /* electronic code book */ -<span class="lineNum"> 481 </span> [<span class="branchCov" title="Branch 0 was taken 250 times"> + </span><span class="branchCov" title="Branch 1 was taken 18 times"> + </span>]:<span class="lineCov"> 268 : for (i = 0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 482 </span> :<span class="lineCov"> 250 : rijndael_encrypt(ctx, &amp;input[RIJNDAEL_BLOCKSIZE*i],</span> -<span class="lineNum"> 483 </span> :<span class="lineCov"> 250 : &amp;output[RIJNDAEL_BLOCKSIZE*i]);</span> -<span class="lineNum"> 484 </span> : : } -<span class="lineNum"> 485 </span> : : break; -<span class="lineNum"> 486 </span> : : case MODE_CBC: /* Cipher block chaining */ -<span class="lineNum"> 487 </span> : : /* set initial value */ -<span class="lineNum"> 488 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); -<span class="lineNum"> 489 </span> [<span class="branchCov" title="Branch 0 was taken 3452 times"> + </span><span class="branchCov" title="Branch 1 was taken 391 times"> + </span>]:<span class="lineCov"> 3843 : for (i=0; i&lt; nblocks; i++) {</span> -<span class="lineNum"> 490 </span> [<span class="branchCov" title="Branch 0 was taken 55232 times"> + </span><span class="branchCov" title="Branch 1 was taken 3452 times"> + </span>]:<span class="lineCov"> 58684 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) </span> -<span class="lineNum"> 491 </span> :<span class="lineCov"> 55232 : block[j] ^= input[i*RIJNDAEL_BLOCKSIZE + j] &amp; 0xff;</span> -<span class="lineNum"> 492 </span> :<span class="lineCov"> 3452 : rijndael_encrypt(ctx, block, block);</span> -<span class="lineNum"> 493 </span> :<span class="lineCov"> 3452 : memcpy(&amp;output[RIJNDAEL_BLOCKSIZE*i], block, RIJNDAEL_BLOCKSIZE);</span> -<span class="lineNum"> 494 </span> : : } -<span class="lineNum"> 495 </span> : : break; -<span class="lineNum"> 496 </span> : : case MODE_CFB: /* 128-bit cipher feedback */ -<span class="lineNum"> 497 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); -<span class="lineNum"> 498 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 10 : for (i=0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 499 </span> :<span class="lineCov"> 9 : rijndael_encrypt(ctx, block, block);</span> -<span class="lineNum"> 500 </span> [<span class="branchCov" title="Branch 1 was taken 144 times"> + </span><span class="branchCov" title="Branch 2 was taken 9 times"> + </span>]:<span class="lineCov"> 153 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++)</span> -<span class="lineNum"> 501 </span> :<span class="lineCov"> 144 : block[j] ^= input[i*RIJNDAEL_BLOCKSIZE + j];</span> -<span class="lineNum"> 502 </span> :<span class="lineCov"> 9 : memcpy(&amp;output[RIJNDAEL_BLOCKSIZE*i], block, RIJNDAEL_BLOCKSIZE);</span> -<span class="lineNum"> 503 </span> : : } -<span class="lineNum"> 504 </span> : : break; -<span class="lineNum"> 505 </span> : : case MODE_OFB: /* 128-bit output feedback */ -<span class="lineNum"> 506 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); -<span class="lineNum"> 507 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 20 : for (i=0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 508 </span> :<span class="lineCov"> 18 : rijndael_encrypt(ctx, block, block);</span> -<span class="lineNum"> 509 </span> [<span class="branchCov" title="Branch 1 was taken 288 times"> + </span><span class="branchCov" title="Branch 2 was taken 18 times"> + </span>]:<span class="lineCov"> 306 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> -<span class="lineNum"> 510 </span> :<span class="lineCov"> 576 : output[RIJNDAEL_BLOCKSIZE*i + j] = block[j] ^</span> -<span class="lineNum"> 511 </span> :<span class="lineCov"> 288 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> -<span class="lineNum"> 512 </span> : : } -<span class="lineNum"> 513 </span> : : } -<span class="lineNum"> 514 </span> : : break; -<span class="lineNum"> 515 </span> : : case MODE_CTR: /* counter */ -<span class="lineNum"> 516 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); -<span class="lineNum"> 517 </span> [<span class="branchCov" title="Branch 0 was taken 46 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 50 : for (i=0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 518 </span> :<span class="lineCov"> 46 : rijndael_encrypt(ctx, block, block2);</span> -<span class="lineNum"> 519 </span> [<span class="branchCov" title="Branch 1 was taken 736 times"> + </span><span class="branchCov" title="Branch 2 was taken 46 times"> + </span>]:<span class="lineCov"> 782 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> -<span class="lineNum"> 520 </span> :<span class="lineCov"> 1472 : output[RIJNDAEL_BLOCKSIZE*i + j] = block2[j] ^</span> -<span class="lineNum"> 521 </span> :<span class="lineCov"> 736 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> -<span class="lineNum"> 522 </span> : : } -<span class="lineNum"> 523 </span> :<span class="lineCov"> 46 : block[RIJNDAEL_BLOCKSIZE-1]++;</span> -<span class="lineNum"> 524 </span> :<span class="lineCov"> 46 : carry_flg = block[RIJNDAEL_BLOCKSIZE-1] != 0 ? 0 : 1;</span> -<span class="lineNum"> 525 </span> [<span class="branchCov" title="Branch 0 was taken 46 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 46 : for (j=RIJNDAEL_BLOCKSIZE-2; j&gt;=0; j--) {</span> -<span class="lineNum"> 526 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 46 times"> + </span>]:<span class="lineCov"> 46 : if (carry_flg) {</span> -<span class="lineNum"> 527 </span> :<span class="lineNoCov"> 0 : block[j]++;</span> -<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : carry_flg = block[j] != 0 ? 0 : 1;</span> -<span class="lineNum"> 529 </span> : : } else -<span class="lineNum"> 530 </span> : : break; -<span class="lineNum"> 531 </span> : : } -<span class="lineNum"> 532 </span> : : } -<span class="lineNum"> 533 </span> : : break; -<span class="lineNum"> 534 </span> : : default: -<span class="lineNum"> 535 </span> : : break; -<span class="lineNum"> 536 </span> : : } -<span class="lineNum"> 537 </span> :<span class="lineCov"> 416 : }</span> -<a name="538"><span class="lineNum"> 538 </span> : : </a> -<span class="lineNum"> 539 </span> : : void -<span class="lineNum"> 540 </span> :<span class="lineCov"> 387 : block_decrypt(RIJNDAEL_context *ctx, uint8_t *input, int inputlen,</span> -<span class="lineNum"> 541 </span> : : uint8_t *output, uint8_t *iv) -<span class="lineNum"> 542 </span> : : { -<span class="lineNum"> 543 </span> : : int i, j, nblocks, carry_flg; -<span class="lineNum"> 544 </span> : : uint8_t block[RIJNDAEL_BLOCKSIZE], block2[RIJNDAEL_BLOCKSIZE]; -<span class="lineNum"> 545 </span> : : -<span class="lineNum"> 546 </span> :<span class="lineCov"> 387 : nblocks = inputlen / RIJNDAEL_BLOCKSIZE;</span> -<span class="lineNum"> 547 </span> [<span class="branchCov" title="Branch 0 was taken 13 times"> + </span><span class="branchCov" title="Branch 1 was taken 368 times"> + </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span><span class="branchCov" title="Branch 3 was taken 2 times"> + </span> :<span class="lineCov"> 387 : switch (ctx-&gt;mode) {</span> -<span class="lineNum"> </span> <span class="branchCov" title="Branch 4 was taken 3 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>] -<span class="lineNum"> 548 </span> : : case MODE_ECB: -<span class="lineNum"> 549 </span> [<span class="branchCov" title="Branch 0 was taken 130 times"> + </span><span class="branchCov" title="Branch 1 was taken 13 times"> + </span>]:<span class="lineCov"> 143 : for (i = 0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 550 </span> :<span class="lineCov"> 130 : rijndael_decrypt(ctx, &amp;input[RIJNDAEL_BLOCKSIZE*i],</span> -<span class="lineNum"> 551 </span> :<span class="lineCov"> 130 : &amp;output[RIJNDAEL_BLOCKSIZE*i]);</span> -<span class="lineNum"> 552 </span> : : } -<span class="lineNum"> 553 </span> : : break; -<span class="lineNum"> 554 </span> : : case MODE_CBC: -<span class="lineNum"> 555 </span> : : /* first block */ -<span class="lineNum"> 556 </span> :<span class="lineCov"> 368 : rijndael_decrypt(ctx, input, block);</span> -<span class="lineNum"> 557 </span> : : /* XOR the block with the IV to get the output */ -<span class="lineNum"> 558 </span> [<span class="branchCov" title="Branch 1 was taken 5888 times"> + </span><span class="branchCov" title="Branch 2 was taken 368 times"> + </span>]:<span class="lineCov"> 6256 : for (i=0; i&lt;RIJNDAEL_BLOCKSIZE; i++)</span> -<span class="lineNum"> 559 </span> :<span class="lineCov"> 5888 : output[i] = block[i] ^ iv[i];</span> -<span class="lineNum"> 560 </span> [<span class="branchCov" title="Branch 0 was taken 2580 times"> + </span><span class="branchCov" title="Branch 1 was taken 368 times"> + </span>]:<span class="lineCov"> 2948 : for (i=1; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 561 </span> :<span class="lineCov"> 2580 : rijndael_decrypt(ctx, &amp;input[i*RIJNDAEL_BLOCKSIZE], block);</span> -<span class="lineNum"> 562 </span> [<span class="branchCov" title="Branch 1 was taken 41280 times"> + </span><span class="branchCov" title="Branch 2 was taken 2580 times"> + </span>]:<span class="lineCov"> 43860 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> -<span class="lineNum"> 563 </span> :<span class="lineCov"> 82560 : output[i*RIJNDAEL_BLOCKSIZE + j] = block[j] ^</span> -<span class="lineNum"> 564 </span> :<span class="lineCov"> 41280 : input[(i-1)*RIJNDAEL_BLOCKSIZE + j];</span> -<span class="lineNum"> 565 </span> : : } -<span class="lineNum"> 566 </span> : : } -<span class="lineNum"> 567 </span> : : break; -<span class="lineNum"> 568 </span> : : case MODE_CFB: /* 128-bit cipher feedback */ -<span class="lineNum"> 569 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); -<span class="lineNum"> 570 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 10 : for (i=0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 571 </span> :<span class="lineCov"> 9 : rijndael_encrypt(ctx, block, block); /* ENCRYPT is right! */</span> -<span class="lineNum"> 572 </span> [<span class="branchCov" title="Branch 1 was taken 144 times"> + </span><span class="branchCov" title="Branch 2 was taken 9 times"> + </span>]:<span class="lineCov"> 153 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> -<span class="lineNum"> 573 </span> :<span class="lineCov"> 288 : output[RIJNDAEL_BLOCKSIZE*i + j] = block[j] ^</span> -<span class="lineNum"> 574 </span> :<span class="lineCov"> 144 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> -<span class="lineNum"> 575 </span> : : } -<span class="lineNum"> 576 </span> :<span class="lineCov"> 9 : memcpy(block, &amp;input[RIJNDAEL_BLOCKSIZE*i], RIJNDAEL_BLOCKSIZE);</span> -<span class="lineNum"> 577 </span> : : } -<span class="lineNum"> 578 </span> : : break; -<span class="lineNum"> 579 </span> : : case MODE_OFB: /* 128-bit output feedback */ -<span class="lineNum"> 580 </span> : : /* this is exactly the same as encryption in OFB...in fact you can use -<span class="lineNum"> 581 </span> : : the encryption in OFB mode to decrypt! */ -<span class="lineNum"> 582 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); -<span class="lineNum"> 583 </span> [<span class="branchCov" title="Branch 0 was taken 18 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 20 : for (i=0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 584 </span> :<span class="lineCov"> 18 : rijndael_encrypt(ctx, block, block);</span> -<span class="lineNum"> 585 </span> [<span class="branchCov" title="Branch 1 was taken 288 times"> + </span><span class="branchCov" title="Branch 2 was taken 18 times"> + </span>]:<span class="lineCov"> 306 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> -<span class="lineNum"> 586 </span> :<span class="lineCov"> 576 : output[RIJNDAEL_BLOCKSIZE*i + j] = block[j] ^</span> -<span class="lineNum"> 587 </span> :<span class="lineCov"> 288 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> -<span class="lineNum"> 588 </span> : : } -<span class="lineNum"> 589 </span> : : } -<span class="lineNum"> 590 </span> : : break; -<span class="lineNum"> 591 </span> : : case MODE_CTR: /* counter */ -<span class="lineNum"> 592 </span> : : memcpy(block, iv, RIJNDAEL_BLOCKSIZE); -<span class="lineNum"> 593 </span> [<span class="branchCov" title="Branch 0 was taken 25 times"> + </span><span class="branchCov" title="Branch 1 was taken 3 times"> + </span>]:<span class="lineCov"> 28 : for (i=0; i&lt;nblocks; i++) {</span> -<span class="lineNum"> 594 </span> :<span class="lineCov"> 25 : rijndael_encrypt(ctx, block, block2);</span> -<span class="lineNum"> 595 </span> [<span class="branchCov" title="Branch 1 was taken 400 times"> + </span><span class="branchCov" title="Branch 2 was taken 25 times"> + </span>]:<span class="lineCov"> 425 : for (j=0; j&lt;RIJNDAEL_BLOCKSIZE; j++) {</span> -<span class="lineNum"> 596 </span> :<span class="lineCov"> 800 : output[RIJNDAEL_BLOCKSIZE*i + j] = block2[j] ^</span> -<span class="lineNum"> 597 </span> :<span class="lineCov"> 400 : input[RIJNDAEL_BLOCKSIZE*i + j];</span> -<span class="lineNum"> 598 </span> : : } -<span class="lineNum"> 599 </span> :<span class="lineCov"> 25 : block[RIJNDAEL_BLOCKSIZE-1]++;</span> -<span class="lineNum"> 600 </span> :<span class="lineCov"> 25 : carry_flg = block[RIJNDAEL_BLOCKSIZE-1] != 0 ? 0 : 1;</span> -<span class="lineNum"> 601 </span> [<span class="branchCov" title="Branch 0 was taken 25 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 25 : for (j=RIJNDAEL_BLOCKSIZE-2; j&gt;=0; j--) {</span> -<span class="lineNum"> 602 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 25 times"> + </span>]:<span class="lineCov"> 25 : if (carry_flg) {</span> -<span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : block[j]++;</span> -<span class="lineNum"> 604 </span> :<span class="lineNoCov"> 0 : carry_flg = block[j] != 0 ? 0 : 1;</span> -<span class="lineNum"> 605 </span> : : } else -<span class="lineNum"> 606 </span> : : break; -<span class="lineNum"> 607 </span> : : } -<span class="lineNum"> 608 </span> : : } -<span class="lineNum"> 609 </span> : : break; -<span class="lineNum"> 610 </span> : : default: -<span class="lineNum"> 611 </span> : : break; -<span class="lineNum"> 612 </span> : : } -<span class="lineNum"> 613 </span> :<span class="lineCov"> 387 : }</span> -<span class="lineNum"> 614 </span> : : -<span class="lineNum"> 615 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html deleted file mode 100644 index cb03e415..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func-sort-c.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha1.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha1.c<span style="font-size: 80%;"> (<a href="sha1.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">97</td> - <td class="headerCovTableEntry">106</td> - <td class="headerCovTableEntryHi">91.5 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryMed">75.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="sha1.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#64">sha1_transform</a></td> - <td class="coverFnHi">1656</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#196">sha1_update</a></td> - <td class="coverFnHi">798</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#234">sha1_transform_and_copy</a></td> - <td class="coverFnHi">502</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#261">sha1_final</a></td> - <td class="coverFnHi">502</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#181">sha1_init</a></td> - <td class="coverFnHi">502</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html deleted file mode 100644 index 8a41247a..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.func.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha1.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha1.c<span style="font-size: 80%;"> (<a href="sha1.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">97</td> - <td class="headerCovTableEntry">106</td> - <td class="headerCovTableEntryHi">91.5 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryMed">75.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="sha1.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#261">sha1_final</a></td> - <td class="coverFnHi">502</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#181">sha1_init</a></td> - <td class="coverFnHi">502</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#64">sha1_transform</a></td> - <td class="coverFnHi">1656</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#234">sha1_transform_and_copy</a></td> - <td class="coverFnHi">502</td> - </tr> - <tr> - <td class="coverFn"><a href="sha1.c.gcov.html#196">sha1_update</a></td> - <td class="coverFnHi">798</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html deleted file mode 100644 index 37c55cc1..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha1.c.gcov.html +++ /dev/null @@ -1,376 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha1.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha1.c<span style="font-size: 80%;"> (source / <a href="sha1.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">97</td> - <td class="headerCovTableEntry">106</td> - <td class="headerCovTableEntryHi">91.5 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">18</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryMed">75.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: sha1.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Implementation of the SHA1 message-digest algorithm for -<span class="lineNum"> 7 </span> : : * libfwknop. -<span class="lineNum"> 8 </span> : : * -<span class="lineNum"> 9 </span> : : * NIST Secure Hash Algorithm -<span class="lineNum"> 10 </span> : : * Heavily modified by Uwe Hollerbach &lt;uh@alumni.caltech edu&gt; -<span class="lineNum"> 11 </span> : : * from Peter C. Gutmann's implementation as found in -<span class="lineNum"> 12 </span> : : * Applied Cryptography by Bruce Schneier -<span class="lineNum"> 13 </span> : : * Further modifications to include the &quot;UNRAVEL&quot; stuff, below -<span class="lineNum"> 14 </span> : : * -<span class="lineNum"> 15 </span> : : * This code is in the public domain -<span class="lineNum"> 16 </span> : : * -<span class="lineNum"> 17 </span> : : ***************************************************************************** -<span class="lineNum"> 18 </span> : : */ -<span class="lineNum"> 19 </span> : : #include &quot;sha1.h&quot; -<span class="lineNum"> 20 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 21 </span> : : -<span class="lineNum"> 22 </span> : : /* SHA f()-functions */ -<span class="lineNum"> 23 </span> : : #define f1(x,y,z) ((x &amp; y) | (~x &amp; z)) -<span class="lineNum"> 24 </span> : : #define f2(x,y,z) (x ^ y ^ z) -<span class="lineNum"> 25 </span> : : #define f3(x,y,z) ((x &amp; y) | (x &amp; z) | (y &amp; z)) -<span class="lineNum"> 26 </span> : : #define f4(x,y,z) (x ^ y ^ z) -<span class="lineNum"> 27 </span> : : -<span class="lineNum"> 28 </span> : : /* SHA constants */ -<span class="lineNum"> 29 </span> : : #define CONST1 0x5a827999L -<span class="lineNum"> 30 </span> : : #define CONST2 0x6ed9eba1L -<span class="lineNum"> 31 </span> : : #define CONST3 0x8f1bbcdcL -<span class="lineNum"> 32 </span> : : #define CONST4 0xca62c1d6L -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : /* truncate to 32 bits -- should be a null op on 32-bit machines */ -<span class="lineNum"> 35 </span> : : #define T32(x) ((x) &amp; 0xffffffffL) -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : /* 32-bit rotate */ -<span class="lineNum"> 38 </span> : : #define R32(x,n) T32(((x &lt;&lt; n) | (x &gt;&gt; (32 - n)))) -<span class="lineNum"> 39 </span> : : -<span class="lineNum"> 40 </span> : : /* the generic case, for when the overall rotation is not unraveled */ -<span class="lineNum"> 41 </span> : : #define FG(n) \ -<span class="lineNum"> 42 </span> : : T = T32(R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n); \ -<span class="lineNum"> 43 </span> : : E = D; D = C; C = R32(B,30); B = A; A = T -<span class="lineNum"> 44 </span> : : -<span class="lineNum"> 45 </span> : : /* specific cases, for when the overall rotation is unraveled */ -<span class="lineNum"> 46 </span> : : #define FA(n) \ -<span class="lineNum"> 47 </span> : : T = T32(R32(A,5) + f##n(B,C,D) + E + *WP++ + CONST##n); B = R32(B,30) -<span class="lineNum"> 48 </span> : : -<span class="lineNum"> 49 </span> : : #define FB(n) \ -<span class="lineNum"> 50 </span> : : E = T32(R32(T,5) + f##n(A,B,C) + D + *WP++ + CONST##n); A = R32(A,30) -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> : : #define FC(n) \ -<span class="lineNum"> 53 </span> : : D = T32(R32(E,5) + f##n(T,A,B) + C + *WP++ + CONST##n); T = R32(T,30) -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : #define FD(n) \ -<span class="lineNum"> 56 </span> : : C = T32(R32(D,5) + f##n(E,T,A) + B + *WP++ + CONST##n); E = R32(E,30) -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> : : #define FE(n) \ -<span class="lineNum"> 59 </span> : : B = T32(R32(C,5) + f##n(D,E,T) + A + *WP++ + CONST##n); D = R32(D,30) -<span class="lineNum"> 60 </span> : : -<span class="lineNum"> 61 </span> : : #define FT(n) \ -<span class="lineNum"> 62 </span> : : A = T32(R32(B,5) + f##n(C,D,E) + T + *WP++ + CONST##n); C = R32(C,30) -<span class="lineNum"> 63 </span> : : -<a name="64"><span class="lineNum"> 64 </span> : : </a> -<span class="lineNum"> 65 </span> : : void -<span class="lineNum"> 66 </span> :<span class="lineCov"> 1656 : sha1_transform(SHA1_INFO *sha1_info)</span> -<span class="lineNum"> 67 </span> : : { -<span class="lineNum"> 68 </span> : : int i; -<span class="lineNum"> 69 </span> : : uint8_t *dp; -<span class="lineNum"> 70 </span> : : uint32_t T, A, B, C, D, E, W[80], *WP; -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> :<span class="lineCov"> 1656 : dp = sha1_info-&gt;data;</span> -<span class="lineNum"> 73 </span> : : -<span class="lineNum"> 74 </span> : : #undef SWAP_DONE -<span class="lineNum"> 75 </span> : : -<span class="lineNum"> 76 </span> : : #if BYTEORDER == 1234 -<span class="lineNum"> 77 </span> : : #define SWAP_DONE -<span class="lineNum"> 78 </span> [<span class="branchCov" title="Branch 0 was taken 26496 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 28152 : for (i = 0; i &lt; 16; ++i) {</span> -<span class="lineNum"> 79 </span> :<span class="lineCov"> 26496 : T = *((uint32_t *) dp);</span> -<span class="lineNum"> 80 </span> :<span class="lineCov"> 26496 : dp += 4;</span> -<span class="lineNum"> 81 </span> :<span class="lineCov"> 26496 : W[i] = </span> -<span class="lineNum"> 82 </span> :<span class="lineCov"> 52992 : ((T &lt;&lt; 24) &amp; 0xff000000) |</span> -<span class="lineNum"> 83 </span> :<span class="lineCov"> 52992 : ((T &lt;&lt; 8) &amp; 0x00ff0000) |</span> -<span class="lineNum"> 84 </span> :<span class="lineCov"> 52992 : ((T &gt;&gt; 8) &amp; 0x0000ff00) | ((T &gt;&gt; 24) &amp; 0x000000ff);</span> -<span class="lineNum"> 85 </span> : : } -<span class="lineNum"> 86 </span> : : #endif -<span class="lineNum"> 87 </span> : : -<span class="lineNum"> 88 </span> : : #if BYTEORDER == 4321 -<span class="lineNum"> 89 </span> : : #define SWAP_DONE -<span class="lineNum"> 90 </span> : : for (i = 0; i &lt; 16; ++i) { -<span class="lineNum"> 91 </span> : : T = *((uint32_t *) dp); -<span class="lineNum"> 92 </span> : : dp += 4; -<span class="lineNum"> 93 </span> : : W[i] = TRUNC32(T); -<span class="lineNum"> 94 </span> : : } -<span class="lineNum"> 95 </span> : : #endif -<span class="lineNum"> 96 </span> : : -<span class="lineNum"> 97 </span> : : #if BYTEORDER == 12345678 -<span class="lineNum"> 98 </span> : : #define SWAP_DONE -<span class="lineNum"> 99 </span> : : for (i = 0; i &lt; 16; i += 2) { -<span class="lineNum"> 100 </span> : : T = *((uint32_t *) dp); -<span class="lineNum"> 101 </span> : : dp += 8; -<span class="lineNum"> 102 </span> : : W[i] = ((T &lt;&lt; 24) &amp; 0xff000000) | ((T &lt;&lt; 8) &amp; 0x00ff0000) | -<span class="lineNum"> 103 </span> : : ((T &gt;&gt; 8) &amp; 0x0000ff00) | ((T &gt;&gt; 24) &amp; 0x000000ff); -<span class="lineNum"> 104 </span> : : T &gt;&gt;= 32; -<span class="lineNum"> 105 </span> : : W[i+1] = ((T &lt;&lt; 24) &amp; 0xff000000) | ((T &lt;&lt; 8) &amp; 0x00ff0000) | -<span class="lineNum"> 106 </span> : : ((T &gt;&gt; 8) &amp; 0x0000ff00) | ((T &gt;&gt; 24) &amp; 0x000000ff); -<span class="lineNum"> 107 </span> : : } -<span class="lineNum"> 108 </span> : : #endif -<span class="lineNum"> 109 </span> : : -<span class="lineNum"> 110 </span> : : #if BYTEORDER == 87654321 -<span class="lineNum"> 111 </span> : : #define SWAP_DONE -<span class="lineNum"> 112 </span> : : for (i = 0; i &lt; 16; i += 2) { -<span class="lineNum"> 113 </span> : : T = *((uint32_t *) dp); -<span class="lineNum"> 114 </span> : : dp += 8; -<span class="lineNum"> 115 </span> : : W[i] = TRUNC32(T &gt;&gt; 32); -<span class="lineNum"> 116 </span> : : W[i+1] = TRUNC32(T); -<span class="lineNum"> 117 </span> : : } -<span class="lineNum"> 118 </span> : : #endif -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> : : #ifndef SWAP_DONE -<span class="lineNum"> 121 </span> : : #define SWAP_DONE -<span class="lineNum"> 122 </span> : : for (i = 0; i &lt; 16; ++i) { -<span class="lineNum"> 123 </span> : : T = *((uint32_t *) dp); -<span class="lineNum"> 124 </span> : : dp += 4; -<span class="lineNum"> 125 </span> : : W[i] = TRUNC32(T); -<span class="lineNum"> 126 </span> : : } -<span class="lineNum"> 127 </span> : : #ifndef WIN32 -<span class="lineNum"> 128 </span> : : #warning Undetermined or unsupported Byte Order... We will try LITTLE_ENDIAN -<span class="lineNum"> 129 </span> : : #endif -<span class="lineNum"> 130 </span> : : #endif /* SWAP_DONE */ -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> [<span class="branchCov" title="Branch 0 was taken 105984 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 107640 : for (i = 16; i &lt; 80; ++i) {</span> -<span class="lineNum"> 133 </span> :<span class="lineCov"> 105984 : W[i] = W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16];</span> -<span class="lineNum"> 134 </span> :<span class="lineCov"> 105984 : W[i] = R32(W[i], 1);</span> -<span class="lineNum"> 135 </span> : : } -<span class="lineNum"> 136 </span> :<span class="lineCov"> 1656 : A = sha1_info-&gt;digest[0];</span> -<span class="lineNum"> 137 </span> :<span class="lineCov"> 1656 : B = sha1_info-&gt;digest[1];</span> -<span class="lineNum"> 138 </span> :<span class="lineCov"> 1656 : C = sha1_info-&gt;digest[2];</span> -<span class="lineNum"> 139 </span> :<span class="lineCov"> 1656 : D = sha1_info-&gt;digest[3];</span> -<span class="lineNum"> 140 </span> :<span class="lineCov"> 1656 : E = sha1_info-&gt;digest[4];</span> -<span class="lineNum"> 141 </span> :<span class="lineCov"> 1656 : WP = W;</span> -<span class="lineNum"> 142 </span> : : #ifdef UNRAVEL -<span class="lineNum"> 143 </span> : : FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1); FC(1); FD(1); -<span class="lineNum"> 144 </span> : : FE(1); FT(1); FA(1); FB(1); FC(1); FD(1); FE(1); FT(1); FA(1); FB(1); -<span class="lineNum"> 145 </span> : : FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2); FE(2); FT(2); -<span class="lineNum"> 146 </span> : : FA(2); FB(2); FC(2); FD(2); FE(2); FT(2); FA(2); FB(2); FC(2); FD(2); -<span class="lineNum"> 147 </span> : : FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3); FA(3); FB(3); -<span class="lineNum"> 148 </span> : : FC(3); FD(3); FE(3); FT(3); FA(3); FB(3); FC(3); FD(3); FE(3); FT(3); -<span class="lineNum"> 149 </span> : : FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4); FC(4); FD(4); -<span class="lineNum"> 150 </span> : : FE(4); FT(4); FA(4); FB(4); FC(4); FD(4); FE(4); FT(4); FA(4); FB(4); -<span class="lineNum"> 151 </span> : : sha1_info-&gt;digest[0] = T32(sha1_info-&gt;digest[0] + E); -<span class="lineNum"> 152 </span> : : sha1_info-&gt;digest[1] = T32(sha1_info-&gt;digest[1] + T); -<span class="lineNum"> 153 </span> : : sha1_info-&gt;digest[2] = T32(sha1_info-&gt;digest[2] + A); -<span class="lineNum"> 154 </span> : : sha1_info-&gt;digest[3] = T32(sha1_info-&gt;digest[3] + B); -<span class="lineNum"> 155 </span> : : sha1_info-&gt;digest[4] = T32(sha1_info-&gt;digest[4] + C); -<span class="lineNum"> 156 </span> : : #else /* !UNRAVEL */ -<span class="lineNum"> 157 </span> : : #ifdef UNROLL_LOOPS -<span class="lineNum"> 158 </span> : : FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); -<span class="lineNum"> 159 </span> : : FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); FG(1); -<span class="lineNum"> 160 </span> : : FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); -<span class="lineNum"> 161 </span> : : FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); FG(2); -<span class="lineNum"> 162 </span> : : FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); -<span class="lineNum"> 163 </span> : : FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); FG(3); -<span class="lineNum"> 164 </span> : : FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); -<span class="lineNum"> 165 </span> : : FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); FG(4); -<span class="lineNum"> 166 </span> : : #else /* !UNROLL_LOOPS */ -<span class="lineNum"> 167 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 0; i &lt; 20; ++i) { FG(1); }</span> -<span class="lineNum"> 168 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 20; i &lt; 40; ++i) { FG(2); }</span> -<span class="lineNum"> 169 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 40; i &lt; 60; ++i) { FG(3); }</span> -<span class="lineNum"> 170 </span> [<span class="branchCov" title="Branch 0 was taken 33120 times"> + </span><span class="branchCov" title="Branch 1 was taken 1656 times"> + </span>]:<span class="lineCov"> 34776 : for (i = 60; i &lt; 80; ++i) { FG(4); }</span> -<span class="lineNum"> 171 </span> : : #endif /* !UNROLL_LOOPS */ -<span class="lineNum"> 172 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[0] = T32(sha1_info-&gt;digest[0] + A);</span> -<span class="lineNum"> 173 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[1] = T32(sha1_info-&gt;digest[1] + B);</span> -<span class="lineNum"> 174 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[2] = T32(sha1_info-&gt;digest[2] + C);</span> -<span class="lineNum"> 175 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[3] = T32(sha1_info-&gt;digest[3] + D);</span> -<span class="lineNum"> 176 </span> :<span class="lineCov"> 1656 : sha1_info-&gt;digest[4] = T32(sha1_info-&gt;digest[4] + E);</span> -<span class="lineNum"> 177 </span> : : #endif /* !UNRAVEL */ -<span class="lineNum"> 178 </span> :<span class="lineCov"> 1656 : }</span> -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> : : /* initialize the SHA digest */ -<a name="181"><span class="lineNum"> 181 </span> : : </a> -<span class="lineNum"> 182 </span> : : void -<span class="lineNum"> 183 </span> :<span class="lineCov"> 502 : sha1_init(SHA1_INFO *sha1_info)</span> -<span class="lineNum"> 184 </span> : : { -<span class="lineNum"> 185 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[0] = 0x67452301L;</span> -<span class="lineNum"> 186 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[1] = 0xefcdab89L;</span> -<span class="lineNum"> 187 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[2] = 0x98badcfeL;</span> -<span class="lineNum"> 188 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[3] = 0x10325476L;</span> -<span class="lineNum"> 189 </span> :<span class="lineCov"> 502 : sha1_info-&gt;digest[4] = 0xc3d2e1f0L;</span> -<span class="lineNum"> 190 </span> :<span class="lineCov"> 502 : sha1_info-&gt;count_lo = 0L;</span> -<span class="lineNum"> 191 </span> :<span class="lineCov"> 502 : sha1_info-&gt;count_hi = 0L;</span> -<span class="lineNum"> 192 </span> :<span class="lineCov"> 502 : sha1_info-&gt;local = 0;</span> -<span class="lineNum"> 193 </span> :<span class="lineCov"> 502 : }</span> -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> : : /* update the SHA digest */ -<a name="196"><span class="lineNum"> 196 </span> : : </a> -<span class="lineNum"> 197 </span> : : void -<span class="lineNum"> 198 </span> :<span class="lineCov"> 798 : sha1_update(SHA1_INFO *sha1_info, uint8_t *buffer, int count)</span> -<span class="lineNum"> 199 </span> : : { -<span class="lineNum"> 200 </span> : : int i; -<span class="lineNum"> 201 </span> : : uint32_t clo; -<span class="lineNum"> 202 </span> : : -<span class="lineNum"> 203 </span> :<span class="lineCov"> 798 : clo = T32(sha1_info-&gt;count_lo + ((uint32_t) count &lt;&lt; 3));</span> -<span class="lineNum"> 204 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 798 times"> + </span>]:<span class="lineCov"> 798 : if (clo &lt; sha1_info-&gt;count_lo) {</span> -<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : ++sha1_info-&gt;count_hi;</span> -<span class="lineNum"> 206 </span> : : } -<span class="lineNum"> 207 </span> :<span class="lineCov"> 798 : sha1_info-&gt;count_lo = clo;</span> -<span class="lineNum"> 208 </span> :<span class="lineCov"> 798 : sha1_info-&gt;count_hi += (uint32_t) count &gt;&gt; 29;</span> -<span class="lineNum"> 209 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 798 times"> + </span>]:<span class="lineCov"> 798 : if (sha1_info-&gt;local) {</span> -<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : i = SHA1_BLOCKSIZE - sha1_info-&gt;local;</span> -<span class="lineNum"> 211 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (i &gt; count) {</span> -<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : i = count;</span> -<span class="lineNum"> 213 </span> : : } -<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : memcpy(((uint8_t *) sha1_info-&gt;data) + sha1_info-&gt;local, buffer, i);</span> -<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : count -= i;</span> -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : buffer += i;</span> -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : sha1_info-&gt;local += i;</span> -<span class="lineNum"> 218 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sha1_info-&gt;local == SHA1_BLOCKSIZE) {</span> -<span class="lineNum"> 219 </span> :<span class="lineCov"> 798 : sha1_transform(sha1_info);</span> -<span class="lineNum"> 220 </span> : : } else { -<span class="lineNum"> 221 </span> :<span class="lineCov"> 798 : return;</span> -<span class="lineNum"> 222 </span> : : } -<span class="lineNum"> 223 </span> : : } -<span class="lineNum"> 224 </span> [<span class="branchCov" title="Branch 0 was taken 1124 times"> + </span><span class="branchCov" title="Branch 1 was taken 798 times"> + </span>]:<span class="lineCov"> 1922 : while (count &gt;= SHA1_BLOCKSIZE) {</span> -<span class="lineNum"> 225 </span> :<span class="lineCov"> 1124 : memcpy(sha1_info-&gt;data, buffer, SHA1_BLOCKSIZE);</span> -<span class="lineNum"> 226 </span> :<span class="lineCov"> 1124 : buffer += SHA1_BLOCKSIZE;</span> -<span class="lineNum"> 227 </span> :<span class="lineCov"> 1124 : count -= SHA1_BLOCKSIZE;</span> -<span class="lineNum"> 228 </span> :<span class="lineCov"> 1124 : sha1_transform(sha1_info);</span> -<span class="lineNum"> 229 </span> : : } -<span class="lineNum"> 230 </span> :<span class="lineCov"> 798 : memcpy(sha1_info-&gt;data, buffer, count);</span> -<span class="lineNum"> 231 </span> :<span class="lineCov"> 798 : sha1_info-&gt;local = count;</span> -<span class="lineNum"> 232 </span> : : } -<span class="lineNum"> 233 </span> : : -<a name="234"><span class="lineNum"> 234 </span> : : </a> -<span class="lineNum"> 235 </span> : : void -<span class="lineNum"> 236 </span> :<span class="lineCov"> 502 : sha1_transform_and_copy(unsigned char digest[20], SHA1_INFO *sha1_info)</span> -<span class="lineNum"> 237 </span> : : { -<span class="lineNum"> 238 </span> :<span class="lineCov"> 502 : sha1_transform(sha1_info);</span> -<span class="lineNum"> 239 </span> :<span class="lineCov"> 502 : digest[ 0] = (unsigned char) ((sha1_info-&gt;digest[0] &gt;&gt; 24) &amp; 0xff);</span> -<span class="lineNum"> 240 </span> :<span class="lineCov"> 502 : digest[ 1] = (unsigned char) ((sha1_info-&gt;digest[0] &gt;&gt; 16) &amp; 0xff);</span> -<span class="lineNum"> 241 </span> :<span class="lineCov"> 502 : digest[ 2] = (unsigned char) ((sha1_info-&gt;digest[0] &gt;&gt; 8) &amp; 0xff);</span> -<span class="lineNum"> 242 </span> :<span class="lineCov"> 502 : digest[ 3] = (unsigned char) ((sha1_info-&gt;digest[0] ) &amp; 0xff);</span> -<span class="lineNum"> 243 </span> :<span class="lineCov"> 502 : digest[ 4] = (unsigned char) ((sha1_info-&gt;digest[1] &gt;&gt; 24) &amp; 0xff);</span> -<span class="lineNum"> 244 </span> :<span class="lineCov"> 502 : digest[ 5] = (unsigned char) ((sha1_info-&gt;digest[1] &gt;&gt; 16) &amp; 0xff);</span> -<span class="lineNum"> 245 </span> :<span class="lineCov"> 502 : digest[ 6] = (unsigned char) ((sha1_info-&gt;digest[1] &gt;&gt; 8) &amp; 0xff);</span> -<span class="lineNum"> 246 </span> :<span class="lineCov"> 502 : digest[ 7] = (unsigned char) ((sha1_info-&gt;digest[1] ) &amp; 0xff);</span> -<span class="lineNum"> 247 </span> :<span class="lineCov"> 502 : digest[ 8] = (unsigned char) ((sha1_info-&gt;digest[2] &gt;&gt; 24) &amp; 0xff);</span> -<span class="lineNum"> 248 </span> :<span class="lineCov"> 502 : digest[ 9] = (unsigned char) ((sha1_info-&gt;digest[2] &gt;&gt; 16) &amp; 0xff);</span> -<span class="lineNum"> 249 </span> :<span class="lineCov"> 502 : digest[10] = (unsigned char) ((sha1_info-&gt;digest[2] &gt;&gt; 8) &amp; 0xff);</span> -<span class="lineNum"> 250 </span> :<span class="lineCov"> 502 : digest[11] = (unsigned char) ((sha1_info-&gt;digest[2] ) &amp; 0xff);</span> -<span class="lineNum"> 251 </span> :<span class="lineCov"> 502 : digest[12] = (unsigned char) ((sha1_info-&gt;digest[3] &gt;&gt; 24) &amp; 0xff);</span> -<span class="lineNum"> 252 </span> :<span class="lineCov"> 502 : digest[13] = (unsigned char) ((sha1_info-&gt;digest[3] &gt;&gt; 16) &amp; 0xff);</span> -<span class="lineNum"> 253 </span> :<span class="lineCov"> 502 : digest[14] = (unsigned char) ((sha1_info-&gt;digest[3] &gt;&gt; 8) &amp; 0xff);</span> -<span class="lineNum"> 254 </span> :<span class="lineCov"> 502 : digest[15] = (unsigned char) ((sha1_info-&gt;digest[3] ) &amp; 0xff);</span> -<span class="lineNum"> 255 </span> :<span class="lineCov"> 502 : digest[16] = (unsigned char) ((sha1_info-&gt;digest[4] &gt;&gt; 24) &amp; 0xff);</span> -<span class="lineNum"> 256 </span> :<span class="lineCov"> 502 : digest[17] = (unsigned char) ((sha1_info-&gt;digest[4] &gt;&gt; 16) &amp; 0xff);</span> -<span class="lineNum"> 257 </span> :<span class="lineCov"> 502 : digest[18] = (unsigned char) ((sha1_info-&gt;digest[4] &gt;&gt; 8) &amp; 0xff);</span> -<span class="lineNum"> 258 </span> :<span class="lineCov"> 502 : digest[19] = (unsigned char) ((sha1_info-&gt;digest[4] ) &amp; 0xff);</span> -<span class="lineNum"> 259 </span> :<span class="lineCov"> 502 : }</span> -<span class="lineNum"> 260 </span> : : -<a name="261"><span class="lineNum"> 261 </span> : : /* finish computing the SHA digest */</a> -<span class="lineNum"> 262 </span> : : void -<span class="lineNum"> 263 </span> :<span class="lineCov"> 502 : sha1_final(uint8_t digest[20], SHA1_INFO *sha1_info)</span> -<span class="lineNum"> 264 </span> : : { -<span class="lineNum"> 265 </span> : : int count; -<span class="lineNum"> 266 </span> : : uint32_t lo_bit_count, hi_bit_count; -<span class="lineNum"> 267 </span> : : -<span class="lineNum"> 268 </span> :<span class="lineCov"> 502 : lo_bit_count = sha1_info-&gt;count_lo;</span> -<span class="lineNum"> 269 </span> :<span class="lineCov"> 502 : hi_bit_count = sha1_info-&gt;count_hi;</span> -<span class="lineNum"> 270 </span> :<span class="lineCov"> 502 : count = (int) ((lo_bit_count &gt;&gt; 3) &amp; 0x3f);</span> -<span class="lineNum"> 271 </span> :<span class="lineCov"> 502 : ((uint8_t *) sha1_info-&gt;data)[count++] = 0x80;</span> -<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 0 was taken 30 times"> + </span><span class="branchCov" title="Branch 1 was taken 472 times"> + </span>]:<span class="lineCov"> 502 : if (count &gt; SHA1_BLOCKSIZE - 8) {</span> -<span class="lineNum"> 273 </span> :<span class="lineCov"> 30 : memset(((uint8_t *) sha1_info-&gt;data) + count, 0, SHA1_BLOCKSIZE - count);</span> -<span class="lineNum"> 274 </span> :<span class="lineCov"> 30 : sha1_transform(sha1_info);</span> -<span class="lineNum"> 275 </span> :<span class="lineCov"> 30 : memset((uint8_t *) sha1_info-&gt;data, 0, SHA1_BLOCKSIZE - 8);</span> -<span class="lineNum"> 276 </span> : : } else { -<span class="lineNum"> 277 </span> :<span class="lineCov"> 472 : memset(((uint8_t *) sha1_info-&gt;data) + count, 0,</span> -<span class="lineNum"> 278 </span> :<span class="lineCov"> 472 : SHA1_BLOCKSIZE - 8 - count);</span> -<span class="lineNum"> 279 </span> : : } -<span class="lineNum"> 280 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[56] = (uint8_t)((hi_bit_count &gt;&gt; 24) &amp; 0xff);</span> -<span class="lineNum"> 281 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[57] = (uint8_t)((hi_bit_count &gt;&gt; 16) &amp; 0xff);</span> -<span class="lineNum"> 282 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[58] = (uint8_t)((hi_bit_count &gt;&gt; 8) &amp; 0xff);</span> -<span class="lineNum"> 283 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[59] = (uint8_t)((hi_bit_count &gt;&gt; 0) &amp; 0xff);</span> -<span class="lineNum"> 284 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[60] = (uint8_t)((lo_bit_count &gt;&gt; 24) &amp; 0xff);</span> -<span class="lineNum"> 285 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[61] = (uint8_t)((lo_bit_count &gt;&gt; 16) &amp; 0xff);</span> -<span class="lineNum"> 286 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[62] = (uint8_t)((lo_bit_count &gt;&gt; 8) &amp; 0xff);</span> -<span class="lineNum"> 287 </span> :<span class="lineCov"> 502 : sha1_info-&gt;data[63] = (uint8_t)((lo_bit_count &gt;&gt; 0) &amp; 0xff);</span> -<span class="lineNum"> 288 </span> :<span class="lineCov"> 502 : sha1_transform_and_copy(digest, sha1_info);</span> -<span class="lineNum"> 289 </span> :<span class="lineCov"> 502 : }</span> -<span class="lineNum"> 290 </span> : : -<span class="lineNum"> 291 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html deleted file mode 100644 index 6fb5ce91..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func-sort-c.html +++ /dev/null @@ -1,129 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha2.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha2.c<span style="font-size: 80%;"> (<a href="sha2.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">94</td> - <td class="headerCovTableEntry">228</td> - <td class="headerCovTableEntryLo">41.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">22</td> - <td class="headerCovTableEntry">76</td> - <td class="headerCovTableEntryLo">28.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="sha2.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#452">SHA256_Transform</a></td> - <td class="coverFnHi">5490</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#532">SHA256_Update</a></td> - <td class="coverFnHi">3023</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#580">SHA256_Final</a></td> - <td class="coverFnHi">1935</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#348">SHA256_Init</a></td> - <td class="coverFnHi">1935</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#955">SHA384_Final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#942">SHA384_Init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#644">SHA512_Init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#870">SHA512_Last</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#911">SHA512_Final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#744">SHA512_Transform</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#822">SHA512_Update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#951">SHA384_Update</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html deleted file mode 100644 index 9951c822..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.func.html +++ /dev/null @@ -1,129 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha2.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha2.c<span style="font-size: 80%;"> (<a href="sha2.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">94</td> - <td class="headerCovTableEntry">228</td> - <td class="headerCovTableEntryLo">41.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">22</td> - <td class="headerCovTableEntry">76</td> - <td class="headerCovTableEntryLo">28.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="sha2.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#580">SHA256_Final</a></td> - <td class="coverFnHi">1935</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#348">SHA256_Init</a></td> - <td class="coverFnHi">1935</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#452">SHA256_Transform</a></td> - <td class="coverFnHi">5490</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#532">SHA256_Update</a></td> - <td class="coverFnHi">3023</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#955">SHA384_Final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#942">SHA384_Init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#951">SHA384_Update</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#911">SHA512_Final</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#644">SHA512_Init</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#870">SHA512_Last</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#744">SHA512_Transform</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sha2.c.gcov.html#822">SHA512_Update</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html deleted file mode 100644 index 075a91b7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/sha2.c.gcov.html +++ /dev/null @@ -1,1069 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/sha2.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - sha2.c<span style="font-size: 80%;"> (source / <a href="sha2.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">94</td> - <td class="headerCovTableEntry">228</td> - <td class="headerCovTableEntryLo">41.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">22</td> - <td class="headerCovTableEntry">76</td> - <td class="headerCovTableEntryLo">28.9 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: sha2.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: An implementation of the SHA 26/384/512 digests. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * AUTHOR: Aaron D. Gifford - http://www.aarongifford.com/ -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * Copyright (c) 2000-2001, Aaron D. Gifford -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * All rights reserved. -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * Redistribution and use in source and binary forms, with or without -<span class="lineNum"> 15 </span> : : * modification, are permitted provided that the following conditions -<span class="lineNum"> 16 </span> : : * are met: -<span class="lineNum"> 17 </span> : : * 1. Redistributions of source code must retain the above copyright -<span class="lineNum"> 18 </span> : : * notice, this list of conditions and the following disclaimer. -<span class="lineNum"> 19 </span> : : * 2. Redistributions in binary form must reproduce the above copyright -<span class="lineNum"> 20 </span> : : * notice, this list of conditions and the following disclaimer in the -<span class="lineNum"> 21 </span> : : * documentation and/or other materials provided with the distribution. -<span class="lineNum"> 22 </span> : : * 3. Neither the name of the copyright holder nor the names of contributors -<span class="lineNum"> 23 </span> : : * may be used to endorse or promote products derived from this software -<span class="lineNum"> 24 </span> : : * without specific prior written permission. -<span class="lineNum"> 25 </span> : : * -<span class="lineNum"> 26 </span> : : * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTOR(S) ``AS IS'' AND -<span class="lineNum"> 27 </span> : : * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -<span class="lineNum"> 28 </span> : : * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -<span class="lineNum"> 29 </span> : : * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTOR(S) BE LIABLE -<span class="lineNum"> 30 </span> : : * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -<span class="lineNum"> 31 </span> : : * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -<span class="lineNum"> 32 </span> : : * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -<span class="lineNum"> 33 </span> : : * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -<span class="lineNum"> 34 </span> : : * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -<span class="lineNum"> 35 </span> : : * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -<span class="lineNum"> 36 </span> : : * SUCH DAMAGE. -<span class="lineNum"> 37 </span> : : * -<span class="lineNum"> 38 </span> : : ***************************************************************************** -<span class="lineNum"> 39 </span> : : */ -<span class="lineNum"> 40 </span> : : #include &lt;string.h&gt; /* memcpy()/memset() or bcopy()/bzero() */ -<span class="lineNum"> 41 </span> : : #include &lt;assert.h&gt; /* assert() */ -<span class="lineNum"> 42 </span> : : #include &quot;sha2.h&quot; -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : #if HAVE_SYS_BYTEORDER_H -<span class="lineNum"> 45 </span> : : #include &lt;sys/byteorder.h&gt; -<span class="lineNum"> 46 </span> : : #endif -<span class="lineNum"> 47 </span> : : -<span class="lineNum"> 48 </span> : : /* -<span class="lineNum"> 49 </span> : : * ASSERT NOTE: -<span class="lineNum"> 50 </span> : : * Some sanity checking code is included using assert(). On my FreeBSD -<span class="lineNum"> 51 </span> : : * system, this additional code can be removed by compiling with NDEBUG -<span class="lineNum"> 52 </span> : : * defined. Check your own systems manpage on assert() to see how to -<span class="lineNum"> 53 </span> : : * compile WITHOUT the sanity checking code on your system. -<span class="lineNum"> 54 </span> : : * -<span class="lineNum"> 55 </span> : : * UNROLLED TRANSFORM LOOP NOTE: -<span class="lineNum"> 56 </span> : : * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform -<span class="lineNum"> 57 </span> : : * loop version for the hash transform rounds (defined using macros -<span class="lineNum"> 58 </span> : : * later in this file). Either define on the command line, for example: -<span class="lineNum"> 59 </span> : : * -<span class="lineNum"> 60 </span> : : * cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c -<span class="lineNum"> 61 </span> : : * -<span class="lineNum"> 62 </span> : : * or define below: -<span class="lineNum"> 63 </span> : : * -<span class="lineNum"> 64 </span> : : * #define SHA2_UNROLL_TRANSFORM -<span class="lineNum"> 65 </span> : : * -<span class="lineNum"> 66 </span> : : */ -<span class="lineNum"> 67 </span> : : -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> : : /*** SHA-256/384/512 Machine Architecture Definitions *****************/ -<span class="lineNum"> 70 </span> : : /* -<span class="lineNum"> 71 </span> : : * BYTE_ORDER NOTE: -<span class="lineNum"> 72 </span> : : * -<span class="lineNum"> 73 </span> : : * Please make sure that your system defines BYTE_ORDER. If your -<span class="lineNum"> 74 </span> : : * architecture is little-endian, make sure it also defines -<span class="lineNum"> 75 </span> : : * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are -<span class="lineNum"> 76 </span> : : * equivilent. -<span class="lineNum"> 77 </span> : : * -<span class="lineNum"> 78 </span> : : * If your system does not define the above, then you can do so by -<span class="lineNum"> 79 </span> : : * hand like this: -<span class="lineNum"> 80 </span> : : * -<span class="lineNum"> 81 </span> : : * #define LITTLE_ENDIAN 1234 -<span class="lineNum"> 82 </span> : : * #define BIG_ENDIAN 4321 -<span class="lineNum"> 83 </span> : : * -<span class="lineNum"> 84 </span> : : * And for little-endian machines, add: -<span class="lineNum"> 85 </span> : : * -<span class="lineNum"> 86 </span> : : * #define BYTE_ORDER LITTLE_ENDIAN -<span class="lineNum"> 87 </span> : : * -<span class="lineNum"> 88 </span> : : * Or for big-endian machines: -<span class="lineNum"> 89 </span> : : * -<span class="lineNum"> 90 </span> : : * #define BYTE_ORDER BIG_ENDIAN -<span class="lineNum"> 91 </span> : : * -<span class="lineNum"> 92 </span> : : * The FreeBSD machine this was written on defines BYTE_ORDER -<span class="lineNum"> 93 </span> : : * appropriately by including &lt;sys/types.h&gt; (which in turn includes -<span class="lineNum"> 94 </span> : : * &lt;machine/endian.h&gt; where the appropriate definitions are actually -<span class="lineNum"> 95 </span> : : * made). -<span class="lineNum"> 96 </span> : : */ -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : #ifndef BYTE_ORDER -<span class="lineNum"> 99 </span> : : #ifdef WIN32 -<span class="lineNum"> 100 </span> : : #define BYTE_ORDER BIG_ENDIAN -<span class="lineNum"> 101 </span> : : #elif defined(_BIG_ENDIAN) -<span class="lineNum"> 102 </span> : : #define BYTE_ORDER BIG_ENDIAN -<span class="lineNum"> 103 </span> : : #elif defined(_LITTLE_ENDIAN) -<span class="lineNum"> 104 </span> : : #define BYTE_ORDER LITTLE_ENDIAN -<span class="lineNum"> 105 </span> : : #endif -<span class="lineNum"> 106 </span> : : #endif -<span class="lineNum"> 107 </span> : : -<span class="lineNum"> 108 </span> : : #if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN &amp;&amp; BYTE_ORDER != BIG_ENDIAN) -<span class="lineNum"> 109 </span> : : #error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN -<span class="lineNum"> 110 </span> : : #endif -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : /* -<span class="lineNum"> 113 </span> : : * Define the followingsha2_* types to types of the correct length on -<span class="lineNum"> 114 </span> : : * the native archtecture. Most BSD systems and Linux define u_intXX_t -<span class="lineNum"> 115 </span> : : * types. Machines with very recent ANSI C headers, can use the -<span class="lineNum"> 116 </span> : : * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H -<span class="lineNum"> 117 </span> : : * during compile or in the sha.h header file. -<span class="lineNum"> 118 </span> : : * -<span class="lineNum"> 119 </span> : : * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t -<span class="lineNum"> 120 </span> : : * will need to define these three typedefs below (and the appropriate -<span class="lineNum"> 121 </span> : : * ones in sha.h too) by hand according to their system architecture. -<span class="lineNum"> 122 </span> : : * -<span class="lineNum"> 123 </span> : : * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t -<span class="lineNum"> 124 </span> : : * types and pointing out recent ANSI C support for uintXX_t in inttypes.h. -<span class="lineNum"> 125 </span> : : */ -<span class="lineNum"> 126 </span> : : #ifdef SHA2_USE_INTTYPES_H -<span class="lineNum"> 127 </span> : : -<span class="lineNum"> 128 </span> : : typedef uint8_t sha2_byte; /* Exactly 1 byte */ -<span class="lineNum"> 129 </span> : : typedef uint32_t sha2_word32; /* Exactly 4 bytes */ -<span class="lineNum"> 130 </span> : : typedef uint64_t sha2_word64; /* Exactly 8 bytes */ -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> : : #else /* SHA2_USE_INTTYPES_H */ -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> : : typedef u_int8_t sha2_byte; /* Exactly 1 byte */ -<span class="lineNum"> 135 </span> : : typedef u_int32_t sha2_word32; /* Exactly 4 bytes */ -<span class="lineNum"> 136 </span> : : typedef u_int64_t sha2_word64; /* Exactly 8 bytes */ -<span class="lineNum"> 137 </span> : : -<span class="lineNum"> 138 </span> : : #endif /* SHA2_USE_INTTYPES_H */ -<span class="lineNum"> 139 </span> : : -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> : : /*** SHA-256/384/512 Various Length Definitions ***********************/ -<span class="lineNum"> 142 </span> : : /* NOTE: Most of these are in sha2.h */ -<span class="lineNum"> 143 </span> : : #define SHA256_SHORT_BLOCK_LEN (SHA256_BLOCK_LEN - 8) -<span class="lineNum"> 144 </span> : : #define SHA384_SHORT_BLOCK_LEN (SHA384_BLOCK_LEN - 16) -<span class="lineNum"> 145 </span> : : #define SHA512_SHORT_BLOCK_LEN (SHA512_BLOCK_LEN - 16) -<span class="lineNum"> 146 </span> : : -<span class="lineNum"> 147 </span> : : -<span class="lineNum"> 148 </span> : : /*** ENDIAN REVERSAL MACROS *******************************************/ -<span class="lineNum"> 149 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 150 </span> : : #define REVERSE32(w,x) { \ -<span class="lineNum"> 151 </span> : : sha2_word32 tmp = (w); \ -<span class="lineNum"> 152 </span> : : tmp = (tmp &gt;&gt; 16) | (tmp &lt;&lt; 16); \ -<span class="lineNum"> 153 </span> : : (x) = ((tmp &amp; 0xff00ff00UL) &gt;&gt; 8) | ((tmp &amp; 0x00ff00ffUL) &lt;&lt; 8); \ -<span class="lineNum"> 154 </span> : : } -<span class="lineNum"> 155 </span> : : #define REVERSE64(w,x) { \ -<span class="lineNum"> 156 </span> : : sha2_word64 tmp = (w); \ -<span class="lineNum"> 157 </span> : : tmp = (tmp &gt;&gt; 32) | (tmp &lt;&lt; 32); \ -<span class="lineNum"> 158 </span> : : tmp = ((tmp &amp; 0xff00ff00ff00ff00ULL) &gt;&gt; 8) | \ -<span class="lineNum"> 159 </span> : : ((tmp &amp; 0x00ff00ff00ff00ffULL) &lt;&lt; 8); \ -<span class="lineNum"> 160 </span> : : (x) = ((tmp &amp; 0xffff0000ffff0000ULL) &gt;&gt; 16) | \ -<span class="lineNum"> 161 </span> : : ((tmp &amp; 0x0000ffff0000ffffULL) &lt;&lt; 16); \ -<span class="lineNum"> 162 </span> : : } -<span class="lineNum"> 163 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 164 </span> : : -<span class="lineNum"> 165 </span> : : /* -<span class="lineNum"> 166 </span> : : * Macro for incrementally adding the unsigned 64-bit integer n to the -<span class="lineNum"> 167 </span> : : * unsigned 128-bit integer (represented using a two-element array of -<span class="lineNum"> 168 </span> : : * 64-bit words): -<span class="lineNum"> 169 </span> : : */ -<span class="lineNum"> 170 </span> : : #define ADDINC128(w,n) { \ -<span class="lineNum"> 171 </span> : : (w)[0] += (sha2_word64)(n); \ -<span class="lineNum"> 172 </span> : : if ((w)[0] &lt; (n)) { \ -<span class="lineNum"> 173 </span> : : (w)[1]++; \ -<span class="lineNum"> 174 </span> : : } \ -<span class="lineNum"> 175 </span> : : } -<span class="lineNum"> 176 </span> : : -<span class="lineNum"> 177 </span> : : /* -<span class="lineNum"> 178 </span> : : * Macros for copying blocks of memory and for zeroing out ranges -<span class="lineNum"> 179 </span> : : * of memory. Using these macros makes it easy to switch from -<span class="lineNum"> 180 </span> : : * using memset()/memcpy() and using bzero()/bcopy(). -<span class="lineNum"> 181 </span> : : * -<span class="lineNum"> 182 </span> : : * Please define either SHA2_USE_MEMSET_MEMCPY or define -<span class="lineNum"> 183 </span> : : * SHA2_USE_BZERO_BCOPY depending on which function set you -<span class="lineNum"> 184 </span> : : * choose to use: -<span class="lineNum"> 185 </span> : : */ -<span class="lineNum"> 186 </span> : : #if !defined(SHA2_USE_MEMSET_MEMCPY) &amp;&amp; !defined(SHA2_USE_BZERO_BCOPY) -<span class="lineNum"> 187 </span> : : /* Default to memset()/memcpy() if no option is specified */ -<span class="lineNum"> 188 </span> : : #define SHA2_USE_MEMSET_MEMCPY 1 -<span class="lineNum"> 189 </span> : : #endif -<span class="lineNum"> 190 </span> : : #if defined(SHA2_USE_MEMSET_MEMCPY) &amp;&amp; defined(SHA2_USE_BZERO_BCOPY) -<span class="lineNum"> 191 </span> : : /* Abort with an error if BOTH options are defined */ -<span class="lineNum"> 192 </span> : : #error Define either SHA2_USE_MEMSET_MEMCPY or SHA2_USE_BZERO_BCOPY, not both! -<span class="lineNum"> 193 </span> : : #endif -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> : : #ifdef SHA2_USE_MEMSET_MEMCPY -<span class="lineNum"> 196 </span> : : #define MEMSET_BZERO(p,l) memset((p), 0, (l)) -<span class="lineNum"> 197 </span> : : #define MEMCPY_BCOPY(d,s,l) memcpy((d), (s), (l)) -<span class="lineNum"> 198 </span> : : #endif -<span class="lineNum"> 199 </span> : : #ifdef SHA2_USE_BZERO_BCOPY -<span class="lineNum"> 200 </span> : : #define MEMSET_BZERO(p,l) bzero((p), (l)) -<span class="lineNum"> 201 </span> : : #define MEMCPY_BCOPY(d,s,l) bcopy((s), (d), (l)) -<span class="lineNum"> 202 </span> : : #endif -<span class="lineNum"> 203 </span> : : -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> : : /*** THE SIX LOGICAL FUNCTIONS ****************************************/ -<span class="lineNum"> 206 </span> : : /* -<span class="lineNum"> 207 </span> : : * Bit shifting and rotation (used by the six SHA-XYZ logical functions: -<span class="lineNum"> 208 </span> : : * -<span class="lineNum"> 209 </span> : : * NOTE: The naming of R and S appears backwards here (R is a SHIFT and -<span class="lineNum"> 210 </span> : : * S is a ROTATION) because the SHA-256/384/512 description document -<span class="lineNum"> 211 </span> : : * (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this -<span class="lineNum"> 212 </span> : : * same &quot;backwards&quot; definition. -<span class="lineNum"> 213 </span> : : */ -<span class="lineNum"> 214 </span> : : /* Shift-right (used in SHA-256, SHA-384, and SHA-512): */ -<span class="lineNum"> 215 </span> : : #define R(b,x) ((x) &gt;&gt; (b)) -<span class="lineNum"> 216 </span> : : /* 32-bit Rotate-right (used in SHA-256): */ -<span class="lineNum"> 217 </span> : : #define S32(b,x) (((x) &gt;&gt; (b)) | ((x) &lt;&lt; (32 - (b)))) -<span class="lineNum"> 218 </span> : : /* 64-bit Rotate-right (used in SHA-384 and SHA-512): */ -<span class="lineNum"> 219 </span> : : #define S64(b,x) (((x) &gt;&gt; (b)) | ((x) &lt;&lt; (64 - (b)))) -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> : : /* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */ -<span class="lineNum"> 222 </span> : : #define Ch(x,y,z) (((x) &amp; (y)) ^ ((~(x)) &amp; (z))) -<span class="lineNum"> 223 </span> : : #define Maj(x,y,z) (((x) &amp; (y)) ^ ((x) &amp; (z)) ^ ((y) &amp; (z))) -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> : : /* Four of six logical functions used in SHA-256: */ -<span class="lineNum"> 226 </span> : : #define Sigma0_256(x) (S32(2, (x)) ^ S32(13, (x)) ^ S32(22, (x))) -<span class="lineNum"> 227 </span> : : #define Sigma1_256(x) (S32(6, (x)) ^ S32(11, (x)) ^ S32(25, (x))) -<span class="lineNum"> 228 </span> : : #define sigma0_256(x) (S32(7, (x)) ^ S32(18, (x)) ^ R(3 , (x))) -<span class="lineNum"> 229 </span> : : #define sigma1_256(x) (S32(17, (x)) ^ S32(19, (x)) ^ R(10, (x))) -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> : : /* Four of six logical functions used in SHA-384 and SHA-512: */ -<span class="lineNum"> 232 </span> : : #define Sigma0_512(x) (S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x))) -<span class="lineNum"> 233 </span> : : #define Sigma1_512(x) (S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x))) -<span class="lineNum"> 234 </span> : : #define sigma0_512(x) (S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7, (x))) -<span class="lineNum"> 235 </span> : : #define sigma1_512(x) (S64(19, (x)) ^ S64(61, (x)) ^ R( 6, (x))) -<span class="lineNum"> 236 </span> : : -<span class="lineNum"> 237 </span> : : /*** INTERNAL FUNCTION PROTOTYPES *************************************/ -<span class="lineNum"> 238 </span> : : /* NOTE: These should not be accessed directly from outside this -<span class="lineNum"> 239 </span> : : * library -- they are intended for private internal visibility/use -<span class="lineNum"> 240 </span> : : * only. -<span class="lineNum"> 241 </span> : : */ -<span class="lineNum"> 242 </span> : : void SHA512_Last(SHA512_CTX*); -<span class="lineNum"> 243 </span> : : void SHA256_Transform(SHA256_CTX*, const sha2_word32*); -<span class="lineNum"> 244 </span> : : void SHA512_Transform(SHA512_CTX*, const sha2_word64*); -<span class="lineNum"> 245 </span> : : -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> : : /*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/ -<span class="lineNum"> 248 </span> : : /* Hash constant words K for SHA-256: */ -<span class="lineNum"> 249 </span> : : const static sha2_word32 K256[64] = { -<span class="lineNum"> 250 </span> : : 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, -<span class="lineNum"> 251 </span> : : 0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, -<span class="lineNum"> 252 </span> : : 0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL, -<span class="lineNum"> 253 </span> : : 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL, -<span class="lineNum"> 254 </span> : : 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL, -<span class="lineNum"> 255 </span> : : 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, -<span class="lineNum"> 256 </span> : : 0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, -<span class="lineNum"> 257 </span> : : 0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL, -<span class="lineNum"> 258 </span> : : 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL, -<span class="lineNum"> 259 </span> : : 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL, -<span class="lineNum"> 260 </span> : : 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, -<span class="lineNum"> 261 </span> : : 0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, -<span class="lineNum"> 262 </span> : : 0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL, -<span class="lineNum"> 263 </span> : : 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL, -<span class="lineNum"> 264 </span> : : 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL, -<span class="lineNum"> 265 </span> : : 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL -<span class="lineNum"> 266 </span> : : }; -<span class="lineNum"> 267 </span> : : -<span class="lineNum"> 268 </span> : : /* Initial hash value H for SHA-256: */ -<span class="lineNum"> 269 </span> : : const static sha2_word32 sha256_initial_hash_value[8] = { -<span class="lineNum"> 270 </span> : : 0x6a09e667UL, -<span class="lineNum"> 271 </span> : : 0xbb67ae85UL, -<span class="lineNum"> 272 </span> : : 0x3c6ef372UL, -<span class="lineNum"> 273 </span> : : 0xa54ff53aUL, -<span class="lineNum"> 274 </span> : : 0x510e527fUL, -<span class="lineNum"> 275 </span> : : 0x9b05688cUL, -<span class="lineNum"> 276 </span> : : 0x1f83d9abUL, -<span class="lineNum"> 277 </span> : : 0x5be0cd19UL -<span class="lineNum"> 278 </span> : : }; -<span class="lineNum"> 279 </span> : : -<span class="lineNum"> 280 </span> : : /* Hash constant words K for SHA-384 and SHA-512: */ -<span class="lineNum"> 281 </span> : : const static sha2_word64 K512[80] = { -<span class="lineNum"> 282 </span> : : 0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL, -<span class="lineNum"> 283 </span> : : 0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL, -<span class="lineNum"> 284 </span> : : 0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL, -<span class="lineNum"> 285 </span> : : 0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL, -<span class="lineNum"> 286 </span> : : 0xd807aa98a3030242ULL, 0x12835b0145706fbeULL, -<span class="lineNum"> 287 </span> : : 0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL, -<span class="lineNum"> 288 </span> : : 0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL, -<span class="lineNum"> 289 </span> : : 0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL, -<span class="lineNum"> 290 </span> : : 0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL, -<span class="lineNum"> 291 </span> : : 0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL, -<span class="lineNum"> 292 </span> : : 0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL, -<span class="lineNum"> 293 </span> : : 0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL, -<span class="lineNum"> 294 </span> : : 0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL, -<span class="lineNum"> 295 </span> : : 0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL, -<span class="lineNum"> 296 </span> : : 0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL, -<span class="lineNum"> 297 </span> : : 0x06ca6351e003826fULL, 0x142929670a0e6e70ULL, -<span class="lineNum"> 298 </span> : : 0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL, -<span class="lineNum"> 299 </span> : : 0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL, -<span class="lineNum"> 300 </span> : : 0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL, -<span class="lineNum"> 301 </span> : : 0x81c2c92e47edaee6ULL, 0x92722c851482353bULL, -<span class="lineNum"> 302 </span> : : 0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL, -<span class="lineNum"> 303 </span> : : 0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL, -<span class="lineNum"> 304 </span> : : 0xd192e819d6ef5218ULL, 0xd69906245565a910ULL, -<span class="lineNum"> 305 </span> : : 0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL, -<span class="lineNum"> 306 </span> : : 0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL, -<span class="lineNum"> 307 </span> : : 0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL, -<span class="lineNum"> 308 </span> : : 0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL, -<span class="lineNum"> 309 </span> : : 0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL, -<span class="lineNum"> 310 </span> : : 0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL, -<span class="lineNum"> 311 </span> : : 0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL, -<span class="lineNum"> 312 </span> : : 0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL, -<span class="lineNum"> 313 </span> : : 0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL, -<span class="lineNum"> 314 </span> : : 0xca273eceea26619cULL, 0xd186b8c721c0c207ULL, -<span class="lineNum"> 315 </span> : : 0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL, -<span class="lineNum"> 316 </span> : : 0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL, -<span class="lineNum"> 317 </span> : : 0x113f9804bef90daeULL, 0x1b710b35131c471bULL, -<span class="lineNum"> 318 </span> : : 0x28db77f523047d84ULL, 0x32caab7b40c72493ULL, -<span class="lineNum"> 319 </span> : : 0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL, -<span class="lineNum"> 320 </span> : : 0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL, -<span class="lineNum"> 321 </span> : : 0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL -<span class="lineNum"> 322 </span> : : }; -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> : : /* Initial hash value H for SHA-384 */ -<span class="lineNum"> 325 </span> : : const static sha2_word64 sha384_initial_hash_value[8] = { -<span class="lineNum"> 326 </span> : : 0xcbbb9d5dc1059ed8ULL, -<span class="lineNum"> 327 </span> : : 0x629a292a367cd507ULL, -<span class="lineNum"> 328 </span> : : 0x9159015a3070dd17ULL, -<span class="lineNum"> 329 </span> : : 0x152fecd8f70e5939ULL, -<span class="lineNum"> 330 </span> : : 0x67332667ffc00b31ULL, -<span class="lineNum"> 331 </span> : : 0x8eb44a8768581511ULL, -<span class="lineNum"> 332 </span> : : 0xdb0c2e0d64f98fa7ULL, -<span class="lineNum"> 333 </span> : : 0x47b5481dbefa4fa4ULL -<span class="lineNum"> 334 </span> : : }; -<span class="lineNum"> 335 </span> : : -<span class="lineNum"> 336 </span> : : /* Initial hash value H for SHA-512 */ -<span class="lineNum"> 337 </span> : : const static sha2_word64 sha512_initial_hash_value[8] = { -<span class="lineNum"> 338 </span> : : 0x6a09e667f3bcc908ULL, -<span class="lineNum"> 339 </span> : : 0xbb67ae8584caa73bULL, -<span class="lineNum"> 340 </span> : : 0x3c6ef372fe94f82bULL, -<span class="lineNum"> 341 </span> : : 0xa54ff53a5f1d36f1ULL, -<span class="lineNum"> 342 </span> : : 0x510e527fade682d1ULL, -<span class="lineNum"> 343 </span> : : 0x9b05688c2b3e6c1fULL, -<span class="lineNum"> 344 </span> : : 0x1f83d9abfb41bd6bULL, -<span class="lineNum"> 345 </span> : : 0x5be0cd19137e2179ULL -<span class="lineNum"> 346 </span> : : }; -<span class="lineNum"> 347 </span> : : -<a name="348"><span class="lineNum"> 348 </span> : : </a> -<span class="lineNum"> 349 </span> : : /*** SHA-256: *********************************************************/ -<span class="lineNum"> 350 </span> :<span class="lineCov"> 1935 : void SHA256_Init(SHA256_CTX* context) {</span> -<span class="lineNum"> 351 </span> [<span class="branchCov" title="Branch 0 was taken 1935 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1935 : if (context == (SHA256_CTX*)0) {</span> -<span class="lineNum"> 352 </span> :<span class="lineCov"> 1935 : return;</span> -<span class="lineNum"> 353 </span> : : } -<span class="lineNum"> 354 </span> :<span class="lineCov"> 1935 : MEMCPY_BCOPY(context-&gt;state, sha256_initial_hash_value, SHA256_DIGEST_LEN);</span> -<span class="lineNum"> 355 </span> :<span class="lineCov"> 1935 : MEMSET_BZERO(context-&gt;buffer, SHA256_BLOCK_LEN);</span> -<span class="lineNum"> 356 </span> :<span class="lineCov"> 1935 : context-&gt;bitcount = 0;</span> -<span class="lineNum"> 357 </span> : : } -<span class="lineNum"> 358 </span> : : -<span class="lineNum"> 359 </span> : : #ifdef SHA2_UNROLL_TRANSFORM -<span class="lineNum"> 360 </span> : : -<span class="lineNum"> 361 </span> : : /* Unrolled SHA-256 round macros: */ -<span class="lineNum"> 362 </span> : : -<span class="lineNum"> 363 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 364 </span> : : -<span class="lineNum"> 365 </span> : : #define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ -<span class="lineNum"> 366 </span> : : REVERSE32(*data++, W256[j]); \ -<span class="lineNum"> 367 </span> : : T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ -<span class="lineNum"> 368 </span> : : K256[j] + W256[j]; \ -<span class="lineNum"> 369 </span> : : (d) += T1; \ -<span class="lineNum"> 370 </span> : : (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ -<span class="lineNum"> 371 </span> : : j++ -<span class="lineNum"> 372 </span> : : -<span class="lineNum"> 373 </span> : : -<span class="lineNum"> 374 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 375 </span> : : -<span class="lineNum"> 376 </span> : : #define ROUND256_0_TO_15(a,b,c,d,e,f,g,h) \ -<span class="lineNum"> 377 </span> : : T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \ -<span class="lineNum"> 378 </span> : : K256[j] + (W256[j] = *data++); \ -<span class="lineNum"> 379 </span> : : (d) += T1; \ -<span class="lineNum"> 380 </span> : : (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ -<span class="lineNum"> 381 </span> : : j++ -<span class="lineNum"> 382 </span> : : -<span class="lineNum"> 383 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 384 </span> : : -<span class="lineNum"> 385 </span> : : #define ROUND256(a,b,c,d,e,f,g,h) \ -<span class="lineNum"> 386 </span> : : s0 = W256[(j+1)&amp;0x0f]; \ -<span class="lineNum"> 387 </span> : : s0 = sigma0_256(s0); \ -<span class="lineNum"> 388 </span> : : s1 = W256[(j+14)&amp;0x0f]; \ -<span class="lineNum"> 389 </span> : : s1 = sigma1_256(s1); \ -<span class="lineNum"> 390 </span> : : T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \ -<span class="lineNum"> 391 </span> : : (W256[j&amp;0x0f] += s1 + W256[(j+9)&amp;0x0f] + s0); \ -<span class="lineNum"> 392 </span> : : (d) += T1; \ -<span class="lineNum"> 393 </span> : : (h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \ -<span class="lineNum"> 394 </span> : : j++ -<span class="lineNum"> 395 </span> : : -<span class="lineNum"> 396 </span> : : void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) { -<span class="lineNum"> 397 </span> : : sha2_word32 a, b, c, d, e, f, g, h, s0, s1; -<span class="lineNum"> 398 </span> : : sha2_word32 T1, *W256; -<span class="lineNum"> 399 </span> : : int j; -<span class="lineNum"> 400 </span> : : -<span class="lineNum"> 401 </span> : : W256 = (sha2_word32*)context-&gt;buffer; -<span class="lineNum"> 402 </span> : : -<span class="lineNum"> 403 </span> : : /* Initialize registers with the prev. intermediate value */ -<span class="lineNum"> 404 </span> : : a = context-&gt;state[0]; -<span class="lineNum"> 405 </span> : : b = context-&gt;state[1]; -<span class="lineNum"> 406 </span> : : c = context-&gt;state[2]; -<span class="lineNum"> 407 </span> : : d = context-&gt;state[3]; -<span class="lineNum"> 408 </span> : : e = context-&gt;state[4]; -<span class="lineNum"> 409 </span> : : f = context-&gt;state[5]; -<span class="lineNum"> 410 </span> : : g = context-&gt;state[6]; -<span class="lineNum"> 411 </span> : : h = context-&gt;state[7]; -<span class="lineNum"> 412 </span> : : -<span class="lineNum"> 413 </span> : : j = 0; -<span class="lineNum"> 414 </span> : : do { -<span class="lineNum"> 415 </span> : : /* Rounds 0 to 15 (unrolled): */ -<span class="lineNum"> 416 </span> : : ROUND256_0_TO_15(a,b,c,d,e,f,g,h); -<span class="lineNum"> 417 </span> : : ROUND256_0_TO_15(h,a,b,c,d,e,f,g); -<span class="lineNum"> 418 </span> : : ROUND256_0_TO_15(g,h,a,b,c,d,e,f); -<span class="lineNum"> 419 </span> : : ROUND256_0_TO_15(f,g,h,a,b,c,d,e); -<span class="lineNum"> 420 </span> : : ROUND256_0_TO_15(e,f,g,h,a,b,c,d); -<span class="lineNum"> 421 </span> : : ROUND256_0_TO_15(d,e,f,g,h,a,b,c); -<span class="lineNum"> 422 </span> : : ROUND256_0_TO_15(c,d,e,f,g,h,a,b); -<span class="lineNum"> 423 </span> : : ROUND256_0_TO_15(b,c,d,e,f,g,h,a); -<span class="lineNum"> 424 </span> : : } while (j &lt; 16); -<span class="lineNum"> 425 </span> : : -<span class="lineNum"> 426 </span> : : /* Now for the remaining rounds to 64: */ -<span class="lineNum"> 427 </span> : : do { -<span class="lineNum"> 428 </span> : : ROUND256(a,b,c,d,e,f,g,h); -<span class="lineNum"> 429 </span> : : ROUND256(h,a,b,c,d,e,f,g); -<span class="lineNum"> 430 </span> : : ROUND256(g,h,a,b,c,d,e,f); -<span class="lineNum"> 431 </span> : : ROUND256(f,g,h,a,b,c,d,e); -<span class="lineNum"> 432 </span> : : ROUND256(e,f,g,h,a,b,c,d); -<span class="lineNum"> 433 </span> : : ROUND256(d,e,f,g,h,a,b,c); -<span class="lineNum"> 434 </span> : : ROUND256(c,d,e,f,g,h,a,b); -<span class="lineNum"> 435 </span> : : ROUND256(b,c,d,e,f,g,h,a); -<span class="lineNum"> 436 </span> : : } while (j &lt; 64); -<span class="lineNum"> 437 </span> : : -<span class="lineNum"> 438 </span> : : /* Compute the current intermediate hash value */ -<span class="lineNum"> 439 </span> : : context-&gt;state[0] += a; -<span class="lineNum"> 440 </span> : : context-&gt;state[1] += b; -<span class="lineNum"> 441 </span> : : context-&gt;state[2] += c; -<span class="lineNum"> 442 </span> : : context-&gt;state[3] += d; -<span class="lineNum"> 443 </span> : : context-&gt;state[4] += e; -<span class="lineNum"> 444 </span> : : context-&gt;state[5] += f; -<span class="lineNum"> 445 </span> : : context-&gt;state[6] += g; -<span class="lineNum"> 446 </span> : : context-&gt;state[7] += h; -<span class="lineNum"> 447 </span> : : -<span class="lineNum"> 448 </span> : : /* Clean up */ -<span class="lineNum"> 449 </span> : : a = b = c = d = e = f = g = h = T1 = 0; -<span class="lineNum"> 450 </span> : : } -<span class="lineNum"> 451 </span> : : -<a name="452"><span class="lineNum"> 452 </span> : : #else /* SHA2_UNROLL_TRANSFORM */</a> -<span class="lineNum"> 453 </span> : : -<span class="lineNum"> 454 </span> :<span class="lineCov"> 5490 : void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {</span> -<span class="lineNum"> 455 </span> : : sha2_word32 a, b, c, d, e, f, g, h, s0, s1; -<span class="lineNum"> 456 </span> : : sha2_word32 T1, T2, *W256; -<span class="lineNum"> 457 </span> : : int j; -<span class="lineNum"> 458 </span> : : -<span class="lineNum"> 459 </span> :<span class="lineCov"> 5490 : W256 = (sha2_word32*)context-&gt;buffer;</span> -<span class="lineNum"> 460 </span> : : -<span class="lineNum"> 461 </span> : : /* Initialize registers with the prev. intermediate value */ -<span class="lineNum"> 462 </span> :<span class="lineCov"> 5490 : a = context-&gt;state[0];</span> -<span class="lineNum"> 463 </span> :<span class="lineCov"> 5490 : b = context-&gt;state[1];</span> -<span class="lineNum"> 464 </span> :<span class="lineCov"> 5490 : c = context-&gt;state[2];</span> -<span class="lineNum"> 465 </span> :<span class="lineCov"> 5490 : d = context-&gt;state[3];</span> -<span class="lineNum"> 466 </span> :<span class="lineCov"> 5490 : e = context-&gt;state[4];</span> -<span class="lineNum"> 467 </span> :<span class="lineCov"> 5490 : f = context-&gt;state[5];</span> -<span class="lineNum"> 468 </span> :<span class="lineCov"> 5490 : g = context-&gt;state[6];</span> -<span class="lineNum"> 469 </span> :<span class="lineCov"> 5490 : h = context-&gt;state[7];</span> -<span class="lineNum"> 470 </span> : : -<span class="lineNum"> 471 </span> :<span class="lineCov"> 5490 : j = 0;</span> -<span class="lineNum"> 472 </span> : : do { -<span class="lineNum"> 473 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 474 </span> : : /* Copy data while converting to host byte order */ -<span class="lineNum"> 475 </span> :<span class="lineCov"> 87840 : REVERSE32(*data++,W256[j]);</span> -<span class="lineNum"> 476 </span> : : /* Apply the SHA-256 compression function to update a..h */ -<span class="lineNum"> 477 </span> :<span class="lineCov"> 87840 : T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];</span> -<span class="lineNum"> 478 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 479 </span> : : /* Apply the SHA-256 compression function to update a..h with copy */ -<span class="lineNum"> 480 </span> : : T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++); -<span class="lineNum"> 481 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 482 </span> :<span class="lineCov"> 87840 : T2 = Sigma0_256(a) + Maj(a, b, c);</span> -<span class="lineNum"> 483 </span> :<span class="lineCov"> 87840 : h = g;</span> -<span class="lineNum"> 484 </span> :<span class="lineCov"> 87840 : g = f;</span> -<span class="lineNum"> 485 </span> :<span class="lineCov"> 87840 : f = e;</span> -<span class="lineNum"> 486 </span> :<span class="lineCov"> 87840 : e = d + T1;</span> -<span class="lineNum"> 487 </span> :<span class="lineCov"> 87840 : d = c;</span> -<span class="lineNum"> 488 </span> :<span class="lineCov"> 87840 : c = b;</span> -<span class="lineNum"> 489 </span> :<span class="lineCov"> 87840 : b = a;</span> -<span class="lineNum"> 490 </span> :<span class="lineCov"> 87840 : a = T1 + T2;</span> -<span class="lineNum"> 491 </span> : : -<span class="lineNum"> 492 </span> :<span class="lineCov"> 87840 : j++;</span> -<span class="lineNum"> 493 </span> [<span class="branchCov" title="Branch 0 was taken 82350 times"> + </span><span class="branchCov" title="Branch 1 was taken 5490 times"> + </span>]:<span class="lineCov"> 87840 : } while (j &lt; 16);</span> -<span class="lineNum"> 494 </span> : : -<span class="lineNum"> 495 </span> : : do { -<span class="lineNum"> 496 </span> : : /* Part of the message block expansion: */ -<span class="lineNum"> 497 </span> :<span class="lineCov"> 263520 : s0 = W256[(j+1)&amp;0x0f];</span> -<span class="lineNum"> 498 </span> :<span class="lineCov"> 263520 : s0 = sigma0_256(s0);</span> -<span class="lineNum"> 499 </span> :<span class="lineCov"> 263520 : s1 = W256[(j+14)&amp;0x0f]; </span> -<span class="lineNum"> 500 </span> :<span class="lineCov"> 263520 : s1 = sigma1_256(s1);</span> -<span class="lineNum"> 501 </span> : : -<span class="lineNum"> 502 </span> : : /* Apply the SHA-256 compression function to update a..h */ -<span class="lineNum"> 503 </span> :<span class="lineCov"> 527040 : T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + </span> -<span class="lineNum"> 504 </span> :<span class="lineCov"> 263520 : (W256[j&amp;0x0f] += s1 + W256[(j+9)&amp;0x0f] + s0);</span> -<span class="lineNum"> 505 </span> :<span class="lineCov"> 263520 : T2 = Sigma0_256(a) + Maj(a, b, c);</span> -<span class="lineNum"> 506 </span> :<span class="lineCov"> 263520 : h = g;</span> -<span class="lineNum"> 507 </span> :<span class="lineCov"> 263520 : g = f;</span> -<span class="lineNum"> 508 </span> :<span class="lineCov"> 263520 : f = e;</span> -<span class="lineNum"> 509 </span> :<span class="lineCov"> 263520 : e = d + T1;</span> -<span class="lineNum"> 510 </span> :<span class="lineCov"> 263520 : d = c;</span> -<span class="lineNum"> 511 </span> :<span class="lineCov"> 263520 : c = b;</span> -<span class="lineNum"> 512 </span> :<span class="lineCov"> 263520 : b = a;</span> -<span class="lineNum"> 513 </span> :<span class="lineCov"> 263520 : a = T1 + T2;</span> -<span class="lineNum"> 514 </span> : : -<span class="lineNum"> 515 </span> :<span class="lineCov"> 263520 : j++;</span> -<span class="lineNum"> 516 </span> [<span class="branchCov" title="Branch 0 was taken 258030 times"> + </span><span class="branchCov" title="Branch 1 was taken 5490 times"> + </span>]:<span class="lineCov"> 263520 : } while (j &lt; 64);</span> -<span class="lineNum"> 517 </span> : : -<span class="lineNum"> 518 </span> : : /* Compute the current intermediate hash value */ -<span class="lineNum"> 519 </span> :<span class="lineCov"> 5490 : context-&gt;state[0] += a;</span> -<span class="lineNum"> 520 </span> :<span class="lineCov"> 5490 : context-&gt;state[1] += b;</span> -<span class="lineNum"> 521 </span> :<span class="lineCov"> 5490 : context-&gt;state[2] += c;</span> -<span class="lineNum"> 522 </span> :<span class="lineCov"> 5490 : context-&gt;state[3] += d;</span> -<span class="lineNum"> 523 </span> :<span class="lineCov"> 5490 : context-&gt;state[4] += e;</span> -<span class="lineNum"> 524 </span> :<span class="lineCov"> 5490 : context-&gt;state[5] += f;</span> -<span class="lineNum"> 525 </span> :<span class="lineCov"> 5490 : context-&gt;state[6] += g;</span> -<span class="lineNum"> 526 </span> :<span class="lineCov"> 5490 : context-&gt;state[7] += h;</span> -<span class="lineNum"> 527 </span> : : -<span class="lineNum"> 528 </span> : : /* Clean up */ -<span class="lineNum"> 529 </span> :<span class="lineCov"> 5490 : a = b = c = d = e = f = g = h = T1 = T2 = 0;</span> -<span class="lineNum"> 530 </span> :<span class="lineCov"> 5490 : }</span> -<span class="lineNum"> 531 </span> : : -<a name="532"><span class="lineNum"> 532 </span> : : #endif /* SHA2_UNROLL_TRANSFORM */</a> -<span class="lineNum"> 533 </span> : : -<span class="lineNum"> 534 </span> :<span class="lineCov"> 3023 : void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) {</span> -<span class="lineNum"> 535 </span> : : unsigned int freespace, usedspace; -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> [<span class="branchCov" title="Branch 0 was taken 3023 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 3023 : if (len == 0) {</span> -<span class="lineNum"> 538 </span> : : /* Calling with no data is valid - we do nothing */ -<span class="lineNum"> 539 </span> : : return; -<span class="lineNum"> 540 </span> : : } -<span class="lineNum"> 541 </span> : : -<span class="lineNum"> 542 </span> : : /* Sanity check: */ -<span class="lineNum"> 543 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3023 times"> + </span>]:<span class="lineCov"> 3023 : assert(context != (SHA256_CTX*)0 &amp;&amp; data != (sha2_byte*)0);</span> -<span class="lineNum"> 544 </span> : : -<span class="lineNum"> 545 </span> :<span class="lineCov"> 3023 : usedspace = (context-&gt;bitcount &gt;&gt; 3) % SHA256_BLOCK_LEN;</span> -<span class="lineNum"> 546 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 3023 times"> + </span>]:<span class="lineCov"> 3023 : if (usedspace &gt; 0) {</span> -<span class="lineNum"> 547 </span> : : /* Calculate how much free space is available in the buffer */ -<span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : freespace = SHA256_BLOCK_LEN - usedspace;</span> -<span class="lineNum"> 549 </span> : : -<span class="lineNum"> 550 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &gt;= freespace) {</span> -<span class="lineNum"> 551 </span> : : /* Fill the buffer completely and process it */ -<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, freespace);</span> -<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount += freespace &lt;&lt; 3;</span> -<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : len -= freespace;</span> -<span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : data += freespace;</span> -<span class="lineNum"> 556 </span> :<span class="lineCov"> 3023 : SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</span> -<span class="lineNum"> 557 </span> : : } else { -<span class="lineNum"> 558 </span> : : /* The buffer is not yet full */ -<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, len);</span> -<span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount += len &lt;&lt; 3;</span> -<span class="lineNum"> 561 </span> : : /* Clean up: */ -<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : usedspace = freespace = 0;</span> -<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 564 </span> : : } -<span class="lineNum"> 565 </span> : : } -<span class="lineNum"> 566 </span> [<span class="branchCov" title="Branch 0 was taken 3358 times"> + </span><span class="branchCov" title="Branch 1 was taken 3023 times"> + </span>]:<span class="lineCov"> 6381 : while (len &gt;= SHA256_BLOCK_LEN) {</span> -<span class="lineNum"> 567 </span> : : /* Process as many complete blocks as we can */ -<span class="lineNum"> 568 </span> :<span class="lineCov"> 3358 : SHA256_Transform(context, (sha2_word32*)data);</span> -<span class="lineNum"> 569 </span> :<span class="lineCov"> 3358 : context-&gt;bitcount += SHA256_BLOCK_LEN &lt;&lt; 3;</span> -<span class="lineNum"> 570 </span> :<span class="lineCov"> 3358 : len -= SHA256_BLOCK_LEN;</span> -<span class="lineNum"> 571 </span> :<span class="lineCov"> 3358 : data += SHA256_BLOCK_LEN;</span> -<span class="lineNum"> 572 </span> : : } -<span class="lineNum"> 573 </span> [<span class="branchCov" title="Branch 0 was taken 1835 times"> + </span><span class="branchCov" title="Branch 1 was taken 1188 times"> + </span>]:<span class="lineCov"> 3023 : if (len &gt; 0) {</span> -<span class="lineNum"> 574 </span> : : /* There's left-overs, so save 'em */ -<span class="lineNum"> 575 </span> :<span class="lineCov"> 1835 : MEMCPY_BCOPY(context-&gt;buffer, data, len);</span> -<span class="lineNum"> 576 </span> :<span class="lineCov"> 1835 : context-&gt;bitcount += len &lt;&lt; 3;</span> -<span class="lineNum"> 577 </span> : : } -<span class="lineNum"> 578 </span> : : /* Clean up: */ -<span class="lineNum"> 579 </span> : : usedspace = freespace = 0; -<a name="580"><span class="lineNum"> 580 </span> : : }</a> -<span class="lineNum"> 581 </span> : : -<span class="lineNum"> 582 </span> :<span class="lineCov"> 1935 : void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {</span> -<span class="lineNum"> 583 </span> :<span class="lineCov"> 1935 : sha2_word32 *d = (sha2_word32*)digest;</span> -<span class="lineNum"> 584 </span> : : unsigned int usedspace; -<span class="lineNum"> 585 </span> : : -<span class="lineNum"> 586 </span> : : /* Sanity check: */ -<span class="lineNum"> 587 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1935 times"> + </span>]:<span class="lineCov"> 1935 : assert(context != (SHA256_CTX*)0);</span> -<span class="lineNum"> 588 </span> : : -<span class="lineNum"> 589 </span> : : /* If no digest buffer is passed, we don't bother doing this: */ -<span class="lineNum"> 590 </span> [<span class="branchCov" title="Branch 0 was taken 1935 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1935 : if (digest != (sha2_byte*)0) {</span> -<span class="lineNum"> 591 </span> :<span class="lineCov"> 1935 : usedspace = (context-&gt;bitcount &gt;&gt; 3) % SHA256_BLOCK_LEN;</span> -<span class="lineNum"> 592 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 593 </span> : : /* Convert FROM host byte order */ -<span class="lineNum"> 594 </span> :<span class="lineCov"> 1935 : REVERSE64(context-&gt;bitcount,context-&gt;bitcount);</span> -<span class="lineNum"> 595 </span> : : #endif -<span class="lineNum"> 596 </span> [<span class="branchCov" title="Branch 0 was taken 1835 times"> + </span><span class="branchCov" title="Branch 1 was taken 100 times"> + </span>]:<span class="lineCov"> 1935 : if (usedspace &gt; 0) {</span> -<span class="lineNum"> 597 </span> : : /* Begin padding with a 1 bit: */ -<span class="lineNum"> 598 </span> :<span class="lineCov"> 1835 : context-&gt;buffer[usedspace++] = 0x80;</span> -<span class="lineNum"> 599 </span> : : -<span class="lineNum"> 600 </span> [<span class="branchCov" title="Branch 0 was taken 1638 times"> + </span><span class="branchCov" title="Branch 1 was taken 197 times"> + </span>]:<span class="lineCov"> 1835 : if (usedspace &lt;= SHA256_SHORT_BLOCK_LEN) {</span> -<span class="lineNum"> 601 </span> : : /* Set-up for the last transform: */ -<span class="lineNum"> 602 </span> :<span class="lineCov"> 1638 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA256_SHORT_BLOCK_LEN - usedspace);</span> -<span class="lineNum"> 603 </span> : : } else { -<span class="lineNum"> 604 </span> [<span class="branchCov" title="Branch 0 was taken 190 times"> + </span><span class="branchCov" title="Branch 1 was taken 7 times"> + </span>]:<span class="lineCov"> 197 : if (usedspace &lt; SHA256_BLOCK_LEN) {</span> -<span class="lineNum"> 605 </span> :<span class="lineCov"> 190 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA256_BLOCK_LEN - usedspace);</span> -<span class="lineNum"> 606 </span> : : } -<span class="lineNum"> 607 </span> : : /* Do second-to-last transform: */ -<span class="lineNum"> 608 </span> :<span class="lineCov"> 197 : SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</span> -<span class="lineNum"> 609 </span> : : -<span class="lineNum"> 610 </span> : : /* And set-up for the last transform: */ -<span class="lineNum"> 611 </span> :<span class="lineCov"> 197 : MEMSET_BZERO(context-&gt;buffer, SHA256_SHORT_BLOCK_LEN);</span> -<span class="lineNum"> 612 </span> : : } -<span class="lineNum"> 613 </span> : : } else { -<span class="lineNum"> 614 </span> : : /* Set-up for the last transform: */ -<span class="lineNum"> 615 </span> :<span class="lineCov"> 100 : MEMSET_BZERO(context-&gt;buffer, SHA256_SHORT_BLOCK_LEN);</span> -<span class="lineNum"> 616 </span> : : -<span class="lineNum"> 617 </span> : : /* Begin padding with a 1 bit: */ -<span class="lineNum"> 618 </span> :<span class="lineCov"> 100 : *context-&gt;buffer = 0x80;</span> -<span class="lineNum"> 619 </span> : : } -<span class="lineNum"> 620 </span> : : /* Set the bit count: */ -<span class="lineNum"> 621 </span> :<span class="lineCov"> 1935 : memcpy(&amp;(context-&gt;buffer[SHA256_SHORT_BLOCK_LEN]), &amp;(context-&gt;bitcount), sizeof(sha2_word64));</span> -<span class="lineNum"> 622 </span> : : -<span class="lineNum"> 623 </span> : : /* Final transform: */ -<span class="lineNum"> 624 </span> :<span class="lineCov"> 1935 : SHA256_Transform(context, (sha2_word32*)context-&gt;buffer);</span> -<span class="lineNum"> 625 </span> : : -<span class="lineNum"> 626 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 627 </span> : : { -<span class="lineNum"> 628 </span> : : /* Convert TO host byte order */ -<span class="lineNum"> 629 </span> : : int j; -<span class="lineNum"> 630 </span> [<span class="branchCov" title="Branch 1 was taken 15480 times"> + </span><span class="branchCov" title="Branch 2 was taken 1935 times"> + </span>]:<span class="lineCov"> 17415 : for (j = 0; j &lt; 8; j++) {</span> -<span class="lineNum"> 631 </span> :<span class="lineCov"> 15480 : REVERSE32(context-&gt;state[j],context-&gt;state[j]);</span> -<span class="lineNum"> 632 </span> :<span class="lineCov"> 15480 : *d++ = context-&gt;state[j];</span> -<span class="lineNum"> 633 </span> : : } -<span class="lineNum"> 634 </span> : : } -<span class="lineNum"> 635 </span> : : #else -<span class="lineNum"> 636 </span> : : MEMCPY_BCOPY(d, context-&gt;state, SHA256_DIGEST_LEN); -<span class="lineNum"> 637 </span> : : #endif -<span class="lineNum"> 638 </span> : : } -<span class="lineNum"> 639 </span> : : -<span class="lineNum"> 640 </span> : : /* Clean up state data: */ -<span class="lineNum"> 641 </span> : : MEMSET_BZERO(context, sizeof(*context)); -<span class="lineNum"> 642 </span> :<span class="lineCov"> 1935 : usedspace = 0;</span> -<span class="lineNum"> 643 </span> :<span class="lineCov"> 1935 : }</span> -<a name="644"><span class="lineNum"> 644 </span> : : </a> -<span class="lineNum"> 645 </span> : : /*** SHA-512: *********************************************************/ -<span class="lineNum"> 646 </span> :<span class="lineNoCov"> 0 : void SHA512_Init(SHA512_CTX* context) {</span> -<span class="lineNum"> 647 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (context == (SHA512_CTX*)0) {</span> -<span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 649 </span> : : } -<span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(context-&gt;state, sha512_initial_hash_value, SHA512_DIGEST_LEN);</span> -<span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA512_BLOCK_LEN);</span> -<span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount[0] = context-&gt;bitcount[1] = 0;</span> -<span class="lineNum"> 653 </span> : : } -<span class="lineNum"> 654 </span> : : -<span class="lineNum"> 655 </span> : : #ifdef SHA2_UNROLL_TRANSFORM -<span class="lineNum"> 656 </span> : : -<span class="lineNum"> 657 </span> : : /* Unrolled SHA-512 round macros: */ -<span class="lineNum"> 658 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 659 </span> : : -<span class="lineNum"> 660 </span> : : #define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ -<span class="lineNum"> 661 </span> : : REVERSE64(*data++, W512[j]); \ -<span class="lineNum"> 662 </span> : : T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ -<span class="lineNum"> 663 </span> : : K512[j] + W512[j]; \ -<span class="lineNum"> 664 </span> : : (d) += T1, \ -<span class="lineNum"> 665 </span> : : (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \ -<span class="lineNum"> 666 </span> : : j++ -<span class="lineNum"> 667 </span> : : -<span class="lineNum"> 668 </span> : : -<span class="lineNum"> 669 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 670 </span> : : -<span class="lineNum"> 671 </span> : : #define ROUND512_0_TO_15(a,b,c,d,e,f,g,h) \ -<span class="lineNum"> 672 </span> : : T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \ -<span class="lineNum"> 673 </span> : : K512[j] + (W512[j] = *data++); \ -<span class="lineNum"> 674 </span> : : (d) += T1; \ -<span class="lineNum"> 675 </span> : : (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ -<span class="lineNum"> 676 </span> : : j++ -<span class="lineNum"> 677 </span> : : -<span class="lineNum"> 678 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 679 </span> : : -<span class="lineNum"> 680 </span> : : #define ROUND512(a,b,c,d,e,f,g,h) \ -<span class="lineNum"> 681 </span> : : s0 = W512[(j+1)&amp;0x0f]; \ -<span class="lineNum"> 682 </span> : : s0 = sigma0_512(s0); \ -<span class="lineNum"> 683 </span> : : s1 = W512[(j+14)&amp;0x0f]; \ -<span class="lineNum"> 684 </span> : : s1 = sigma1_512(s1); \ -<span class="lineNum"> 685 </span> : : T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \ -<span class="lineNum"> 686 </span> : : (W512[j&amp;0x0f] += s1 + W512[(j+9)&amp;0x0f] + s0); \ -<span class="lineNum"> 687 </span> : : (d) += T1; \ -<span class="lineNum"> 688 </span> : : (h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \ -<span class="lineNum"> 689 </span> : : j++ -<span class="lineNum"> 690 </span> : : -<span class="lineNum"> 691 </span> : : void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) { -<span class="lineNum"> 692 </span> : : sha2_word64 a, b, c, d, e, f, g, h, s0, s1; -<span class="lineNum"> 693 </span> : : sha2_word64 T1, *W512 = (sha2_word64*)context-&gt;buffer; -<span class="lineNum"> 694 </span> : : int j; -<span class="lineNum"> 695 </span> : : -<span class="lineNum"> 696 </span> : : /* Initialize registers with the prev. intermediate value */ -<span class="lineNum"> 697 </span> : : a = context-&gt;state[0]; -<span class="lineNum"> 698 </span> : : b = context-&gt;state[1]; -<span class="lineNum"> 699 </span> : : c = context-&gt;state[2]; -<span class="lineNum"> 700 </span> : : d = context-&gt;state[3]; -<span class="lineNum"> 701 </span> : : e = context-&gt;state[4]; -<span class="lineNum"> 702 </span> : : f = context-&gt;state[5]; -<span class="lineNum"> 703 </span> : : g = context-&gt;state[6]; -<span class="lineNum"> 704 </span> : : h = context-&gt;state[7]; -<span class="lineNum"> 705 </span> : : -<span class="lineNum"> 706 </span> : : j = 0; -<span class="lineNum"> 707 </span> : : do { -<span class="lineNum"> 708 </span> : : ROUND512_0_TO_15(a,b,c,d,e,f,g,h); -<span class="lineNum"> 709 </span> : : ROUND512_0_TO_15(h,a,b,c,d,e,f,g); -<span class="lineNum"> 710 </span> : : ROUND512_0_TO_15(g,h,a,b,c,d,e,f); -<span class="lineNum"> 711 </span> : : ROUND512_0_TO_15(f,g,h,a,b,c,d,e); -<span class="lineNum"> 712 </span> : : ROUND512_0_TO_15(e,f,g,h,a,b,c,d); -<span class="lineNum"> 713 </span> : : ROUND512_0_TO_15(d,e,f,g,h,a,b,c); -<span class="lineNum"> 714 </span> : : ROUND512_0_TO_15(c,d,e,f,g,h,a,b); -<span class="lineNum"> 715 </span> : : ROUND512_0_TO_15(b,c,d,e,f,g,h,a); -<span class="lineNum"> 716 </span> : : } while (j &lt; 16); -<span class="lineNum"> 717 </span> : : -<span class="lineNum"> 718 </span> : : /* Now for the remaining rounds up to 79: */ -<span class="lineNum"> 719 </span> : : do { -<span class="lineNum"> 720 </span> : : ROUND512(a,b,c,d,e,f,g,h); -<span class="lineNum"> 721 </span> : : ROUND512(h,a,b,c,d,e,f,g); -<span class="lineNum"> 722 </span> : : ROUND512(g,h,a,b,c,d,e,f); -<span class="lineNum"> 723 </span> : : ROUND512(f,g,h,a,b,c,d,e); -<span class="lineNum"> 724 </span> : : ROUND512(e,f,g,h,a,b,c,d); -<span class="lineNum"> 725 </span> : : ROUND512(d,e,f,g,h,a,b,c); -<span class="lineNum"> 726 </span> : : ROUND512(c,d,e,f,g,h,a,b); -<span class="lineNum"> 727 </span> : : ROUND512(b,c,d,e,f,g,h,a); -<span class="lineNum"> 728 </span> : : } while (j &lt; 80); -<span class="lineNum"> 729 </span> : : -<span class="lineNum"> 730 </span> : : /* Compute the current intermediate hash value */ -<span class="lineNum"> 731 </span> : : context-&gt;state[0] += a; -<span class="lineNum"> 732 </span> : : context-&gt;state[1] += b; -<span class="lineNum"> 733 </span> : : context-&gt;state[2] += c; -<span class="lineNum"> 734 </span> : : context-&gt;state[3] += d; -<span class="lineNum"> 735 </span> : : context-&gt;state[4] += e; -<span class="lineNum"> 736 </span> : : context-&gt;state[5] += f; -<span class="lineNum"> 737 </span> : : context-&gt;state[6] += g; -<span class="lineNum"> 738 </span> : : context-&gt;state[7] += h; -<span class="lineNum"> 739 </span> : : -<span class="lineNum"> 740 </span> : : /* Clean up */ -<span class="lineNum"> 741 </span> : : a = b = c = d = e = f = g = h = T1 = 0; -<span class="lineNum"> 742 </span> : : } -<span class="lineNum"> 743 </span> : : -<a name="744"><span class="lineNum"> 744 </span> : : #else /* SHA2_UNROLL_TRANSFORM */</a> -<span class="lineNum"> 745 </span> : : -<span class="lineNum"> 746 </span> :<span class="lineNoCov"> 0 : void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {</span> -<span class="lineNum"> 747 </span> : : sha2_word64 a, b, c, d, e, f, g, h, s0, s1; -<span class="lineNum"> 748 </span> :<span class="lineNoCov"> 0 : sha2_word64 T1, T2, *W512 = (sha2_word64*)context-&gt;buffer;</span> -<span class="lineNum"> 749 </span> : : int j; -<span class="lineNum"> 750 </span> : : -<span class="lineNum"> 751 </span> : : /* Initialize registers with the prev. intermediate value */ -<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : a = context-&gt;state[0];</span> -<span class="lineNum"> 753 </span> :<span class="lineNoCov"> 0 : b = context-&gt;state[1];</span> -<span class="lineNum"> 754 </span> :<span class="lineNoCov"> 0 : c = context-&gt;state[2];</span> -<span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : d = context-&gt;state[3];</span> -<span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : e = context-&gt;state[4];</span> -<span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : f = context-&gt;state[5];</span> -<span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : g = context-&gt;state[6];</span> -<span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : h = context-&gt;state[7];</span> -<span class="lineNum"> 760 </span> : : -<span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : j = 0;</span> -<span class="lineNum"> 762 </span> : : do { -<span class="lineNum"> 763 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 764 </span> : : /* Convert TO host byte order */ -<span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : REVERSE64(*data++, W512[j]);</span> -<span class="lineNum"> 766 </span> : : /* Apply the SHA-512 compression function to update a..h */ -<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];</span> -<span class="lineNum"> 768 </span> : : #else /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 769 </span> : : /* Apply the SHA-512 compression function to update a..h with copy */ -<span class="lineNum"> 770 </span> : : T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++); -<span class="lineNum"> 771 </span> : : #endif /* BYTE_ORDER == LITTLE_ENDIAN */ -<span class="lineNum"> 772 </span> :<span class="lineNoCov"> 0 : T2 = Sigma0_512(a) + Maj(a, b, c);</span> -<span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : h = g;</span> -<span class="lineNum"> 774 </span> :<span class="lineNoCov"> 0 : g = f;</span> -<span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : f = e;</span> -<span class="lineNum"> 776 </span> :<span class="lineNoCov"> 0 : e = d + T1;</span> -<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : d = c;</span> -<span class="lineNum"> 778 </span> :<span class="lineNoCov"> 0 : c = b;</span> -<span class="lineNum"> 779 </span> :<span class="lineNoCov"> 0 : b = a;</span> -<span class="lineNum"> 780 </span> :<span class="lineNoCov"> 0 : a = T1 + T2;</span> -<span class="lineNum"> 781 </span> : : -<span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : j++;</span> -<span class="lineNum"> 783 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while (j &lt; 16);</span> -<span class="lineNum"> 784 </span> : : -<span class="lineNum"> 785 </span> : : do { -<span class="lineNum"> 786 </span> : : /* Part of the message block expansion: */ -<span class="lineNum"> 787 </span> :<span class="lineNoCov"> 0 : s0 = W512[(j+1)&amp;0x0f];</span> -<span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : s0 = sigma0_512(s0);</span> -<span class="lineNum"> 789 </span> :<span class="lineNoCov"> 0 : s1 = W512[(j+14)&amp;0x0f];</span> -<span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : s1 = sigma1_512(s1);</span> -<span class="lineNum"> 791 </span> : : -<span class="lineNum"> 792 </span> : : /* Apply the SHA-512 compression function to update a..h */ -<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +</span> -<span class="lineNum"> 794 </span> :<span class="lineNoCov"> 0 : (W512[j&amp;0x0f] += s1 + W512[(j+9)&amp;0x0f] + s0);</span> -<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : T2 = Sigma0_512(a) + Maj(a, b, c);</span> -<span class="lineNum"> 796 </span> :<span class="lineNoCov"> 0 : h = g;</span> -<span class="lineNum"> 797 </span> :<span class="lineNoCov"> 0 : g = f;</span> -<span class="lineNum"> 798 </span> :<span class="lineNoCov"> 0 : f = e;</span> -<span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : e = d + T1;</span> -<span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : d = c;</span> -<span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : c = b;</span> -<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : b = a;</span> -<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : a = T1 + T2;</span> -<span class="lineNum"> 804 </span> : : -<span class="lineNum"> 805 </span> :<span class="lineNoCov"> 0 : j++;</span> -<span class="lineNum"> 806 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while (j &lt; 80);</span> -<span class="lineNum"> 807 </span> : : -<span class="lineNum"> 808 </span> : : /* Compute the current intermediate hash value */ -<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : context-&gt;state[0] += a;</span> -<span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : context-&gt;state[1] += b;</span> -<span class="lineNum"> 811 </span> :<span class="lineNoCov"> 0 : context-&gt;state[2] += c;</span> -<span class="lineNum"> 812 </span> :<span class="lineNoCov"> 0 : context-&gt;state[3] += d;</span> -<span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : context-&gt;state[4] += e;</span> -<span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : context-&gt;state[5] += f;</span> -<span class="lineNum"> 815 </span> :<span class="lineNoCov"> 0 : context-&gt;state[6] += g;</span> -<span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : context-&gt;state[7] += h;</span> -<span class="lineNum"> 817 </span> : : -<span class="lineNum"> 818 </span> : : /* Clean up */ -<span class="lineNum"> 819 </span> :<span class="lineNoCov"> 0 : a = b = c = d = e = f = g = h = T1 = T2 = 0;</span> -<span class="lineNum"> 820 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 821 </span> : : -<a name="822"><span class="lineNum"> 822 </span> : : #endif /* SHA2_UNROLL_TRANSFORM */</a> -<span class="lineNum"> 823 </span> : : -<span class="lineNum"> 824 </span> :<span class="lineNoCov"> 0 : void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {</span> -<span class="lineNum"> 825 </span> : : unsigned int freespace, usedspace; -<span class="lineNum"> 826 </span> : : -<span class="lineNum"> 827 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len == 0) {</span> -<span class="lineNum"> 828 </span> : : /* Calling with no data is valid - we do nothing */ -<span class="lineNum"> 829 </span> : : return; -<span class="lineNum"> 830 </span> : : } -<span class="lineNum"> 831 </span> : : -<span class="lineNum"> 832 </span> : : /* Sanity check: */ -<span class="lineNum"> 833 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : assert(context != (SHA512_CTX*)0 &amp;&amp; data != (sha2_byte*)0);</span> -<span class="lineNum"> 834 </span> : : -<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : usedspace = (context-&gt;bitcount[0] &gt;&gt; 3) % SHA512_BLOCK_LEN;</span> -<span class="lineNum"> 836 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &gt; 0) {</span> -<span class="lineNum"> 837 </span> : : /* Calculate how much free space is available in the buffer */ -<span class="lineNum"> 838 </span> :<span class="lineNoCov"> 0 : freespace = SHA512_BLOCK_LEN - usedspace;</span> -<span class="lineNum"> 839 </span> : : -<span class="lineNum"> 840 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &gt;= freespace) {</span> -<span class="lineNum"> 841 </span> : : /* Fill the buffer completely and process it */ -<span class="lineNum"> 842 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, freespace);</span> -<span class="lineNum"> 843 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, freespace &lt;&lt; 3);</span> -<span class="lineNum"> 844 </span> :<span class="lineNoCov"> 0 : len -= freespace;</span> -<span class="lineNum"> 845 </span> :<span class="lineNoCov"> 0 : data += freespace;</span> -<span class="lineNum"> 846 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)context-&gt;buffer);</span> -<span class="lineNum"> 847 </span> : : } else { -<span class="lineNum"> 848 </span> : : /* The buffer is not yet full */ -<span class="lineNum"> 849 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(&amp;context-&gt;buffer[usedspace], data, len);</span> -<span class="lineNum"> 850 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, len &lt;&lt; 3);</span> -<span class="lineNum"> 851 </span> : : /* Clean up: */ -<span class="lineNum"> 852 </span> : : usedspace = freespace = 0; -<span class="lineNum"> 853 </span> : : return; -<span class="lineNum"> 854 </span> : : } -<span class="lineNum"> 855 </span> : : } -<span class="lineNum"> 856 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (len &gt;= SHA512_BLOCK_LEN) {</span> -<span class="lineNum"> 857 </span> : : /* Process as many complete blocks as we can */ -<span class="lineNum"> 858 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)data);</span> -<span class="lineNum"> 859 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, SHA512_BLOCK_LEN &lt;&lt; 3);</span> -<span class="lineNum"> 860 </span> :<span class="lineNoCov"> 0 : len -= SHA512_BLOCK_LEN;</span> -<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : data += SHA512_BLOCK_LEN;</span> -<span class="lineNum"> 862 </span> : : } -<span class="lineNum"> 863 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (len &gt; 0) {</span> -<span class="lineNum"> 864 </span> : : /* There's left-overs, so save 'em */ -<span class="lineNum"> 865 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(context-&gt;buffer, data, len);</span> -<span class="lineNum"> 866 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ADDINC128(context-&gt;bitcount, len &lt;&lt; 3);</span> -<span class="lineNum"> 867 </span> : : } -<span class="lineNum"> 868 </span> : : /* Clean up: */ -<span class="lineNum"> 869 </span> : : usedspace = freespace = 0; -<a name="870"><span class="lineNum"> 870 </span> : : }</a> -<span class="lineNum"> 871 </span> : : -<span class="lineNum"> 872 </span> :<span class="lineNoCov"> 0 : void SHA512_Last(SHA512_CTX* context) {</span> -<span class="lineNum"> 873 </span> : : unsigned int usedspace; -<span class="lineNum"> 874 </span> : : -<span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : usedspace = (context-&gt;bitcount[0] &gt;&gt; 3) % SHA512_BLOCK_LEN;</span> -<span class="lineNum"> 876 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 877 </span> : : /* Convert FROM host byte order */ -<span class="lineNum"> 878 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;bitcount[0],context-&gt;bitcount[0]);</span> -<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;bitcount[1],context-&gt;bitcount[1]);</span> -<span class="lineNum"> 880 </span> : : #endif -<span class="lineNum"> 881 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &gt; 0) {</span> -<span class="lineNum"> 882 </span> : : /* Begin padding with a 1 bit: */ -<span class="lineNum"> 883 </span> :<span class="lineNoCov"> 0 : context-&gt;buffer[usedspace++] = 0x80;</span> -<span class="lineNum"> 884 </span> : : -<span class="lineNum"> 885 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &lt;= SHA512_SHORT_BLOCK_LEN) {</span> -<span class="lineNum"> 886 </span> : : /* Set-up for the last transform: */ -<span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA512_SHORT_BLOCK_LEN - usedspace);</span> -<span class="lineNum"> 888 </span> : : } else { -<span class="lineNum"> 889 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (usedspace &lt; SHA512_BLOCK_LEN) {</span> -<span class="lineNum"> 890 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(&amp;context-&gt;buffer[usedspace], SHA512_BLOCK_LEN - usedspace);</span> -<span class="lineNum"> 891 </span> : : } -<span class="lineNum"> 892 </span> : : /* Do second-to-last transform: */ -<span class="lineNum"> 893 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)context-&gt;buffer);</span> -<span class="lineNum"> 894 </span> : : -<span class="lineNum"> 895 </span> : : /* And set-up for the last transform: */ -<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA512_BLOCK_LEN - 2);</span> -<span class="lineNum"> 897 </span> : : } -<span class="lineNum"> 898 </span> : : } else { -<span class="lineNum"> 899 </span> : : /* Prepare for final transform: */ -<span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA512_SHORT_BLOCK_LEN);</span> -<span class="lineNum"> 901 </span> : : -<span class="lineNum"> 902 </span> : : /* Begin padding with a 1 bit: */ -<span class="lineNum"> 903 </span> :<span class="lineNoCov"> 0 : *context-&gt;buffer = 0x80;</span> -<span class="lineNum"> 904 </span> : : } -<span class="lineNum"> 905 </span> : : /* Store the length of input data (in bits): */ -<span class="lineNum"> 906 </span> :<span class="lineNoCov"> 0 : memcpy(&amp;(context-&gt;buffer[SHA512_SHORT_BLOCK_LEN]), &amp;(context-&gt;bitcount[1]), sizeof(sha2_word64));</span> -<span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : memcpy(&amp;(context-&gt;buffer[SHA512_SHORT_BLOCK_LEN+8]), &amp;(context-&gt;bitcount[0]), sizeof(sha2_word64));</span> -<span class="lineNum"> 908 </span> : : -<span class="lineNum"> 909 </span> : : /* Final transform: */ -<span class="lineNum"> 910 </span> :<span class="lineNoCov"> 0 : SHA512_Transform(context, (sha2_word64*)context-&gt;buffer);</span> -<a name="911"><span class="lineNum"> 911 </span> :<span class="lineNoCov"> 0 : }</span></a> -<span class="lineNum"> 912 </span> : : -<span class="lineNum"> 913 </span> :<span class="lineNoCov"> 0 : void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {</span> -<span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : sha2_word64 *d = (sha2_word64*)digest;</span> -<span class="lineNum"> 915 </span> : : -<span class="lineNum"> 916 </span> : : /* Sanity check: */ -<span class="lineNum"> 917 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : assert(context != (SHA512_CTX*)0);</span> -<span class="lineNum"> 918 </span> : : -<span class="lineNum"> 919 </span> : : /* If no digest buffer is passed, we don't bother doing this: */ -<span class="lineNum"> 920 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (digest != (sha2_byte*)0) {</span> -<span class="lineNum"> 921 </span> :<span class="lineNoCov"> 0 : SHA512_Last(context);</span> -<span class="lineNum"> 922 </span> : : -<span class="lineNum"> 923 </span> : : /* Save the hash data for output: */ -<span class="lineNum"> 924 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 925 </span> : : { -<span class="lineNum"> 926 </span> : : /* Convert TO host byte order */ -<span class="lineNum"> 927 </span> : : int j; -<span class="lineNum"> 928 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (j = 0; j &lt; 8; j++) {</span> -<span class="lineNum"> 929 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;state[j],context-&gt;state[j]);</span> -<span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : *d++ = context-&gt;state[j];</span> -<span class="lineNum"> 931 </span> : : } -<span class="lineNum"> 932 </span> : : } -<span class="lineNum"> 933 </span> : : #else -<span class="lineNum"> 934 </span> : : MEMCPY_BCOPY(d, context-&gt;state, SHA512_DIGEST_LEN); -<span class="lineNum"> 935 </span> : : #endif -<span class="lineNum"> 936 </span> : : } -<span class="lineNum"> 937 </span> : : -<span class="lineNum"> 938 </span> : : /* Zero out state data */ -<span class="lineNum"> 939 </span> : : MEMSET_BZERO(context, sizeof(*context)); -<span class="lineNum"> 940 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 941 </span> : : -<a name="942"><span class="lineNum"> 942 </span> : : </a> -<span class="lineNum"> 943 </span> : : /*** SHA-384: *********************************************************/ -<span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : void SHA384_Init(SHA384_CTX* context) {</span> -<span class="lineNum"> 945 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (context == (SHA384_CTX*)0) {</span> -<span class="lineNum"> 946 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 947 </span> : : } -<span class="lineNum"> 948 </span> :<span class="lineNoCov"> 0 : MEMCPY_BCOPY(context-&gt;state, sha384_initial_hash_value, SHA512_DIGEST_LEN);</span> -<span class="lineNum"> 949 </span> :<span class="lineNoCov"> 0 : MEMSET_BZERO(context-&gt;buffer, SHA384_BLOCK_LEN);</span> -<span class="lineNum"> 950 </span> :<span class="lineNoCov"> 0 : context-&gt;bitcount[0] = context-&gt;bitcount[1] = 0;</span> -<a name="951"><span class="lineNum"> 951 </span> : : }</a> -<span class="lineNum"> 952 </span> : : -<span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {</span> -<span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : SHA512_Update((SHA512_CTX*)context, data, len);</span> -<a name="955"><span class="lineNum"> 955 </span> :<span class="lineNoCov"> 0 : }</span></a> -<span class="lineNum"> 956 </span> : : -<span class="lineNum"> 957 </span> :<span class="lineNoCov"> 0 : void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {</span> -<span class="lineNum"> 958 </span> :<span class="lineNoCov"> 0 : sha2_word64 *d = (sha2_word64*)digest;</span> -<span class="lineNum"> 959 </span> : : -<span class="lineNum"> 960 </span> : : /* Sanity check: */ -<span class="lineNum"> 961 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : assert(context != (SHA384_CTX*)0);</span> -<span class="lineNum"> 962 </span> : : -<span class="lineNum"> 963 </span> : : /* If no digest buffer is passed, we don't bother doing this: */ -<span class="lineNum"> 964 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (digest != (sha2_byte*)0) {</span> -<span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : SHA512_Last((SHA512_CTX*)context);</span> -<span class="lineNum"> 966 </span> : : -<span class="lineNum"> 967 </span> : : /* Save the hash data for output: */ -<span class="lineNum"> 968 </span> : : #if BYTE_ORDER == LITTLE_ENDIAN -<span class="lineNum"> 969 </span> : : { -<span class="lineNum"> 970 </span> : : /* Convert TO host byte order */ -<span class="lineNum"> 971 </span> : : int j; -<span class="lineNum"> 972 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (j = 0; j &lt; 6; j++) {</span> -<span class="lineNum"> 973 </span> :<span class="lineNoCov"> 0 : REVERSE64(context-&gt;state[j],context-&gt;state[j]);</span> -<span class="lineNum"> 974 </span> :<span class="lineNoCov"> 0 : *d++ = context-&gt;state[j];</span> -<span class="lineNum"> 975 </span> : : } -<span class="lineNum"> 976 </span> : : } -<span class="lineNum"> 977 </span> : : #else -<span class="lineNum"> 978 </span> : : MEMCPY_BCOPY(d, context-&gt;state, SHA384_DIGEST_LEN); -<span class="lineNum"> 979 </span> : : #endif -<span class="lineNum"> 980 </span> : : } -<span class="lineNum"> 981 </span> : : -<span class="lineNum"> 982 </span> : : /* Zero out state data */ -<span class="lineNum"> 983 </span> : : MEMSET_BZERO(context, sizeof(*context)); -<span class="lineNum"> 984 </span> :<span class="lineNoCov"> 0 : }</span> -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html deleted file mode 100644 index 1c417c41..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcat.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcat.c<span style="font-size: 80%;"> (<a href="strlcat.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">17</td> - <td class="headerCovTableEntryHi">94.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryMed">80.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="strlcat.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="strlcat.c.gcov.html#44">strlcat</a></td> - <td class="coverFnHi">23937</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html deleted file mode 100644 index d5f56a4b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.func.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcat.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcat.c<span style="font-size: 80%;"> (<a href="strlcat.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">17</td> - <td class="headerCovTableEntryHi">94.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryMed">80.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="strlcat.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="strlcat.c.gcov.html#44">strlcat</a></td> - <td class="coverFnHi">23937</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html deleted file mode 100644 index 7d4e42d1..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcat.c.gcov.html +++ /dev/null @@ -1,159 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcat.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcat.c<span style="font-size: 80%;"> (source / <a href="strlcat.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">16</td> - <td class="headerCovTableEntry">17</td> - <td class="headerCovTableEntryHi">94.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntryMed">80.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: strlcat.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Safer string concat routine. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Copyright (c) 1998 Todd C. Miller &lt;Todd.Miller@courtesan.com&gt; -<span class="lineNum"> 9 </span> : : * All rights reserved. -<span class="lineNum"> 10 </span> : : * -<span class="lineNum"> 11 </span> : : * Redistribution and use in source and binary forms, with or without -<span class="lineNum"> 12 </span> : : * modification, are permitted provided that the following conditions -<span class="lineNum"> 13 </span> : : * are met: -<span class="lineNum"> 14 </span> : : * 1. Redistributions of source code must retain the above copyright -<span class="lineNum"> 15 </span> : : * notice, this list of conditions and the following disclaimer. -<span class="lineNum"> 16 </span> : : * 2. Redistributions in binary form must reproduce the above copyright -<span class="lineNum"> 17 </span> : : * notice, this list of conditions and the following disclaimer in the -<span class="lineNum"> 18 </span> : : * documentation and/or other materials provided with the distribution. -<span class="lineNum"> 19 </span> : : * 3. The name of the author may not be used to endorse or promote products -<span class="lineNum"> 20 </span> : : * derived from this software without specific prior written permission. -<span class="lineNum"> 21 </span> : : * -<span class="lineNum"> 22 </span> : : * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, -<span class="lineNum"> 23 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -<span class="lineNum"> 24 </span> : : * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -<span class="lineNum"> 25 </span> : : * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -<span class="lineNum"> 26 </span> : : * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -<span class="lineNum"> 27 </span> : : * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -<span class="lineNum"> 28 </span> : : * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -<span class="lineNum"> 29 </span> : : * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -<span class="lineNum"> 30 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -<span class="lineNum"> 31 </span> : : * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -<span class="lineNum"> 32 </span> : : * -<span class="lineNum"> 33 </span> : : ***************************************************************************** -<span class="lineNum"> 34 </span> : : */ -<span class="lineNum"> 35 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : #if !HAVE_STRLCAT -<span class="lineNum"> 38 </span> : : /* -<span class="lineNum"> 39 </span> : : * Appends src to string dst of size siz (unlike strncat, siz is the -<span class="lineNum"> 40 </span> : : * full size of dst, not space left). At most siz-1 characters -<span class="lineNum"> 41 </span> : : * will be copied. Always NUL terminates (unless siz &lt;= strlen(dst)). -<span class="lineNum"> 42 </span> : : * Returns strlen(src) + MIN(siz, strlen(initial dst)). -<span class="lineNum"> 43 </span> : : * If retval &gt;= siz, truncation occurred. -<a name="44"><span class="lineNum"> 44 </span> : : */</a> -<span class="lineNum"> 45 </span> : : size_t -<span class="lineNum"> 46 </span> :<span class="lineCov"> 23937 : strlcat(char *dst, const char *src, size_t siz)</span> -<span class="lineNum"> 47 </span> : : { -<span class="lineNum"> 48 </span> :<span class="lineCov"> 23937 : register char *d = dst;</span> -<span class="lineNum"> 49 </span> :<span class="lineCov"> 23937 : register const char *s = src;</span> -<span class="lineNum"> 50 </span> :<span class="lineCov"> 23937 : register size_t n = siz;</span> -<span class="lineNum"> 51 </span> : : size_t dlen; -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> : : /* Find the end of dst and adjust bytes left but don't go past end */ -<span class="lineNum"> 54 </span>[<span class="branchCov" title="Branch 0 was taken 2608223 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 2584286 times"> + </span><span class="branchCov" title="Branch 3 was taken 23937 times"> + </span>]:<span class="lineCov"> 2608223 : while (n-- != 0 &amp;&amp; *d != '\0')</span> -<span class="lineNum"> 55 </span> :<span class="lineCov"> 2584286 : d++;</span> -<span class="lineNum"> 56 </span> :<span class="lineCov"> 23937 : dlen = d - dst;</span> -<span class="lineNum"> 57 </span> :<span class="lineCov"> 23937 : n = siz - dlen;</span> -<span class="lineNum"> 58 </span> : : -<span class="lineNum"> 59 </span> [<span class="branchCov" title="Branch 0 was taken 23937 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 23937 : if (n == 0)</span> -<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return(dlen + strlen(s));</span> -<span class="lineNum"> 61 </span> [<span class="branchCov" title="Branch 0 was taken 344770 times"> + </span><span class="branchCov" title="Branch 1 was taken 23937 times"> + </span>]:<span class="lineCov"> 368707 : while (*s != '\0') {</span> -<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 283698 times"> + </span><span class="branchCov" title="Branch 1 was taken 61072 times"> + </span>]:<span class="lineCov"> 344770 : if (n != 1) {</span> -<span class="lineNum"> 63 </span> :<span class="lineCov"> 283698 : *d++ = *s;</span> -<span class="lineNum"> 64 </span> :<span class="lineCov"> 283698 : n--;</span> -<span class="lineNum"> 65 </span> : : } -<span class="lineNum"> 66 </span> :<span class="lineCov"> 344770 : s++;</span> -<span class="lineNum"> 67 </span> : : } -<span class="lineNum"> 68 </span> :<span class="lineCov"> 23937 : *d = '\0';</span> -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> :<span class="lineCov"> 23937 : return(dlen + (s - src)); /* count does not include NUL */</span> -<span class="lineNum"> 71 </span> : : } -<span class="lineNum"> 72 </span> : : #endif -<span class="lineNum"> 73 </span> : : -<span class="lineNum"> 74 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html deleted file mode 100644 index 1a22bc7d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcpy.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcpy.c<span style="font-size: 80%;"> (<a href="strlcpy.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntryMed">85.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="strlcpy.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="strlcpy.c.gcov.html#42">strlcpy</a></td> - <td class="coverFnHi">544327</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html deleted file mode 100644 index 56c2a3b6..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.func.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcpy.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcpy.c<span style="font-size: 80%;"> (<a href="strlcpy.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntryMed">85.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="strlcpy.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="strlcpy.c.gcov.html#42">strlcpy</a></td> - <td class="coverFnHi">544327</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html deleted file mode 100644 index 79734ddb..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/lib/strlcpy.c.gcov.html +++ /dev/null @@ -1,155 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - lib/strlcpy.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">lib</a> - strlcpy.c<span style="font-size: 80%;"> (source / <a href="strlcpy.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntryMed">85.7 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: strlcpy.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Safer string copy routine. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Copyright (c) 1998 Todd C. Miller &lt;Todd.Miller@courtesan.com&gt; -<span class="lineNum"> 9 </span> : : * All rights reserved. -<span class="lineNum"> 10 </span> : : * -<span class="lineNum"> 11 </span> : : * Redistribution and use in source and binary forms, with or without -<span class="lineNum"> 12 </span> : : * modification, are permitted provided that the following conditions -<span class="lineNum"> 13 </span> : : * are met: -<span class="lineNum"> 14 </span> : : * 1. Redistributions of source code must retain the above copyright -<span class="lineNum"> 15 </span> : : * notice, this list of conditions and the following disclaimer. -<span class="lineNum"> 16 </span> : : * 2. Redistributions in binary form must reproduce the above copyright -<span class="lineNum"> 17 </span> : : * notice, this list of conditions and the following disclaimer in the -<span class="lineNum"> 18 </span> : : * documentation and/or other materials provided with the distribution. -<span class="lineNum"> 19 </span> : : * 3. The name of the author may not be used to endorse or promote products -<span class="lineNum"> 20 </span> : : * derived from this software without specific prior written permission. -<span class="lineNum"> 21 </span> : : * -<span class="lineNum"> 22 </span> : : * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, -<span class="lineNum"> 23 </span> : : * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY -<span class="lineNum"> 24 </span> : : * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -<span class="lineNum"> 25 </span> : : * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -<span class="lineNum"> 26 </span> : : * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -<span class="lineNum"> 27 </span> : : * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -<span class="lineNum"> 28 </span> : : * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -<span class="lineNum"> 29 </span> : : * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -<span class="lineNum"> 30 </span> : : * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -<span class="lineNum"> 31 </span> : : * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -<span class="lineNum"> 32 </span> : : * -<span class="lineNum"> 33 </span> : : ***************************************************************************** -<span class="lineNum"> 34 </span> : : */ -<span class="lineNum"> 35 </span> : : #include &quot;fko_common.h&quot; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : #if !HAVE_STRLCPY -<span class="lineNum"> 38 </span> : : /* -<span class="lineNum"> 39 </span> : : * Copy src to string dst of size siz. At most siz-1 characters -<span class="lineNum"> 40 </span> : : * will be copied. Always NUL terminates (unless siz == 0). -<span class="lineNum"> 41 </span> : : * Returns strlen(src); if retval &gt;= siz, truncation occurred. -<a name="42"><span class="lineNum"> 42 </span> : : */</a> -<span class="lineNum"> 43 </span> : : size_t -<span class="lineNum"> 44 </span> :<span class="lineCov"> 544327 : strlcpy(char *dst, const char *src, size_t siz)</span> -<span class="lineNum"> 45 </span> : : { -<span class="lineNum"> 46 </span> :<span class="lineCov"> 544327 : register char *d = dst;</span> -<span class="lineNum"> 47 </span> :<span class="lineCov"> 544327 : register const char *s = src;</span> -<span class="lineNum"> 48 </span> :<span class="lineCov"> 544327 : register size_t n = siz;</span> -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : /* Copy as many bytes as will fit */ -<span class="lineNum"> 51 </span>[<span class="branchCov" title="Branch 0 was taken 544327 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 544271 times"> + </span><span class="branchCov" title="Branch 3 was taken 56 times"> + </span>]:<span class="lineCov"> 544327 : if (n != 0 &amp;&amp; --n != 0) {</span> -<span class="lineNum"> 52 </span> : : do { -<span class="lineNum"> 53 </span> [<span class="branchCov" title="Branch 0 was taken 11608731 times"> + </span><span class="branchCov" title="Branch 1 was taken 446611 times"> + </span>]:<span class="lineCov"> 12055342 : if ((*d++ = *s++) == 0)</span> -<span class="lineNum"> 54 </span> : : break; -<span class="lineNum"> 55 </span> [<span class="branchCov" title="Branch 0 was taken 11511071 times"> + </span><span class="branchCov" title="Branch 1 was taken 97660 times"> + </span>]:<span class="lineCov"> 11608731 : } while (--n != 0);</span> -<span class="lineNum"> 56 </span> : : } -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> : : /* Not enough room in dst, add NUL and traverse rest of src */ -<span class="lineNum"> 59 </span> [<span class="branchCov" title="Branch 0 was taken 97716 times"> + </span><span class="branchCov" title="Branch 1 was taken 446611 times"> + </span>]:<span class="lineCov"> 544327 : if (n == 0) {</span> -<span class="lineNum"> 60 </span> [<span class="branchCov" title="Branch 0 was taken 97716 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 97716 : if (siz != 0)</span> -<span class="lineNum"> 61 </span> :<span class="lineCov"> 97716 : *d = '\0'; /* NUL-terminate dst */</span> -<span class="lineNum"> 62 </span> [<span class="branchCov" title="Branch 0 was taken 137453 times"> + </span><span class="branchCov" title="Branch 1 was taken 97716 times"> + </span>]:<span class="lineCov"> 235169 : while (*s++)</span> -<span class="lineNum"> 63 </span> : : ; -<span class="lineNum"> 64 </span> : : } -<span class="lineNum"> 65 </span> : : -<span class="lineNum"> 66 </span> :<span class="lineCov"> 544327 : return(s - src - 1); /* count does not include NUL */</span> -<span class="lineNum"> 67 </span> : : } -<span class="lineNum"> 68 </span> : : #endif -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/ruby.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/ruby.png deleted file mode 100644 index 991b6d4ec9e78be165e3ef757eed1aada287364d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^FceV#7`HfI^%F z9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstUx|nfKQ0)e^Y%R^MdiLxj>4`)5S5Q b;#P73kj=!v_*DHKNFRfztDnm{r-UW|iOwIS diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html deleted file mode 100644 index 8938f514..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func-sort-c.html +++ /dev/null @@ -1,201 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/access.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - access.c<span style="font-size: 80%;"> (<a href="access.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">409</td> - <td class="headerCovTableEntry">755</td> - <td class="headerCovTableEntryLo">54.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">66.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">295</td> - <td class="headerCovTableEntry">602</td> - <td class="headerCovTableEntryLo">49.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="access.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#56">add_acc_string</a></td> - <td class="coverFnHi">58685</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#105">add_acc_bool</a></td> - <td class="coverFnHi">30897</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#730">zero_buf_wrapper</a></td> - <td class="coverFnHi">24742</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#955">acc_stanza_add</a></td> - <td class="coverFnHi">23117</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#683">free_acc_int_list</a></td> - <td class="coverFnHi">23117</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#747">free_acc_stanza_data</a></td> - <td class="coverFnHi">23117</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1078">acc_data_is_valid.isra.4</a></td> - <td class="coverFnHi">22878</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#235">add_int_ent</a></td> - <td class="coverFnHi">18846</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#397">expand_acc_int_list</a></td> - <td class="coverFnHi">17811</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#916">free_acc_stanzas</a></td> - <td class="coverFnHi">2609</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#699">free_acc_port_list</a></td> - <td class="coverFnHi">1761</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#941">acc_stanza_init</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1183">parse_access_file</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#113">add_acc_expire_time.isra.0</a></td> - <td class="coverFnHi">745</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#841">expand_acc_ent_lists</a></td> - <td class="coverFnHi">485</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#992">set_acc_defaults</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1926">dump_access_list</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#590">expand_acc_port_list</a></td> - <td class="coverFnHi">83</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#495">add_port_list_ent</a></td> - <td class="coverFnHi">80</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#443">parse_proto_and_port</a></td> - <td class="coverFnHi">80</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#542">add_string_list_ent</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#715">free_acc_string_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#206">add_acc_force_snat.isra.3</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1776">compare_addr_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1834">acc_check_port_access</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#148">add_acc_expire_time_epoch.isra.1</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1801">compare_port_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#637">expand_acc_string_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#80">add_acc_b64_string</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#173">add_acc_force_nat.isra.2</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html deleted file mode 100644 index 4383a544..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.func.html +++ /dev/null @@ -1,201 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/access.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - access.c<span style="font-size: 80%;"> (<a href="access.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">409</td> - <td class="headerCovTableEntry">755</td> - <td class="headerCovTableEntryLo">54.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">66.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">295</td> - <td class="headerCovTableEntry">602</td> - <td class="headerCovTableEntryLo">49.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="access.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1834">acc_check_port_access</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1078">acc_data_is_valid.isra.4</a></td> - <td class="coverFnHi">22878</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#955">acc_stanza_add</a></td> - <td class="coverFnHi">23117</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#941">acc_stanza_init</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#80">add_acc_b64_string</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#105">add_acc_bool</a></td> - <td class="coverFnHi">30897</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#113">add_acc_expire_time.isra.0</a></td> - <td class="coverFnHi">745</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#148">add_acc_expire_time_epoch.isra.1</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#173">add_acc_force_nat.isra.2</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#206">add_acc_force_snat.isra.3</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#56">add_acc_string</a></td> - <td class="coverFnHi">58685</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#235">add_int_ent</a></td> - <td class="coverFnHi">18846</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#495">add_port_list_ent</a></td> - <td class="coverFnHi">80</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#542">add_string_list_ent</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1776">compare_addr_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1801">compare_port_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1926">dump_access_list</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#841">expand_acc_ent_lists</a></td> - <td class="coverFnHi">485</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#397">expand_acc_int_list</a></td> - <td class="coverFnHi">17811</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#590">expand_acc_port_list</a></td> - <td class="coverFnHi">83</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#637">expand_acc_string_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#683">free_acc_int_list</a></td> - <td class="coverFnHi">23117</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#699">free_acc_port_list</a></td> - <td class="coverFnHi">1761</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#747">free_acc_stanza_data</a></td> - <td class="coverFnHi">23117</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#916">free_acc_stanzas</a></td> - <td class="coverFnHi">2609</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#715">free_acc_string_list</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#1183">parse_access_file</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#443">parse_proto_and_port</a></td> - <td class="coverFnHi">80</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#992">set_acc_defaults</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="access.c.gcov.html#730">zero_buf_wrapper</a></td> - <td class="coverFnHi">24742</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html deleted file mode 100644 index de8ad293..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/access.c.gcov.html +++ /dev/null @@ -1,2153 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/access.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - access.c<span style="font-size: 80%;"> (source / <a href="access.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">409</td> - <td class="headerCovTableEntry">755</td> - <td class="headerCovTableEntryLo">54.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">20</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">66.7 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">295</td> - <td class="headerCovTableEntry">602</td> - <td class="headerCovTableEntryLo">49.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ****************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: access.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Access.conf file processing for fwknop server. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ****************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &lt;sys/stat.h&gt; -<span class="lineNum"> 32 </span> : : -<span class="lineNum"> 33 </span> : : #if HAVE_SYS_SOCKET_H -<span class="lineNum"> 34 </span> : : #include &lt;sys/socket.h&gt; -<span class="lineNum"> 35 </span> : : #endif -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 38 </span> : : #include &lt;arpa/inet.h&gt; -<span class="lineNum"> 39 </span> : : #include &quot;pwd.h&quot; -<span class="lineNum"> 40 </span> : : #include &quot;access.h&quot; -<span class="lineNum"> 41 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 42 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : #define FATAL_ERR -1 -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : #ifndef SUCCESS -<span class="lineNum"> 47 </span> : : #define SUCCESS 1 -<span class="lineNum"> 48 </span> : : #endif -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : #ifdef HAVE_C_UNIT_TESTS -<span class="lineNum"> 51 </span> : : #include &quot;cunit_common.h&quot; -<span class="lineNum"> 52 </span> : : DECLARE_TEST_SUITE(access, &quot;Access test suite&quot;); -<span class="lineNum"> 53 </span> : : #endif -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : /* Add an access string entry -<a name="56"><span class="lineNum"> 56 </span> : : */</a> -<span class="lineNum"> 57 </span> : : static int -<span class="lineNum"> 58 </span> :<span class="lineCov"> 58685 : add_acc_string(char **var, const char *val)</span> -<span class="lineNum"> 59 </span> : : { -<span class="lineNum"> 60 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 58685 times"> + </span>]:<span class="lineCov"> 58685 : if(var == NULL)</span> -<span class="lineNum"> 61 </span> : : { -<span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] add_acc_string() called with NULL variable&quot;);</span> -<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> -<span class="lineNum"> 64 </span> : : } -<span class="lineNum"> 65 </span> : : -<span class="lineNum"> 66 </span> [<span class="branchCov" title="Branch 0 was taken 8674 times"> + </span><span class="branchCov" title="Branch 1 was taken 50011 times"> + </span>]:<span class="lineCov"> 58685 : if(*var != NULL)</span> -<span class="lineNum"> 67 </span> :<span class="lineCov"> 8674 : free(*var);</span> -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 58685 times"> + </span>]:<span class="lineCov"> 58685 : if((*var = strdup(val)) == NULL)</span> -<span class="lineNum"> 70 </span> : : { -<span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 72 </span> : : &quot;[*] Fatal memory allocation error adding access list entry: %s&quot;, *var -<span class="lineNum"> 73 </span> : : ); -<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> -<span class="lineNum"> 75 </span> : : } -<span class="lineNum"> 76 </span> : : return SUCCESS; -<span class="lineNum"> 77 </span> : : } -<span class="lineNum"> 78 </span> : : -<span class="lineNum"> 79 </span> : : /* Decode base64 encoded string into access entry -<a name="80"><span class="lineNum"> 80 </span> : : */</a> -<span class="lineNum"> 81 </span> : : static int -<span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : add_acc_b64_string(char **var, int *len, const char *val)</span> -<span class="lineNum"> 83 </span> : : { -<span class="lineNum"> 84 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((*var = strdup(val)) == NULL)</span> -<span class="lineNum"> 85 </span> : : { -<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 87 </span> : : &quot;[*] Fatal memory allocation error adding access list entry: %s&quot;, *var -<span class="lineNum"> 88 </span> : : ); -<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> -<span class="lineNum"> 90 </span> : : } -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : memset(*var, 0x0, strlen(val));</span> -<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : *len = fko_base64_decode(val, (unsigned char *) *var);</span> -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*len &lt; 0)</span> -<span class="lineNum"> 95 </span> : : { -<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 97 </span> : : &quot;[*] base64 decoding returned error for: %s&quot;, *var -<span class="lineNum"> 98 </span> : : ); -<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> -<span class="lineNum"> 100 </span> : : } -<span class="lineNum"> 101 </span> : : return SUCCESS; -<span class="lineNum"> 102 </span> : : } -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> : : /* Add an access bool entry (unsigned char of 1 or 0) -<a name="105"><span class="lineNum"> 105 </span> : : */</a> -<span class="lineNum"> 106 </span> : : static unsigned char -<span class="lineNum"> 107 </span> :<span class="lineCov"> 30897 : add_acc_bool(unsigned char *var, const char *val)</span> -<span class="lineNum"> 108 </span> : : { -<span class="lineNum"> 109 </span> :<span class="lineCov"> 30897 : return(*var = (strncasecmp(val, &quot;Y&quot;, 1) == 0) ? 1 : 0);</span> -<span class="lineNum"> 110 </span> : : } -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : /* Add expiration time - convert date to epoch seconds -<a name="113"><span class="lineNum"> 113 </span> : : */</a> -<span class="lineNum"> 114 </span> : : static int -<span class="lineNum"> 115 </span> :<span class="lineCov"> 1490 : add_acc_expire_time(fko_srv_options_t *opts, time_t *access_expire_time, const char *val)</span> -<span class="lineNum"> 116 </span> : : { -<span class="lineNum"> 117 </span> : : struct tm tm; -<span class="lineNum"> 118 </span> : : -<span class="lineNum"> 119 </span> : : memset(&amp;tm, 0, sizeof(struct tm)); -<span class="lineNum"> 120 </span> : : -<span class="lineNum"> 121 </span> [<span class="branchCov" title="Branch 0 was taken 10 times"> + </span><span class="branchCov" title="Branch 1 was taken 735 times"> + </span>]:<span class="lineCov"> 745 : if (sscanf(val, &quot;%2d/%2d/%4d&quot;, &amp;tm.tm_mon, &amp;tm.tm_mday, &amp;tm.tm_year) != 3)</span> -<span class="lineNum"> 122 </span> : : { -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> :<span class="lineCov"> 10 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 125 </span> : : &quot;[*] Fatal: invalid date value '%s' (need MM/DD/YYYY) for access stanza expiration time&quot;, -<span class="lineNum"> 126 </span> : : val -<span class="lineNum"> 127 </span> : : ); -<span class="lineNum"> 128 </span> : : return FATAL_ERR; -<span class="lineNum"> 129 </span> : : } -<span class="lineNum"> 130 </span> : : -<span class="lineNum"> 131 </span> [<span class="branchCov" title="Branch 0 was taken 604 times"> + </span><span class="branchCov" title="Branch 1 was taken 131 times"> + </span>]:<span class="lineCov"> 735 : if(tm.tm_mon &gt; 0)</span> -<span class="lineNum"> 132 </span> :<span class="lineCov"> 604 : tm.tm_mon -= 1; /* 0-11 */</span> -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> : : /* number of years since 1900 -<span class="lineNum"> 135 </span> : : */ -<span class="lineNum"> 136 </span> [<span class="branchCov" title="Branch 0 was taken 300 times"> + </span><span class="branchCov" title="Branch 1 was taken 435 times"> + </span>]:<span class="lineCov"> 735 : if(tm.tm_year &gt; 1900)</span> -<span class="lineNum"> 137 </span> :<span class="lineCov"> 300 : tm.tm_year -= 1900;</span> -<span class="lineNum"> 138 </span> : : else -<span class="lineNum"> 139 </span> [<span class="branchCov" title="Branch 0 was taken 344 times"> + </span><span class="branchCov" title="Branch 1 was taken 91 times"> + </span>]:<span class="lineCov"> 435 : if(tm.tm_year &lt; 100)</span> -<span class="lineNum"> 140 </span> :<span class="lineCov"> 344 : tm.tm_year += 100;</span> -<span class="lineNum"> 141 </span> : : -<span class="lineNum"> 142 </span> :<span class="lineCov"> 735 : *access_expire_time = mktime(&amp;tm);</span> -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> : : return 1; -<span class="lineNum"> 145 </span> : : } -<span class="lineNum"> 146 </span> : : -<span class="lineNum"> 147 </span> : : /* Add expiration time via epoch seconds defined in access.conf -<a name="148"><span class="lineNum"> 148 </span> : : */</a> -<span class="lineNum"> 149 </span> : : static int -<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : add_acc_expire_time_epoch(fko_srv_options_t *opts, time_t *access_expire_time, const char *val)</span> -<span class="lineNum"> 151 </span> : : { -<span class="lineNum"> 152 </span> : : char *endptr; -<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : unsigned long expire_time = 0;</span> -<span class="lineNum"> 154 </span> : : -<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : errno = 0;</span> -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : expire_time = (time_t) strtoul(val, &amp;endptr, 10);</span> -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (errno == ERANGE || (errno != 0 &amp;&amp; expire_time == 0))</span> -<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] -<span class="lineNum"> 160 </span> : : { -<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 162 </span> : : &quot;[*] Fatal: invalid epoch seconds value '%s' for access stanza expiration time&quot;, -<span class="lineNum"> 163 </span> : : val -<span class="lineNum"> 164 </span> : : ); -<span class="lineNum"> 165 </span> : : return FATAL_ERR; -<span class="lineNum"> 166 </span> : : } -<span class="lineNum"> 167 </span> : : -<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : *access_expire_time = (time_t) expire_time;</span> -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> : : return 1; -<span class="lineNum"> 171 </span> : : } -<span class="lineNum"> 172 </span> : : -<a name="173"><span class="lineNum"> 173 </span> : : #if defined(FIREWALL_FIREWALLD) || defined(FIREWALL_IPTABLES)</a> -<span class="lineNum"> 174 </span> : : static int -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : add_acc_force_nat(fko_srv_options_t *opts, acc_stanza_t *curr_acc, const char *val)</span> -<span class="lineNum"> 176 </span> : : { -<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : char ip_str[MAX_IPV4_STR_LEN] = {0};</span> -<span class="lineNum"> 178 </span> : : -<span class="lineNum"> 179 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sscanf(val, &quot;%15s %5u&quot;, ip_str, &amp;curr_acc-&gt;force_nat_port) != 2)</span> -<span class="lineNum"> 180 </span> : : { -<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 182 </span> : : &quot;[*] Fatal: invalid FORCE_NAT arg '%s', need &lt;IP&gt; &lt;PORT&gt;&quot;, -<span class="lineNum"> 183 </span> : : val -<span class="lineNum"> 184 </span> : : ); -<span class="lineNum"> 185 </span> : : return FATAL_ERR; -<span class="lineNum"> 186 </span> : : } -<span class="lineNum"> 187 </span> : : -<span class="lineNum"> 188 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (curr_acc-&gt;force_nat_port &gt; MAX_PORT)</span> -<span class="lineNum"> 189 </span> : : { -<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 191 </span> : : &quot;[*] Fatal: invalid FORCE_NAT port '%d'&quot;, curr_acc-&gt;force_nat_port); -<span class="lineNum"> 192 </span> : : return FATAL_ERR; -<span class="lineNum"> 193 </span> : : } -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(ip_str))</span> -<span class="lineNum"> 196 </span> : : { -<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 198 </span> : : &quot;[*] Fatal: invalid FORCE_NAT IP '%s'&quot;, ip_str); -<span class="lineNum"> 199 </span> : : return FATAL_ERR; -<span class="lineNum"> 200 </span> : : } -<span class="lineNum"> 201 </span> : : -<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;force_nat = 1;</span> -<span class="lineNum"> 203 </span> : : -<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : return add_acc_string(&amp;(curr_acc-&gt;force_nat_ip), ip_str);</span> -<span class="lineNum"> 205 </span> : : } -<a name="206"><span class="lineNum"> 206 </span> : : </a> -<span class="lineNum"> 207 </span> : : static int -<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : add_acc_force_snat(fko_srv_options_t *opts, acc_stanza_t *curr_acc, const char *val)</span> -<span class="lineNum"> 209 </span> : : { -<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : char ip_str[MAX_IPV4_STR_LEN] = {0};</span> -<span class="lineNum"> 211 </span> : : -<span class="lineNum"> 212 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (sscanf(val, &quot;%15s&quot;, ip_str) != 1)</span> -<span class="lineNum"> 213 </span> : : { -<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 215 </span> : : &quot;[*] Fatal: invalid FORCE_SNAT arg '%s', need &lt;IP&gt;&quot;, val); -<span class="lineNum"> 216 </span> : : return FATAL_ERR; -<span class="lineNum"> 217 </span> : : } -<span class="lineNum"> 218 </span> : : -<span class="lineNum"> 219 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(ip_str))</span> -<span class="lineNum"> 220 </span> : : { -<span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 222 </span> : : &quot;[*] Fatal: invalid FORCE_SNAT IP '%s'&quot;, ip_str); -<span class="lineNum"> 223 </span> : : return FATAL_ERR; -<span class="lineNum"> 224 </span> : : } -<span class="lineNum"> 225 </span> : : -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;force_snat = 1;</span> -<span class="lineNum"> 227 </span> : : -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : return add_acc_string(&amp;(curr_acc-&gt;force_snat_ip), ip_str);</span> -<span class="lineNum"> 229 </span> : : } -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> : : #endif -<span class="lineNum"> 232 </span> : : -<span class="lineNum"> 233 </span> : : /* Take an IP or Subnet/Mask and convert it to mask for later -<span class="lineNum"> 234 </span> : : * comparisons of incoming source IPs against this mask. -<a name="235"><span class="lineNum"> 235 </span> : : */</a> -<span class="lineNum"> 236 </span> : : static int -<span class="lineNum"> 237 </span> :<span class="lineCov"> 18846 : add_int_ent(acc_int_list_t **ilist, const char *ip)</span> -<span class="lineNum"> 238 </span> : : { -<span class="lineNum"> 239 </span> : : char *ndx; -<span class="lineNum"> 240 </span> :<span class="lineCov"> 18846 : char ip_str[MAX_IPV4_STR_LEN] = {0};</span> -<span class="lineNum"> 241 </span> :<span class="lineCov"> 18846 : char ip_mask_str[MAX_IPV4_STR_LEN] = {0};</span> -<span class="lineNum"> 242 </span> : : uint32_t mask; -<span class="lineNum"> 243 </span> :<span class="lineCov"> 18846 : int is_err, mask_len = 0, need_shift = 1;</span> -<span class="lineNum"> 244 </span> : : -<span class="lineNum"> 245 </span> : : struct in_addr in; -<span class="lineNum"> 246 </span> : : struct in_addr mask_in; -<span class="lineNum"> 247 </span> : : -<span class="lineNum"> 248 </span> : : acc_int_list_t *last_sle, *new_sle, *tmp_sle; -<span class="lineNum"> 249 </span> : : -<span class="lineNum"> 250 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 18846 times"> + </span>]:<span class="lineCov"> 18846 : if((new_sle = calloc(1, sizeof(acc_int_list_t))) == NULL)</span> -<span class="lineNum"> 251 </span> : : { -<span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 253 </span> : : &quot;[*] Fatal memory allocation error adding stanza source_list entry&quot; -<span class="lineNum"> 254 </span> : : ); -<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 256 </span> : : } -<span class="lineNum"> 257 </span> : : -<span class="lineNum"> 258 </span> : : /* Convert the IP data into the appropriate IP + (optional) mask -<span class="lineNum"> 259 </span> : : */ -<span class="lineNum"> 260 </span> [<span class="branchCov" title="Branch 0 was taken 451 times"> + </span><span class="branchCov" title="Branch 1 was taken 18395 times"> + </span>]:<span class="lineCov"> 18846 : if(strcasecmp(ip, &quot;ANY&quot;) == 0)</span> -<span class="lineNum"> 261 </span> : : { -<span class="lineNum"> 262 </span> :<span class="lineCov"> 451 : new_sle-&gt;maddr = 0x0;</span> -<span class="lineNum"> 263 </span> :<span class="lineCov"> 451 : new_sle-&gt;mask = 0x0;</span> -<span class="lineNum"> 264 </span> : : } -<span class="lineNum"> 265 </span> : : else -<span class="lineNum"> 266 </span> : : { -<span class="lineNum"> 267 </span> : : /* See if we have a subnet component. If so pull out the IP and -<span class="lineNum"> 268 </span> : : * mask values, then create the final mask value. -<span class="lineNum"> 269 </span> : : */ -<span class="lineNum"> 270 </span> [<span class="branchCov" title="Branch 0 was taken 1616 times"> + </span><span class="branchCov" title="Branch 1 was taken 16779 times"> + </span>]:<span class="lineCov"> 18395 : if((ndx = strchr(ip, '/')) != NULL)</span> -<span class="lineNum"> 271 </span> : : { -<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 1615 times"> + </span>]:<span class="lineCov"> 1616 : if(((ndx-ip)) &gt;= MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 273 </span> : : { -<span class="lineNum"> 274 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR, &quot;[*] Error parsing string to IP&quot;);</span> -<span class="lineNum"> 275 </span> :<span class="lineCov"> 1 : free(new_sle);</span> -<span class="lineNum"> 276 </span> :<span class="lineCov"> 1 : new_sle = NULL;</span> -<span class="lineNum"> 277 </span> :<span class="lineCov"> 1 : return 0;</span> -<span class="lineNum"> 278 </span> : : } -<span class="lineNum"> 279 </span> : : -<span class="lineNum"> 280 </span> :<span class="lineCov"> 1615 : mask_len = strlen(ip) - (ndx-ip+1);</span> -<span class="lineNum"> 281 </span> : : -<span class="lineNum"> 282 </span> [<span class="branchCov" title="Branch 0 was taken 1505 times"> + </span><span class="branchCov" title="Branch 1 was taken 110 times"> + </span>]:<span class="lineCov"> 1615 : if(mask_len &gt; 2)</span> -<span class="lineNum"> 283 </span> : : { -<span class="lineNum"> 284 </span> [<span class="branchCov" title="Branch 0 was taken 1499 times"> + </span><span class="branchCov" title="Branch 1 was taken 6 times"> + </span>]:<span class="lineCov"> 1505 : if(mask_len &gt;= MIN_IPV4_STR_LEN &amp;&amp; mask_len &lt; MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 285 </span> : : { -<span class="lineNum"> 286 </span> : : /* IP formatted mask -<span class="lineNum"> 287 </span> : : */ -<span class="lineNum"> 288 </span> :<span class="lineCov"> 1499 : strlcpy(ip_mask_str, (ip + (ndx-ip) + 1), mask_len+1);</span> -<span class="lineNum"> 289 </span> [<span class="branchCov" title="Branch 1 was taken 3 times"> + </span><span class="branchCov" title="Branch 2 was taken 1496 times"> + </span>]:<span class="lineCov"> 1499 : if(inet_aton(ip_mask_str, &amp;mask_in) == 0)</span> -<span class="lineNum"> 290 </span> : : { -<span class="lineNum"> 291 </span> :<span class="lineCov"> 3 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 292 </span> : : &quot;[*] Fatal error parsing IP mask to int for: %s&quot;, ip_mask_str -<span class="lineNum"> 293 </span> : : ); -<span class="lineNum"> 294 </span> :<span class="lineCov"> 3 : free(new_sle);</span> -<span class="lineNum"> 295 </span> :<span class="lineCov"> 3 : new_sle = NULL;</span> -<span class="lineNum"> 296 </span> :<span class="lineCov"> 3 : return 0;</span> -<span class="lineNum"> 297 </span> : : } -<span class="lineNum"> 298 </span> :<span class="lineCov"> 1496 : mask = ntohl(mask_in.s_addr);</span> -<span class="lineNum"> 299 </span> :<span class="lineCov"> 1496 : need_shift = 0;</span> -<span class="lineNum"> 300 </span> : : } -<span class="lineNum"> 301 </span> : : else -<span class="lineNum"> 302 </span> : : { -<span class="lineNum"> 303 </span> :<span class="lineCov"> 6 : log_msg(LOG_ERR, &quot;[*] Invalid IP mask str '%s'.&quot;, ndx+1);</span> -<span class="lineNum"> 304 </span> :<span class="lineCov"> 6 : free(new_sle);</span> -<span class="lineNum"> 305 </span> :<span class="lineCov"> 6 : new_sle = NULL;</span> -<span class="lineNum"> 306 </span> :<span class="lineCov"> 6 : return 0;</span> -<span class="lineNum"> 307 </span> : : } -<span class="lineNum"> 308 </span> : : } -<span class="lineNum"> 309 </span> : : else -<span class="lineNum"> 310 </span> : : { -<span class="lineNum"> 311 </span> [<span class="branchCov" title="Branch 0 was taken 109 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 110 : if(mask_len &gt; 0)</span> -<span class="lineNum"> 312 </span> : : { -<span class="lineNum"> 313 </span> : : /* CIDR mask -<span class="lineNum"> 314 </span> : : */ -<span class="lineNum"> 315 </span> :<span class="lineCov"> 109 : mask = strtol_wrapper(ndx+1, 1, 32, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 316 </span> [<span class="branchCov" title="Branch 0 was taken 4 times"> + </span><span class="branchCov" title="Branch 1 was taken 105 times"> + </span>]:<span class="lineCov"> 109 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 317 </span> : : { -<span class="lineNum"> 318 </span> :<span class="lineCov"> 4 : log_msg(LOG_ERR, &quot;[*] Invalid IP mask str '%s'.&quot;, ndx+1);</span> -<span class="lineNum"> 319 </span> :<span class="lineCov"> 4 : free(new_sle);</span> -<span class="lineNum"> 320 </span> :<span class="lineCov"> 4 : new_sle = NULL;</span> -<span class="lineNum"> 321 </span> :<span class="lineCov"> 4 : return 0;</span> -<span class="lineNum"> 322 </span> : : } -<span class="lineNum"> 323 </span> : : } -<span class="lineNum"> 324 </span> : : else -<span class="lineNum"> 325 </span> : : { -<span class="lineNum"> 326 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR, &quot;[*] Missing mask value.&quot;);</span> -<span class="lineNum"> 327 </span> :<span class="lineCov"> 1 : free(new_sle);</span> -<span class="lineNum"> 328 </span> :<span class="lineCov"> 1 : new_sle = NULL;</span> -<span class="lineNum"> 329 </span> :<span class="lineCov"> 1 : return 0;</span> -<span class="lineNum"> 330 </span> : : } -<span class="lineNum"> 331 </span> : : } -<span class="lineNum"> 332 </span> : : -<span class="lineNum"> 333 </span> :<span class="lineCov"> 1601 : strlcpy(ip_str, ip, (ndx-ip)+1);</span> -<span class="lineNum"> 334 </span> : : } -<span class="lineNum"> 335 </span> : : else -<span class="lineNum"> 336 </span> : : { -<span class="lineNum"> 337 </span> :<span class="lineCov"> 16779 : mask = 32;</span> -<span class="lineNum"> 338 </span> [<span class="branchCov" title="Branch 1 was taken 12 times"> + </span><span class="branchCov" title="Branch 2 was taken 16767 times"> + </span>]:<span class="lineCov"> 16779 : if(strnlen(ip, MAX_IPV4_STR_LEN+1) &gt;= MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 339 </span> : : { -<span class="lineNum"> 340 </span> :<span class="lineCov"> 12 : log_msg(LOG_ERR, &quot;[*] Error parsing string to IP&quot;);</span> -<span class="lineNum"> 341 </span> :<span class="lineCov"> 12 : free(new_sle);</span> -<span class="lineNum"> 342 </span> :<span class="lineCov"> 12 : new_sle = NULL;</span> -<span class="lineNum"> 343 </span> :<span class="lineCov"> 12 : return 0;</span> -<span class="lineNum"> 344 </span> : : } -<span class="lineNum"> 345 </span> :<span class="lineCov"> 16767 : strlcpy(ip_str, ip, sizeof(ip_str));</span> -<span class="lineNum"> 346 </span> : : } -<span class="lineNum"> 347 </span> : : -<span class="lineNum"> 348 </span> [<span class="branchCov" title="Branch 1 was taken 121 times"> + </span><span class="branchCov" title="Branch 2 was taken 18247 times"> + </span>]:<span class="lineCov"> 18368 : if(inet_aton(ip_str, &amp;in) == 0)</span> -<span class="lineNum"> 349 </span> : : { -<span class="lineNum"> 350 </span> :<span class="lineCov"> 121 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 351 </span> : : &quot;[*] Fatal error parsing IP to int for: %s&quot;, ip_str -<span class="lineNum"> 352 </span> : : ); -<span class="lineNum"> 353 </span> : : -<span class="lineNum"> 354 </span> :<span class="lineCov"> 121 : free(new_sle);</span> -<span class="lineNum"> 355 </span> :<span class="lineCov"> 121 : new_sle = NULL;</span> -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> :<span class="lineCov"> 121 : return 0;</span> -<span class="lineNum"> 358 </span> : : } -<span class="lineNum"> 359 </span> : : -<span class="lineNum"> 360 </span> : : /* Store our mask converted from CIDR to a 32-bit value. -<span class="lineNum"> 361 </span> : : */ -<span class="lineNum"> 362 </span> [<span class="branchCov" title="Branch 0 was taken 16651 times"> + </span><span class="branchCov" title="Branch 1 was taken 1596 times"> + </span>]:<span class="lineCov"> 18247 : if(mask == 32)</span> -<span class="lineNum"> 363 </span> :<span class="lineCov"> 16651 : new_sle-&gt;mask = 0xFFFFFFFF;</span> -<span class="lineNum"> 364 </span>[<span class="branchCov" title="Branch 0 was taken 104 times"> + </span><span class="branchCov" title="Branch 1 was taken 1492 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 104 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1596 : else if(need_shift &amp;&amp; (mask &gt; 0 &amp;&amp; mask &lt; 32))</span> -<span class="lineNum"> 365 </span> :<span class="lineCov"> 104 : new_sle-&gt;mask = (0xFFFFFFFF &lt;&lt; (32 - mask));</span> -<span class="lineNum"> 366 </span> : : else -<span class="lineNum"> 367 </span> :<span class="lineCov"> 1492 : new_sle-&gt;mask = mask;</span> -<span class="lineNum"> 368 </span> : : -<span class="lineNum"> 369 </span> : : /* Store our masked address for comparisons with future incoming -<span class="lineNum"> 370 </span> : : * packets. -<span class="lineNum"> 371 </span> : : */ -<span class="lineNum"> 372 </span> :<span class="lineCov"> 18247 : new_sle-&gt;maddr = ntohl(in.s_addr) &amp; new_sle-&gt;mask;</span> -<span class="lineNum"> 373 </span> : : } -<span class="lineNum"> 374 </span> : : -<span class="lineNum"> 375 </span> : : /* If this is not the first entry, we walk our pointer to the -<span class="lineNum"> 376 </span> : : * end of the list. -<span class="lineNum"> 377 </span> : : */ -<span class="lineNum"> 378 </span> [<span class="branchCov" title="Branch 0 was taken 17718 times"> + </span><span class="branchCov" title="Branch 1 was taken 980 times"> + </span>]:<span class="lineCov"> 18698 : if(*ilist == NULL)</span> -<span class="lineNum"> 379 </span> : : { -<span class="lineNum"> 380 </span> :<span class="lineCov"> 18698 : *ilist = new_sle;</span> -<span class="lineNum"> 381 </span> : : } -<span class="lineNum"> 382 </span> : : else -<span class="lineNum"> 383 </span> : : { -<span class="lineNum"> 384 </span> : : tmp_sle = *ilist; -<span class="lineNum"> 385 </span> : : -<span class="lineNum"> 386 </span> : : do { -<span class="lineNum"> 387 </span> :<span class="lineCov"> 2784 : last_sle = tmp_sle;</span> -<span class="lineNum"> 388 </span> [<span class="branchCov" title="Branch 0 was taken 1804 times"> + </span><span class="branchCov" title="Branch 1 was taken 980 times"> + </span>]:<span class="lineCov"> 2784 : } while((tmp_sle = tmp_sle-&gt;next));</span> -<span class="lineNum"> 389 </span> : : -<span class="lineNum"> 390 </span> :<span class="lineCov"> 980 : last_sle-&gt;next = new_sle;</span> -<span class="lineNum"> 391 </span> : : } -<span class="lineNum"> 392 </span> : : -<span class="lineNum"> 393 </span> : : return 1; -<span class="lineNum"> 394 </span> : : } -<span class="lineNum"> 395 </span> : : -<span class="lineNum"> 396 </span> : : /* Expand the access SOURCE string to a list of masks. -<a name="397"><span class="lineNum"> 397 </span> : : */</a> -<span class="lineNum"> 398 </span> : : static int -<span class="lineNum"> 399 </span> :<span class="lineCov"> 17811 : expand_acc_int_list(acc_int_list_t **ilist, char *ip)</span> -<span class="lineNum"> 400 </span> : : { -<span class="lineNum"> 401 </span> : : char *ndx, *start; -<span class="lineNum"> 402 </span> :<span class="lineCov"> 17811 : char buf[ACCESS_BUF_LEN] = {0};</span> -<span class="lineNum"> 403 </span> :<span class="lineCov"> 17811 : int res = 1;</span> -<span class="lineNum"> 404 </span> : : -<span class="lineNum"> 405 </span> :<span class="lineCov"> 17811 : start = ip;</span> -<span class="lineNum"> 406 </span> : : -<span class="lineNum"> 407 </span> [<span class="branchCov" title="Branch 0 was taken 190955 times"> + </span><span class="branchCov" title="Branch 1 was taken 17798 times"> + </span>]:<span class="lineCov"> 208753 : for(ndx = start; *ndx; ndx++)</span> -<span class="lineNum"> 408 </span> : : { -<span class="lineNum"> 409 </span> [<span class="branchCov" title="Branch 0 was taken 1053 times"> + </span><span class="branchCov" title="Branch 1 was taken 189902 times"> + </span>]:<span class="lineCov"> 190955 : if(*ndx == ',')</span> -<span class="lineNum"> 410 </span> : : { -<span class="lineNum"> 411 </span> : : /* Skip over any leading whitespace. -<span class="lineNum"> 412 </span> : : */ -<span class="lineNum"> 413 </span> [<span class="branchCov" title="Branch 1 was taken 4118 times"> + </span><span class="branchCov" title="Branch 2 was taken 1053 times"> + </span>]:<span class="lineCov"> 5171 : while(isspace(*start))</span> -<span class="lineNum"> 414 </span> :<span class="lineCov"> 4118 : start++;</span> -<span class="lineNum"> 415 </span> : : -<span class="lineNum"> 416 </span> [<span class="branchCov" title="Branch 0 was taken 1052 times"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 1053 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> -<span class="lineNum"> 417 </span> : : return 0; -<span class="lineNum"> 418 </span> : : -<span class="lineNum"> 419 </span> :<span class="lineCov"> 1052 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 420 </span> : : -<span class="lineNum"> 421 </span> :<span class="lineCov"> 1052 : res = add_int_ent(ilist, buf);</span> -<span class="lineNum"> 422 </span> [<span class="branchCov" title="Branch 0 was taken 12 times"> + </span><span class="branchCov" title="Branch 1 was taken 1040 times"> + </span>]:<span class="lineCov"> 1052 : if(res == 0)</span> -<span class="lineNum"> 423 </span> :<span class="lineCov"> 12 : return res;</span> -<span class="lineNum"> 424 </span> : : -<span class="lineNum"> 425 </span> :<span class="lineCov"> 1040 : start = ndx+1;</span> -<span class="lineNum"> 426 </span> : : } -<span class="lineNum"> 427 </span> : : } -<span class="lineNum"> 428 </span> : : -<span class="lineNum"> 429 </span> : : /* Skip over any leading whitespace (once again for the last in the list). -<span class="lineNum"> 430 </span> : : */ -<span class="lineNum"> 431 </span> [<span class="branchCov" title="Branch 1 was taken 201 times"> + </span><span class="branchCov" title="Branch 2 was taken 17798 times"> + </span>]:<span class="lineCov"> 17999 : while(isspace(*start))</span> -<span class="lineNum"> 432 </span> :<span class="lineCov"> 201 : start++;</span> -<span class="lineNum"> 433 </span> : : -<span class="lineNum"> 434 </span> [<span class="branchCov" title="Branch 0 was taken 17794 times"> + </span><span class="branchCov" title="Branch 1 was taken 4 times"> + </span>]:<span class="lineCov"> 17798 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> -<span class="lineNum"> 435 </span> : : return 0; -<span class="lineNum"> 436 </span> : : -<span class="lineNum"> 437 </span> :<span class="lineCov"> 17794 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 438 </span> : : -<span class="lineNum"> 439 </span> :<span class="lineCov"> 17794 : res = add_int_ent(ilist, buf);</span> -<span class="lineNum"> 440 </span> : : -<span class="lineNum"> 441 </span> :<span class="lineCov"> 17794 : return res;</span> -<span class="lineNum"> 442 </span> : : } -<a name="443"><span class="lineNum"> 443 </span> : : </a> -<span class="lineNum"> 444 </span> : : static int -<span class="lineNum"> 445 </span> :<span class="lineCov"> 80 : parse_proto_and_port(char *pstr, int *proto, int *port)</span> -<span class="lineNum"> 446 </span> : : { -<span class="lineNum"> 447 </span> : : char *ndx; -<span class="lineNum"> 448 </span> :<span class="lineCov"> 80 : char proto_str[ACCESS_BUF_LEN] = {0};</span> -<span class="lineNum"> 449 </span> : : int is_err; -<span class="lineNum"> 450 </span> : : -<span class="lineNum"> 451 </span> : : /* Parse the string into its components. -<span class="lineNum"> 452 </span> : : */ -<span class="lineNum"> 453 </span> [<span class="branchCov" title="Branch 0 was taken 36 times"> + </span><span class="branchCov" title="Branch 1 was taken 44 times"> + </span>]:<span class="lineCov"> 80 : if((ndx = strchr(pstr, '/')) == NULL)</span> -<span class="lineNum"> 454 </span> : : { -<span class="lineNum"> 455 </span> :<span class="lineCov"> 36 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 456 </span> : : &quot;[*] Parse error on access port entry: %s&quot;, pstr); -<span class="lineNum"> 457 </span> : : -<span class="lineNum"> 458 </span> :<span class="lineCov"> 36 : return(-1);</span> -<span class="lineNum"> 459 </span> : : } -<span class="lineNum"> 460 </span> : : -<span class="lineNum"> 461 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 44 times"> + </span>]:<span class="lineCov"> 44 : if(((ndx - pstr)+1) &gt;= ACCESS_BUF_LEN)</span> -<span class="lineNum"> 462 </span> : : { -<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 464 </span> : : &quot;[*] Parse error on access port entry: %s&quot;, pstr); -<span class="lineNum"> 465 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 466 </span> : : } -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> :<span class="lineCov"> 44 : strlcpy(proto_str, pstr, (ndx - pstr)+1);</span> -<span class="lineNum"> 469 </span> : : -<span class="lineNum"> 470 </span> :<span class="lineCov"> 44 : *port = strtol_wrapper(ndx+1, 0, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 471 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 43 times"> + </span>]:<span class="lineCov"> 44 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 472 </span> : : { -<span class="lineNum"> 473 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 474 </span> : : &quot;[*] Invalid port '%s' in access request, must be in [%d,%d]&quot;, -<span class="lineNum"> 475 </span> : : pstr, 0, MAX_PORT); -<span class="lineNum"> 476 </span> :<span class="lineCov"> 1 : return(-1);</span> -<span class="lineNum"> 477 </span> : : } -<span class="lineNum"> 478 </span> : : -<span class="lineNum"> 479 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 43 times"> + </span>]:<span class="lineCov"> 43 : if(strcasecmp(proto_str, &quot;tcp&quot;) == 0)</span> -<span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : *proto = PROTO_TCP;</span> -<span class="lineNum"> 481 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 43 times"> + </span>]:<span class="lineCov"> 43 : else if(strcasecmp(proto_str, &quot;udp&quot;) == 0)</span> -<span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : *proto = PROTO_UDP;</span> -<span class="lineNum"> 483 </span> : : else -<span class="lineNum"> 484 </span> : : { -<span class="lineNum"> 485 </span> :<span class="lineCov"> 43 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 486 </span> : : &quot;[*] Invalid protocol in access port entry: %s&quot;, pstr); -<span class="lineNum"> 487 </span> :<span class="lineCov"> 43 : return(-1);</span> -<span class="lineNum"> 488 </span> : : } -<span class="lineNum"> 489 </span> : : -<span class="lineNum"> 490 </span> : : return(0); -<span class="lineNum"> 491 </span> : : } -<span class="lineNum"> 492 </span> : : -<span class="lineNum"> 493 </span> : : /* Take a proto/port string and convert it to appropriate integer values -<span class="lineNum"> 494 </span> : : * for comparisons of incoming SPA requests. -<a name="495"><span class="lineNum"> 495 </span> : : */</a> -<span class="lineNum"> 496 </span> : : static int -<span class="lineNum"> 497 </span> :<span class="lineCov"> 80 : add_port_list_ent(acc_port_list_t **plist, char *port_str)</span> -<span class="lineNum"> 498 </span> : : { -<span class="lineNum"> 499 </span> : : int proto_int, port; -<span class="lineNum"> 500 </span> : : -<span class="lineNum"> 501 </span> : : acc_port_list_t *last_plist, *new_plist, *tmp_plist; -<span class="lineNum"> 502 </span> : : -<span class="lineNum"> 503 </span> : : /* Parse the string into its components and continue only if there -<span class="lineNum"> 504 </span> : : * are no problems with the incoming string. -<span class="lineNum"> 505 </span> : : */ -<span class="lineNum"> 506 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 80 times"> + </span>]:<span class="lineCov"> 80 : if(parse_proto_and_port(port_str, &amp;proto_int, &amp;port) != 0)</span> -<span class="lineNum"> 507 </span> : : return 0; -<span class="lineNum"> 508 </span> : : -<span class="lineNum"> 509 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((new_plist = calloc(1, sizeof(acc_port_list_t))) == NULL)</span> -<span class="lineNum"> 510 </span> : : { -<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 512 </span> : : &quot;[*] Fatal memory allocation error adding stanza port_list entry&quot; -<span class="lineNum"> 513 </span> : : ); -<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : exit(EXIT_FAILURE);</span> -<span class="lineNum"> 515 </span> : : } -<span class="lineNum"> 516 </span> : : -<span class="lineNum"> 517 </span> : : /* If this is not the first entry, we walk our pointer to the -<span class="lineNum"> 518 </span> : : * end of the list. -<span class="lineNum"> 519 </span> : : */ -<span class="lineNum"> 520 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*plist == NULL)</span> -<span class="lineNum"> 521 </span> : : { -<span class="lineNum"> 522 </span> :<span class="lineNoCov"> 0 : *plist = new_plist;</span> -<span class="lineNum"> 523 </span> : : } -<span class="lineNum"> 524 </span> : : else -<span class="lineNum"> 525 </span> : : { -<span class="lineNum"> 526 </span> : : tmp_plist = *plist; -<span class="lineNum"> 527 </span> : : -<span class="lineNum"> 528 </span> : : do { -<span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : last_plist = tmp_plist;</span> -<span class="lineNum"> 530 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while((tmp_plist = tmp_plist-&gt;next));</span> -<span class="lineNum"> 531 </span> : : -<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : last_plist-&gt;next = new_plist;</span> -<span class="lineNum"> 533 </span> : : } -<span class="lineNum"> 534 </span> : : -<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : new_plist-&gt;proto = proto_int;</span> -<span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : new_plist-&gt;port = port;</span> -<span class="lineNum"> 537 </span> : : -<span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : return 1;</span> -<span class="lineNum"> 539 </span> : : } -<span class="lineNum"> 540 </span> : : -<span class="lineNum"> 541 </span> : : /* Add a string list entry to the given acc_string_list. -<a name="542"><span class="lineNum"> 542 </span> : : */</a> -<span class="lineNum"> 543 </span> : : static int -<span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : add_string_list_ent(acc_string_list_t **stlist, const char *str_str)</span> -<span class="lineNum"> 545 </span> : : { -<span class="lineNum"> 546 </span> : : acc_string_list_t *last_stlist, *new_stlist, *tmp_stlist; -<span class="lineNum"> 547 </span> : : -<span class="lineNum"> 548 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((new_stlist = calloc(1, sizeof(acc_string_list_t))) == NULL)</span> -<span class="lineNum"> 549 </span> : : { -<span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 551 </span> : : &quot;[*] Fatal memory allocation error creating string list entry&quot; -<span class="lineNum"> 552 </span> : : ); -<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> -<span class="lineNum"> 554 </span> : : } -<span class="lineNum"> 555 </span> : : -<span class="lineNum"> 556 </span> : : /* If this is not the first entry, we walk our pointer to the -<span class="lineNum"> 557 </span> : : * end of the list. -<span class="lineNum"> 558 </span> : : */ -<span class="lineNum"> 559 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*stlist == NULL)</span> -<span class="lineNum"> 560 </span> : : { -<span class="lineNum"> 561 </span> :<span class="lineNoCov"> 0 : *stlist = new_stlist;</span> -<span class="lineNum"> 562 </span> : : } -<span class="lineNum"> 563 </span> : : else -<span class="lineNum"> 564 </span> : : { -<span class="lineNum"> 565 </span> : : tmp_stlist = *stlist; -<span class="lineNum"> 566 </span> : : -<span class="lineNum"> 567 </span> : : do { -<span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : last_stlist = tmp_stlist;</span> -<span class="lineNum"> 569 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : } while((tmp_stlist = tmp_stlist-&gt;next));</span> -<span class="lineNum"> 570 </span> : : -<span class="lineNum"> 571 </span> :<span class="lineNoCov"> 0 : last_stlist-&gt;next = new_stlist;</span> -<span class="lineNum"> 572 </span> : : } -<span class="lineNum"> 573 </span> : : -<span class="lineNum"> 574 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(new_stlist-&gt;str != NULL)</span> -<span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : free(new_stlist-&gt;str);</span> -<span class="lineNum"> 576 </span> : : -<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : new_stlist-&gt;str = strdup(str_str);</span> -<span class="lineNum"> 578 </span> : : -<span class="lineNum"> 579 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(new_stlist-&gt;str == NULL)</span> -<span class="lineNum"> 580 </span> : : { -<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 582 </span> : : &quot;[*] Fatal memory allocation error adding string list entry item&quot; -<span class="lineNum"> 583 </span> : : ); -<span class="lineNum"> 584 </span> :<span class="lineNoCov"> 0 : return FATAL_ERR;</span> -<span class="lineNum"> 585 </span> : : } -<span class="lineNum"> 586 </span> : : return SUCCESS; -<span class="lineNum"> 587 </span> : : } -<span class="lineNum"> 588 </span> : : -<span class="lineNum"> 589 </span> : : /* Expand a proto/port access string to a list of access proto-port struct. -<a name="590"><span class="lineNum"> 590 </span> : : */</a> -<span class="lineNum"> 591 </span> : : int -<span class="lineNum"> 592 </span> :<span class="lineCov"> 83 : expand_acc_port_list(acc_port_list_t **plist, char *plist_str)</span> -<span class="lineNum"> 593 </span> : : { -<span class="lineNum"> 594 </span> : : char *ndx, *start; -<span class="lineNum"> 595 </span> :<span class="lineCov"> 83 : char buf[ACCESS_BUF_LEN] = {0};</span> -<span class="lineNum"> 596 </span> : : -<span class="lineNum"> 597 </span> :<span class="lineCov"> 83 : start = plist_str;</span> -<span class="lineNum"> 598 </span> : : -<span class="lineNum"> 599 </span> [<span class="branchCov" title="Branch 0 was taken 547 times"> + </span><span class="branchCov" title="Branch 1 was taken 81 times"> + </span>]:<span class="lineCov"> 628 : for(ndx = start; *ndx != '\0'; ndx++)</span> -<span class="lineNum"> 600 </span> : : { -<span class="lineNum"> 601 </span> [<span class="branchCov" title="Branch 0 was taken 2 times"> + </span><span class="branchCov" title="Branch 1 was taken 545 times"> + </span>]:<span class="lineCov"> 547 : if(*ndx == ',')</span> -<span class="lineNum"> 602 </span> : : { -<span class="lineNum"> 603 </span> : : /* Skip over any leading whitespace. -<span class="lineNum"> 604 </span> : : */ -<span class="lineNum"> 605 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2 times"> + </span>]:<span class="lineCov"> 2 : while(isspace(*start))</span> -<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : start++;</span> -<span class="lineNum"> 607 </span> : : -<span class="lineNum"> 608 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 1 time"> + </span>]:<span class="lineCov"> 2 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> -<span class="lineNum"> 609 </span> : : return 0; -<span class="lineNum"> 610 </span> : : -<span class="lineNum"> 611 </span> :<span class="lineCov"> 1 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 612 </span> : : -<span class="lineNum"> 613 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1 time"> + </span>]:<span class="lineCov"> 1 : if(add_port_list_ent(plist, buf) == 0)</span> -<span class="lineNum"> 614 </span> : : return 0; -<span class="lineNum"> 615 </span> : : -<span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : start = ndx+1;</span> -<span class="lineNum"> 617 </span> : : } -<span class="lineNum"> 618 </span> : : } -<span class="lineNum"> 619 </span> : : -<span class="lineNum"> 620 </span> : : /* Skip over any leading whitespace (once again for the last in the list). -<span class="lineNum"> 621 </span> : : */ -<span class="lineNum"> 622 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 81 times"> + </span>]:<span class="lineCov"> 81 : while(isspace(*start))</span> -<span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : start++;</span> -<span class="lineNum"> 624 </span> : : -<span class="lineNum"> 625 </span> [<span class="branchCov" title="Branch 0 was taken 79 times"> + </span><span class="branchCov" title="Branch 1 was taken 2 times"> + </span>]:<span class="lineCov"> 81 : if(((ndx-start)+1) &gt;= ACCESS_BUF_LEN)</span> -<span class="lineNum"> 626 </span> : : return 0; -<span class="lineNum"> 627 </span> : : -<span class="lineNum"> 628 </span> :<span class="lineCov"> 79 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 629 </span> : : -<span class="lineNum"> 630 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 79 times"> + </span>]:<span class="lineCov"> 79 : if(add_port_list_ent(plist, buf) == 0)</span> -<span class="lineNum"> 631 </span> : : return 0; -<span class="lineNum"> 632 </span> : : -<span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : return 1;</span> -<span class="lineNum"> 634 </span> : : } -<span class="lineNum"> 635 </span> : : -<span class="lineNum"> 636 </span> : : /* Expand a comma-separated string into a simple acc_string_list. -<a name="637"><span class="lineNum"> 637 </span> : : */</a> -<span class="lineNum"> 638 </span> : : static int -<span class="lineNum"> 639 </span> :<span class="lineNoCov"> 0 : expand_acc_string_list(acc_string_list_t **stlist, char *stlist_str)</span> -<span class="lineNum"> 640 </span> : : { -<span class="lineNum"> 641 </span> : : char *ndx, *start; -<span class="lineNum"> 642 </span> :<span class="lineNoCov"> 0 : char buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 643 </span> : : -<span class="lineNum"> 644 </span> :<span class="lineNoCov"> 0 : start = stlist_str;</span> -<span class="lineNum"> 645 </span> : : -<span class="lineNum"> 646 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(ndx = start; *ndx; ndx++)</span> -<span class="lineNum"> 647 </span> : : { -<span class="lineNum"> 648 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*ndx == ',')</span> -<span class="lineNum"> 649 </span> : : { -<span class="lineNum"> 650 </span> : : /* Skip over any leading whitespace. -<span class="lineNum"> 651 </span> : : */ -<span class="lineNum"> 652 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(isspace(*start))</span> -<span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : start++;</span> -<span class="lineNum"> 654 </span> : : -<span class="lineNum"> 655 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(((ndx-start)+1) &gt;= MAX_LINE_LEN)</span> -<span class="lineNum"> 656 </span> : : return FATAL_ERR; -<span class="lineNum"> 657 </span> : : -<span class="lineNum"> 658 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 659 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_string_list_ent(stlist, buf) != SUCCESS)</span> -<span class="lineNum"> 660 </span> : : return FATAL_ERR; -<span class="lineNum"> 661 </span> : : -<span class="lineNum"> 662 </span> :<span class="lineNoCov"> 0 : start = ndx+1;</span> -<span class="lineNum"> 663 </span> : : } -<span class="lineNum"> 664 </span> : : } -<span class="lineNum"> 665 </span> : : -<span class="lineNum"> 666 </span> : : /* Skip over any leading whitespace (once again for the last in the list). -<span class="lineNum"> 667 </span> : : */ -<span class="lineNum"> 668 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(isspace(*start))</span> -<span class="lineNum"> 669 </span> :<span class="lineNoCov"> 0 : start++;</span> -<span class="lineNum"> 670 </span> : : -<span class="lineNum"> 671 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(((ndx-start)+1) &gt;= MAX_LINE_LEN)</span> -<span class="lineNum"> 672 </span> : : return FATAL_ERR; -<span class="lineNum"> 673 </span> : : -<span class="lineNum"> 674 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 675 </span> : : -<span class="lineNum"> 676 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_string_list_ent(stlist, buf) != SUCCESS)</span> -<span class="lineNum"> 677 </span> : : return FATAL_ERR; -<span class="lineNum"> 678 </span> : : -<span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : return SUCCESS;</span> -<span class="lineNum"> 680 </span> : : } -<span class="lineNum"> 681 </span> : : -<span class="lineNum"> 682 </span> : : /* Free the acc source_list -<a name="683"><span class="lineNum"> 683 </span> : : */</a> -<span class="lineNum"> 684 </span> : : static void -<span class="lineNum"> 685 </span> :<span class="lineCov"> 23117 : free_acc_int_list(acc_int_list_t *sle)</span> -<span class="lineNum"> 686 </span> : : { -<span class="lineNum"> 687 </span> : : acc_int_list_t *last_sle; -<span class="lineNum"> 688 </span> : : -<span class="lineNum"> 689 </span> [<span class="branchCov" title="Branch 0 was taken 18698 times"> + </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 41815 : while(sle != NULL)</span> -<span class="lineNum"> 690 </span> : : { -<span class="lineNum"> 691 </span> :<span class="lineCov"> 18698 : last_sle = sle;</span> -<span class="lineNum"> 692 </span> :<span class="lineCov"> 18698 : sle = last_sle-&gt;next;</span> -<span class="lineNum"> 693 </span> : : -<span class="lineNum"> 694 </span> :<span class="lineCov"> 18698 : free(last_sle);</span> -<span class="lineNum"> 695 </span> : : } -<span class="lineNum"> 696 </span> :<span class="lineCov"> 23117 : }</span> -<span class="lineNum"> 697 </span> : : -<span class="lineNum"> 698 </span> : : /* Free a port_list -<a name="699"><span class="lineNum"> 699 </span> : : */</a> -<span class="lineNum"> 700 </span> : : void -<span class="lineNum"> 701 </span> :<span class="lineCov"> 1761 : free_acc_port_list(acc_port_list_t *ple)</span> -<span class="lineNum"> 702 </span> : : { -<span class="lineNum"> 703 </span> : : acc_port_list_t *last_ple; -<span class="lineNum"> 704 </span> : : -<span class="lineNum"> 705 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1761 times"> + </span>]:<span class="lineCov"> 1761 : while(ple != NULL)</span> -<span class="lineNum"> 706 </span> : : { -<span class="lineNum"> 707 </span> :<span class="lineNoCov"> 0 : last_ple = ple;</span> -<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : ple = last_ple-&gt;next;</span> -<span class="lineNum"> 709 </span> : : -<span class="lineNum"> 710 </span> :<span class="lineNoCov"> 0 : free(last_ple);</span> -<span class="lineNum"> 711 </span> : : } -<span class="lineNum"> 712 </span> :<span class="lineCov"> 1761 : }</span> -<span class="lineNum"> 713 </span> : : -<span class="lineNum"> 714 </span> : : /* Free a string_list -<a name="715"><span class="lineNum"> 715 </span> : : */</a> -<span class="lineNum"> 716 </span> : : static void -<span class="lineNum"> 717 </span> :<span class="lineNoCov"> 0 : free_acc_string_list(acc_string_list_t *stl)</span> -<span class="lineNum"> 718 </span> : : { -<span class="lineNum"> 719 </span> : : acc_string_list_t *last_stl; -<span class="lineNum"> 720 </span> : : -<span class="lineNum"> 721 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(stl != NULL)</span> -<span class="lineNum"> 722 </span> : : { -<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : last_stl = stl;</span> -<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : stl = last_stl-&gt;next;</span> -<span class="lineNum"> 725 </span> : : -<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : free(last_stl-&gt;str);</span> -<span class="lineNum"> 727 </span> :<span class="lineNoCov"> 0 : free(last_stl);</span> -<span class="lineNum"> 728 </span> : : } -<span class="lineNum"> 729 </span> :<span class="lineNoCov"> 0 : }</span> -<a name="730"><span class="lineNum"> 730 </span> : : </a> -<span class="lineNum"> 731 </span> : : static void -<span class="lineNum"> 732 </span> :<span class="lineCov"> 24742 : zero_buf_wrapper(char *buf, int len)</span> -<span class="lineNum"> 733 </span> : : { -<span class="lineNum"> 734 </span> : : -<span class="lineNum"> 735 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 24742 times"> + </span>]:<span class="lineCov"> 24742 : if(zero_buf(buf, len) != FKO_SUCCESS)</span> -<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 737 </span> : : &quot;[*] Could not zero out sensitive data buffer.&quot;); -<span class="lineNum"> 738 </span> : : -<span class="lineNum"> 739 </span> :<span class="lineCov"> 24742 : return;</span> -<span class="lineNum"> 740 </span> : : } -<span class="lineNum"> 741 </span> : : -<span class="lineNum"> 742 </span> : : /* Free any allocated content of an access stanza. -<span class="lineNum"> 743 </span> : : * -<span class="lineNum"> 744 </span> : : * NOTE: If a new access.conf parameter is created, and it is a string -<span class="lineNum"> 745 </span> : : * value, it also needs to be added to the list of items to check -<span class="lineNum"> 746 </span> : : * and free below. -<a name="747"><span class="lineNum"> 747 </span> : : */</a> -<span class="lineNum"> 748 </span> : : static void -<span class="lineNum"> 749 </span> :<span class="lineCov"> 23117 : free_acc_stanza_data(acc_stanza_t *acc)</span> -<span class="lineNum"> 750 </span> : : { -<span class="lineNum"> 751 </span> : : -<span class="lineNum"> 752 </span> [<span class="branchCov" title="Branch 0 was taken 23117 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 23117 : if(acc-&gt;source != NULL)</span> -<span class="lineNum"> 753 </span> : : { -<span class="lineNum"> 754 </span> :<span class="lineCov"> 23117 : free(acc-&gt;source);</span> -<span class="lineNum"> 755 </span> :<span class="lineCov"> 23117 : free_acc_int_list(acc-&gt;source_list);</span> -<span class="lineNum"> 756 </span> : : } -<span class="lineNum"> 757 </span> : : -<span class="lineNum"> 758 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;destination != NULL)</span> -<span class="lineNum"> 759 </span> : : { -<span class="lineNum"> 760 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;destination);</span> -<span class="lineNum"> 761 </span> :<span class="lineNoCov"> 0 : free_acc_int_list(acc-&gt;destination_list);</span> -<span class="lineNum"> 762 </span> : : } -<span class="lineNum"> 763 </span> : : -<span class="lineNum"> 764 </span> [<span class="branchCov" title="Branch 0 was taken 1173 times"> + </span><span class="branchCov" title="Branch 1 was taken 21944 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;open_ports != NULL)</span> -<span class="lineNum"> 765 </span> : : { -<span class="lineNum"> 766 </span> :<span class="lineCov"> 1173 : free(acc-&gt;open_ports);</span> -<span class="lineNum"> 767 </span> :<span class="lineCov"> 1173 : free_acc_port_list(acc-&gt;oport_list);</span> -<span class="lineNum"> 768 </span> : : } -<span class="lineNum"> 769 </span> : : -<span class="lineNum"> 770 </span> [<span class="branchCov" title="Branch 0 was taken 588 times"> + </span><span class="branchCov" title="Branch 1 was taken 22529 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;restrict_ports != NULL)</span> -<span class="lineNum"> 771 </span> : : { -<span class="lineNum"> 772 </span> :<span class="lineCov"> 588 : free(acc-&gt;restrict_ports);</span> -<span class="lineNum"> 773 </span> :<span class="lineCov"> 588 : free_acc_port_list(acc-&gt;rport_list);</span> -<span class="lineNum"> 774 </span> : : } -<span class="lineNum"> 775 </span> : : -<span class="lineNum"> 776 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;force_nat_ip != NULL)</span> -<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;force_nat_ip);</span> -<span class="lineNum"> 778 </span> : : -<span class="lineNum"> 779 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;force_snat_ip != NULL)</span> -<span class="lineNum"> 780 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;force_snat_ip);</span> -<span class="lineNum"> 781 </span> : : -<span class="lineNum"> 782 </span> [<span class="branchCov" title="Branch 0 was taken 23017 times"> + </span><span class="branchCov" title="Branch 1 was taken 100 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;key != NULL)</span> -<span class="lineNum"> 783 </span> : : { -<span class="lineNum"> 784 </span> :<span class="lineCov"> 23017 : zero_buf_wrapper(acc-&gt;key, acc-&gt;key_len);</span> -<span class="lineNum"> 785 </span> :<span class="lineCov"> 23017 : free(acc-&gt;key);</span> -<span class="lineNum"> 786 </span> : : } -<span class="lineNum"> 787 </span> : : -<span class="lineNum"> 788 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;key_base64 != NULL)</span> -<span class="lineNum"> 789 </span> : : { -<span class="lineNum"> 790 </span> :<span class="lineNoCov"> 0 : zero_buf_wrapper(acc-&gt;key_base64, strlen(acc-&gt;key_base64));</span> -<span class="lineNum"> 791 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;key_base64);</span> -<span class="lineNum"> 792 </span> : : } -<span class="lineNum"> 793 </span> : : -<span class="lineNum"> 794 </span> [<span class="branchCov" title="Branch 0 was taken 1725 times"> + </span><span class="branchCov" title="Branch 1 was taken 21392 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;hmac_key != NULL)</span> -<span class="lineNum"> 795 </span> : : { -<span class="lineNum"> 796 </span> :<span class="lineCov"> 1725 : zero_buf_wrapper(acc-&gt;hmac_key, acc-&gt;hmac_key_len);</span> -<span class="lineNum"> 797 </span> :<span class="lineCov"> 1725 : free(acc-&gt;hmac_key);</span> -<span class="lineNum"> 798 </span> : : } -<span class="lineNum"> 799 </span> : : -<span class="lineNum"> 800 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;hmac_key_base64 != NULL)</span> -<span class="lineNum"> 801 </span> : : { -<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : zero_buf_wrapper(acc-&gt;hmac_key_base64, strlen(acc-&gt;hmac_key_base64));</span> -<span class="lineNum"> 803 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;hmac_key_base64);</span> -<span class="lineNum"> 804 </span> : : } -<span class="lineNum"> 805 </span> : : -<span class="lineNum"> 806 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;cmd_exec_user != NULL)</span> -<span class="lineNum"> 807 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;cmd_exec_user);</span> -<span class="lineNum"> 808 </span> : : -<span class="lineNum"> 809 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;cmd_exec_group != NULL)</span> -<span class="lineNum"> 810 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;cmd_exec_group);</span> -<span class="lineNum"> 811 </span> : : -<span class="lineNum"> 812 </span> [<span class="branchCov" title="Branch 0 was taken 391 times"> + </span><span class="branchCov" title="Branch 1 was taken 22726 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;require_username != NULL)</span> -<span class="lineNum"> 813 </span> :<span class="lineCov"> 391 : free(acc-&gt;require_username);</span> -<span class="lineNum"> 814 </span> : : -<span class="lineNum"> 815 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_home_dir != NULL)</span> -<span class="lineNum"> 816 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_home_dir);</span> -<span class="lineNum"> 817 </span> : : -<span class="lineNum"> 818 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_exe != NULL)</span> -<span class="lineNum"> 819 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_exe);</span> -<span class="lineNum"> 820 </span> : : -<span class="lineNum"> 821 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_decrypt_id != NULL)</span> -<span class="lineNum"> 822 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_decrypt_id);</span> -<span class="lineNum"> 823 </span> : : -<span class="lineNum"> 824 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_decrypt_pw != NULL)</span> -<span class="lineNum"> 825 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_decrypt_pw);</span> -<span class="lineNum"> 826 </span> : : -<span class="lineNum"> 827 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_remote_id != NULL)</span> -<span class="lineNum"> 828 </span> : : { -<span class="lineNum"> 829 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_remote_id);</span> -<span class="lineNum"> 830 </span> :<span class="lineNoCov"> 0 : free_acc_string_list(acc-&gt;gpg_remote_id_list);</span> -<span class="lineNum"> 831 </span> : : } -<span class="lineNum"> 832 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(acc-&gt;gpg_remote_fpr != NULL)</span> -<span class="lineNum"> 833 </span> : : { -<span class="lineNum"> 834 </span> :<span class="lineNoCov"> 0 : free(acc-&gt;gpg_remote_fpr);</span> -<span class="lineNum"> 835 </span> :<span class="lineNoCov"> 0 : free_acc_string_list(acc-&gt;gpg_remote_fpr_list);</span> -<span class="lineNum"> 836 </span> : : } -<span class="lineNum"> 837 </span> :<span class="lineCov"> 23117 : return;</span> -<span class="lineNum"> 838 </span> : : } -<span class="lineNum"> 839 </span> : : -<span class="lineNum"> 840 </span> : : /* Expand any access entries that may be multi-value. -<a name="841"><span class="lineNum"> 841 </span> : : */</a> -<span class="lineNum"> 842 </span> : : static void -<span class="lineNum"> 843 </span> :<span class="lineCov"> 485 : expand_acc_ent_lists(fko_srv_options_t *opts)</span> -<span class="lineNum"> 844 </span> : : { -<span class="lineNum"> 845 </span> :<span class="lineCov"> 485 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> -<span class="lineNum"> 846 </span> : : -<span class="lineNum"> 847 </span> : : /* We need to do this for each stanza. -<span class="lineNum"> 848 </span> : : */ -<span class="lineNum"> 849 </span> [<span class="branchCov" title="Branch 0 was taken 17811 times"> + </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 18060 : while(acc)</span> -<span class="lineNum"> 850 </span> : : { -<span class="lineNum"> 851 </span> : : /* Expand the source string to 32-bit integer IP + masks for each entry. -<span class="lineNum"> 852 </span> : : */ -<span class="lineNum"> 853 </span> [<span class="branchCov" title="Branch 1 was taken 153 times"> + </span><span class="branchCov" title="Branch 2 was taken 17658 times"> + </span>]:<span class="lineCov"> 17811 : if(expand_acc_int_list(&amp;(acc-&gt;source_list), acc-&gt;source) == 0)</span> -<span class="lineNum"> 854 </span> : : { -<span class="lineNum"> 855 </span> :<span class="lineCov"> 153 : log_msg(LOG_ERR, &quot;[*] Fatal invalid SOURCE in access stanza&quot;);</span> -<span class="lineNum"> 856 </span> :<span class="lineCov"> 153 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 857 </span> : : } -<span class="lineNum"> 858 </span> : : -<span class="lineNum"> 859 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 17658 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 17658 : if(acc-&gt;destination != NULL &amp;&amp; strlen(acc-&gt;destination))</span> -<span class="lineNum"> 860 </span> : : { -<span class="lineNum"> 861 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_int_list(&amp;(acc-&gt;destination_list), acc-&gt;destination) == 0)</span> -<span class="lineNum"> 862 </span> : : { -<span class="lineNum"> 863 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal invalid DESTINATION in access stanza&quot;);</span> -<span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 865 </span> : : } -<span class="lineNum"> 866 </span> : : } -<span class="lineNum"> 867 </span> : : -<span class="lineNum"> 868 </span> : : /* Now expand the open_ports string. -<span class="lineNum"> 869 </span> : : */ -<span class="lineNum"> 870 </span>[<span class="branchCov" title="Branch 0 was taken 67 times"> + </span><span class="branchCov" title="Branch 1 was taken 17591 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 17658 : if(acc-&gt;open_ports != NULL &amp;&amp; strlen(acc-&gt;open_ports))</span> -<span class="lineNum"> 871 </span> : : { -<span class="lineNum"> 872 </span> [<span class="branchCov" title="Branch 1 was taken 67 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 67 : if(expand_acc_port_list(&amp;(acc-&gt;oport_list), acc-&gt;open_ports) == 0)</span> -<span class="lineNum"> 873 </span> : : { -<span class="lineNum"> 874 </span> :<span class="lineCov"> 67 : log_msg(LOG_ERR, &quot;[*] Fatal invalid OPEN_PORTS in access stanza&quot;);</span> -<span class="lineNum"> 875 </span> :<span class="lineCov"> 67 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 876 </span> : : } -<span class="lineNum"> 877 </span> : : } -<span class="lineNum"> 878 </span> : : -<span class="lineNum"> 879 </span>[<span class="branchCov" title="Branch 0 was taken 16 times"> + </span><span class="branchCov" title="Branch 1 was taken 17575 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 16 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 17591 : if(acc-&gt;restrict_ports != NULL &amp;&amp; strlen(acc-&gt;restrict_ports))</span> -<span class="lineNum"> 880 </span> : : { -<span class="lineNum"> 881 </span> [<span class="branchCov" title="Branch 1 was taken 16 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 16 : if(expand_acc_port_list(&amp;(acc-&gt;rport_list), acc-&gt;restrict_ports) == 0)</span> -<span class="lineNum"> 882 </span> : : { -<span class="lineNum"> 883 </span> :<span class="lineCov"> 16 : log_msg(LOG_ERR, &quot;[*] Fatal invalid RESTRICT_PORTS in access stanza&quot;);</span> -<span class="lineNum"> 884 </span> :<span class="lineCov"> 16 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 885 </span> : : } -<span class="lineNum"> 886 </span> : : } -<span class="lineNum"> 887 </span> : : -<span class="lineNum"> 888 </span> : : /* Expand the GPG_REMOTE_ID string. -<span class="lineNum"> 889 </span> : : */ -<span class="lineNum"> 890 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 17575 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 17575 : if(acc-&gt;gpg_remote_id != NULL &amp;&amp; strlen(acc-&gt;gpg_remote_id))</span> -<span class="lineNum"> 891 </span> : : { -<span class="lineNum"> 892 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_string_list(&amp;(acc-&gt;gpg_remote_id_list),</span> -<span class="lineNum"> 893 </span> : : acc-&gt;gpg_remote_id) != SUCCESS) -<span class="lineNum"> 894 </span> : : { -<span class="lineNum"> 895 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal invalid GPG_REMOTE_ID list in access stanza&quot;);</span> -<span class="lineNum"> 896 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 897 </span> : : } -<span class="lineNum"> 898 </span> : : } -<span class="lineNum"> 899 </span> : : -<span class="lineNum"> 900 </span> : : /* Expand the GPG_FINGERPRINT_ID string. -<span class="lineNum"> 901 </span> : : */ -<span class="lineNum"> 902 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 17575 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 17575 : if(acc-&gt;gpg_remote_fpr != NULL &amp;&amp; strlen(acc-&gt;gpg_remote_fpr))</span> -<span class="lineNum"> 903 </span> : : { -<span class="lineNum"> 904 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_string_list(&amp;(acc-&gt;gpg_remote_fpr_list),</span> -<span class="lineNum"> 905 </span> : : acc-&gt;gpg_remote_fpr) != SUCCESS) -<span class="lineNum"> 906 </span> : : { -<span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal invalid GPG_FINGERPRINT_ID list in access stanza&quot;);</span> -<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 909 </span> : : } -<span class="lineNum"> 910 </span> : : } -<span class="lineNum"> 911 </span> : : -<span class="lineNum"> 912 </span> :<span class="lineCov"> 17575 : acc = acc-&gt;next;</span> -<span class="lineNum"> 913 </span> : : } -<span class="lineNum"> 914 </span> :<span class="lineCov"> 249 : return;</span> -<span class="lineNum"> 915 </span> : : } -<a name="916"><span class="lineNum"> 916 </span> : : </a> -<span class="lineNum"> 917 </span> : : void -<span class="lineNum"> 918 </span> :<span class="lineCov"> 2609 : free_acc_stanzas(fko_srv_options_t *opts)</span> -<span class="lineNum"> 919 </span> : : { -<span class="lineNum"> 920 </span> : : acc_stanza_t *acc, *last_acc; -<span class="lineNum"> 921 </span> : : -<span class="lineNum"> 922 </span> : : /* Free any resources first (in case of reconfig). Assume non-NULL -<span class="lineNum"> 923 </span> : : * entry needs to be freed. -<span class="lineNum"> 924 </span> : : */ -<span class="lineNum"> 925 </span> :<span class="lineCov"> 2609 : acc = opts-&gt;acc_stanzas;</span> -<span class="lineNum"> 926 </span> : : -<span class="lineNum"> 927 </span> [<span class="branchCov" title="Branch 0 was taken 23117 times"> + </span><span class="branchCov" title="Branch 1 was taken 2609 times"> + </span>]:<span class="lineCov"> 25726 : while(acc != NULL)</span> -<span class="lineNum"> 928 </span> : : { -<span class="lineNum"> 929 </span> :<span class="lineCov"> 23117 : last_acc = acc;</span> -<span class="lineNum"> 930 </span> :<span class="lineCov"> 23117 : acc = last_acc-&gt;next;</span> -<span class="lineNum"> 931 </span> : : -<span class="lineNum"> 932 </span> :<span class="lineCov"> 23117 : free_acc_stanza_data(last_acc);</span> -<span class="lineNum"> 933 </span> :<span class="lineCov"> 23117 : free(last_acc);</span> -<span class="lineNum"> 934 </span> : : } -<span class="lineNum"> 935 </span> : : -<span class="lineNum"> 936 </span> :<span class="lineCov"> 2609 : return;</span> -<span class="lineNum"> 937 </span> : : } -<span class="lineNum"> 938 </span> : : -<span class="lineNum"> 939 </span> : : /* Wrapper for free_acc_stanzas(), we may put additional initialization -<span class="lineNum"> 940 </span> : : * code here. -<a name="941"><span class="lineNum"> 941 </span> : : */</a> -<span class="lineNum"> 942 </span> : : static void -<span class="lineNum"> 943 </span> :<span class="lineCov"> 795 : acc_stanza_init(fko_srv_options_t *opts)</span> -<span class="lineNum"> 944 </span> : : { -<span class="lineNum"> 945 </span> : : /* Free any resources first (in case of reconfig). Assume non-NULL -<span class="lineNum"> 946 </span> : : * entry needs to be freed. -<span class="lineNum"> 947 </span> : : */ -<span class="lineNum"> 948 </span> :<span class="lineCov"> 795 : free_acc_stanzas(opts);</span> -<span class="lineNum"> 949 </span> : : -<span class="lineNum"> 950 </span> :<span class="lineCov"> 795 : return;</span> -<span class="lineNum"> 951 </span> : : } -<span class="lineNum"> 952 </span> : : -<span class="lineNum"> 953 </span> : : /* Add a new stanza bay allocating the required memory at the required -<span class="lineNum"> 954 </span> : : * location, yada-yada-yada. -<a name="955"><span class="lineNum"> 955 </span> : : */</a> -<span class="lineNum"> 956 </span> : : static acc_stanza_t* -<span class="lineNum"> 957 </span> :<span class="lineCov"> 23117 : acc_stanza_add(fko_srv_options_t *opts)</span> -<span class="lineNum"> 958 </span> : : { -<span class="lineNum"> 959 </span> :<span class="lineCov"> 23117 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> -<span class="lineNum"> 960 </span> :<span class="lineCov"> 23117 : acc_stanza_t *new_acc = calloc(1, sizeof(acc_stanza_t));</span> -<span class="lineNum"> 961 </span> : : acc_stanza_t *last_acc; -<span class="lineNum"> 962 </span> : : -<span class="lineNum"> 963 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(new_acc == NULL)</span> -<span class="lineNum"> 964 </span> : : { -<span class="lineNum"> 965 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 966 </span> : : &quot;[*] Fatal memory allocation error adding access stanza&quot; -<span class="lineNum"> 967 </span> : : ); -<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 969 </span> : : } -<span class="lineNum"> 970 </span> : : -<span class="lineNum"> 971 </span> : : /* If this is not the first acc entry, we walk our acc pointer to the -<span class="lineNum"> 972 </span> : : * end of the existing list. -<span class="lineNum"> 973 </span> : : */ -<span class="lineNum"> 974 </span> [<span class="branchCov" title="Branch 0 was taken 772 times"> + </span><span class="branchCov" title="Branch 1 was taken 22345 times"> + </span>]:<span class="lineCov"> 23117 : if(acc == NULL)</span> -<span class="lineNum"> 975 </span> : : { -<span class="lineNum"> 976 </span> :<span class="lineCov"> 23117 : opts-&gt;acc_stanzas = new_acc;</span> -<span class="lineNum"> 977 </span> : : } -<span class="lineNum"> 978 </span> : : else -<span class="lineNum"> 979 </span> : : { -<span class="lineNum"> 980 </span> : : do { -<span class="lineNum"> 981 </span> :<span class="lineCov"> 1761178 : last_acc = acc;</span> -<span class="lineNum"> 982 </span> [<span class="branchCov" title="Branch 0 was taken 1738833 times"> + </span><span class="branchCov" title="Branch 1 was taken 22345 times"> + </span>]:<span class="lineCov"> 1761178 : } while((acc = acc-&gt;next));</span> -<span class="lineNum"> 983 </span> : : -<span class="lineNum"> 984 </span> :<span class="lineCov"> 22345 : last_acc-&gt;next = new_acc;</span> -<span class="lineNum"> 985 </span> : : } -<span class="lineNum"> 986 </span> : : -<span class="lineNum"> 987 </span> :<span class="lineCov"> 23117 : return(new_acc);</span> -<span class="lineNum"> 988 </span> : : } -<span class="lineNum"> 989 </span> : : -<span class="lineNum"> 990 </span> : : /* Scan the access options for entries that have not been set, but need -<span class="lineNum"> 991 </span> : : * a default value. -<a name="992"><span class="lineNum"> 992 </span> : : */</a> -<span class="lineNum"> 993 </span> : : static void -<span class="lineNum"> 994 </span> :<span class="lineCov"> 249 : set_acc_defaults(fko_srv_options_t *opts)</span> -<span class="lineNum"> 995 </span> : : { -<span class="lineNum"> 996 </span> :<span class="lineCov"> 249 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> -<span class="lineNum"> 997 </span> :<span class="lineCov"> 249 : int i=1;</span> -<span class="lineNum"> 998 </span> : : -<span class="lineNum"> 999 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if(!acc)</span> -<span class="lineNum"> 1000 </span> : : return; -<span class="lineNum"> 1001 </span> : : -<span class="lineNum"> 1002 </span> [<span class="branchCov" title="Branch 0 was taken 8355 times"> + </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 8604 : while(acc)</span> -<span class="lineNum"> 1003 </span> : : { -<span class="lineNum"> 1004 </span> : : /* set default fw_access_timeout if necessary -<span class="lineNum"> 1005 </span> : : */ -<span class="lineNum"> 1006 </span> [<span class="branchCov" title="Branch 0 was taken 8124 times"> + </span><span class="branchCov" title="Branch 1 was taken 231 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;fw_access_timeout &lt; 1)</span> -<span class="lineNum"> 1007 </span> :<span class="lineCov"> 8124 : acc-&gt;fw_access_timeout = DEF_FW_ACCESS_TIMEOUT;</span> -<span class="lineNum"> 1008 </span> : : -<span class="lineNum"> 1009 </span> : : /* set default gpg keyring path if necessary -<span class="lineNum"> 1010 </span> : : */ -<span class="lineNum"> 1011 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8355 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;gpg_decrypt_pw != NULL)</span> -<span class="lineNum"> 1012 </span> : : { -<span class="lineNum"> 1013 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_home_dir == NULL)</span> -<span class="lineNum"> 1014 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(acc-&gt;gpg_home_dir), opts-&gt;config[CONF_GPG_HOME_DIR]) != SUCCESS)</span> -<span class="lineNum"> 1015 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1016 </span> : : -<span class="lineNum"> 1017 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! acc-&gt;gpg_require_sig)</span> -<span class="lineNum"> 1018 </span> : : { -<span class="lineNum"> 1019 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (acc-&gt;gpg_disable_sig)</span> -<span class="lineNum"> 1020 </span> : : { -<span class="lineNum"> 1021 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 1022 </span> : : &quot;Warning: GPG_REQUIRE_SIG should really be enabled for stanza source: '%s' (#%d)&quot;, -<span class="lineNum"> 1023 </span> : : acc-&gt;source, i -<span class="lineNum"> 1024 </span> : : ); -<span class="lineNum"> 1025 </span> : : } -<span class="lineNum"> 1026 </span> : : else -<span class="lineNum"> 1027 </span> : : { -<span class="lineNum"> 1028 </span> : : /* Make this the default unless explicitly disabled -<span class="lineNum"> 1029 </span> : : */ -<span class="lineNum"> 1030 </span> :<span class="lineNoCov"> 0 : acc-&gt;gpg_require_sig = 1;</span> -<span class="lineNum"> 1031 </span> : : } -<span class="lineNum"> 1032 </span> : : } -<span class="lineNum"> 1033 </span> : : else -<span class="lineNum"> 1034 </span> : : { -<span class="lineNum"> 1035 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (acc-&gt;gpg_disable_sig)</span> -<span class="lineNum"> 1036 </span> : : { -<span class="lineNum"> 1037 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 1038 </span> : : &quot;Warning: GPG_REQUIRE_SIG and GPG_DISABLE_SIG are both set, will check sigs (stanza source: '%s' #%d)&quot;, -<span class="lineNum"> 1039 </span> : : acc-&gt;source, i -<span class="lineNum"> 1040 </span> : : ); -<span class="lineNum"> 1041 </span> : : } -<span class="lineNum"> 1042 </span> : : } -<span class="lineNum"> 1043 </span> : : -<span class="lineNum"> 1044 </span> : : /* If signature checking is enabled, make sure we either have sig ID's or -<span class="lineNum"> 1045 </span> : : * fingerprint ID's to check -<span class="lineNum"> 1046 </span> : : */ -<span class="lineNum"> 1047 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! acc-&gt;gpg_disable_sig</span> -<span class="lineNum"> 1048 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (acc-&gt;gpg_remote_id == NULL &amp;&amp; acc-&gt;gpg_remote_fpr == NULL))</span> -<span class="lineNum"> 1049 </span> : : { -<span class="lineNum"> 1050 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 1051 </span> : : &quot;Warning: Must have either sig ID's or fingerprints to check via GPG_REMOTE_ID or GPG_FINGERPRINT_ID (stanza source: '%s' #%d)&quot;, -<span class="lineNum"> 1052 </span> : : acc-&gt;source, i -<span class="lineNum"> 1053 </span> : : ); -<span class="lineNum"> 1054 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1055 </span> : : } -<span class="lineNum"> 1056 </span> : : } -<span class="lineNum"> 1057 </span> : : -<span class="lineNum"> 1058 </span> [<span class="branchCov" title="Branch 0 was taken 8249 times"> + </span><span class="branchCov" title="Branch 1 was taken 106 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;encryption_mode == FKO_ENC_MODE_UNKNOWN)</span> -<span class="lineNum"> 1059 </span> :<span class="lineCov"> 8249 : acc-&gt;encryption_mode = FKO_DEFAULT_ENC_MODE;</span> -<span class="lineNum"> 1060 </span> : : -<span class="lineNum"> 1061 </span> : : /* if we're using an HMAC key and the HMAC digest type was not -<span class="lineNum"> 1062 </span> : : * set for HMAC_DIGEST_TYPE, then assume it's SHA256 -<span class="lineNum"> 1063 </span> : : */ -<span class="lineNum"> 1064 </span> : : -<span class="lineNum"> 1065 </span> [<span class="branchCov" title="Branch 0 was taken 8265 times"> + </span><span class="branchCov" title="Branch 1 was taken 90 times"> + </span>]:<span class="lineCov"> 8355 : if(acc-&gt;hmac_type == FKO_HMAC_UNKNOWN</span> -<span class="lineNum"> 1066 </span>[<span class="branchCov" title="Branch 0 was taken 285 times"> + </span><span class="branchCov" title="Branch 1 was taken 7980 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 285 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 8265 : &amp;&amp; acc-&gt;hmac_key_len &gt; 0 &amp;&amp; acc-&gt;hmac_key != NULL)</span> -<span class="lineNum"> 1067 </span> : : { -<span class="lineNum"> 1068 </span> :<span class="lineCov"> 285 : acc-&gt;hmac_type = FKO_DEFAULT_HMAC_MODE;</span> -<span class="lineNum"> 1069 </span> : : } -<span class="lineNum"> 1070 </span> : : -<span class="lineNum"> 1071 </span> :<span class="lineCov"> 8355 : acc = acc-&gt;next;</span> -<span class="lineNum"> 1072 </span> :<span class="lineCov"> 8355 : i++;</span> -<span class="lineNum"> 1073 </span> : : } -<span class="lineNum"> 1074 </span> : : return; -<span class="lineNum"> 1075 </span> : : } -<span class="lineNum"> 1076 </span> : : -<span class="lineNum"> 1077 </span> : : /* Perform some sanity checks on an acc stanza data. -<a name="1078"><span class="lineNum"> 1078 </span> : : */</a> -<span class="lineNum"> 1079 </span> : : static int -<span class="lineNum"> 1080 </span> :<span class="lineCov"> 22878 : acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t * const acc)</span> -<span class="lineNum"> 1081 </span> : : { -<span class="lineNum"> 1082 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 22878 times"> + </span>]:<span class="lineCov"> 22878 : if(acc == NULL)</span> -<span class="lineNum"> 1083 </span> : : { -<span class="lineNum"> 1084 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1085 </span> : : &quot;[*] acc_data_is_valid() called with NULL acc stanza&quot;); -<span class="lineNum"> 1086 </span> : : return(0); -<span class="lineNum"> 1087 </span> : : } -<span class="lineNum"> 1088 </span> : : -<span class="lineNum"> 1089 </span>[<span class="branchCov" title="Branch 0 was taken 22831 times"> + </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 22831 times"> + </span>]:<span class="lineCov"> 22878 : if(((acc-&gt;key == NULL || acc-&gt;key_len == 0)</span> -<span class="lineNum"> 1090 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 47 : &amp;&amp; ((acc-&gt;gpg_decrypt_pw == NULL || !strlen(acc-&gt;gpg_decrypt_pw))</span> -<span class="lineNum"> 1091 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 47 times"> + </span>]:<span class="lineCov"> 47 : &amp;&amp; acc-&gt;gpg_allow_no_pw == 0))</span> -<span class="lineNum"> 1092 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 22831 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 22831 : || (acc-&gt;use_rijndael == 0 &amp;&amp; acc-&gt;use_gpg == 0 &amp;&amp; acc-&gt;gpg_allow_no_pw == 0))</span> -<span class="lineNum"> 1093 </span> : : { -<span class="lineNum"> 1094 </span> :<span class="lineCov"> 47 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1095 </span> : : &quot;[*] No keys found for access stanza source: '%s'&quot;, acc-&gt;source -<span class="lineNum"> 1096 </span> : : ); -<span class="lineNum"> 1097 </span> : : return(0); -<span class="lineNum"> 1098 </span> : : } -<span class="lineNum"> 1099 </span> : : -<span class="lineNum"> 1100 </span>[<span class="branchCov" title="Branch 0 was taken 22831 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 22831 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 22831 : if(acc-&gt;use_rijndael &amp;&amp; acc-&gt;key != NULL)</span> -<span class="lineNum"> 1101 </span> : : { -<span class="lineNum"> 1102 </span> [<span class="branchCov" title="Branch 0 was taken 591 times"> + </span><span class="branchCov" title="Branch 1 was taken 22240 times"> + </span>]:<span class="lineCov"> 22831 : if((acc-&gt;encryption_mode == FKO_ENC_MODE_CBC_LEGACY_IV)</span> -<span class="lineNum"> 1103 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchCov" title="Branch 1 was taken 520 times"> + </span>]:<span class="lineCov"> 591 : &amp;&amp; (acc-&gt;key_len &gt; 16))</span> -<span class="lineNum"> 1104 </span> : : { -<span class="lineNum"> 1105 </span> :<span class="lineCov"> 71 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 1106 </span> : : &quot;Warning: truncating encryption key in legacy mode to 16 bytes for access stanza source: '%s'&quot;, -<span class="lineNum"> 1107 </span> : : acc-&gt;source -<span class="lineNum"> 1108 </span> : : ); -<span class="lineNum"> 1109 </span> :<span class="lineCov"> 71 : acc-&gt;key_len = 16;</span> -<span class="lineNum"> 1110 </span> : : } -<span class="lineNum"> 1111 </span> : : } -<span class="lineNum"> 1112 </span> : : -<span class="lineNum"> 1113 </span>[<span class="branchCov" title="Branch 0 was taken 1676 times"> + </span><span class="branchCov" title="Branch 1 was taken 21155 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 1676 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 22831 : if((acc-&gt;hmac_key_len) != 0 &amp;&amp; (acc-&gt;hmac_key != NULL))</span> -<span class="lineNum"> 1114 </span> : : { -<span class="lineNum"> 1115 </span>[<span class="branchCov" title="Branch 0 was taken 1676 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 1676 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 1676 : if((acc-&gt;key != NULL) &amp;&amp; (acc-&gt;key_len != 0)</span> -<span class="lineNum"> 1116 </span> [<span class="branchCov" title="Branch 0 was taken 272 times"> + </span><span class="branchCov" title="Branch 1 was taken 1404 times"> + </span>]:<span class="lineCov"> 1676 : &amp;&amp; (acc-&gt;key_len == acc-&gt;hmac_key_len))</span> -<span class="lineNum"> 1117 </span> : : { -<span class="lineNum"> 1118 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 271 times"> + </span>]:<span class="lineCov"> 272 : if(memcmp(acc-&gt;key, acc-&gt;hmac_key, acc-&gt;hmac_key_len) == 0)</span> -<span class="lineNum"> 1119 </span> : : { -<span class="lineNum"> 1120 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1121 </span> : : &quot;[*] The encryption passphrase and HMAC key should not be identical for access stanza source: '%s'&quot;, -<span class="lineNum"> 1122 </span> : : acc-&gt;source -<span class="lineNum"> 1123 </span> : : ); -<span class="lineNum"> 1124 </span> : : return(0); -<span class="lineNum"> 1125 </span> : : } -<span class="lineNum"> 1126 </span> : : } -<span class="lineNum"> 1127 </span> [<span class="branchCov" title="Branch 0 was taken 1404 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1404 : else if((acc-&gt;gpg_allow_no_pw == 0)</span> -<span class="lineNum"> 1128 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1404 times"> + </span>]:<span class="lineCov"> 1404 : &amp;&amp; acc-&gt;gpg_decrypt_pw != NULL</span> -<span class="lineNum"> 1129 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (strlen(acc-&gt;gpg_decrypt_pw) == acc-&gt;hmac_key_len))</span> -<span class="lineNum"> 1130 </span> : : { -<span class="lineNum"> 1131 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(memcmp(acc-&gt;gpg_decrypt_pw, acc-&gt;hmac_key, acc-&gt;hmac_key_len) == 0)</span> -<span class="lineNum"> 1132 </span> : : { -<span class="lineNum"> 1133 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1134 </span> : : &quot;[*] The encryption passphrase and HMAC key should not be identical for access stanza source: '%s'&quot;, -<span class="lineNum"> 1135 </span> : : acc-&gt;source -<span class="lineNum"> 1136 </span> : : ); -<span class="lineNum"> 1137 </span> : : return(0); -<span class="lineNum"> 1138 </span> : : } -<span class="lineNum"> 1139 </span> : : } -<span class="lineNum"> 1140 </span> : : } -<span class="lineNum"> 1141 </span> : : -<span class="lineNum"> 1142 </span> : : #if defined(FIREWALL_FIREWALLD) || defined(FIREWALL_IPTABLES) -<span class="lineNum"> 1143 </span>[<span class="branchCov" title="Branch 0 was taken 22830 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 22830 times"> + </span>]:<span class="lineCov"> 22830 : if((acc-&gt;force_snat == 1 || acc-&gt;force_masquerade == 1)</span> -<span class="lineNum"> 1144 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; acc-&gt;force_nat == 0)</span> -<span class="lineNum"> 1145 </span> : : { -<span class="lineNum"> 1146 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all == 1)</span> -<span class="lineNum"> 1147 </span> : : { -<span class="lineNum"> 1148 </span> :<span class="lineNoCov"> 0 : add_acc_force_nat(opts, acc, &quot;0.0.0.0 0&quot;);</span> -<span class="lineNum"> 1149 </span> : : } -<span class="lineNum"> 1150 </span> : : else -<span class="lineNum"> 1151 </span> : : { -<span class="lineNum"> 1152 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1153 </span> : : &quot;[*] FORCE_SNAT/FORCE_MASQUERADE requires either FORCE_NAT or FORWARD_ALL: '%s'&quot;, -<span class="lineNum"> 1154 </span> : : acc-&gt;source -<span class="lineNum"> 1155 </span> : : ); -<span class="lineNum"> 1156 </span> : : return(0); -<span class="lineNum"> 1157 </span> : : } -<span class="lineNum"> 1158 </span> : : } -<span class="lineNum"> 1159 </span> : : #endif -<span class="lineNum"> 1160 </span> : : -<span class="lineNum"> 1161 </span> [<span class="branchCov" title="Branch 0 was taken 22680 times"> + </span><span class="branchCov" title="Branch 1 was taken 150 times"> + </span>]:<span class="lineCov"> 22830 : if(acc-&gt;require_source_address == 0)</span> -<span class="lineNum"> 1162 </span> : : { -<span class="lineNum"> 1163 </span> :<span class="lineCov"> 22680 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 1164 </span> : : &quot;Warning: REQUIRE_SOURCE_ADDRESS not enabled for access stanza source: '%s'&quot;, -<span class="lineNum"> 1165 </span> : : acc-&gt;source -<span class="lineNum"> 1166 </span> : : ); -<span class="lineNum"> 1167 </span> : : } -<span class="lineNum"> 1168 </span> : : -<span class="lineNum"> 1169 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 22830 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 22830 : if(user_pw != NULL &amp;&amp; acc-&gt;cmd_exec_uid != 0 &amp;&amp; acc-&gt;cmd_exec_gid == 0)</span> -<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] -<span class="lineNum"> 1170 </span> : : { -<span class="lineNum"> 1171 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 1172 </span> : : &quot;Setting gid to group associated with CMD_EXEC_USER '%s' for setgid() execution in stanza source: '%s'&quot;, -<span class="lineNum"> 1173 </span> : : acc-&gt;cmd_exec_user, -<span class="lineNum"> 1174 </span> : : acc-&gt;source -<span class="lineNum"> 1175 </span> : : ); -<span class="lineNum"> 1176 </span> :<span class="lineNoCov"> 0 : acc-&gt;cmd_exec_gid = user_pw-&gt;pw_gid;</span> -<span class="lineNum"> 1177 </span> : : } -<span class="lineNum"> 1178 </span> : : -<span class="lineNum"> 1179 </span> : : return(1); -<span class="lineNum"> 1180 </span> : : } -<span class="lineNum"> 1181 </span> : : -<span class="lineNum"> 1182 </span> : : /* Read and parse the access file, popluating the access data as we go. -<a name="1183"><span class="lineNum"> 1183 </span> : : */</a> -<span class="lineNum"> 1184 </span> : : void -<span class="lineNum"> 1185 </span> :<span class="lineCov"> 795 : parse_access_file(fko_srv_options_t *opts)</span> -<span class="lineNum"> 1186 </span> : : { -<span class="lineNum"> 1187 </span> : : FILE *file_ptr; -<span class="lineNum"> 1188 </span> : : char *ndx; -<span class="lineNum"> 1189 </span> :<span class="lineCov"> 795 : int got_source = 0, is_err;</span> -<span class="lineNum"> 1190 </span> :<span class="lineCov"> 795 : unsigned int num_lines = 0;</span> -<span class="lineNum"> 1191 </span> : : -<span class="lineNum"> 1192 </span> :<span class="lineCov"> 795 : char access_line_buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1193 </span> :<span class="lineCov"> 795 : char var[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1194 </span> :<span class="lineCov"> 795 : char val[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 1195 </span> : : -<span class="lineNum"> 1196 </span> :<span class="lineCov"> 795 : struct passwd *pw = NULL;</span> -<span class="lineNum"> 1197 </span> :<span class="lineCov"> 795 : struct passwd *user_pw = NULL;</span> -<span class="lineNum"> 1198 </span> : : struct stat st; -<span class="lineNum"> 1199 </span> : : -<span class="lineNum"> 1200 </span> :<span class="lineCov"> 795 : acc_stanza_t *curr_acc = NULL;</span> -<span class="lineNum"> 1201 </span> : : -<span class="lineNum"> 1202 </span> : : /* First see if the access file exists. If it doesn't, complain -<span class="lineNum"> 1203 </span> : : * and bail. -<span class="lineNum"> 1204 </span> : : */ -<span class="lineNum"> 1205 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(stat(opts-&gt;config[CONF_ACCESS_FILE], &amp;st) != 0)</span> -<span class="lineNum"> 1206 </span> : : { -<span class="lineNum"> 1207 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Access file: '%s' was not found.&quot;,</span> -<span class="lineNum"> 1208 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1209 </span> : : -<span class="lineNum"> 1210 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1211 </span> : : } -<span class="lineNum"> 1212 </span> : : -<span class="lineNum"> 1213 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(verify_file_perms_ownership(opts-&gt;config[CONF_ACCESS_FILE]) != 1)</span> -<span class="lineNum"> 1214 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1215 </span> : : -<span class="lineNum"> 1216 </span> : : /* A note on security here: Coverity flags the following fopen() as a -<span class="lineNum"> 1217 </span> : : * Time of check time of use (TOCTOU) bug with a low priority due to the -<span class="lineNum"> 1218 </span> : : * previous stat() call above. I.e., the access.conf file on disk could -<span class="lineNum"> 1219 </span> : : * have been changed between the stat() and the fopen() causing a TOCTOU -<span class="lineNum"> 1220 </span> : : * bug. While technically this is true, the return value of fopen() is -<span class="lineNum"> 1221 </span> : : * also checked below so stat() success does not imply we assume fopen() -<span class="lineNum"> 1222 </span> : : * success. Also, we could just remove the stat() and -<span class="lineNum"> 1223 </span> : : * verify_file_perms_ownership() calls above to &quot;fix&quot; the bug, but this -<span class="lineNum"> 1224 </span> : : * would actually make things easier for an attacker that has already -<span class="lineNum"> 1225 </span> : : * compromised the local system since access.conf could be changed to, say, -<span class="lineNum"> 1226 </span> : : * a symbolic link (for which verify_file_perms_ownership() throws a -<span class="lineNum"> 1227 </span> : : * warning), and then there is no race at all before the fopen(). I.e. -<span class="lineNum"> 1228 </span> : : * forcing an attacker to do the race makes things harder for them. -<span class="lineNum"> 1229 </span> : : */ -<span class="lineNum"> 1230 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if ((file_ptr = fopen(opts-&gt;config[CONF_ACCESS_FILE], &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 1231 </span> : : { -<span class="lineNum"> 1232 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not open access file: %s&quot;,</span> -<span class="lineNum"> 1233 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1234 </span> :<span class="lineNoCov"> 0 : perror(NULL);</span> -<span class="lineNum"> 1235 </span> : : -<span class="lineNum"> 1236 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1237 </span> : : } -<span class="lineNum"> 1238 </span> : : -<span class="lineNum"> 1239 </span> : : /* Initialize the access list. -<span class="lineNum"> 1240 </span> : : */ -<span class="lineNum"> 1241 </span> :<span class="lineCov"> 795 : acc_stanza_init(opts);</span> -<span class="lineNum"> 1242 </span> : : -<span class="lineNum"> 1243 </span> : : /* Now walk through access file pulling the access entries into the -<span class="lineNum"> 1244 </span> : : * current stanza. -<span class="lineNum"> 1245 </span> : : */ -<span class="lineNum"> 1246 </span> [<span class="branchCov" title="Branch 0 was taken 109560 times"> + </span><span class="branchCov" title="Branch 1 was taken 514 times"> + </span>]:<span class="lineCov"> 110869 : while ((fgets(access_line_buf, MAX_LINE_LEN, file_ptr)) != NULL)</span> -<span class="lineNum"> 1247 </span> : : { -<span class="lineNum"> 1248 </span> :<span class="lineCov"> 109560 : num_lines++;</span> -<span class="lineNum"> 1249 </span> :<span class="lineCov"> 109560 : access_line_buf[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 1250 </span> : : -<span class="lineNum"> 1251 </span> : : /* Get past comments and empty lines (note: we only look at the -<span class="lineNum"> 1252 </span> : : * first character. -<span class="lineNum"> 1253 </span> : : */ -<span class="lineNum"> 1254 </span>[<span class="branchCov" title="Branch 0 was taken 103639 times"> + </span><span class="branchCov" title="Branch 1 was taken 5921 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 103639 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 109560 : if(IS_EMPTY_LINE(access_line_buf[0]))</span> -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 103631 times"> + </span><span class="branchCov" title="Branch 5 was taken 8 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 2813 times"> + </span><span class="branchCov" title="Branch 7 was taken 100818 times"> + </span>] -<span class="lineNum"> 1255 </span> :<span class="lineCov"> 8742 : continue;</span> -<span class="lineNum"> 1256 </span> : : -<span class="lineNum"> 1257 </span> [<span class="branchCov" title="Branch 0 was taken 124 times"> + </span><span class="branchCov" title="Branch 1 was taken 100694 times"> + </span>]:<span class="lineCov"> 100818 : if(sscanf(access_line_buf, &quot;%s %[^;\n\r]&quot;, var, val) != 2)</span> -<span class="lineNum"> 1258 </span> : : { -<span class="lineNum"> 1259 </span> :<span class="lineCov"> 124 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1260 </span> : : &quot;[*] Invalid access file entry in %s at line %i.\n - '%s'&quot;, -<span class="lineNum"> 1261 </span> : : opts-&gt;config[CONF_ACCESS_FILE], num_lines, access_line_buf -<span class="lineNum"> 1262 </span> : : ); -<span class="lineNum"> 1263 </span> :<span class="lineCov"> 124 : fclose(file_ptr);</span> -<span class="lineNum"> 1264 </span> :<span class="lineCov"> 124 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1265 </span> : : } -<span class="lineNum"> 1266 </span> : : -<span class="lineNum"> 1267 </span> : : /* Remove any colon that may be on the end of the var -<span class="lineNum"> 1268 </span> : : */ -<span class="lineNum"> 1269 </span> [<span class="branchCov" title="Branch 0 was taken 266 times"> + </span><span class="branchCov" title="Branch 1 was taken 100428 times"> + </span>]:<span class="lineCov"> 100694 : if((ndx = strrchr(var, ':')) != NULL)</span> -<span class="lineNum"> 1270 </span> :<span class="lineCov"> 266 : *ndx = '\0';</span> -<span class="lineNum"> 1271 </span> : : -<span class="lineNum"> 1272 </span> : : /* Even though sscanf should automatically add a terminating -<span class="lineNum"> 1273 </span> : : * NULL byte, an assumption is made that the input arrays are -<span class="lineNum"> 1274 </span> : : * big enough, so we'll force a terminating NULL byte regardless -<span class="lineNum"> 1275 </span> : : */ -<span class="lineNum"> 1276 </span> :<span class="lineCov"> 100694 : var[MAX_LINE_LEN-1] = 0x0;</span> -<span class="lineNum"> 1277 </span> :<span class="lineCov"> 100694 : val[MAX_LINE_LEN-1] = 0x0;</span> -<span class="lineNum"> 1278 </span> : : -<span class="lineNum"> 1279 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 100694 times"> + </span>]:<span class="lineCov"> 100694 : if (opts-&gt;verbose &gt; 3)</span> -<span class="lineNum"> 1280 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> -<span class="lineNum"> 1281 </span> : : &quot;ACCESS FILE: %s, LINE: %s\tVar: %s, Val: '%s'&quot;, -<span class="lineNum"> 1282 </span> : : opts-&gt;config[CONF_ACCESS_FILE], access_line_buf, var, val -<span class="lineNum"> 1283 </span> : : ); -<span class="lineNum"> 1284 </span> : : -<span class="lineNum"> 1285 </span> : : /* Process the entry. -<span class="lineNum"> 1286 </span> : : * -<span class="lineNum"> 1287 </span> : : * NOTE: If a new access.conf parameter is created. It also needs -<span class="lineNum"> 1288 </span> : : * to be accounted for in the following if/if else construct. -<span class="lineNum"> 1289 </span> : : */ -<span class="lineNum"> 1290 </span> [<span class="branchCov" title="Branch 0 was taken 23145 times"> + </span><span class="branchCov" title="Branch 1 was taken 77549 times"> + </span>]:<span class="lineCov"> 100694 : if(CONF_VAR_IS(var, &quot;SOURCE&quot;))</span> -<span class="lineNum"> 1291 </span> : : { -<span class="lineNum"> 1292 </span> : : /* If this is not the first stanza, sanity check the previous -<span class="lineNum"> 1293 </span> : : * stanza for the minimum required data. -<span class="lineNum"> 1294 </span> : : */ -<span class="lineNum"> 1295 </span> [<span class="branchCov" title="Branch 0 was taken 22373 times"> + </span><span class="branchCov" title="Branch 1 was taken 772 times"> + </span>]:<span class="lineCov"> 23145 : if(curr_acc != NULL) {</span> -<span class="lineNum"> 1296 </span> [<span class="branchCov" title="Branch 1 was taken 28 times"> + </span><span class="branchCov" title="Branch 2 was taken 22345 times"> + </span>]:<span class="lineCov"> 22373 : if(!acc_data_is_valid(opts, user_pw, curr_acc))</span> -<span class="lineNum"> 1297 </span> : : { -<span class="lineNum"> 1298 </span> :<span class="lineCov"> 28 : log_msg(LOG_ERR, &quot;[*] Data error in access file: '%s'&quot;,</span> -<span class="lineNum"> 1299 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1300 </span> :<span class="lineCov"> 28 : fclose(file_ptr);</span> -<span class="lineNum"> 1301 </span> :<span class="lineCov"> 28 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1302 </span> : : } -<span class="lineNum"> 1303 </span> : : } -<span class="lineNum"> 1304 </span> : : -<span class="lineNum"> 1305 </span> : : /* Start new stanza. -<span class="lineNum"> 1306 </span> : : */ -<span class="lineNum"> 1307 </span> :<span class="lineCov"> 23117 : curr_acc = acc_stanza_add(opts);</span> -<span class="lineNum"> 1308 </span> : : -<span class="lineNum"> 1309 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 23117 times"> + </span>]:<span class="lineCov"> 23117 : if(add_acc_string(&amp;(curr_acc-&gt;source), val) != SUCCESS)</span> -<span class="lineNum"> 1310 </span> : : { -<span class="lineNum"> 1311 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1312 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1313 </span> : : } -<span class="lineNum"> 1314 </span> : : -<span class="lineNum"> 1315 </span> :<span class="lineCov"> 23117 : got_source++;</span> -<span class="lineNum"> 1316 </span> : : } -<span class="lineNum"> 1317 </span> [<span class="branchCov" title="Branch 0 was taken 636 times"> + </span><span class="branchCov" title="Branch 1 was taken 76913 times"> + </span>]:<span class="lineCov"> 77549 : else if (curr_acc == NULL)</span> -<span class="lineNum"> 1318 </span> : : { -<span class="lineNum"> 1319 </span> : : /* The stanza must start with the &quot;SOURCE&quot; variable -<span class="lineNum"> 1320 </span> : : */ -<span class="lineNum"> 1321 </span> :<span class="lineCov"> 636 : continue;</span> -<span class="lineNum"> 1322 </span> : : } -<span class="lineNum"> 1323 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 76913 times"> + </span>]:<span class="lineCov"> 76913 : else if(CONF_VAR_IS(var, &quot;DESTINATION&quot;))</span> -<span class="lineNum"> 1324 </span> : : { -<span class="lineNum"> 1325 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;destination), val) != SUCCESS)</span> -<span class="lineNum"> 1326 </span> : : { -<span class="lineNum"> 1327 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1328 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1329 </span> : : } -<span class="lineNum"> 1330 </span> : : } -<span class="lineNum"> 1331 </span> [<span class="branchCov" title="Branch 0 was taken 1638 times"> + </span><span class="branchCov" title="Branch 1 was taken 75275 times"> + </span>]:<span class="lineCov"> 76913 : else if(CONF_VAR_IS(var, &quot;OPEN_PORTS&quot;))</span> -<span class="lineNum"> 1332 </span> : : { -<span class="lineNum"> 1333 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1638 times"> + </span>]:<span class="lineCov"> 1638 : if(add_acc_string(&amp;(curr_acc-&gt;open_ports), val) != SUCCESS)</span> -<span class="lineNum"> 1334 </span> : : { -<span class="lineNum"> 1335 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1336 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1337 </span> : : } -<span class="lineNum"> 1338 </span> : : } -<span class="lineNum"> 1339 </span> [<span class="branchCov" title="Branch 0 was taken 680 times"> + </span><span class="branchCov" title="Branch 1 was taken 74595 times"> + </span>]:<span class="lineCov"> 75275 : else if(CONF_VAR_IS(var, &quot;RESTRICT_PORTS&quot;))</span> -<span class="lineNum"> 1340 </span> : : { -<span class="lineNum"> 1341 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 680 times"> + </span>]:<span class="lineCov"> 680 : if(add_acc_string(&amp;(curr_acc-&gt;restrict_ports), val) != SUCCESS)</span> -<span class="lineNum"> 1342 </span> : : { -<span class="lineNum"> 1343 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1344 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1345 </span> : : } -<span class="lineNum"> 1346 </span> : : } -<span class="lineNum"> 1347 </span> [<span class="branchCov" title="Branch 0 was taken 30552 times"> + </span><span class="branchCov" title="Branch 1 was taken 44043 times"> + </span>]:<span class="lineCov"> 74595 : else if(CONF_VAR_IS(var, &quot;KEY&quot;))</span> -<span class="lineNum"> 1348 </span> : : { -<span class="lineNum"> 1349 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 30552 times"> + </span>]:<span class="lineCov"> 30552 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> -<span class="lineNum"> 1350 </span> : : { -<span class="lineNum"> 1351 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1352 </span> : : &quot;[*] KEY value is not properly set in stanza source '%s' in access file: '%s'&quot;, -<span class="lineNum"> 1353 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1354 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1355 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1356 </span> : : } -<span class="lineNum"> 1357 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 30552 times"> + </span>]:<span class="lineCov"> 30552 : if(add_acc_string(&amp;(curr_acc-&gt;key), val) != SUCCESS)</span> -<span class="lineNum"> 1358 </span> : : { -<span class="lineNum"> 1359 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1360 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1361 </span> : : } -<span class="lineNum"> 1362 </span> :<span class="lineCov"> 30552 : curr_acc-&gt;key_len = strlen(curr_acc-&gt;key);</span> -<span class="lineNum"> 1363 </span> :<span class="lineCov"> 30552 : add_acc_bool(&amp;(curr_acc-&gt;use_rijndael), &quot;Y&quot;);</span> -<span class="lineNum"> 1364 </span> : : } -<span class="lineNum"> 1365 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 44043 times"> + </span>]:<span class="lineCov"> 44043 : else if(CONF_VAR_IS(var, &quot;KEY_BASE64&quot;))</span> -<span class="lineNum"> 1366 </span> : : { -<span class="lineNum"> 1367 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> -<span class="lineNum"> 1368 </span> : : { -<span class="lineNum"> 1369 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1370 </span> : : &quot;[*] KEY_BASE64 value is not properly set in stanza source '%s' in access file: '%s'&quot;, -<span class="lineNum"> 1371 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1372 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1373 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1374 </span> : : } -<span class="lineNum"> 1375 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) val, strlen(val)))</span> -<span class="lineNum"> 1376 </span> : : { -<span class="lineNum"> 1377 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1378 </span> : : &quot;[*] KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, -<span class="lineNum"> 1379 </span> : : val); -<span class="lineNum"> 1380 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1381 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1382 </span> : : } -<span class="lineNum"> 1383 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;key_base64), val) != SUCCESS)</span> -<span class="lineNum"> 1384 </span> : : { -<span class="lineNum"> 1385 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1386 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1387 </span> : : } -<span class="lineNum"> 1388 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_b64_string(&amp;(curr_acc-&gt;key),</span> -<span class="lineNum"> 1389 </span> :<span class="lineNoCov"> 0 : &amp;(curr_acc-&gt;key_len), curr_acc-&gt;key_base64) != SUCCESS)</span> -<span class="lineNum"> 1390 </span> : : { -<span class="lineNum"> 1391 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1392 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1393 </span> : : } -<span class="lineNum"> 1394 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;use_rijndael), &quot;Y&quot;);</span> -<span class="lineNum"> 1395 </span> : : } -<span class="lineNum"> 1396 </span> : : /* HMAC digest type */ -<span class="lineNum"> 1397 </span> [<span class="branchCov" title="Branch 0 was taken 705 times"> + </span><span class="branchCov" title="Branch 1 was taken 43338 times"> + </span>]:<span class="lineCov"> 44043 : else if(CONF_VAR_IS(var, &quot;HMAC_DIGEST_TYPE&quot;))</span> -<span class="lineNum"> 1398 </span> : : { -<span class="lineNum"> 1399 </span> :<span class="lineCov"> 705 : curr_acc-&gt;hmac_type = hmac_digest_strtoint(val);</span> -<span class="lineNum"> 1400 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 696 times"> + </span>]:<span class="lineCov"> 705 : if(curr_acc-&gt;hmac_type &lt; 0)</span> -<span class="lineNum"> 1401 </span> : : { -<span class="lineNum"> 1402 </span> :<span class="lineCov"> 9 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1403 </span> : : &quot;[*] HMAC_DIGEST_TYPE argument '%s' must be one of {md5,sha1,sha256,sha384,sha512}&quot;, -<span class="lineNum"> 1404 </span> : : val); -<span class="lineNum"> 1405 </span> :<span class="lineCov"> 9 : fclose(file_ptr);</span> -<span class="lineNum"> 1406 </span> :<span class="lineCov"> 9 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1407 </span> : : } -<span class="lineNum"> 1408 </span> : : } -<span class="lineNum"> 1409 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 43338 times"> + </span>]:<span class="lineCov"> 43338 : else if(CONF_VAR_IS(var, &quot;HMAC_KEY_BASE64&quot;))</span> -<span class="lineNum"> 1410 </span> : : { -<span class="lineNum"> 1411 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> -<span class="lineNum"> 1412 </span> : : { -<span class="lineNum"> 1413 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1414 </span> : : &quot;[*] HMAC_KEY_BASE64 value is not properly set in stanza source '%s' in access file: '%s'&quot;, -<span class="lineNum"> 1415 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1416 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1417 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1418 </span> : : } -<span class="lineNum"> 1419 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_base64((unsigned char *) val, strlen(val)))</span> -<span class="lineNum"> 1420 </span> : : { -<span class="lineNum"> 1421 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1422 </span> : : &quot;[*] HMAC_KEY_BASE64 argument '%s' doesn't look like base64-encoded data.&quot;, -<span class="lineNum"> 1423 </span> : : val); -<span class="lineNum"> 1424 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1425 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1426 </span> : : } -<span class="lineNum"> 1427 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;hmac_key_base64), val) != SUCCESS)</span> -<span class="lineNum"> 1428 </span> : : { -<span class="lineNum"> 1429 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1430 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1431 </span> : : } -<span class="lineNum"> 1432 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_b64_string(&amp;(curr_acc-&gt;hmac_key),</span> -<span class="lineNum"> 1433 </span> :<span class="lineNoCov"> 0 : &amp;(curr_acc-&gt;hmac_key_len), curr_acc-&gt;hmac_key_base64) != SUCCESS)</span> -<span class="lineNum"> 1434 </span> : : { -<span class="lineNum"> 1435 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1436 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1437 </span> : : } -<span class="lineNum"> 1438 </span> : : } -<span class="lineNum"> 1439 </span> [<span class="branchCov" title="Branch 0 was taken 2207 times"> + </span><span class="branchCov" title="Branch 1 was taken 41131 times"> + </span>]:<span class="lineCov"> 43338 : else if(CONF_VAR_IS(var, &quot;HMAC_KEY&quot;))</span> -<span class="lineNum"> 1440 </span> : : { -<span class="lineNum"> 1441 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 2207 times"> + </span>]:<span class="lineCov"> 2207 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> -<span class="lineNum"> 1442 </span> : : { -<span class="lineNum"> 1443 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1444 </span> : : &quot;[*] HMAC_KEY value is not properly set in stanza source '%s' in access file: '%s'&quot;, -<span class="lineNum"> 1445 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1446 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1447 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1448 </span> : : } -<span class="lineNum"> 1449 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 2207 times"> + </span>]:<span class="lineCov"> 2207 : if(add_acc_string(&amp;(curr_acc-&gt;hmac_key), val) != SUCCESS)</span> -<span class="lineNum"> 1450 </span> : : { -<span class="lineNum"> 1451 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1452 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1453 </span> : : } -<span class="lineNum"> 1454 </span> :<span class="lineCov"> 2207 : curr_acc-&gt;hmac_key_len = strlen(curr_acc-&gt;hmac_key);</span> -<span class="lineNum"> 1455 </span> : : } -<span class="lineNum"> 1456 </span> [<span class="branchCov" title="Branch 0 was taken 1415 times"> + </span><span class="branchCov" title="Branch 1 was taken 39716 times"> + </span>]:<span class="lineCov"> 41131 : else if(CONF_VAR_IS(var, &quot;FW_ACCESS_TIMEOUT&quot;))</span> -<span class="lineNum"> 1457 </span> : : { -<span class="lineNum"> 1458 </span> :<span class="lineCov"> 1415 : curr_acc-&gt;fw_access_timeout = strtol_wrapper(val, 0,</span> -<span class="lineNum"> 1459 </span> : : RCHK_MAX_FW_TIMEOUT, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 1460 </span> [<span class="branchCov" title="Branch 0 was taken 3 times"> + </span><span class="branchCov" title="Branch 1 was taken 1412 times"> + </span>]:<span class="lineCov"> 1415 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 1461 </span> : : { -<span class="lineNum"> 1462 </span> :<span class="lineCov"> 3 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1463 </span> : : &quot;[*] FW_ACCESS_TIMEOUT value not in range.&quot;); -<span class="lineNum"> 1464 </span> :<span class="lineCov"> 3 : fclose(file_ptr);</span> -<span class="lineNum"> 1465 </span> :<span class="lineCov"> 3 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1466 </span> : : } -<span class="lineNum"> 1467 </span> : : } -<span class="lineNum"> 1468 </span> [<span class="branchCov" title="Branch 0 was taken 799 times"> + </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 39716 : else if(CONF_VAR_IS(var, &quot;ENCRYPTION_MODE&quot;))</span> -<span class="lineNum"> 1469 </span> : : { -<span class="lineNum"> 1470 </span> [<span class="branchCov" title="Branch 1 was taken 9 times"> + </span><span class="branchCov" title="Branch 2 was taken 790 times"> + </span>]:<span class="lineCov"> 799 : if((curr_acc-&gt;encryption_mode = enc_mode_strtoint(val)) &lt; 0)</span> -<span class="lineNum"> 1471 </span> : : { -<span class="lineNum"> 1472 </span> :<span class="lineCov"> 9 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1473 </span> : : &quot;[*] Unrecognized ENCRYPTION_MODE '%s', use {CBC,CTR,legacy,Asymmetric}&quot;, -<span class="lineNum"> 1474 </span> : : val); -<span class="lineNum"> 1475 </span> :<span class="lineCov"> 9 : fclose(file_ptr);</span> -<span class="lineNum"> 1476 </span> :<span class="lineCov"> 9 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1477 </span> : : } -<span class="lineNum"> 1478 </span> : : } -<span class="lineNum"> 1479 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;ENABLE_CMD_EXEC&quot;))</span> -<span class="lineNum"> 1480 </span> : : { -<span class="lineNum"> 1481 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;enable_cmd_exec), val);</span> -<span class="lineNum"> 1482 </span> : : } -<span class="lineNum"> 1483 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;CMD_EXEC_USER&quot;))</span> -<span class="lineNum"> 1484 </span> : : { -<span class="lineNum"> 1485 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;cmd_exec_user), val) != SUCCESS)</span> -<span class="lineNum"> 1486 </span> : : { -<span class="lineNum"> 1487 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1488 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1489 </span> : : } -<span class="lineNum"> 1490 </span> : : -<span class="lineNum"> 1491 </span> :<span class="lineNoCov"> 0 : errno = 0;</span> -<span class="lineNum"> 1492 </span> :<span class="lineNoCov"> 0 : user_pw = pw = getpwnam(val);</span> -<span class="lineNum"> 1493 </span> : : -<span class="lineNum"> 1494 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pw == NULL)</span> -<span class="lineNum"> 1495 </span> : : { -<span class="lineNum"> 1496 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Unable to determine UID for CMD_EXEC_USER: %s.&quot;,</span> -<span class="lineNum"> 1497 </span> :<span class="lineNoCov"> 0 : errno ? strerror(errno) : &quot;Not a user on this system&quot;);</span> -<span class="lineNum"> 1498 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1499 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1500 </span> : : } -<span class="lineNum"> 1501 </span> : : -<span class="lineNum"> 1502 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;cmd_exec_uid = pw-&gt;pw_uid;</span> -<span class="lineNum"> 1503 </span> : : } -<span class="lineNum"> 1504 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38917 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;CMD_EXEC_GROUP&quot;))</span> -<span class="lineNum"> 1505 </span> : : { -<span class="lineNum"> 1506 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;cmd_exec_group), val) != SUCCESS)</span> -<span class="lineNum"> 1507 </span> : : { -<span class="lineNum"> 1508 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1509 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1510 </span> : : } -<span class="lineNum"> 1511 </span> : : -<span class="lineNum"> 1512 </span> :<span class="lineNoCov"> 0 : errno = 0;</span> -<span class="lineNum"> 1513 </span> :<span class="lineNoCov"> 0 : pw = getpwnam(val);</span> -<span class="lineNum"> 1514 </span> : : -<span class="lineNum"> 1515 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pw == NULL)</span> -<span class="lineNum"> 1516 </span> : : { -<span class="lineNum"> 1517 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Unable to determine GID for CMD_EXEC_GROUP: %s.&quot;,</span> -<span class="lineNum"> 1518 </span> :<span class="lineNoCov"> 0 : errno ? strerror(errno) : &quot;Not a group on this system&quot;);</span> -<span class="lineNum"> 1519 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1520 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1521 </span> : : } -<span class="lineNum"> 1522 </span> : : -<span class="lineNum"> 1523 </span> :<span class="lineNoCov"> 0 : curr_acc-&gt;cmd_exec_gid = pw-&gt;pw_gid;</span> -<span class="lineNum"> 1524 </span> : : } -<span class="lineNum"> 1525 </span> [<span class="branchCov" title="Branch 0 was taken 491 times"> + </span><span class="branchCov" title="Branch 1 was taken 38426 times"> + </span>]:<span class="lineCov"> 38917 : else if(CONF_VAR_IS(var, &quot;REQUIRE_USERNAME&quot;))</span> -<span class="lineNum"> 1526 </span> : : { -<span class="lineNum"> 1527 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 491 times"> + </span>]:<span class="lineCov"> 491 : if(add_acc_string(&amp;(curr_acc-&gt;require_username), val) != SUCCESS)</span> -<span class="lineNum"> 1528 </span> : : { -<span class="lineNum"> 1529 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1530 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1531 </span> : : } -<span class="lineNum"> 1532 </span> : : } -<span class="lineNum"> 1533 </span> [<span class="branchCov" title="Branch 0 was taken 268 times"> + </span><span class="branchCov" title="Branch 1 was taken 38158 times"> + </span>]:<span class="lineCov"> 38426 : else if(CONF_VAR_IS(var, &quot;REQUIRE_SOURCE_ADDRESS&quot;))</span> -<span class="lineNum"> 1534 </span> : : { -<span class="lineNum"> 1535 </span> :<span class="lineCov"> 268 : add_acc_bool(&amp;(curr_acc-&gt;require_source_address), val);</span> -<span class="lineNum"> 1536 </span> : : } -<span class="lineNum"> 1537 </span> [<span class="branchCov" title="Branch 0 was taken 77 times"> + </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38158 : else if(CONF_VAR_IS(var, &quot;REQUIRE_SOURCE&quot;)) /* synonym for REQUIRE_SOURCE_ADDRESS */</span> -<span class="lineNum"> 1538 </span> : : { -<span class="lineNum"> 1539 </span> :<span class="lineCov"> 77 : add_acc_bool(&amp;(curr_acc-&gt;require_source_address), val);</span> -<span class="lineNum"> 1540 </span> : : } -<span class="lineNum"> 1541 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_HOME_DIR&quot;))</span> -<span class="lineNum"> 1542 </span> : : { -<span class="lineNum"> 1543 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_valid_dir(val))</span> -<span class="lineNum"> 1544 </span> : : { -<span class="lineNum"> 1545 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_home_dir), val) != SUCCESS)</span> -<span class="lineNum"> 1546 </span> : : { -<span class="lineNum"> 1547 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1548 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1549 </span> : : } -<span class="lineNum"> 1550 </span> : : } -<span class="lineNum"> 1551 </span> : : else -<span class="lineNum"> 1552 </span> : : { -<span class="lineNum"> 1553 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1554 </span> : : &quot;[*] GPG_HOME_DIR directory '%s' stat()/existence problem in stanza source '%s' in access file: '%s'&quot;, -<span class="lineNum"> 1555 </span> : : val, curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1556 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1557 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1558 </span> : : } -<span class="lineNum"> 1559 </span> : : } -<span class="lineNum"> 1560 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_EXE&quot;))</span> -<span class="lineNum"> 1561 </span> : : { -<span class="lineNum"> 1562 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_exe), val) != SUCCESS)</span> -<span class="lineNum"> 1563 </span> : : { -<span class="lineNum"> 1564 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1565 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1566 </span> : : } -<span class="lineNum"> 1567 </span> : : } -<span class="lineNum"> 1568 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_DECRYPT_ID&quot;))</span> -<span class="lineNum"> 1569 </span> : : { -<span class="lineNum"> 1570 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_decrypt_id), val) != SUCCESS)</span> -<span class="lineNum"> 1571 </span> : : { -<span class="lineNum"> 1572 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1573 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1574 </span> : : } -<span class="lineNum"> 1575 </span> : : } -<span class="lineNum"> 1576 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_DECRYPT_PW&quot;))</span> -<span class="lineNum"> 1577 </span> : : { -<span class="lineNum"> 1578 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcasecmp(val, &quot;__CHANGEME__&quot;) == 0)</span> -<span class="lineNum"> 1579 </span> : : { -<span class="lineNum"> 1580 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1581 </span> : : &quot;[*] GPG_DECRYPT_PW value is not properly set in stanza source '%s' in access file: '%s'&quot;, -<span class="lineNum"> 1582 </span> : : curr_acc-&gt;source, opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1583 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1584 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1585 </span> : : } -<span class="lineNum"> 1586 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_decrypt_pw), val) != SUCCESS)</span> -<span class="lineNum"> 1587 </span> : : { -<span class="lineNum"> 1588 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1589 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1590 </span> : : } -<span class="lineNum"> 1591 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;use_gpg), &quot;Y&quot;);</span> -<span class="lineNum"> 1592 </span> : : } -<span class="lineNum"> 1593 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_ALLOW_NO_PW&quot;))</span> -<span class="lineNum"> 1594 </span> : : { -<span class="lineNum"> 1595 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_allow_no_pw), val);</span> -<span class="lineNum"> 1596 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(curr_acc-&gt;gpg_allow_no_pw == 1)</span> -<span class="lineNum"> 1597 </span> : : { -<span class="lineNum"> 1598 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;use_gpg), &quot;Y&quot;);</span> -<span class="lineNum"> 1599 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_decrypt_pw), &quot;&quot;) != SUCCESS)</span> -<span class="lineNum"> 1600 </span> : : { -<span class="lineNum"> 1601 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1602 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1603 </span> : : } -<span class="lineNum"> 1604 </span> : : } -<span class="lineNum"> 1605 </span> : : } -<span class="lineNum"> 1606 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_REQUIRE_SIG&quot;))</span> -<span class="lineNum"> 1607 </span> : : { -<span class="lineNum"> 1608 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_require_sig), val);</span> -<span class="lineNum"> 1609 </span> : : } -<span class="lineNum"> 1610 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_DISABLE_SIG&quot;))</span> -<span class="lineNum"> 1611 </span> : : { -<span class="lineNum"> 1612 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_disable_sig), val);</span> -<span class="lineNum"> 1613 </span> : : } -<span class="lineNum"> 1614 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_IGNORE_SIG_VERIFY_ERROR&quot;))</span> -<span class="lineNum"> 1615 </span> : : { -<span class="lineNum"> 1616 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;gpg_ignore_sig_error), val);</span> -<span class="lineNum"> 1617 </span> : : } -<span class="lineNum"> 1618 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_REMOTE_ID&quot;))</span> -<span class="lineNum"> 1619 </span> : : { -<span class="lineNum"> 1620 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_remote_id), val) != SUCCESS)</span> -<span class="lineNum"> 1621 </span> : : { -<span class="lineNum"> 1622 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1623 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1624 </span> : : } -<span class="lineNum"> 1625 </span> : : } -<span class="lineNum"> 1626 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 38081 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;GPG_FINGERPRINT_ID&quot;))</span> -<span class="lineNum"> 1627 </span> : : { -<span class="lineNum"> 1628 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_string(&amp;(curr_acc-&gt;gpg_remote_fpr), val) != SUCCESS)</span> -<span class="lineNum"> 1629 </span> : : { -<span class="lineNum"> 1630 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1631 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1632 </span> : : } -<span class="lineNum"> 1633 </span> : : } -<span class="lineNum"> 1634 </span> [<span class="branchCov" title="Branch 0 was taken 745 times"> + </span><span class="branchCov" title="Branch 1 was taken 37336 times"> + </span>]:<span class="lineCov"> 38081 : else if(CONF_VAR_IS(var, &quot;ACCESS_EXPIRE&quot;))</span> -<span class="lineNum"> 1635 </span> : : { -<span class="lineNum"> 1636 </span> [<span class="branchCov" title="Branch 1 was taken 10 times"> + </span><span class="branchCov" title="Branch 2 was taken 735 times"> + </span>]:<span class="lineCov"> 745 : if (add_acc_expire_time(opts, &amp;(curr_acc-&gt;access_expire_time), val) != 1)</span> -<span class="lineNum"> 1637 </span> : : { -<span class="lineNum"> 1638 </span> :<span class="lineCov"> 10 : fclose(file_ptr);</span> -<span class="lineNum"> 1639 </span> :<span class="lineCov"> 10 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1640 </span> : : } -<span class="lineNum"> 1641 </span> : : } -<span class="lineNum"> 1642 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37336 times"> + </span>]:<span class="lineCov"> 37336 : else if(CONF_VAR_IS(var, &quot;ACCESS_EXPIRE_EPOCH&quot;))</span> -<span class="lineNum"> 1643 </span> : : { -<span class="lineNum"> 1644 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_acc_expire_time_epoch(opts, &amp;(curr_acc-&gt;access_expire_time), val) != 1)</span> -<span class="lineNum"> 1645 </span> : : { -<span class="lineNum"> 1646 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1647 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1648 </span> : : } -<span class="lineNum"> 1649 </span> : : } -<span class="lineNum"> 1650 </span> [<span class="branchCov" title="Branch 0 was taken 97 times"> + </span><span class="branchCov" title="Branch 1 was taken 37239 times"> + </span>]:<span class="lineCov"> 37336 : else if(CONF_VAR_IS(var, &quot;FORCE_NAT&quot;))</span> -<span class="lineNum"> 1651 </span> : : { -<span class="lineNum"> 1652 </span> : : #if FIREWALL_FIREWALLD -<span class="lineNum"> 1653 </span> [<span class="branchCov" title="Branch 0 was taken 97 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 97 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1) !=0 )</span> -<span class="lineNum"> 1654 </span> : : { -<span class="lineNum"> 1655 </span> :<span class="lineCov"> 97 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1656 </span> : : &quot;[*] FORCE_NAT requires ENABLE_FIREWD_FORWARDING to be enabled in fwknopd.conf&quot;); -<span class="lineNum"> 1657 </span> :<span class="lineCov"> 97 : fclose(file_ptr);</span> -<span class="lineNum"> 1658 </span> :<span class="lineCov"> 97 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1659 </span> : : } -<span class="lineNum"> 1660 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_force_nat(opts, curr_acc, val) != SUCCESS)</span> -<span class="lineNum"> 1661 </span> : : { -<span class="lineNum"> 1662 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1663 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1664 </span> : : } -<span class="lineNum"> 1665 </span> : : #elif FIREWALL_IPTABLES -<span class="lineNum"> 1666 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING], &quot;Y&quot;, 1) !=0 ) -<span class="lineNum"> 1667 </span> : : { -<span class="lineNum"> 1668 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 1669 </span> : : &quot;[*] FORCE_NAT requires ENABLE_IPT_FORWARDING to be enabled in fwknopd.conf&quot;); -<span class="lineNum"> 1670 </span> : : fclose(file_ptr); -<span class="lineNum"> 1671 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1672 </span> : : } -<span class="lineNum"> 1673 </span> : : if(add_acc_force_nat(opts, curr_acc, val) != SUCCESS) -<span class="lineNum"> 1674 </span> : : { -<span class="lineNum"> 1675 </span> : : fclose(file_ptr); -<span class="lineNum"> 1676 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1677 </span> : : } -<span class="lineNum"> 1678 </span> : : #else -<span class="lineNum"> 1679 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 1680 </span> : : &quot;[*] FORCE_NAT not supported.&quot;); -<span class="lineNum"> 1681 </span> : : fclose(file_ptr); -<span class="lineNum"> 1682 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1683 </span> : : #endif -<span class="lineNum"> 1684 </span> : : } -<span class="lineNum"> 1685 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37239 : else if(CONF_VAR_IS(var, &quot;FORCE_SNAT&quot;))</span> -<span class="lineNum"> 1686 </span> : : { -<span class="lineNum"> 1687 </span> : : #if FIREWALL_FIREWALLD -<span class="lineNum"> 1688 </span> [<span class="branchCov" title="Branch 0 was taken 1 time"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1) !=0 )</span> -<span class="lineNum"> 1689 </span> : : { -<span class="lineNum"> 1690 </span> :<span class="lineCov"> 1 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1691 </span> : : &quot;[*] FORCE_SNAT requires ENABLE_FIREWD_FORWARDING to be enabled in fwknopd.conf&quot;); -<span class="lineNum"> 1692 </span> :<span class="lineCov"> 1 : fclose(file_ptr);</span> -<span class="lineNum"> 1693 </span> :<span class="lineCov"> 1 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1694 </span> : : } -<span class="lineNum"> 1695 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_acc_force_snat(opts, curr_acc, val) != SUCCESS)</span> -<span class="lineNum"> 1696 </span> : : { -<span class="lineNum"> 1697 </span> :<span class="lineNoCov"> 0 : fclose(file_ptr);</span> -<span class="lineNum"> 1698 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1699 </span> : : } -<span class="lineNum"> 1700 </span> : : #elif FIREWALL_IPTABLES -<span class="lineNum"> 1701 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING], &quot;Y&quot;, 1) !=0 ) -<span class="lineNum"> 1702 </span> : : { -<span class="lineNum"> 1703 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 1704 </span> : : &quot;[*] FORCE_SNAT requires ENABLE_IPT_FORWARDING to be enabled in fwknopd.conf&quot;); -<span class="lineNum"> 1705 </span> : : fclose(file_ptr); -<span class="lineNum"> 1706 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1707 </span> : : } -<span class="lineNum"> 1708 </span> : : if(add_acc_force_snat(opts, curr_acc, val) != SUCCESS) -<span class="lineNum"> 1709 </span> : : { -<span class="lineNum"> 1710 </span> : : fclose(file_ptr); -<span class="lineNum"> 1711 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1712 </span> : : } -<span class="lineNum"> 1713 </span> : : #else -<span class="lineNum"> 1714 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 1715 </span> : : &quot;[*] FORCE_SNAT not supported.&quot;); -<span class="lineNum"> 1716 </span> : : fclose(file_ptr); -<span class="lineNum"> 1717 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1718 </span> : : #endif -<span class="lineNum"> 1719 </span> : : } -<span class="lineNum"> 1720 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37238 : else if(CONF_VAR_IS(var, &quot;FORCE_MASQUERADE&quot;))</span> -<span class="lineNum"> 1721 </span> : : { -<span class="lineNum"> 1722 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;force_masquerade), val);</span> -<span class="lineNum"> 1723 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;force_snat), val);</span> -<span class="lineNum"> 1724 </span> : : } -<span class="lineNum"> 1725 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37238 : else if(CONF_VAR_IS(var, &quot;DISABLE_DNAT&quot;))</span> -<span class="lineNum"> 1726 </span> : : { -<span class="lineNum"> 1727 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;disable_dnat), val);</span> -<span class="lineNum"> 1728 </span> : : } -<span class="lineNum"> 1729 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 37238 times"> + </span>]:<span class="lineCov"> 37238 : else if(CONF_VAR_IS(var, &quot;FORWARD_ALL&quot;))</span> -<span class="lineNum"> 1730 </span> : : { -<span class="lineNum"> 1731 </span> :<span class="lineNoCov"> 0 : add_acc_bool(&amp;(curr_acc-&gt;forward_all), val);</span> -<span class="lineNum"> 1732 </span> : : } -<span class="lineNum"> 1733 </span> : : else -<span class="lineNum"> 1734 </span> : : { -<span class="lineNum"> 1735 </span> :<span class="lineCov"> 109279 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1736 </span> : : &quot;[*] Ignoring unknown access parameter: '%s' in %s&quot;, -<span class="lineNum"> 1737 </span> : : var, opts-&gt;config[CONF_ACCESS_FILE] -<span class="lineNum"> 1738 </span> : : ); -<span class="lineNum"> 1739 </span> : : } -<span class="lineNum"> 1740 </span> : : } -<span class="lineNum"> 1741 </span> : : -<span class="lineNum"> 1742 </span> :<span class="lineCov"> 514 : fclose(file_ptr);</span> -<span class="lineNum"> 1743 </span> : : -<span class="lineNum"> 1744 </span> : : /* Basic check to ensure that we got at least one SOURCE stanza with -<span class="lineNum"> 1745 </span> : : * a valid KEY defined (valid meaning it has a value that is not -<span class="lineNum"> 1746 </span> : : * &quot;__CHANGEME__&quot;. -<span class="lineNum"> 1747 </span> : : */ -<span class="lineNum"> 1748 </span> [<span class="branchCov" title="Branch 0 was taken 9 times"> + </span><span class="branchCov" title="Branch 1 was taken 505 times"> + </span>]:<span class="lineCov"> 514 : if (got_source == 0)</span> -<span class="lineNum"> 1749 </span> : : { -<span class="lineNum"> 1750 </span> :<span class="lineCov"> 9 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1751 </span> : : &quot;[*] Could not find valid SOURCE stanza in access file: '%s'&quot;, -<span class="lineNum"> 1752 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1753 </span> :<span class="lineCov"> 9 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1754 </span> : : } -<span class="lineNum"> 1755 </span> : : -<span class="lineNum"> 1756 </span> : : /* Sanity check the last stanza -<span class="lineNum"> 1757 </span> : : */ -<span class="lineNum"> 1758 </span> [<span class="branchCov" title="Branch 1 was taken 20 times"> + </span><span class="branchCov" title="Branch 2 was taken 485 times"> + </span>]:<span class="lineCov"> 505 : if(!acc_data_is_valid(opts, user_pw, curr_acc))</span> -<span class="lineNum"> 1759 </span> : : { -<span class="lineNum"> 1760 </span> :<span class="lineCov"> 20 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1761 </span> : : &quot;[*] Data error in access file: '%s'&quot;, -<span class="lineNum"> 1762 </span> : : opts-&gt;config[CONF_ACCESS_FILE]); -<span class="lineNum"> 1763 </span> :<span class="lineCov"> 20 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1764 </span> : : } -<span class="lineNum"> 1765 </span> : : -<span class="lineNum"> 1766 </span> : : /* Expand our the expandable fields into their respective data buckets. -<span class="lineNum"> 1767 </span> : : */ -<span class="lineNum"> 1768 </span> :<span class="lineCov"> 485 : expand_acc_ent_lists(opts);</span> -<span class="lineNum"> 1769 </span> : : -<span class="lineNum"> 1770 </span> : : /* Make sure default values are set where needed. -<span class="lineNum"> 1771 </span> : : */ -<span class="lineNum"> 1772 </span> :<span class="lineCov"> 249 : set_acc_defaults(opts);</span> -<span class="lineNum"> 1773 </span> : : -<span class="lineNum"> 1774 </span> :<span class="lineCov"> 249 : return;</span> -<span class="lineNum"> 1775 </span> : : } -<a name="1776"><span class="lineNum"> 1776 </span> : : </a> -<span class="lineNum"> 1777 </span> : : int -<span class="lineNum"> 1778 </span> :<span class="lineNoCov"> 0 : compare_addr_list(acc_int_list_t *ip_list, const uint32_t ip)</span> -<span class="lineNum"> 1779 </span> : : { -<span class="lineNum"> 1780 </span> :<span class="lineNoCov"> 0 : int match = 0;</span> -<span class="lineNum"> 1781 </span> : : -<span class="lineNum"> 1782 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(ip_list)</span> -<span class="lineNum"> 1783 </span> : : { -<span class="lineNum"> 1784 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((ip &amp; ip_list-&gt;mask) == (ip_list-&gt;maddr &amp; ip_list-&gt;mask))</span> -<span class="lineNum"> 1785 </span> : : { -<span class="lineNum"> 1786 </span> : : match = 1; -<span class="lineNum"> 1787 </span> : : break; -<span class="lineNum"> 1788 </span> : : } -<span class="lineNum"> 1789 </span> : : -<span class="lineNum"> 1790 </span> :<span class="lineNoCov"> 0 : ip_list = ip_list-&gt;next;</span> -<span class="lineNum"> 1791 </span> : : } -<span class="lineNum"> 1792 </span> : : -<span class="lineNum"> 1793 </span> :<span class="lineNoCov"> 0 : return(match);</span> -<span class="lineNum"> 1794 </span> : : } -<span class="lineNum"> 1795 </span> : : -<span class="lineNum"> 1796 </span> : : /* Compare the contents of 2 port lists. Return true on a match. -<span class="lineNum"> 1797 </span> : : * Match depends on the match_any flag. if match_any is 1 then any -<span class="lineNum"> 1798 </span> : : * entry in the incoming data need only match one item to return true. -<span class="lineNum"> 1799 </span> : : * Otherwise all entries in the incoming data must have a corresponding -<span class="lineNum"> 1800 </span> : : * match in the access port_list. -<a name="1801"><span class="lineNum"> 1801 </span> : : */</a> -<span class="lineNum"> 1802 </span> : : static int -<span class="lineNum"> 1803 </span> :<span class="lineNoCov"> 0 : compare_port_list(acc_port_list_t *in, acc_port_list_t *ac, const int match_any)</span> -<span class="lineNum"> 1804 </span> : : { -<span class="lineNum"> 1805 </span> :<span class="lineNoCov"> 0 : int a_cnt = 0;</span> -<span class="lineNum"> 1806 </span> :<span class="lineNoCov"> 0 : int i_cnt = 0;</span> -<span class="lineNum"> 1807 </span> : : -<span class="lineNum"> 1808 </span> : : acc_port_list_t *tlist; -<span class="lineNum"> 1809 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(in)</span> -<span class="lineNum"> 1810 </span> : : { -<span class="lineNum"> 1811 </span> :<span class="lineNoCov"> 0 : i_cnt++;</span> -<span class="lineNum"> 1812 </span> : : -<span class="lineNum"> 1813 </span> :<span class="lineNoCov"> 0 : tlist = ac;</span> -<span class="lineNum"> 1814 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(tlist)</span> -<span class="lineNum"> 1815 </span> : : { -<span class="lineNum"> 1816 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(in-&gt;proto == tlist-&gt;proto &amp;&amp; in-&gt;port == tlist-&gt;port)</span> -<span class="lineNum"> 1817 </span> : : { -<span class="lineNum"> 1818 </span> :<span class="lineNoCov"> 0 : a_cnt++;</span> -<span class="lineNum"> 1819 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(match_any == 1)</span> -<span class="lineNum"> 1820 </span> : : return(1); -<span class="lineNum"> 1821 </span> : : } -<span class="lineNum"> 1822 </span> :<span class="lineNoCov"> 0 : tlist = tlist-&gt;next;</span> -<span class="lineNum"> 1823 </span> : : } -<span class="lineNum"> 1824 </span> :<span class="lineNoCov"> 0 : in = in-&gt;next;</span> -<span class="lineNum"> 1825 </span> : : } -<span class="lineNum"> 1826 </span> : : -<span class="lineNum"> 1827 </span> :<span class="lineNoCov"> 0 : return(i_cnt == a_cnt);</span> -<span class="lineNum"> 1828 </span> : : } -<span class="lineNum"> 1829 </span> : : -<span class="lineNum"> 1830 </span> : : /* Take a proto/port string (or mulitple comma-separated strings) and check -<span class="lineNum"> 1831 </span> : : * them against the list for the given access stanza. -<span class="lineNum"> 1832 </span> : : * -<span class="lineNum"> 1833 </span> : : * Return 1 if we are allowed -<a name="1834"><span class="lineNum"> 1834 </span> : : */</a> -<span class="lineNum"> 1835 </span> : : int -<span class="lineNum"> 1836 </span> :<span class="lineNoCov"> 0 : acc_check_port_access(acc_stanza_t *acc, char *port_str)</span> -<span class="lineNum"> 1837 </span> : : { -<span class="lineNum"> 1838 </span> :<span class="lineNoCov"> 0 : int res = 1, ctr = 0;</span> -<span class="lineNum"> 1839 </span> : : -<span class="lineNum"> 1840 </span> :<span class="lineNoCov"> 0 : char buf[ACCESS_BUF_LEN] = {0};</span> -<span class="lineNum"> 1841 </span> : : char *ndx, *start; -<span class="lineNum"> 1842 </span> : : -<span class="lineNum"> 1843 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *o_pl = acc-&gt;oport_list;</span> -<span class="lineNum"> 1844 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *r_pl = acc-&gt;rport_list;</span> -<span class="lineNum"> 1845 </span> : : -<span class="lineNum"> 1846 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *in_pl = NULL;</span> -<span class="lineNum"> 1847 </span> : : -<span class="lineNum"> 1848 </span> :<span class="lineNoCov"> 0 : start = port_str;</span> -<span class="lineNum"> 1849 </span> : : -<span class="lineNum"> 1850 </span> : : /* Create our own internal port_list from the incoming SPA data -<span class="lineNum"> 1851 </span> : : * for comparison. -<span class="lineNum"> 1852 </span> : : */ -<span class="lineNum"> 1853 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(ndx = start; *ndx != '\0'; ndx++)</span> -<span class="lineNum"> 1854 </span> : : { -<span class="lineNum"> 1855 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*ndx == ',')</span> -<span class="lineNum"> 1856 </span> : : { -<span class="lineNum"> 1857 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((ctr &gt;= ACCESS_BUF_LEN)</span> -<span class="lineNum"> 1858 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || (((ndx-start)+1) &gt;= ACCESS_BUF_LEN))</span> -<span class="lineNum"> 1859 </span> : : { -<span class="lineNum"> 1860 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1861 </span> : : &quot;[*] Unable to create acc_port_list from incoming data: %s&quot;, -<span class="lineNum"> 1862 </span> : : port_str -<span class="lineNum"> 1863 </span> : : ); -<span class="lineNum"> 1864 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> -<span class="lineNum"> 1865 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 1866 </span> : : } -<span class="lineNum"> 1867 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 1868 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_port_list_ent(&amp;in_pl, buf) == 0)</span> -<span class="lineNum"> 1869 </span> : : { -<span class="lineNum"> 1870 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid proto/port string&quot;);</span> -<span class="lineNum"> 1871 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> -<span class="lineNum"> 1872 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 1873 </span> : : } -<span class="lineNum"> 1874 </span> : : -<span class="lineNum"> 1875 </span> :<span class="lineNoCov"> 0 : start = ndx+1;</span> -<span class="lineNum"> 1876 </span> :<span class="lineNoCov"> 0 : ctr = 0;</span> -<span class="lineNum"> 1877 </span> : : } -<span class="lineNum"> 1878 </span> :<span class="lineNoCov"> 0 : ctr++;</span> -<span class="lineNum"> 1879 </span> : : } -<span class="lineNum"> 1880 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((ctr &gt;= ACCESS_BUF_LEN)</span> -<span class="lineNum"> 1881 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || (((ndx-start)+1) &gt;= ACCESS_BUF_LEN))</span> -<span class="lineNum"> 1882 </span> : : { -<span class="lineNum"> 1883 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1884 </span> : : &quot;[*] Unable to create acc_port_list from incoming data: %s&quot;, -<span class="lineNum"> 1885 </span> : : port_str -<span class="lineNum"> 1886 </span> : : ); -<span class="lineNum"> 1887 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> -<span class="lineNum"> 1888 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 1889 </span> : : } -<span class="lineNum"> 1890 </span> :<span class="lineNoCov"> 0 : strlcpy(buf, start, (ndx-start)+1);</span> -<span class="lineNum"> 1891 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(add_port_list_ent(&amp;in_pl, buf) == 0)</span> -<span class="lineNum"> 1892 </span> : : { -<span class="lineNum"> 1893 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid proto/port string&quot;);</span> -<span class="lineNum"> 1894 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> -<span class="lineNum"> 1895 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 1896 </span> : : } -<span class="lineNum"> 1897 </span> : : -<span class="lineNum"> 1898 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(in_pl == NULL)</span> -<span class="lineNum"> 1899 </span> : : { -<span class="lineNum"> 1900 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1901 </span> : : &quot;[*] Unable to create acc_port_list from incoming data: %s&quot;, port_str -<span class="lineNum"> 1902 </span> : : ); -<span class="lineNum"> 1903 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 1904 </span> : : } -<span class="lineNum"> 1905 </span> : : -<span class="lineNum"> 1906 </span> : : /* Start with restricted ports (if any). Any match (even if only one -<span class="lineNum"> 1907 </span> : : * entry) means not allowed. -<span class="lineNum"> 1908 </span> : : */ -<span class="lineNum"> 1909 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((acc-&gt;rport_list != NULL) &amp;&amp; (compare_port_list(in_pl, r_pl, 1)))</span> -<span class="lineNum"> 1910 </span> : : { -<span class="lineNum"> 1911 </span> : : res = 0; -<span class="lineNum"> 1912 </span> : : goto cleanup_and_bail; -<span class="lineNum"> 1913 </span> : : } -<span class="lineNum"> 1914 </span> : : -<span class="lineNum"> 1915 </span> : : /* For open port list, all must match. -<span class="lineNum"> 1916 </span> : : */ -<span class="lineNum"> 1917 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((acc-&gt;oport_list != NULL) &amp;&amp; (!compare_port_list(in_pl, o_pl, 0)))</span> -<span class="lineNum"> 1918 </span> :<span class="lineNoCov"> 0 : res = 0;</span> -<span class="lineNum"> 1919 </span> : : -<span class="lineNum"> 1920 </span> : : cleanup_and_bail: -<span class="lineNum"> 1921 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(in_pl);</span> -<span class="lineNum"> 1922 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 1923 </span> : : } -<span class="lineNum"> 1924 </span> : : -<span class="lineNum"> 1925 </span> : : /* Dump the configuration -<a name="1926"><span class="lineNum"> 1926 </span> : : */</a> -<span class="lineNum"> 1927 </span> : : void -<span class="lineNum"> 1928 </span> :<span class="lineCov"> 249 : dump_access_list(const fko_srv_options_t *opts)</span> -<span class="lineNum"> 1929 </span> : : { -<span class="lineNum"> 1930 </span> :<span class="lineCov"> 249 : int i = 0;</span> -<span class="lineNum"> 1931 </span> : : -<span class="lineNum"> 1932 </span> :<span class="lineCov"> 249 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> -<span class="lineNum"> 1933 </span> : : -<span class="lineNum"> 1934 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;Current fwknopd access settings:\n&quot;);</span> -<span class="lineNum"> 1935 </span> : : -<span class="lineNum"> 1936 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if(!acc)</span> -<span class="lineNum"> 1937 </span> : : { -<span class="lineNum"> 1938 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;\n ** No Access Settings Defined **\n\n&quot;);</span> -<span class="lineNum"> 1939 </span> :<span class="lineCov"> 249 : return;</span> -<span class="lineNum"> 1940 </span> : : } -<span class="lineNum"> 1941 </span> : : -<span class="lineNum"> 1942 </span> [<span class="branchCov" title="Branch 0 was taken 8355 times"> + </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 8604 : while(acc)</span> -<span class="lineNum"> 1943 </span> : : { -<span class="lineNum"> 1944 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 8355 times"> + </span>]:<span class="lineCov"> 8480 : fprintf(stdout,</span> -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span>][<span class="branchCov" title="Branch 6 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 7 was not taken"> - </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 8 was not taken"> - </span><span class="branchCov" title="Branch 9 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchCov" title="Branch 11 was taken 8355 times"> + </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchCov" title="Branch 13 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchCov" title="Branch 15 was taken 8355 times"> + </span>] -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 16 was taken 125 times"> + </span><span class="branchCov" title="Branch 17 was taken 8230 times"> + </span>][<span class="branchCov" title="Branch 19 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span>] -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 21 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span>][<span class="branchCov" title="Branch 23 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 25 was not taken"> - </span><span class="branchCov" title="Branch 26 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 27 was not taken"> - </span><span class="branchCov" title="Branch 28 was taken 8355 times"> + </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 29 was not taken"> - </span><span class="branchCov" title="Branch 30 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchCov" title="Branch 32 was taken 8355 times"> + </span>] -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 33 was taken 8315 times"> + </span><span class="branchCov" title="Branch 34 was taken 40 times"> + </span>][<span class="branchCov" title="Branch 35 was taken 79 times"> + </span><span class="branchCov" title="Branch 36 was taken 8276 times"> + </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 37 was not taken"> - </span><span class="branchCov" title="Branch 38 was taken 8355 times"> + </span>][<span class="branchCov" title="Branch 39 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 40 was not taken"> - </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 41 was not taken"> - </span><span class="branchCov" title="Branch 42 was taken 8355 times"> + </span>][<span class="branchCov" title="Branch 43 was taken 286 times"> + </span><span class="branchCov" title="Branch 44 was taken 8069 times"> + </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 45 was not taken"> - </span><span class="branchCov" title="Branch 46 was taken 8355 times"> + </span>][<span class="branchCov" title="Branch 47 was taken 8355 times"> + </span><span class="branchNoCov" title="Branch 48 was not taken"> - </span>] -<span class="lineNum"> </span>[<span class="branchNoCov" title="Branch 49 was not taken"> - </span><span class="branchCov" title="Branch 50 was taken 8355 times"> + </span>][<span class="branchNoCov" title="Branch 51 was not taken"> - </span><span class="branchCov" title="Branch 52 was taken 8355 times"> + </span>] -<span class="lineNum"> </span> [<span class="branchNoCov" title="Branch 53 was not taken"> - </span><span class="branchCov" title="Branch 54 was taken 8355 times"> + </span>] -<span class="lineNum"> 1945 </span> : : &quot;SOURCE (%i): %s\n&quot; -<span class="lineNum"> 1946 </span> : : &quot;==============================================================\n&quot; -<span class="lineNum"> 1947 </span> : : &quot; DESTINATION: %s\n&quot; -<span class="lineNum"> 1948 </span> : : &quot; OPEN_PORTS: %s\n&quot; -<span class="lineNum"> 1949 </span> : : &quot; RESTRICT_PORTS: %s\n&quot; -<span class="lineNum"> 1950 </span> : : &quot; KEY: %s\n&quot; -<span class="lineNum"> 1951 </span> : : &quot; KEY_BASE64: %s\n&quot; -<span class="lineNum"> 1952 </span> : : &quot; KEY_LEN: %d\n&quot; -<span class="lineNum"> 1953 </span> : : &quot; HMAC_KEY: %s\n&quot; -<span class="lineNum"> 1954 </span> : : &quot; HMAC_KEY_BASE64: %s\n&quot; -<span class="lineNum"> 1955 </span> : : &quot; HMAC_KEY_LEN: %d\n&quot; -<span class="lineNum"> 1956 </span> : : &quot; HMAC_DIGEST_TYPE: %d\n&quot; -<span class="lineNum"> 1957 </span> : : &quot; FW_ACCESS_TIMEOUT: %i\n&quot; -<span class="lineNum"> 1958 </span> : : &quot; ENABLE_CMD_EXEC: %s\n&quot; -<span class="lineNum"> 1959 </span> : : &quot; CMD_EXEC_USER: %s\n&quot; -<span class="lineNum"> 1960 </span> : : &quot; REQUIRE_USERNAME: %s\n&quot; -<span class="lineNum"> 1961 </span> : : &quot; REQUIRE_SOURCE_ADDRESS: %s\n&quot; -<span class="lineNum"> 1962 </span> : : &quot; FORCE_NAT (ip): %s\n&quot; -<span class="lineNum"> 1963 </span> : : &quot; FORCE_NAT (proto): %s\n&quot; -<span class="lineNum"> 1964 </span> : : &quot; FORCE_NAT (port): %d\n&quot; -<span class="lineNum"> 1965 </span> : : &quot; FORCE_SNAT (ip): %s\n&quot; -<span class="lineNum"> 1966 </span> : : &quot; FORCE_MASQUERADE: %s\n&quot; -<span class="lineNum"> 1967 </span> : : &quot; DISABLE_DNAT: %s\n&quot; -<span class="lineNum"> 1968 </span> : : &quot; FORWARD_ALL: %s\n&quot; -<span class="lineNum"> 1969 </span> : : &quot; ACCESS_EXPIRE: %s&quot; /* asctime() adds a newline */ -<span class="lineNum"> 1970 </span> : : &quot; GPG_HOME_DIR: %s\n&quot; -<span class="lineNum"> 1971 </span> : : &quot; GPG_EXE: %s\n&quot; -<span class="lineNum"> 1972 </span> : : &quot; GPG_DECRYPT_ID: %s\n&quot; -<span class="lineNum"> 1973 </span> : : &quot; GPG_DECRYPT_PW: %s\n&quot; -<span class="lineNum"> 1974 </span> : : &quot; GPG_REQUIRE_SIG: %s\n&quot; -<span class="lineNum"> 1975 </span> : : &quot;GPG_IGNORE_SIG_VERIFY_ERROR: %s\n&quot; -<span class="lineNum"> 1976 </span> : : &quot; GPG_REMOTE_ID: %s\n&quot; -<span class="lineNum"> 1977 </span> : : &quot; GPG_FINGERPRINT_ID: %s\n&quot;, -<span class="lineNum"> 1978 </span> : : ++i, -<span class="lineNum"> 1979 </span> : : acc-&gt;source, -<span class="lineNum"> 1980 </span> :<span class="lineCov"> 8355 : (acc-&gt;destination == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;destination,</span> -<span class="lineNum"> 1981 </span> :<span class="lineCov"> 8355 : (acc-&gt;open_ports == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;open_ports,</span> -<span class="lineNum"> 1982 </span> :<span class="lineCov"> 8355 : (acc-&gt;restrict_ports == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;restrict_ports,</span> -<span class="lineNum"> 1983 </span> :<span class="lineCov"> 8355 : (acc-&gt;key == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> -<span class="lineNum"> 1984 </span> :<span class="lineCov"> 8355 : (acc-&gt;key_base64 == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> -<span class="lineNum"> 1985 </span> : : acc-&gt;key_len ? acc-&gt;key_len : 0, -<span class="lineNum"> 1986 </span> :<span class="lineCov"> 8355 : (acc-&gt;hmac_key == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> -<span class="lineNum"> 1987 </span> :<span class="lineCov"> 8355 : (acc-&gt;hmac_key_base64 == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> -<span class="lineNum"> 1988 </span> : : acc-&gt;hmac_key_len ? acc-&gt;hmac_key_len : 0, -<span class="lineNum"> 1989 </span> : : acc-&gt;hmac_type, -<span class="lineNum"> 1990 </span> : : acc-&gt;fw_access_timeout, -<span class="lineNum"> 1991 </span> :<span class="lineCov"> 8355 : acc-&gt;enable_cmd_exec ? &quot;Yes&quot; : &quot;No&quot;,</span> -<span class="lineNum"> 1992 </span> :<span class="lineCov"> 8355 : (acc-&gt;cmd_exec_user == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;cmd_exec_user,</span> -<span class="lineNum"> 1993 </span> :<span class="lineCov"> 8355 : (acc-&gt;require_username == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;require_username,</span> -<span class="lineNum"> 1994 </span> :<span class="lineCov"> 8355 : acc-&gt;require_source_address ? &quot;Yes&quot; : &quot;No&quot;,</span> -<span class="lineNum"> 1995 </span> : : acc-&gt;force_nat ? acc-&gt;force_nat_ip : &quot;&lt;not set&gt;&quot;, -<span class="lineNum"> 1996 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : acc-&gt;force_nat &amp;&amp; acc-&gt;force_nat_proto != NULL ? acc-&gt;force_nat_proto : &quot;&lt;not set&gt;&quot;,</span> -<span class="lineNum"> 1997 </span> :<span class="lineCov"> 8355 : acc-&gt;force_nat ? acc-&gt;force_nat_port : 0,</span> -<span class="lineNum"> 1998 </span> :<span class="lineCov"> 8355 : acc-&gt;force_snat ? acc-&gt;force_snat_ip : &quot;&lt;not set&gt;&quot;,</span> -<span class="lineNum"> 1999 </span> :<span class="lineCov"> 8355 : acc-&gt;force_masquerade ? &quot;Yes&quot; : &quot;No&quot;,</span> -<span class="lineNum"> 2000 </span> :<span class="lineCov"> 8355 : acc-&gt;disable_dnat ? &quot;Yes&quot; : &quot;No&quot;,</span> -<span class="lineNum"> 2001 </span> :<span class="lineCov"> 8355 : acc-&gt;forward_all ? &quot;Yes&quot; : &quot;No&quot;,</span> -<span class="lineNum"> 2002 </span> :<span class="lineCov"> 125 : (acc-&gt;access_expire_time &gt; 0) ? asctime(localtime(&amp;acc-&gt;access_expire_time)) : &quot;&lt;not set&gt;\n&quot;,</span> -<span class="lineNum"> 2003 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_home_dir == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_home_dir,</span> -<span class="lineNum"> 2004 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_exe == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_exe,</span> -<span class="lineNum"> 2005 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_decrypt_id == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_decrypt_id,</span> -<span class="lineNum"> 2006 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_decrypt_pw == NULL) ? &quot;&lt;not set&gt;&quot; : &quot;&lt;see the access.conf file&gt;&quot;,</span> -<span class="lineNum"> 2007 </span> :<span class="lineCov"> 8355 : acc-&gt;gpg_require_sig ? &quot;Yes&quot; : &quot;No&quot;,</span> -<span class="lineNum"> 2008 </span> :<span class="lineCov"> 8355 : acc-&gt;gpg_ignore_sig_error ? &quot;Yes&quot; : &quot;No&quot;,</span> -<span class="lineNum"> 2009 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_remote_id == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_remote_id,</span> -<span class="lineNum"> 2010 </span> :<span class="lineCov"> 8355 : (acc-&gt;gpg_remote_fpr == NULL) ? &quot;&lt;not set&gt;&quot; : acc-&gt;gpg_remote_fpr</span> -<span class="lineNum"> 2011 </span> : : ); -<span class="lineNum"> 2012 </span> : : -<span class="lineNum"> 2013 </span> :<span class="lineCov"> 8355 : fprintf(stdout, &quot;\n&quot;);</span> -<span class="lineNum"> 2014 </span> : : -<span class="lineNum"> 2015 </span> :<span class="lineCov"> 8355 : acc = acc-&gt;next;</span> -<span class="lineNum"> 2016 </span> : : } -<span class="lineNum"> 2017 </span> : : -<span class="lineNum"> 2018 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;\n&quot;);</span> -<span class="lineNum"> 2019 </span> :<span class="lineCov"> 249 : fflush(stdout);</span> -<span class="lineNum"> 2020 </span> : : } -<span class="lineNum"> 2021 </span> : : #ifdef HAVE_C_UNIT_TESTS -<span class="lineNum"> 2022 </span> : : -<span class="lineNum"> 2023 </span> : : DECLARE_UTEST(compare_port_list, &quot;check compare_port_list function&quot;) -<span class="lineNum"> 2024 </span> : : { -<span class="lineNum"> 2025 </span> : : acc_port_list_t *in1_pl = NULL; -<span class="lineNum"> 2026 </span> : : acc_port_list_t *in2_pl = NULL; -<span class="lineNum"> 2027 </span> : : acc_port_list_t *acc_pl = NULL; -<span class="lineNum"> 2028 </span> : : -<span class="lineNum"> 2029 </span> : : /* Match any test */ -<span class="lineNum"> 2030 </span> : : free_acc_port_list(in1_pl); -<span class="lineNum"> 2031 </span> : : free_acc_port_list(acc_pl); -<span class="lineNum"> 2032 </span> : : add_port_list_ent(&amp;in1_pl, &quot;udp/6002&quot;); -<span class="lineNum"> 2033 </span> : : add_port_list_ent(&amp;in2_pl, &quot;udp/6002, udp/6003&quot;); -<span class="lineNum"> 2034 </span> : : add_port_list_ent(&amp;acc_pl, &quot;udp/6002, udp/6003&quot;); -<span class="lineNum"> 2035 </span> : : CU_ASSERT(compare_port_list(in1_pl, acc_pl, 1) == 1); /* Only one match is needed from access port list - 1 */ -<span class="lineNum"> 2036 </span> : : CU_ASSERT(compare_port_list(in2_pl, acc_pl, 1) == 1); /* Only match is needed from access port list - 2 */ -<span class="lineNum"> 2037 </span> : : CU_ASSERT(compare_port_list(in1_pl, acc_pl, 0) == 1); /* All ports must match access port list - 1 */ -<span class="lineNum"> 2038 </span> : : CU_ASSERT(compare_port_list(in2_pl, acc_pl, 0) == 1); /* All ports must match access port list - 2 */ -<span class="lineNum"> 2039 </span> : : CU_ASSERT(compare_port_list(acc_pl, in1_pl, 0) == 0); /* All ports must match in1 port list - 1 */ -<span class="lineNum"> 2040 </span> : : CU_ASSERT(compare_port_list(acc_pl, in2_pl, 0) == 1); /* All ports must match in2 port list - 2 */ -<span class="lineNum"> 2041 </span> : : } -<span class="lineNum"> 2042 </span> : : -<span class="lineNum"> 2043 </span> : : int register_ts_access(void) -<span class="lineNum"> 2044 </span> : : { -<span class="lineNum"> 2045 </span> : : ts_init(&amp;TEST_SUITE(access), TEST_SUITE_DESCR(access), NULL, NULL); -<span class="lineNum"> 2046 </span> : : ts_add_utest(&amp;TEST_SUITE(access), UTEST_FCT(compare_port_list), UTEST_DESCR(compare_port_list)); -<span class="lineNum"> 2047 </span> : : -<span class="lineNum"> 2048 </span> : : return register_ts(&amp;TEST_SUITE(access)); -<span class="lineNum"> 2049 </span> : : } -<span class="lineNum"> 2050 </span> : : #endif /* HAVE_C_UNIT_TESTS */ -<span class="lineNum"> 2051 </span> : : -<span class="lineNum"> 2052 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html deleted file mode 100644 index c4892a14..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func-sort-c.html +++ /dev/null @@ -1,125 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/config_init.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">223</td> - <td class="headerCovTableEntry">332</td> - <td class="headerCovTableEntryLo">67.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntryHi">90.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">124</td> - <td class="headerCovTableEntry">224</td> - <td class="headerCovTableEntryLo">55.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="config_init.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#66">set_config_entry</a></td> - <td class="coverFnHi">71659</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#112">config_entry_index</a></td> - <td class="coverFnHi">10361</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#47">range_check</a></td> - <td class="coverFnHi">4770</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#205">parse_config_file</a></td> - <td class="coverFnHi">3628</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#907">config_init</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#887">set_preconfig_entries</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#126">free_configs</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#138">validate_int_var_ranges</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#315">validate_options</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1197">dump_config</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1217">usage</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html deleted file mode 100644 index 2ff3bc4b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.func.html +++ /dev/null @@ -1,125 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/config_init.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - config_init.c<span style="font-size: 80%;"> (<a href="config_init.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">223</td> - <td class="headerCovTableEntry">332</td> - <td class="headerCovTableEntryLo">67.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntryHi">90.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">124</td> - <td class="headerCovTableEntry">224</td> - <td class="headerCovTableEntryLo">55.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="config_init.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#112">config_entry_index</a></td> - <td class="coverFnHi">10361</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#907">config_init</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1197">dump_config</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#126">free_configs</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#205">parse_config_file</a></td> - <td class="coverFnHi">3628</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#47">range_check</a></td> - <td class="coverFnHi">4770</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#66">set_config_entry</a></td> - <td class="coverFnHi">71659</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#887">set_preconfig_entries</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#1217">usage</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#138">validate_int_var_ranges</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="config_init.c.gcov.html#315">validate_options</a></td> - <td class="coverFnHi">795</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html deleted file mode 100644 index 9b24fabb..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/config_init.c.gcov.html +++ /dev/null @@ -1,1384 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/config_init.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - config_init.c<span style="font-size: 80%;"> (source / <a href="config_init.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">223</td> - <td class="headerCovTableEntry">332</td> - <td class="headerCovTableEntryLo">67.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">10</td> - <td class="headerCovTableEntry">11</td> - <td class="headerCovTableEntryHi">90.9 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">124</td> - <td class="headerCovTableEntry">224</td> - <td class="headerCovTableEntryLo">55.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ****************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: config_init.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Command-line and config file processing for fwknop server. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ****************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_errors.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;config_init.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;access.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;cmd_opts.h&quot; -<span class="lineNum"> 36 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 37 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : #if FIREWALL_FIREWALLD -<span class="lineNum"> 40 </span> : : #include &quot;fw_util_firewalld.h&quot; -<span class="lineNum"> 41 </span> : : #elif FIREWALL_IPTABLES -<span class="lineNum"> 42 </span> : : #include &quot;fw_util_iptables.h&quot; -<span class="lineNum"> 43 </span> : : #endif -<span class="lineNum"> 44 </span> : : -<span class="lineNum"> 45 </span> : : /* Check to see if an integer variable has a value that is within a -<span class="lineNum"> 46 </span> : : * specific range -<a name="47"><span class="lineNum"> 47 </span> : : */</a> -<span class="lineNum"> 48 </span> : : static void -<span class="lineNum"> 49 </span> :<span class="lineCov"> 4770 : range_check(fko_srv_options_t *opts, char *var, char *val, int low, int high)</span> -<span class="lineNum"> 50 </span> : : { -<span class="lineNum"> 51 </span> : : int is_err; -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> :<span class="lineCov"> 4770 : strtol_wrapper(val, low, high, NO_EXIT_UPON_ERR, &amp;is_err);</span> -<span class="lineNum"> 54 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 4770 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 55 </span> : : { -<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] var %s value '%s' not in the range %d-%d&quot;,</span> -<span class="lineNum"> 57 </span> : : var, val, low, high); -<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 59 </span> : : } -<span class="lineNum"> 60 </span> : : -<span class="lineNum"> 61 </span> :<span class="lineCov"> 4770 : return;</span> -<span class="lineNum"> 62 </span> : : } -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> : : /* Take an index and a string value. malloc the space for the value -<span class="lineNum"> 65 </span> : : * and assign it to the array at the specified index. -<a name="66"><span class="lineNum"> 66 </span> : : */</a> -<span class="lineNum"> 67 </span> : : static void -<span class="lineNum"> 68 </span> :<span class="lineCov"> 71659 : set_config_entry(fko_srv_options_t *opts, const int var_ndx, const char *value)</span> -<span class="lineNum"> 69 </span> : : { -<span class="lineNum"> 70 </span> : : int space_needed; -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : /* Sanity check the index value. -<span class="lineNum"> 73 </span> : : */ -<span class="lineNum"> 74 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71659 times"> + </span>]:<span class="lineCov"> 71659 : if(var_ndx &lt; 0 || var_ndx &gt;= NUMBER_OF_CONFIG_ENTRIES)</span> -<span class="lineNum"> 75 </span> : : { -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Index value of %i is not valid&quot;, var_ndx);</span> -<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 78 </span> : : } -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> : : /* If this particular entry was already set (i.e. not NULL), then -<span class="lineNum"> 81 </span> : : * assume it needs to be freed first. -<span class="lineNum"> 82 </span> : : */ -<span class="lineNum"> 83 </span> [<span class="branchCov" title="Branch 0 was taken 25595 times"> + </span><span class="branchCov" title="Branch 1 was taken 46064 times"> + </span>]:<span class="lineCov"> 71659 : if(opts-&gt;config[var_ndx] != NULL)</span> -<span class="lineNum"> 84 </span> :<span class="lineCov"> 25595 : free(opts-&gt;config[var_ndx]);</span> -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> : : /* If we are setting it to NULL, do it and be done. -<span class="lineNum"> 87 </span> : : */ -<span class="lineNum"> 88 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71659 times"> + </span>]:<span class="lineCov"> 71659 : if(value == NULL)</span> -<span class="lineNum"> 89 </span> : : { -<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[var_ndx] = NULL;</span> -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 92 </span> : : } -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> : : /* Otherwise, make the space we need and set it. -<span class="lineNum"> 95 </span> : : */ -<span class="lineNum"> 96 </span> :<span class="lineCov"> 71659 : space_needed = strlen(value) + 1;</span> -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> :<span class="lineCov"> 71659 : opts-&gt;config[var_ndx] = calloc(1, space_needed);</span> -<span class="lineNum"> 99 </span> : : -<span class="lineNum"> 100 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71659 times"> + </span>]:<span class="lineCov"> 71659 : if(opts-&gt;config[var_ndx] == NULL)</span> -<span class="lineNum"> 101 </span> : : { -<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Fatal memory allocation error!&quot;);</span> -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 104 </span> : : } -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> :<span class="lineCov"> 71659 : strlcpy(opts-&gt;config[var_ndx], value, space_needed);</span> -<span class="lineNum"> 107 </span> : : -<span class="lineNum"> 108 </span> :<span class="lineCov"> 71659 : return;</span> -<span class="lineNum"> 109 </span> : : } -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> : : /* Given a config parameter name, return its index or -1 if not found. -<a name="112"><span class="lineNum"> 112 </span> : : */</a> -<span class="lineNum"> 113 </span> : : static int -<span class="lineNum"> 114 </span> :<span class="lineCov"> 10361 : config_entry_index(const fko_srv_options_t *opts, const char *var)</span> -<span class="lineNum"> 115 </span> : : { -<span class="lineNum"> 116 </span> : : int i; -<span class="lineNum"> 117 </span> : : -<span class="lineNum"> 118 </span> [<span class="branchCov" title="Branch 0 was taken 344077 times"> + </span><span class="branchCov" title="Branch 1 was taken 1739 times"> + </span>]:<span class="lineCov"> 345816 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> -<span class="lineNum"> 119 </span>[<span class="branchCov" title="Branch 0 was taken 49461 times"> + </span><span class="branchCov" title="Branch 1 was taken 294616 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 8622 times"> + </span><span class="branchCov" title="Branch 3 was taken 40839 times"> + </span>]:<span class="lineCov"> 344077 : if(opts-&gt;config[i] != NULL &amp;&amp; CONF_VAR_IS(var, config_map[i]))</span> -<span class="lineNum"> 120 </span> :<span class="lineCov"> 8622 : return(i);</span> -<span class="lineNum"> 121 </span> : : -<span class="lineNum"> 122 </span> : : return(-1); -<span class="lineNum"> 123 </span> : : } -<span class="lineNum"> 124 </span> : : -<span class="lineNum"> 125 </span> : : /* Free the config memory -<a name="126"><span class="lineNum"> 126 </span> : : */</a> -<span class="lineNum"> 127 </span> : : void -<span class="lineNum"> 128 </span> :<span class="lineCov"> 1814 : free_configs(fko_srv_options_t *opts)</span> -<span class="lineNum"> 129 </span> : : { -<span class="lineNum"> 130 </span> : : int i; -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> :<span class="lineCov"> 1814 : free_acc_stanzas(opts);</span> -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> [<span class="branchCov" title="Branch 1 was taken 87072 times"> + </span><span class="branchCov" title="Branch 2 was taken 1814 times"> + </span>]:<span class="lineCov"> 88886 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> -<span class="lineNum"> 135 </span> [<span class="branchCov" title="Branch 0 was taken 46064 times"> + </span><span class="branchCov" title="Branch 1 was taken 41008 times"> + </span>]:<span class="lineCov"> 87072 : if(opts-&gt;config[i] != NULL)</span> -<span class="lineNum"> 136 </span> :<span class="lineCov"> 46064 : free(opts-&gt;config[i]);</span> -<span class="lineNum"> 137 </span> :<span class="lineCov"> 1814 : }</span> -<a name="138"><span class="lineNum"> 138 </span> : : </a> -<span class="lineNum"> 139 </span> : : static void -<span class="lineNum"> 140 </span> :<span class="lineCov"> 795 : validate_int_var_ranges(fko_srv_options_t *opts)</span> -<span class="lineNum"> 141 </span> : : { -<span class="lineNum"> 142 </span> : : #if FIREWALL_IPFW -<span class="lineNum"> 143 </span> : : int is_err = FKO_SUCCESS; -<span class="lineNum"> 144 </span> : : #endif -<span class="lineNum"> 145 </span> : : -<span class="lineNum"> 146 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;PCAP_LOOP_SLEEP&quot;, opts-&gt;config[CONF_PCAP_LOOP_SLEEP],</span> -<span class="lineNum"> 147 </span> : : 1, RCHK_MAX_PCAP_LOOP_SLEEP); -<span class="lineNum"> 148 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;MAX_SPA_PACKET_AGE&quot;, opts-&gt;config[CONF_MAX_SPA_PACKET_AGE],</span> -<span class="lineNum"> 149 </span> : : 1, RCHK_MAX_SPA_PACKET_AGE); -<span class="lineNum"> 150 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;MAX_SNIFF_BYTES&quot;, opts-&gt;config[CONF_MAX_SNIFF_BYTES],</span> -<span class="lineNum"> 151 </span> : : 1, RCHK_MAX_SNIFF_BYTES); -<span class="lineNum"> 152 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;TCPSERV_PORT&quot;, opts-&gt;config[CONF_TCPSERV_PORT],</span> -<span class="lineNum"> 153 </span> : : 1, RCHK_MAX_TCPSERV_PORT); -<span class="lineNum"> 154 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;UDPSERV_PORT&quot;, opts-&gt;config[CONF_UDPSERV_PORT],</span> -<span class="lineNum"> 155 </span> : : 1, RCHK_MAX_UDPSERV_PORT); -<span class="lineNum"> 156 </span> :<span class="lineCov"> 795 : range_check(opts, &quot;UDPSERV_PORT&quot;, opts-&gt;config[CONF_UDPSERV_SELECT_TIMEOUT],</span> -<span class="lineNum"> 157 </span> : : 1, RCHK_MAX_UDPSERV_SELECT_TIMEOUT); -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> : : #if FIREWALL_IPFW -<span class="lineNum"> 160 </span> : : range_check(opts, &quot;IPFW_START_RULE_NUM&quot;, opts-&gt;config[CONF_IPFW_START_RULE_NUM], -<span class="lineNum"> 161 </span> : : 0, RCHK_MAX_IPFW_START_RULE_NUM); -<span class="lineNum"> 162 </span> : : range_check(opts, &quot;IPFW_MAX_RULES&quot;, opts-&gt;config[CONF_IPFW_MAX_RULES], -<span class="lineNum"> 163 </span> : : 1, RCHK_MAX_IPFW_MAX_RULES); -<span class="lineNum"> 164 </span> : : range_check(opts, &quot;IPFW_ACTIVE_SET_NUM&quot;, opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM], -<span class="lineNum"> 165 </span> : : 0, RCHK_MAX_IPFW_SET_NUM); -<span class="lineNum"> 166 </span> : : range_check(opts, &quot;IPFW_EXPIRE_SET_NUM&quot;, opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM], -<span class="lineNum"> 167 </span> : : 0, RCHK_MAX_IPFW_SET_NUM); -<span class="lineNum"> 168 </span> : : range_check(opts, &quot;IPFW_EXPIRE_PURGE_INTERVAL&quot;, -<span class="lineNum"> 169 </span> : : opts-&gt;config[CONF_IPFW_EXPIRE_PURGE_INTERVAL], -<span class="lineNum"> 170 </span> : : 1, RCHK_MAX_IPFW_PURGE_INTERVAL); -<span class="lineNum"> 171 </span> : : -<span class="lineNum"> 172 </span> : : /* Make sure the active and expire sets are not identical whenever -<span class="lineNum"> 173 </span> : : * they are non-zero -<span class="lineNum"> 174 </span> : : */ -<span class="lineNum"> 175 </span> : : if((strtol_wrapper(opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM], -<span class="lineNum"> 176 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err) &gt; 0 -<span class="lineNum"> 177 </span> : : &amp;&amp; strtol_wrapper(opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM], -<span class="lineNum"> 178 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err) &gt; 0) -<span class="lineNum"> 179 </span> : : &amp;&amp; strtol_wrapper(opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM], -<span class="lineNum"> 180 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err) -<span class="lineNum"> 181 </span> : : == strtol_wrapper(opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM], -<span class="lineNum"> 182 </span> : : 0, RCHK_MAX_IPFW_SET_NUM, NO_EXIT_UPON_ERR, &amp;is_err)) -<span class="lineNum"> 183 </span> : : { -<span class="lineNum"> 184 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 185 </span> : : &quot;[*] Cannot set identical ipfw active and expire sets.&quot;); -<span class="lineNum"> 186 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 187 </span> : : } -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> : : if(is_err != FKO_SUCCESS) -<span class="lineNum"> 190 </span> : : { -<span class="lineNum"> 191 </span> : : log_msg(LOG_ERR, &quot;[*] invalid integer conversion error.\n&quot;); -<span class="lineNum"> 192 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 193 </span> : : } -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> : : #elif FIREWALL_PF -<span class="lineNum"> 196 </span> : : range_check(opts, &quot;PF_EXPIRE_INTERVAL&quot;, opts-&gt;config[CONF_PF_EXPIRE_INTERVAL], -<span class="lineNum"> 197 </span> : : 1, RCHK_MAX_PF_EXPIRE_INTERVAL); -<span class="lineNum"> 198 </span> : : -<span class="lineNum"> 199 </span> : : #endif /* FIREWALL type */ -<span class="lineNum"> 200 </span> : : -<span class="lineNum"> 201 </span> :<span class="lineCov"> 795 : return;</span> -<span class="lineNum"> 202 </span> : : } -<span class="lineNum"> 203 </span> : : -<span class="lineNum"> 204 </span> : : /* Parse the config file... -<a name="205"><span class="lineNum"> 205 </span> : : */</a> -<span class="lineNum"> 206 </span> : : static void -<span class="lineNum"> 207 </span> :<span class="lineCov"> 3628 : parse_config_file(fko_srv_options_t *opts, const char *config_file)</span> -<span class="lineNum"> 208 </span> : : { -<span class="lineNum"> 209 </span> : : FILE *cfile_ptr; -<span class="lineNum"> 210 </span> :<span class="lineCov"> 3628 : unsigned int numLines = 0;</span> -<span class="lineNum"> 211 </span> : : unsigned int i, good_ent; -<span class="lineNum"> 212 </span> : : int cndx; -<span class="lineNum"> 213 </span> : : -<span class="lineNum"> 214 </span> :<span class="lineCov"> 3628 : char conf_line_buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 215 </span> :<span class="lineCov"> 3628 : char var[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 216 </span> :<span class="lineCov"> 3628 : char val[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 217 </span> :<span class="lineCov"> 3628 : char tmp1[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 218 </span> :<span class="lineCov"> 3628 : char tmp2[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 219 </span> : : -<span class="lineNum"> 220 </span> : : struct stat st; -<span class="lineNum"> 221 </span> : : -<span class="lineNum"> 222 </span> : : /* Make sure the config file exists. -<span class="lineNum"> 223 </span> : : */ -<span class="lineNum"> 224 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 3628 times"> + </span>]:<span class="lineCov"> 3628 : if(stat(config_file, &amp;st) != 0)</span> -<span class="lineNum"> 225 </span> : : { -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Config file: '%s' was not found.&quot;,</span> -<span class="lineNum"> 227 </span> : : config_file); -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 229 </span> : : } -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 3628 times"> + </span>]:<span class="lineCov"> 3628 : if(verify_file_perms_ownership(config_file) != 1)</span> -<span class="lineNum"> 232 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 233 </span> : : -<span class="lineNum"> 234 </span> : : /* See the comment in the parse_access_file() function regarding security -<span class="lineNum"> 235 </span> : : * here relative to a TOCTOU bug flagged by Coverity. -<span class="lineNum"> 236 </span> : : */ -<span class="lineNum"> 237 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 3628 times"> + </span>]:<span class="lineCov"> 3628 : if ((cfile_ptr = fopen(config_file, &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 238 </span> : : { -<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not open config file: %s&quot;,</span> -<span class="lineNum"> 240 </span> : : config_file); -<span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : perror(NULL);</span> -<span class="lineNum"> 242 </span> : : -<span class="lineNum"> 243 </span> :<span class="lineCov"> 3628 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 244 </span> : : } -<span class="lineNum"> 245 </span> : : -<span class="lineNum"> 246 </span> [<span class="branchCov" title="Branch 0 was taken 108252 times"> + </span><span class="branchCov" title="Branch 1 was taken 3628 times"> + </span>]:<span class="lineCov"> 111880 : while ((fgets(conf_line_buf, MAX_LINE_LEN, cfile_ptr)) != NULL)</span> -<span class="lineNum"> 247 </span> : : { -<span class="lineNum"> 248 </span> :<span class="lineCov"> 108252 : numLines++;</span> -<span class="lineNum"> 249 </span> :<span class="lineCov"> 108252 : conf_line_buf[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> : : /* Get past comments and empty lines (note: we only look at the -<span class="lineNum"> 252 </span> : : * first character. -<span class="lineNum"> 253 </span> : : */ -<span class="lineNum"> 254 </span>[<span class="branchCov" title="Branch 0 was taken 101955 times"> + </span><span class="branchCov" title="Branch 1 was taken 6297 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 101955 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 108252 : if(IS_EMPTY_LINE(conf_line_buf[0]))</span> -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 101951 times"> + </span><span class="branchCov" title="Branch 5 was taken 4 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 2572 times"> + </span><span class="branchCov" title="Branch 7 was taken 99379 times"> + </span>] -<span class="lineNum"> 255 </span> :<span class="lineCov"> 8873 : continue;</span> -<span class="lineNum"> 256 </span> : : -<span class="lineNum"> 257 </span> [<span class="branchCov" title="Branch 0 was taken 86592 times"> + </span><span class="branchCov" title="Branch 1 was taken 12787 times"> + </span>]:<span class="lineCov"> 99379 : if(sscanf(conf_line_buf, &quot;%s %[^;\n\r]&quot;, var, val) != 2)</span> -<span class="lineNum"> 258 </span> : : { -<span class="lineNum"> 259 </span> :<span class="lineCov"> 12787 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 260 </span> : : &quot;*Invalid config file entry in %s at line %i.\n - '%s'&quot;, -<span class="lineNum"> 261 </span> : : config_file, numLines, conf_line_buf -<span class="lineNum"> 262 </span> : : ); -<span class="lineNum"> 263 </span> :<span class="lineCov"> 12787 : continue;</span> -<span class="lineNum"> 264 </span> : : } -<span class="lineNum"> 265 </span> : : -<span class="lineNum"> 266 </span> : : good_ent = 0; -<span class="lineNum"> 267 </span> [<span class="branchCov" title="Branch 0 was taken 3297118 times"> + </span><span class="branchCov" title="Branch 1 was taken 50419 times"> + </span>]:<span class="lineCov"> 3347537 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> -<span class="lineNum"> 268 </span> : : { -<span class="lineNum"> 269 </span> [<span class="branchCov" title="Branch 0 was taken 36173 times"> + </span><span class="branchCov" title="Branch 1 was taken 3260945 times"> + </span>]:<span class="lineCov"> 3297118 : if(CONF_VAR_IS(config_map[i], var))</span> -<span class="lineNum"> 270 </span> : : { -<span class="lineNum"> 271 </span> : : /* First check to see if we need to do a varable expansion -<span class="lineNum"> 272 </span> : : * on this value. Note: this only supports one expansion and -<span class="lineNum"> 273 </span> : : * only if the value starts with the variable. -<span class="lineNum"> 274 </span> : : */ -<span class="lineNum"> 275 </span> [<span class="branchCov" title="Branch 0 was taken 10745 times"> + </span><span class="branchCov" title="Branch 1 was taken 25428 times"> + </span>]:<span class="lineCov"> 36173 : if(*val == '$')</span> -<span class="lineNum"> 276 </span> : : { -<span class="lineNum"> 277 </span> [<span class="branchCov" title="Branch 0 was taken 10361 times"> + </span><span class="branchCov" title="Branch 1 was taken 384 times"> + </span>]:<span class="lineCov"> 10745 : if(sscanf((val+1), &quot;%[A-Z_]%s&quot;, tmp1, tmp2))</span> -<span class="lineNum"> 278 </span> : : { -<span class="lineNum"> 279 </span> [<span class="branchCov" title="Branch 1 was taken 8622 times"> + </span><span class="branchCov" title="Branch 2 was taken 1739 times"> + </span>]:<span class="lineCov"> 10361 : if((cndx = config_entry_index(opts, tmp1)) &gt;= 0)</span> -<span class="lineNum"> 280 </span> : : { -<span class="lineNum"> 281 </span> :<span class="lineCov"> 8622 : strlcpy(val, opts-&gt;config[cndx], sizeof(val));</span> -<span class="lineNum"> 282 </span> :<span class="lineCov"> 8622 : strlcat(val, tmp2, sizeof(val));</span> -<span class="lineNum"> 283 </span> : : } -<span class="lineNum"> 284 </span> : : else -<span class="lineNum"> 285 </span> : : { -<span class="lineNum"> 286 </span> : : /* We didn't map the embedded variable to a valid -<span class="lineNum"> 287 </span> : : * config parameter -<span class="lineNum"> 288 </span> : : */ -<span class="lineNum"> 289 </span> :<span class="lineCov"> 1739 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 290 </span> : : &quot;[*] Invalid embedded variable in: '%s'&quot;, val); -<span class="lineNum"> 291 </span> :<span class="lineCov"> 1739 : break;</span> -<span class="lineNum"> 292 </span> : : } -<span class="lineNum"> 293 </span> : : } -<span class="lineNum"> 294 </span> : : } -<span class="lineNum"> 295 </span> : : -<span class="lineNum"> 296 </span> :<span class="lineCov"> 34434 : set_config_entry(opts, i, val);</span> -<span class="lineNum"> 297 </span> :<span class="lineCov"> 34434 : good_ent++;</span> -<span class="lineNum"> 298 </span> :<span class="lineCov"> 34434 : break;</span> -<span class="lineNum"> 299 </span> : : } -<span class="lineNum"> 300 </span> : : } -<span class="lineNum"> 301 </span> : : -<span class="lineNum"> 302 </span> [<span class="branchCov" title="Branch 0 was taken 52158 times"> + </span><span class="branchCov" title="Branch 1 was taken 34434 times"> + </span>]:<span class="lineCov"> 86592 : if(good_ent == 0)</span> -<span class="lineNum"> 303 </span> :<span class="lineCov"> 108252 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 304 </span> : : &quot;[*] Ignoring unknown configuration parameter: '%s' in %s&quot;, -<span class="lineNum"> 305 </span> : : var, config_file -<span class="lineNum"> 306 </span> : : ); -<span class="lineNum"> 307 </span> : : } -<span class="lineNum"> 308 </span> : : -<span class="lineNum"> 309 </span> :<span class="lineCov"> 3628 : fclose(cfile_ptr);</span> -<span class="lineNum"> 310 </span> : : -<span class="lineNum"> 311 </span> :<span class="lineCov"> 3628 : return;</span> -<span class="lineNum"> 312 </span> : : } -<span class="lineNum"> 313 </span> : : -<span class="lineNum"> 314 </span> : : /* Set defaults, and do sanity and bounds checks for the various options. -<a name="315"><span class="lineNum"> 315 </span> : : */</a> -<span class="lineNum"> 316 </span> : : static void -<span class="lineNum"> 317 </span> :<span class="lineCov"> 795 : validate_options(fko_srv_options_t *opts)</span> -<span class="lineNum"> 318 </span> : : { -<span class="lineNum"> 319 </span> :<span class="lineCov"> 795 : char tmp_path[MAX_PATH_LEN] = {0};</span> -<span class="lineNum"> 320 </span> : : -<span class="lineNum"> 321 </span> : : /* If no conf dir is set in the config file, use the default. -<span class="lineNum"> 322 </span> : : */ -<span class="lineNum"> 323 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FWKNOP_CONF_DIR] == NULL)</span> -<span class="lineNum"> 324 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FWKNOP_CONF_DIR, DEF_CONF_DIR);</span> -<span class="lineNum"> 325 </span> : : -<span class="lineNum"> 326 </span> : : /* If no access.conf path was specified on the command line or set in -<span class="lineNum"> 327 </span> : : * the config file, use the default. -<span class="lineNum"> 328 </span> : : */ -<span class="lineNum"> 329 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ACCESS_FILE] == NULL)</span> -<span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_ACCESS_FILE, DEF_ACCESS_FILE);</span> -<span class="lineNum"> 331 </span> : : -<span class="lineNum"> 332 </span> : : /* If the pid and digest cache files where not set in the config file or -<span class="lineNum"> 333 </span> : : * via command-line, then grab the defaults. Start with RUN_DIR as the -<span class="lineNum"> 334 </span> : : * files may depend on that. -<span class="lineNum"> 335 </span> : : */ -<span class="lineNum"> 336 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FWKNOP_RUN_DIR] == NULL)</span> -<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_FWKNOP_RUN_DIR, DEF_RUN_DIR);</span> -<span class="lineNum"> 338 </span> : : -<span class="lineNum"> 339 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FWKNOP_PID_FILE] == NULL)</span> -<span class="lineNum"> 340 </span> : : { -<span class="lineNum"> 341 </span> :<span class="lineCov"> 795 : strlcpy(tmp_path, opts-&gt;config[CONF_FWKNOP_RUN_DIR], sizeof(tmp_path));</span> -<span class="lineNum"> 342 </span> : : -<span class="lineNum"> 343 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(tmp_path[strlen(tmp_path)-1] != '/')</span> -<span class="lineNum"> 344 </span> :<span class="lineCov"> 795 : strlcat(tmp_path, &quot;/&quot;, sizeof(tmp_path));</span> -<span class="lineNum"> 345 </span> : : -<span class="lineNum"> 346 </span> :<span class="lineCov"> 795 : strlcat(tmp_path, DEF_PID_FILENAME, sizeof(tmp_path));</span> -<span class="lineNum"> 347 </span> : : -<span class="lineNum"> 348 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FWKNOP_PID_FILE, tmp_path);</span> -<span class="lineNum"> 349 </span> : : } -<span class="lineNum"> 350 </span> : : -<span class="lineNum"> 351 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 352 </span> [<span class="branchCov" title="Branch 0 was taken 724 times"> + </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_DIGEST_FILE] == NULL)</span> -<span class="lineNum"> 353 </span> : : #else -<span class="lineNum"> 354 </span> : : if(opts-&gt;config[CONF_DIGEST_DB_FILE] == NULL) -<span class="lineNum"> 355 </span> : : #endif -<span class="lineNum"> 356 </span> : : { -<span class="lineNum"> 357 </span> :<span class="lineCov"> 724 : strlcpy(tmp_path, opts-&gt;config[CONF_FWKNOP_RUN_DIR], sizeof(tmp_path));</span> -<span class="lineNum"> 358 </span> : : -<span class="lineNum"> 359 </span> [<span class="branchCov" title="Branch 0 was taken 724 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 724 : if(tmp_path[strlen(tmp_path)-1] != '/')</span> -<span class="lineNum"> 360 </span> :<span class="lineCov"> 724 : strlcat(tmp_path, &quot;/&quot;, sizeof(tmp_path));</span> -<span class="lineNum"> 361 </span> : : -<span class="lineNum"> 362 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 363 </span> :<span class="lineCov"> 724 : strlcat(tmp_path, DEF_DIGEST_CACHE_FILENAME, sizeof(tmp_path));</span> -<span class="lineNum"> 364 </span> :<span class="lineCov"> 724 : set_config_entry(opts, CONF_DIGEST_FILE, tmp_path);</span> -<span class="lineNum"> 365 </span> : : #else -<span class="lineNum"> 366 </span> : : strlcat(tmp_path, DEF_DIGEST_CACHE_DB_FILENAME, sizeof(tmp_path)); -<span class="lineNum"> 367 </span> : : set_config_entry(opts, CONF_DIGEST_DB_FILE, tmp_path); -<span class="lineNum"> 368 </span> : : #endif -<span class="lineNum"> 369 </span> : : } -<span class="lineNum"> 370 </span> : : -<span class="lineNum"> 371 </span> : : /* Set remaining require CONF_ vars if they are not already set. */ -<span class="lineNum"> 372 </span> : : -<span class="lineNum"> 373 </span> : : /* PCAP capture interface - note that if '-r &lt;pcap file&gt;' is specified -<span class="lineNum"> 374 </span> : : * on the command line, then this will override the pcap interface setting. -<span class="lineNum"> 375 </span> : : */ -<span class="lineNum"> 376 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_INTF] == NULL)</span> -<span class="lineNum"> 377 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_INTF, DEF_INTERFACE);</span> -<span class="lineNum"> 378 </span> : : -<span class="lineNum"> 379 </span> : : /* PCAP Promiscuous mode. -<span class="lineNum"> 380 </span> : : */ -<span class="lineNum"> 381 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_PCAP_PROMISC] == NULL)</span> -<span class="lineNum"> 382 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_PCAP_PROMISC,</span> -<span class="lineNum"> 383 </span> : : DEF_ENABLE_PCAP_PROMISC); -<span class="lineNum"> 384 </span> : : -<span class="lineNum"> 385 </span> : : /* The packet count argument to pcap_dispatch() -<span class="lineNum"> 386 </span> : : */ -<span class="lineNum"> 387 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_DISPATCH_COUNT] == NULL)</span> -<span class="lineNum"> 388 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_DISPATCH_COUNT,</span> -<span class="lineNum"> 389 </span> : : DEF_PCAP_DISPATCH_COUNT); -<span class="lineNum"> 390 </span> : : -<span class="lineNum"> 391 </span> : : /* Microseconds to sleep between pcap loop iterations -<span class="lineNum"> 392 </span> : : */ -<span class="lineNum"> 393 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_LOOP_SLEEP] == NULL)</span> -<span class="lineNum"> 394 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_LOOP_SLEEP,</span> -<span class="lineNum"> 395 </span> : : DEF_PCAP_LOOP_SLEEP); -<span class="lineNum"> 396 </span> : : -<span class="lineNum"> 397 </span> : : /* PCAP Filter. -<span class="lineNum"> 398 </span> : : */ -<span class="lineNum"> 399 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_FILTER] == NULL)</span> -<span class="lineNum"> 400 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_PCAP_FILTER, DEF_PCAP_FILTER);</span> -<span class="lineNum"> 401 </span> : : -<span class="lineNum"> 402 </span> : : /* Enable SPA packet aging unless we're getting packet data -<span class="lineNum"> 403 </span> : : * directly from a pcap file -<span class="lineNum"> 404 </span> : : */ -<span class="lineNum"> 405 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_SPA_PACKET_AGING] == NULL)</span> -<span class="lineNum"> 406 </span> : : { -<span class="lineNum"> 407 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_PCAP_FILE] == NULL)</span> -<span class="lineNum"> 408 </span> : : { -<span class="lineNum"> 409 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_SPA_PACKET_AGING,</span> -<span class="lineNum"> 410 </span> : : DEF_ENABLE_SPA_PACKET_AGING); -<span class="lineNum"> 411 </span> : : } -<span class="lineNum"> 412 </span> : : else -<span class="lineNum"> 413 </span> : : { -<span class="lineNum"> 414 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_ENABLE_SPA_PACKET_AGING, &quot;N&quot;);</span> -<span class="lineNum"> 415 </span> : : } -<span class="lineNum"> 416 </span> : : } -<span class="lineNum"> 417 </span> : : -<span class="lineNum"> 418 </span> : : /* SPA packet age. -<span class="lineNum"> 419 </span> : : */ -<span class="lineNum"> 420 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_MAX_SPA_PACKET_AGE] == NULL)</span> -<span class="lineNum"> 421 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_MAX_SPA_PACKET_AGE,</span> -<span class="lineNum"> 422 </span> : : DEF_MAX_SPA_PACKET_AGE); -<span class="lineNum"> 423 </span> : : -<span class="lineNum"> 424 </span> : : -<span class="lineNum"> 425 </span> : : /* Enable digest persistence. -<span class="lineNum"> 426 </span> : : */ -<span class="lineNum"> 427 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchCov" title="Branch 1 was taken 724 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE] == NULL)</span> -<span class="lineNum"> 428 </span> :<span class="lineCov"> 71 : set_config_entry(opts, CONF_ENABLE_DIGEST_PERSISTENCE,</span> -<span class="lineNum"> 429 </span> : : DEF_ENABLE_DIGEST_PERSISTENCE); -<span class="lineNum"> 430 </span> : : -<span class="lineNum"> 431 </span> : : /* Enable destination rule. -<span class="lineNum"> 432 </span> : : */ -<span class="lineNum"> 433 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_DESTINATION_RULE] == NULL)</span> -<span class="lineNum"> 434 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_DESTINATION_RULE,</span> -<span class="lineNum"> 435 </span> : : DEF_ENABLE_DESTINATION_RULE); -<span class="lineNum"> 436 </span> : : -<span class="lineNum"> 437 </span> : : /* Max sniff bytes. -<span class="lineNum"> 438 </span> : : */ -<span class="lineNum"> 439 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_MAX_SNIFF_BYTES] == NULL)</span> -<span class="lineNum"> 440 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_MAX_SNIFF_BYTES, DEF_MAX_SNIFF_BYTES);</span> -<span class="lineNum"> 441 </span> : : -<span class="lineNum"> 442 </span> : : #if FIREWALL_FIREWALLD -<span class="lineNum"> 443 </span> : : /* Enable FIREWD forwarding. -<span class="lineNum"> 444 </span> : : */ -<span class="lineNum"> 445 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING] == NULL)</span> -<span class="lineNum"> 446 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_FORWARDING,</span> -<span class="lineNum"> 447 </span> : : DEF_ENABLE_FIREWD_FORWARDING); -<span class="lineNum"> 448 </span> : : -<span class="lineNum"> 449 </span> : : /* Enable FIREWD local NAT. -<span class="lineNum"> 450 </span> : : */ -<span class="lineNum"> 451 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_LOCAL_NAT] == NULL)</span> -<span class="lineNum"> 452 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_LOCAL_NAT,</span> -<span class="lineNum"> 453 </span> : : DEF_ENABLE_FIREWD_LOCAL_NAT); -<span class="lineNum"> 454 </span> : : -<span class="lineNum"> 455 </span> : : /* Enable FIREWD SNAT. -<span class="lineNum"> 456 </span> : : */ -<span class="lineNum"> 457 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT] == NULL)</span> -<span class="lineNum"> 458 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_SNAT,</span> -<span class="lineNum"> 459 </span> : : DEF_ENABLE_FIREWD_SNAT); -<span class="lineNum"> 460 </span> : : -<span class="lineNum"> 461 </span> : : /* Make sure we have a valid IP if SNAT is enabled -<span class="lineNum"> 462 </span> : : */ -<span class="lineNum"> 463 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 464 </span> : : { -<span class="lineNum"> 465 </span> : : /* Note that fw_config_init() will set use_masquerade if necessary -<span class="lineNum"> 466 </span> : : */ -<span class="lineNum"> 467 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL)</span> -<span class="lineNum"> 468 </span> : : { -<span class="lineNum"> 469 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP]))</span> -<span class="lineNum"> 470 </span> : : { -<span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 472 </span> : : &quot;Invalid IPv4 addr for SNAT_TRANSLATE_IP&quot; -<span class="lineNum"> 473 </span> : : ); -<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 475 </span> : : } -<span class="lineNum"> 476 </span> : : } -<span class="lineNum"> 477 </span> : : } -<span class="lineNum"> 478 </span> : : -<span class="lineNum"> 479 </span> : : /* Enable FIREWD OUTPUT. -<span class="lineNum"> 480 </span> : : */ -<span class="lineNum"> 481 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_OUTPUT] == NULL)</span> -<span class="lineNum"> 482 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_OUTPUT,</span> -<span class="lineNum"> 483 </span> : : DEF_ENABLE_FIREWD_OUTPUT); -<span class="lineNum"> 484 </span> : : -<span class="lineNum"> 485 </span> : : /* Flush FIREWD at init. -<span class="lineNum"> 486 </span> : : */ -<span class="lineNum"> 487 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FLUSH_FIREWD_AT_INIT] == NULL)</span> -<span class="lineNum"> 488 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FLUSH_FIREWD_AT_INIT, DEF_FLUSH_FIREWD_AT_INIT);</span> -<span class="lineNum"> 489 </span> : : -<span class="lineNum"> 490 </span> : : /* Flush FIREWD at exit. -<span class="lineNum"> 491 </span> : : */ -<span class="lineNum"> 492 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FLUSH_FIREWD_AT_EXIT] == NULL)</span> -<span class="lineNum"> 493 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FLUSH_FIREWD_AT_EXIT, DEF_FLUSH_FIREWD_AT_EXIT);</span> -<span class="lineNum"> 494 </span> : : -<span class="lineNum"> 495 </span> : : /* FIREWD input access. -<span class="lineNum"> 496 </span> : : */ -<span class="lineNum"> 497 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_INPUT_ACCESS] == NULL)</span> -<span class="lineNum"> 498 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_INPUT_ACCESS,</span> -<span class="lineNum"> 499 </span> : : DEF_FIREWD_INPUT_ACCESS); -<span class="lineNum"> 500 </span> : : -<span class="lineNum"> 501 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_INPUT_ACCESS]) != 1)</span> -<span class="lineNum"> 502 </span> : : { -<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 504 </span> : : &quot;Invalid FIREWD_INPUT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 505 </span> : : ); -<span class="lineNum"> 506 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 507 </span> : : } -<span class="lineNum"> 508 </span> : : -<span class="lineNum"> 509 </span> : : /* FIREWD output access. -<span class="lineNum"> 510 </span> : : */ -<span class="lineNum"> 511 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_OUTPUT_ACCESS] == NULL)</span> -<span class="lineNum"> 512 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_OUTPUT_ACCESS,</span> -<span class="lineNum"> 513 </span> : : DEF_FIREWD_OUTPUT_ACCESS); -<span class="lineNum"> 514 </span> : : -<span class="lineNum"> 515 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_OUTPUT_ACCESS]) != 1)</span> -<span class="lineNum"> 516 </span> : : { -<span class="lineNum"> 517 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 518 </span> : : &quot;Invalid FIREWD_OUTPUT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 519 </span> : : ); -<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 521 </span> : : } -<span class="lineNum"> 522 </span> : : -<span class="lineNum"> 523 </span> : : /* FIREWD forward access. -<span class="lineNum"> 524 </span> : : */ -<span class="lineNum"> 525 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_FORWARD_ACCESS] == NULL)</span> -<span class="lineNum"> 526 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_FORWARD_ACCESS,</span> -<span class="lineNum"> 527 </span> : : DEF_FIREWD_FORWARD_ACCESS); -<span class="lineNum"> 528 </span> : : -<span class="lineNum"> 529 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_FORWARD_ACCESS]) != 1)</span> -<span class="lineNum"> 530 </span> : : { -<span class="lineNum"> 531 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 532 </span> : : &quot;Invalid FIREWD_FORWARD_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 533 </span> : : ); -<span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 535 </span> : : } -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> : : /* FIREWD dnat access. -<span class="lineNum"> 538 </span> : : */ -<span class="lineNum"> 539 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_DNAT_ACCESS] == NULL)</span> -<span class="lineNum"> 540 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_DNAT_ACCESS,</span> -<span class="lineNum"> 541 </span> : : DEF_FIREWD_DNAT_ACCESS); -<span class="lineNum"> 542 </span> : : -<span class="lineNum"> 543 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_DNAT_ACCESS]) != 1)</span> -<span class="lineNum"> 544 </span> : : { -<span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 546 </span> : : &quot;Invalid FIREWD_DNAT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 547 </span> : : ); -<span class="lineNum"> 548 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 549 </span> : : } -<span class="lineNum"> 550 </span> : : -<span class="lineNum"> 551 </span> : : /* FIREWD snat access. -<span class="lineNum"> 552 </span> : : */ -<span class="lineNum"> 553 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_SNAT_ACCESS] == NULL)</span> -<span class="lineNum"> 554 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_SNAT_ACCESS,</span> -<span class="lineNum"> 555 </span> : : DEF_FIREWD_SNAT_ACCESS); -<span class="lineNum"> 556 </span> : : -<span class="lineNum"> 557 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_SNAT_ACCESS]) != 1)</span> -<span class="lineNum"> 558 </span> : : { -<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 560 </span> : : &quot;Invalid FIREWD_SNAT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 561 </span> : : ); -<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 563 </span> : : } -<span class="lineNum"> 564 </span> : : -<span class="lineNum"> 565 </span> : : /* FIREWD masquerade access. -<span class="lineNum"> 566 </span> : : */ -<span class="lineNum"> 567 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWD_MASQUERADE_ACCESS] == NULL)</span> -<span class="lineNum"> 568 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FIREWD_MASQUERADE_ACCESS,</span> -<span class="lineNum"> 569 </span> : : DEF_FIREWD_MASQUERADE_ACCESS); -<span class="lineNum"> 570 </span> : : -<span class="lineNum"> 571 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(validate_firewd_chain_conf(opts-&gt;config[CONF_FIREWD_MASQUERADE_ACCESS]) != 1)</span> -<span class="lineNum"> 572 </span> : : { -<span class="lineNum"> 573 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 574 </span> : : &quot;Invalid FIREWD_MASQUERADE_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 575 </span> : : ); -<span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 577 </span> : : } -<span class="lineNum"> 578 </span> : : -<span class="lineNum"> 579 </span> : : /* Check for the firewalld 'comment' match at init time -<span class="lineNum"> 580 </span> : : */ -<span class="lineNum"> 581 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_FIREWD_COMMENT_CHECK] == NULL)</span> -<span class="lineNum"> 582 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_FIREWD_COMMENT_CHECK,</span> -<span class="lineNum"> 583 </span> : : DEF_ENABLE_FIREWD_COMMENT_CHECK); -<span class="lineNum"> 584 </span> : : -<span class="lineNum"> 585 </span> : : #elif FIREWALL_IPTABLES -<span class="lineNum"> 586 </span> : : /* Enable IPT forwarding. -<span class="lineNum"> 587 </span> : : */ -<span class="lineNum"> 588 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING] == NULL) -<span class="lineNum"> 589 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_FORWARDING, -<span class="lineNum"> 590 </span> : : DEF_ENABLE_IPT_FORWARDING); -<span class="lineNum"> 591 </span> : : -<span class="lineNum"> 592 </span> : : /* Enable IPT local NAT. -<span class="lineNum"> 593 </span> : : */ -<span class="lineNum"> 594 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_LOCAL_NAT] == NULL) -<span class="lineNum"> 595 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_LOCAL_NAT, -<span class="lineNum"> 596 </span> : : DEF_ENABLE_IPT_LOCAL_NAT); -<span class="lineNum"> 597 </span> : : -<span class="lineNum"> 598 </span> : : /* Enable IPT SNAT. -<span class="lineNum"> 599 </span> : : */ -<span class="lineNum"> 600 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_SNAT] == NULL) -<span class="lineNum"> 601 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_SNAT, -<span class="lineNum"> 602 </span> : : DEF_ENABLE_IPT_SNAT); -<span class="lineNum"> 603 </span> : : -<span class="lineNum"> 604 </span> : : /* Make sure we have a valid IP if SNAT is enabled -<span class="lineNum"> 605 </span> : : */ -<span class="lineNum"> 606 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_SNAT], &quot;Y&quot;, 1) == 0) -<span class="lineNum"> 607 </span> : : { -<span class="lineNum"> 608 </span> : : /* Note that fw_config_init() will set use_masquerade if necessary -<span class="lineNum"> 609 </span> : : */ -<span class="lineNum"> 610 </span> : : if(opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL) -<span class="lineNum"> 611 </span> : : { -<span class="lineNum"> 612 </span> : : if(! is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP])) -<span class="lineNum"> 613 </span> : : { -<span class="lineNum"> 614 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 615 </span> : : &quot;Invalid IPv4 addr for SNAT_TRANSLATE_IP&quot; -<span class="lineNum"> 616 </span> : : ); -<span class="lineNum"> 617 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 618 </span> : : } -<span class="lineNum"> 619 </span> : : } -<span class="lineNum"> 620 </span> : : } -<span class="lineNum"> 621 </span> : : -<span class="lineNum"> 622 </span> : : /* Enable IPT OUTPUT. -<span class="lineNum"> 623 </span> : : */ -<span class="lineNum"> 624 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_OUTPUT] == NULL) -<span class="lineNum"> 625 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_OUTPUT, -<span class="lineNum"> 626 </span> : : DEF_ENABLE_IPT_OUTPUT); -<span class="lineNum"> 627 </span> : : -<span class="lineNum"> 628 </span> : : /* Flush IPT at init. -<span class="lineNum"> 629 </span> : : */ -<span class="lineNum"> 630 </span> : : if(opts-&gt;config[CONF_FLUSH_IPT_AT_INIT] == NULL) -<span class="lineNum"> 631 </span> : : set_config_entry(opts, CONF_FLUSH_IPT_AT_INIT, DEF_FLUSH_IPT_AT_INIT); -<span class="lineNum"> 632 </span> : : -<span class="lineNum"> 633 </span> : : /* Flush IPT at exit. -<span class="lineNum"> 634 </span> : : */ -<span class="lineNum"> 635 </span> : : if(opts-&gt;config[CONF_FLUSH_IPT_AT_EXIT] == NULL) -<span class="lineNum"> 636 </span> : : set_config_entry(opts, CONF_FLUSH_IPT_AT_EXIT, DEF_FLUSH_IPT_AT_EXIT); -<span class="lineNum"> 637 </span> : : -<span class="lineNum"> 638 </span> : : /* IPT input access. -<span class="lineNum"> 639 </span> : : */ -<span class="lineNum"> 640 </span> : : if(opts-&gt;config[CONF_IPT_INPUT_ACCESS] == NULL) -<span class="lineNum"> 641 </span> : : set_config_entry(opts, CONF_IPT_INPUT_ACCESS, -<span class="lineNum"> 642 </span> : : DEF_IPT_INPUT_ACCESS); -<span class="lineNum"> 643 </span> : : -<span class="lineNum"> 644 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_INPUT_ACCESS]) != 1) -<span class="lineNum"> 645 </span> : : { -<span class="lineNum"> 646 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 647 </span> : : &quot;Invalid IPT_INPUT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 648 </span> : : ); -<span class="lineNum"> 649 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 650 </span> : : } -<span class="lineNum"> 651 </span> : : -<span class="lineNum"> 652 </span> : : /* IPT output access. -<span class="lineNum"> 653 </span> : : */ -<span class="lineNum"> 654 </span> : : if(opts-&gt;config[CONF_IPT_OUTPUT_ACCESS] == NULL) -<span class="lineNum"> 655 </span> : : set_config_entry(opts, CONF_IPT_OUTPUT_ACCESS, -<span class="lineNum"> 656 </span> : : DEF_IPT_OUTPUT_ACCESS); -<span class="lineNum"> 657 </span> : : -<span class="lineNum"> 658 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_OUTPUT_ACCESS]) != 1) -<span class="lineNum"> 659 </span> : : { -<span class="lineNum"> 660 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 661 </span> : : &quot;Invalid IPT_OUTPUT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 662 </span> : : ); -<span class="lineNum"> 663 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 664 </span> : : } -<span class="lineNum"> 665 </span> : : -<span class="lineNum"> 666 </span> : : /* IPT forward access. -<span class="lineNum"> 667 </span> : : */ -<span class="lineNum"> 668 </span> : : if(opts-&gt;config[CONF_IPT_FORWARD_ACCESS] == NULL) -<span class="lineNum"> 669 </span> : : set_config_entry(opts, CONF_IPT_FORWARD_ACCESS, -<span class="lineNum"> 670 </span> : : DEF_IPT_FORWARD_ACCESS); -<span class="lineNum"> 671 </span> : : -<span class="lineNum"> 672 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_FORWARD_ACCESS]) != 1) -<span class="lineNum"> 673 </span> : : { -<span class="lineNum"> 674 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 675 </span> : : &quot;Invalid IPT_FORWARD_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 676 </span> : : ); -<span class="lineNum"> 677 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 678 </span> : : } -<span class="lineNum"> 679 </span> : : -<span class="lineNum"> 680 </span> : : /* IPT dnat access. -<span class="lineNum"> 681 </span> : : */ -<span class="lineNum"> 682 </span> : : if(opts-&gt;config[CONF_IPT_DNAT_ACCESS] == NULL) -<span class="lineNum"> 683 </span> : : set_config_entry(opts, CONF_IPT_DNAT_ACCESS, -<span class="lineNum"> 684 </span> : : DEF_IPT_DNAT_ACCESS); -<span class="lineNum"> 685 </span> : : -<span class="lineNum"> 686 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_DNAT_ACCESS]) != 1) -<span class="lineNum"> 687 </span> : : { -<span class="lineNum"> 688 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 689 </span> : : &quot;Invalid IPT_DNAT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 690 </span> : : ); -<span class="lineNum"> 691 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 692 </span> : : } -<span class="lineNum"> 693 </span> : : -<span class="lineNum"> 694 </span> : : /* IPT snat access. -<span class="lineNum"> 695 </span> : : */ -<span class="lineNum"> 696 </span> : : if(opts-&gt;config[CONF_IPT_SNAT_ACCESS] == NULL) -<span class="lineNum"> 697 </span> : : set_config_entry(opts, CONF_IPT_SNAT_ACCESS, -<span class="lineNum"> 698 </span> : : DEF_IPT_SNAT_ACCESS); -<span class="lineNum"> 699 </span> : : -<span class="lineNum"> 700 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_SNAT_ACCESS]) != 1) -<span class="lineNum"> 701 </span> : : { -<span class="lineNum"> 702 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 703 </span> : : &quot;Invalid IPT_SNAT_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 704 </span> : : ); -<span class="lineNum"> 705 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 706 </span> : : } -<span class="lineNum"> 707 </span> : : -<span class="lineNum"> 708 </span> : : /* IPT masquerade access. -<span class="lineNum"> 709 </span> : : */ -<span class="lineNum"> 710 </span> : : if(opts-&gt;config[CONF_IPT_MASQUERADE_ACCESS] == NULL) -<span class="lineNum"> 711 </span> : : set_config_entry(opts, CONF_IPT_MASQUERADE_ACCESS, -<span class="lineNum"> 712 </span> : : DEF_IPT_MASQUERADE_ACCESS); -<span class="lineNum"> 713 </span> : : -<span class="lineNum"> 714 </span> : : if(validate_ipt_chain_conf(opts-&gt;config[CONF_IPT_MASQUERADE_ACCESS]) != 1) -<span class="lineNum"> 715 </span> : : { -<span class="lineNum"> 716 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 717 </span> : : &quot;Invalid IPT_MASQUERADE_ACCESS specification, see fwknopd.conf comments&quot; -<span class="lineNum"> 718 </span> : : ); -<span class="lineNum"> 719 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 720 </span> : : } -<span class="lineNum"> 721 </span> : : -<span class="lineNum"> 722 </span> : : /* Check for the iptables 'comment' match at init time -<span class="lineNum"> 723 </span> : : */ -<span class="lineNum"> 724 </span> : : if(opts-&gt;config[CONF_ENABLE_IPT_COMMENT_CHECK] == NULL) -<span class="lineNum"> 725 </span> : : set_config_entry(opts, CONF_ENABLE_IPT_COMMENT_CHECK, -<span class="lineNum"> 726 </span> : : DEF_ENABLE_IPT_COMMENT_CHECK); -<span class="lineNum"> 727 </span> : : -<span class="lineNum"> 728 </span> : : #elif FIREWALL_IPFW -<span class="lineNum"> 729 </span> : : -<span class="lineNum"> 730 </span> : : /* Flush ipfw rules at init. -<span class="lineNum"> 731 </span> : : */ -<span class="lineNum"> 732 </span> : : if(opts-&gt;config[CONF_FLUSH_IPFW_AT_INIT] == NULL) -<span class="lineNum"> 733 </span> : : set_config_entry(opts, CONF_FLUSH_IPFW_AT_INIT, DEF_FLUSH_IPFW_AT_INIT); -<span class="lineNum"> 734 </span> : : -<span class="lineNum"> 735 </span> : : /* Flush ipfw rules at exit. -<span class="lineNum"> 736 </span> : : */ -<span class="lineNum"> 737 </span> : : if(opts-&gt;config[CONF_FLUSH_IPFW_AT_EXIT] == NULL) -<span class="lineNum"> 738 </span> : : set_config_entry(opts, CONF_FLUSH_IPFW_AT_EXIT, DEF_FLUSH_IPFW_AT_EXIT); -<span class="lineNum"> 739 </span> : : -<span class="lineNum"> 740 </span> : : /* Set IPFW start rule number. -<span class="lineNum"> 741 </span> : : */ -<span class="lineNum"> 742 </span> : : if(opts-&gt;config[CONF_IPFW_START_RULE_NUM] == NULL) -<span class="lineNum"> 743 </span> : : set_config_entry(opts, CONF_IPFW_START_RULE_NUM, -<span class="lineNum"> 744 </span> : : DEF_IPFW_START_RULE_NUM); -<span class="lineNum"> 745 </span> : : -<span class="lineNum"> 746 </span> : : /* Set IPFW max rules. -<span class="lineNum"> 747 </span> : : */ -<span class="lineNum"> 748 </span> : : if(opts-&gt;config[CONF_IPFW_MAX_RULES] == NULL) -<span class="lineNum"> 749 </span> : : set_config_entry(opts, CONF_IPFW_MAX_RULES, -<span class="lineNum"> 750 </span> : : DEF_IPFW_MAX_RULES); -<span class="lineNum"> 751 </span> : : -<span class="lineNum"> 752 </span> : : /* Set IPFW active set number. -<span class="lineNum"> 753 </span> : : */ -<span class="lineNum"> 754 </span> : : if(opts-&gt;config[CONF_IPFW_ACTIVE_SET_NUM] == NULL) -<span class="lineNum"> 755 </span> : : set_config_entry(opts, CONF_IPFW_ACTIVE_SET_NUM, -<span class="lineNum"> 756 </span> : : DEF_IPFW_ACTIVE_SET_NUM); -<span class="lineNum"> 757 </span> : : -<span class="lineNum"> 758 </span> : : /* Set IPFW expire set number. -<span class="lineNum"> 759 </span> : : */ -<span class="lineNum"> 760 </span> : : if(opts-&gt;config[CONF_IPFW_EXPIRE_SET_NUM] == NULL) -<span class="lineNum"> 761 </span> : : set_config_entry(opts, CONF_IPFW_EXPIRE_SET_NUM, -<span class="lineNum"> 762 </span> : : DEF_IPFW_EXPIRE_SET_NUM); -<span class="lineNum"> 763 </span> : : -<span class="lineNum"> 764 </span> : : /* Set IPFW Dynamic rule expiry interval. -<span class="lineNum"> 765 </span> : : */ -<span class="lineNum"> 766 </span> : : if(opts-&gt;config[CONF_IPFW_EXPIRE_PURGE_INTERVAL] == NULL) -<span class="lineNum"> 767 </span> : : set_config_entry(opts, CONF_IPFW_EXPIRE_PURGE_INTERVAL, -<span class="lineNum"> 768 </span> : : DEF_IPFW_EXPIRE_PURGE_INTERVAL); -<span class="lineNum"> 769 </span> : : -<span class="lineNum"> 770 </span> : : /* Set IPFW Dynamic rule expiry interval. -<span class="lineNum"> 771 </span> : : */ -<span class="lineNum"> 772 </span> : : if(opts-&gt;config[CONF_IPFW_ADD_CHECK_STATE] == NULL) -<span class="lineNum"> 773 </span> : : set_config_entry(opts, CONF_IPFW_ADD_CHECK_STATE, -<span class="lineNum"> 774 </span> : : DEF_IPFW_ADD_CHECK_STATE); -<span class="lineNum"> 775 </span> : : -<span class="lineNum"> 776 </span> : : #elif FIREWALL_PF -<span class="lineNum"> 777 </span> : : /* Set PF anchor name -<span class="lineNum"> 778 </span> : : */ -<span class="lineNum"> 779 </span> : : if(opts-&gt;config[CONF_PF_ANCHOR_NAME] == NULL) -<span class="lineNum"> 780 </span> : : set_config_entry(opts, CONF_PF_ANCHOR_NAME, -<span class="lineNum"> 781 </span> : : DEF_PF_ANCHOR_NAME); -<span class="lineNum"> 782 </span> : : -<span class="lineNum"> 783 </span> : : /* Set PF rule expiry interval. -<span class="lineNum"> 784 </span> : : */ -<span class="lineNum"> 785 </span> : : if(opts-&gt;config[CONF_PF_EXPIRE_INTERVAL] == NULL) -<span class="lineNum"> 786 </span> : : set_config_entry(opts, CONF_PF_EXPIRE_INTERVAL, -<span class="lineNum"> 787 </span> : : DEF_PF_EXPIRE_INTERVAL); -<span class="lineNum"> 788 </span> : : -<span class="lineNum"> 789 </span> : : #elif FIREWALL_IPF -<span class="lineNum"> 790 </span> : : /* --DSS Place-holder */ -<span class="lineNum"> 791 </span> : : -<span class="lineNum"> 792 </span> : : #endif /* FIREWALL type */ -<span class="lineNum"> 793 </span> : : -<span class="lineNum"> 794 </span> : : /* GPG Home dir. -<span class="lineNum"> 795 </span> : : */ -<span class="lineNum"> 796 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_GPG_HOME_DIR] == NULL)</span> -<span class="lineNum"> 797 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_GPG_HOME_DIR, DEF_GPG_HOME_DIR);</span> -<span class="lineNum"> 798 </span> : : -<span class="lineNum"> 799 </span> : : /* GPG executable -<span class="lineNum"> 800 </span> : : */ -<span class="lineNum"> 801 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_GPG_EXE] == NULL)</span> -<span class="lineNum"> 802 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_GPG_EXE, DEF_GPG_EXE);</span> -<span class="lineNum"> 803 </span> : : -<span class="lineNum"> 804 </span> : : /* Enable SPA over HTTP. -<span class="lineNum"> 805 </span> : : */ -<span class="lineNum"> 806 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_SPA_OVER_HTTP] == NULL)</span> -<span class="lineNum"> 807 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_SPA_OVER_HTTP,</span> -<span class="lineNum"> 808 </span> : : DEF_ENABLE_SPA_OVER_HTTP); -<span class="lineNum"> 809 </span> : : -<span class="lineNum"> 810 </span> : : /* Enable TCP server. -<span class="lineNum"> 811 </span> : : */ -<span class="lineNum"> 812 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_TCP_SERVER] == NULL)</span> -<span class="lineNum"> 813 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_TCP_SERVER, DEF_ENABLE_TCP_SERVER);</span> -<span class="lineNum"> 814 </span> : : -<span class="lineNum"> 815 </span> : : /* TCP Server port. -<span class="lineNum"> 816 </span> : : */ -<span class="lineNum"> 817 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_TCPSERV_PORT] == NULL)</span> -<span class="lineNum"> 818 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_TCPSERV_PORT, DEF_TCPSERV_PORT);</span> -<span class="lineNum"> 819 </span> : : -<span class="lineNum"> 820 </span> : : /* Enable UDP server. -<span class="lineNum"> 821 </span> : : */ -<span class="lineNum"> 822 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_ENABLE_UDP_SERVER] == NULL)</span> -<span class="lineNum"> 823 </span> : : { -<span class="lineNum"> 824 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 795 : if((strncasecmp(DEF_ENABLE_UDP_SERVER, &quot;Y&quot;, 1) == 0) &amp;&amp;</span> -<span class="lineNum"> 825 </span> :<span class="lineNoCov"> 0 : !opts-&gt;enable_udp_server)</span> -<span class="lineNum"> 826 </span> : : { -<span class="lineNum"> 827 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;pcap capture not compiled in, forcing UDP server mode&quot;);</span> -<span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : opts-&gt;enable_udp_server = 1;</span> -<span class="lineNum"> 829 </span> : : } -<span class="lineNum"> 830 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_ENABLE_UDP_SERVER, DEF_ENABLE_UDP_SERVER);</span> -<span class="lineNum"> 831 </span> : : } -<span class="lineNum"> 832 </span> : : -<span class="lineNum"> 833 </span> : : /* UDP Server port. -<span class="lineNum"> 834 </span> : : */ -<span class="lineNum"> 835 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_UDPSERV_PORT] == NULL)</span> -<span class="lineNum"> 836 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_UDPSERV_PORT, DEF_UDPSERV_PORT);</span> -<span class="lineNum"> 837 </span> : : -<span class="lineNum"> 838 </span> : : /* UDP server select() timeout in microseconds -<span class="lineNum"> 839 </span> : : */ -<span class="lineNum"> 840 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_UDPSERV_SELECT_TIMEOUT] == NULL)</span> -<span class="lineNum"> 841 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_UDPSERV_SELECT_TIMEOUT,</span> -<span class="lineNum"> 842 </span> : : DEF_UDPSERV_SELECT_TIMEOUT); -<span class="lineNum"> 843 </span> : : -<span class="lineNum"> 844 </span> : : /* Syslog identity. -<span class="lineNum"> 845 </span> : : */ -<span class="lineNum"> 846 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_IDENTITY] == NULL)</span> -<span class="lineNum"> 847 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_SYSLOG_IDENTITY, DEF_SYSLOG_IDENTITY);</span> -<span class="lineNum"> 848 </span> : : -<span class="lineNum"> 849 </span> : : /* Syslog facility. -<span class="lineNum"> 850 </span> : : */ -<span class="lineNum"> 851 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_FACILITY] == NULL)</span> -<span class="lineNum"> 852 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_SYSLOG_FACILITY, DEF_SYSLOG_FACILITY);</span> -<span class="lineNum"> 853 </span> : : -<span class="lineNum"> 854 </span> : : -<span class="lineNum"> 855 </span> : : /* Validate integer variable ranges -<span class="lineNum"> 856 </span> : : */ -<span class="lineNum"> 857 </span> :<span class="lineCov"> 795 : validate_int_var_ranges(opts);</span> -<span class="lineNum"> 858 </span> : : -<span class="lineNum"> 859 </span> : : /* Some options just trigger some output of information, or trigger an -<span class="lineNum"> 860 </span> : : * external function, but do not actually start fwknopd. If any of those -<span class="lineNum"> 861 </span> : : * are set, we can return here an skip the validation routines as all -<span class="lineNum"> 862 </span> : : * other options will be ignored anyway. -<span class="lineNum"> 863 </span> : : * -<span class="lineNum"> 864 </span> : : * These are also mutually exclusive (for now). -<span class="lineNum"> 865 </span> : : */ -<span class="lineNum"> 866 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if((opts-&gt;dump_config + opts-&gt;kill + opts-&gt;restart + opts-&gt;status) == 1)</span> -<span class="lineNum"> 867 </span> : : return; -<span class="lineNum"> 868 </span> : : -<span class="lineNum"> 869 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if((opts-&gt;dump_config + opts-&gt;kill + opts-&gt;restart + opts-&gt;status) &gt; 1)</span> -<span class="lineNum"> 870 </span> : : { -<span class="lineNum"> 871 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 872 </span> : : &quot;The -D, -K, -R, and -S options are mutually exclusive. Pick only one.&quot; -<span class="lineNum"> 873 </span> : : ); -<span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 875 </span> : : } -<span class="lineNum"> 876 </span> : : -<span class="lineNum"> 877 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_FIREWALL_EXE] == NULL)</span> -<span class="lineNum"> 878 </span> : : { -<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 880 </span> : : &quot;[*] No firewall command executable is set. Please check FIREWALL_EXE in fwknopd.conf.&quot; -<span class="lineNum"> 881 </span> : : ); -<span class="lineNum"> 882 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 883 </span> : : } -<span class="lineNum"> 884 </span> : : -<span class="lineNum"> 885 </span> : : return; -<span class="lineNum"> 886 </span> : : } -<a name="887"><span class="lineNum"> 887 </span> : : </a> -<span class="lineNum"> 888 </span> : : void -<span class="lineNum"> 889 </span> :<span class="lineCov"> 1814 : set_preconfig_entries(fko_srv_options_t *opts)</span> -<span class="lineNum"> 890 </span> : : { -<span class="lineNum"> 891 </span> : : /* First, set any default or otherwise static settings here. Some may -<span class="lineNum"> 892 </span> : : * end up being overwritten via config file or command-line. -<span class="lineNum"> 893 </span> : : */ -<span class="lineNum"> 894 </span> : : -<span class="lineNum"> 895 </span> : : /* Setup the firewall executable based on build-time info. -<span class="lineNum"> 896 </span> : : * --DSS Note: We will want to either force external script mode, or -<span class="lineNum"> 897 </span> : : * error out if we do not have a firewall executable defined. -<span class="lineNum"> 898 </span> : : */ -<span class="lineNum"> 899 </span> : : #ifdef FIREWALL_EXE -<span class="lineNum"> 900 </span> :<span class="lineCov"> 1814 : set_config_entry(opts, CONF_FIREWALL_EXE, FIREWALL_EXE);</span> -<span class="lineNum"> 901 </span> : : #endif -<span class="lineNum"> 902 </span> : : -<span class="lineNum"> 903 </span> :<span class="lineCov"> 1814 : }</span> -<span class="lineNum"> 904 </span> : : -<span class="lineNum"> 905 </span> : : /* Initialize program configuration via config file and/or command-line -<span class="lineNum"> 906 </span> : : * switches. -<a name="907"><span class="lineNum"> 907 </span> : : */</a> -<span class="lineNum"> 908 </span> : : void -<span class="lineNum"> 909 </span> :<span class="lineCov"> 1814 : config_init(fko_srv_options_t *opts, int argc, char **argv)</span> -<span class="lineNum"> 910 </span> : : { -<span class="lineNum"> 911 </span> : : int cmd_arg, index, is_err; -<span class="lineNum"> 912 </span> :<span class="lineCov"> 1814 : unsigned char got_conf_file = 0, got_override_config = 0;</span> -<span class="lineNum"> 913 </span> : : -<span class="lineNum"> 914 </span> :<span class="lineCov"> 1814 : char override_file[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 915 </span> : : char *ndx, *cmrk; -<span class="lineNum"> 916 </span> : : -<span class="lineNum"> 917 </span> : : /* Zero out options and opts_track. -<span class="lineNum"> 918 </span> : : */ -<span class="lineNum"> 919 </span> : : memset(opts, 0x00, sizeof(fko_srv_options_t)); -<span class="lineNum"> 920 </span> : : -<span class="lineNum"> 921 </span> : : /* Set some preconfiguration options (i.e. build-time defaults) -<span class="lineNum"> 922 </span> : : */ -<span class="lineNum"> 923 </span> :<span class="lineCov"> 1814 : set_preconfig_entries(opts);</span> -<span class="lineNum"> 924 </span> : : -<span class="lineNum"> 925 </span> : : /* In case this is a re-config. -<span class="lineNum"> 926 </span> : : */ -<span class="lineNum"> 927 </span> :<span class="lineCov"> 1814 : optind = 0;</span> -<span class="lineNum"> 928 </span> : : -<span class="lineNum"> 929 </span> : : /* First, scan the command-line args for -h/--help or an alternate -<span class="lineNum"> 930 </span> : : * configuration file. If we find an alternate config file, use it, -<span class="lineNum"> 931 </span> : : * otherwise use the default. We also grab any override config files -<span class="lineNum"> 932 </span> : : * as well. -<span class="lineNum"> 933 </span> : : */ -<span class="lineNum"> 934 </span> [<span class="branchCov" title="Branch 1 was taken 16471 times"> + </span><span class="branchCov" title="Branch 2 was taken 1814 times"> + </span>]:<span class="lineCov"> 20099 : while ((cmd_arg = getopt_long(argc, argv,</span> -<span class="lineNum"> 935 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { -<span class="lineNum"> 936 </span> : : -<span class="lineNum"> 937 </span> : : /* If help is wanted, give it and exit. -<span class="lineNum"> 938 </span> : : */ -<span class="lineNum"> 939 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span><span class="branchCov" title="Branch 2 was taken 1295 times"> + </span><span class="branchCov" title="Branch 3 was taken 13362 times"> + </span>]:<span class="lineCov"> 16471 : switch(cmd_arg) {</span> -<span class="lineNum"> 940 </span> : : case 'h': -<span class="lineNum"> 941 </span> :<span class="lineNoCov"> 0 : usage();</span> -<span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 943 </span> : : -<span class="lineNum"> 944 </span> : : /* Look for configuration file arg. -<span class="lineNum"> 945 </span> : : */ -<span class="lineNum"> 946 </span> : : case 'c': -<span class="lineNum"> 947 </span> :<span class="lineCov"> 1814 : set_config_entry(opts, CONF_CONFIG_FILE, optarg);</span> -<span class="lineNum"> 948 </span> :<span class="lineCov"> 1814 : got_conf_file++;</span> -<span class="lineNum"> 949 </span> : : -<span class="lineNum"> 950 </span> : : /* If we already have the config_override option, we are done. -<span class="lineNum"> 951 </span> : : */ -<span class="lineNum"> 952 </span> [<span class="branchCov" title="Branch 0 was taken 1814 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1814 : if(got_override_config &gt; 0)</span> -<span class="lineNum"> 953 </span> : : break; -<span class="lineNum"> 954 </span> : : -<span class="lineNum"> 955 </span> : : /* Look for override configuration file arg. -<span class="lineNum"> 956 </span> : : */ -<span class="lineNum"> 957 </span> : : case 'O': -<span class="lineNum"> 958 </span> :<span class="lineCov"> 3109 : set_config_entry(opts, CONF_OVERRIDE_CONFIG, optarg);</span> -<span class="lineNum"> 959 </span> :<span class="lineCov"> 4923 : got_override_config++;</span> -<span class="lineNum"> 960 </span> : : -<span class="lineNum"> 961 </span> : : /* If we already have the conf_file option, we are done. -<span class="lineNum"> 962 </span> : : */ -<span class="lineNum"> 963 </span> : : if(got_conf_file &gt; 0) -<span class="lineNum"> 964 </span> : : break; -<span class="lineNum"> 965 </span> : : } -<span class="lineNum"> 966 </span> : : } -<span class="lineNum"> 967 </span> : : -<span class="lineNum"> 968 </span> : : /* If no alternate configuration file was specified, we use the -<span class="lineNum"> 969 </span> : : * default. -<span class="lineNum"> 970 </span> : : */ -<span class="lineNum"> 971 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span>]:<span class="lineCov"> 1814 : if(opts-&gt;config[CONF_CONFIG_FILE] == NULL)</span> -<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_CONFIG_FILE, DEF_CONFIG_FILE);</span> -<span class="lineNum"> 973 </span> : : -<span class="lineNum"> 974 </span> : : /* Parse configuration file to populate any params not already specified -<span class="lineNum"> 975 </span> : : * via command-line options. -<span class="lineNum"> 976 </span> : : */ -<span class="lineNum"> 977 </span> :<span class="lineCov"> 1814 : parse_config_file(opts, opts-&gt;config[CONF_CONFIG_FILE]);</span> -<span class="lineNum"> 978 </span> : : -<span class="lineNum"> 979 </span> : : /* If there are override configuration entries, process them -<span class="lineNum"> 980 </span> : : * here. -<span class="lineNum"> 981 </span> : : */ -<span class="lineNum"> 982 </span> [<span class="branchCov" title="Branch 0 was taken 1814 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 1814 : if(opts-&gt;config[CONF_OVERRIDE_CONFIG] != NULL)</span> -<span class="lineNum"> 983 </span> : : { -<span class="lineNum"> 984 </span> : : /* Make a copy of the override_config string so we can munge it. -<span class="lineNum"> 985 </span> : : */ -<span class="lineNum"> 986 </span> :<span class="lineCov"> 1814 : strlcpy(override_file, opts-&gt;config[CONF_OVERRIDE_CONFIG], sizeof(override_file));</span> -<span class="lineNum"> 987 </span> : : -<span class="lineNum"> 988 </span> :<span class="lineCov"> 1814 : ndx = override_file;</span> -<span class="lineNum"> 989 </span> :<span class="lineCov"> 1814 : cmrk = strchr(ndx, ',');</span> -<span class="lineNum"> 990 </span> : : -<span class="lineNum"> 991 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span>]:<span class="lineCov"> 1814 : if(cmrk == NULL)</span> -<span class="lineNum"> 992 </span> : : { -<span class="lineNum"> 993 </span> : : /* Only one to process... -<span class="lineNum"> 994 </span> : : */ -<span class="lineNum"> 995 </span> :<span class="lineCov"> 1814 : parse_config_file(opts, ndx);</span> -<span class="lineNum"> 996 </span> : : -<span class="lineNum"> 997 </span> : : } else { -<span class="lineNum"> 998 </span> : : /* Walk the string pulling the next config override -<span class="lineNum"> 999 </span> : : * at the comma delimiters. -<span class="lineNum"> 1000 </span> : : */ -<span class="lineNum"> 1001 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(cmrk != NULL) {</span> -<span class="lineNum"> 1002 </span> :<span class="lineNoCov"> 0 : *cmrk = '\0';</span> -<span class="lineNum"> 1003 </span> :<span class="lineNoCov"> 0 : parse_config_file(opts, ndx);</span> -<span class="lineNum"> 1004 </span> :<span class="lineNoCov"> 0 : ndx = cmrk + 1;</span> -<span class="lineNum"> 1005 </span> :<span class="lineNoCov"> 0 : cmrk = strchr(ndx, ',');</span> -<span class="lineNum"> 1006 </span> : : } -<span class="lineNum"> 1007 </span> : : -<span class="lineNum"> 1008 </span> : : /* Process the last entry -<span class="lineNum"> 1009 </span> : : */ -<span class="lineNum"> 1010 </span> :<span class="lineNoCov"> 0 : parse_config_file(opts, ndx);</span> -<span class="lineNum"> 1011 </span> : : } -<span class="lineNum"> 1012 </span> : : } -<span class="lineNum"> 1013 </span> : : -<span class="lineNum"> 1014 </span> : : /* Set up the verbosity level according to the value found in the -<span class="lineNum"> 1015 </span> : : * config files */ -<span class="lineNum"> 1016 </span> [<span class="branchCov" title="Branch 0 was taken 451 times"> + </span><span class="branchCov" title="Branch 1 was taken 1363 times"> + </span>]:<span class="lineCov"> 1814 : if (opts-&gt;config[CONF_VERBOSE] != NULL)</span> -<span class="lineNum"> 1017 </span> : : { -<span class="lineNum"> 1018 </span> :<span class="lineCov"> 451 : opts-&gt;verbose = strtol_wrapper(opts-&gt;config[CONF_VERBOSE], 0, -1,</span> -<span class="lineNum"> 1019 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 1020 </span> [<span class="branchCov" title="Branch 0 was taken 17 times"> + </span><span class="branchCov" title="Branch 1 was taken 434 times"> + </span>]:<span class="lineCov"> 451 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 1021 </span> : : { -<span class="lineNum"> 1022 </span> :<span class="lineCov"> 17 : log_msg(LOG_ERR, &quot;[*] VERBOSE value '%s' not in the range (&gt;0)&quot;,</span> -<span class="lineNum"> 1023 </span> : : opts-&gt;config[CONF_VERBOSE]); -<span class="lineNum"> 1024 </span> :<span class="lineCov"> 17 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1025 </span> : : } -<span class="lineNum"> 1026 </span> : : } -<span class="lineNum"> 1027 </span> : : -<span class="lineNum"> 1028 </span> : : /* Reset the options index so we can run through them again. -<span class="lineNum"> 1029 </span> : : */ -<span class="lineNum"> 1030 </span> :<span class="lineCov"> 1797 : optind = 0;</span> -<span class="lineNum"> 1031 </span> : : -<span class="lineNum"> 1032 </span> : : /* Last, but not least, we process command-line options (some of which -<span class="lineNum"> 1033 </span> : : * may override configuration file options. -<span class="lineNum"> 1034 </span> : : */ -<span class="lineNum"> 1035 </span> [<span class="branchCov" title="Branch 1 was taken 11510 times"> + </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 14102 : while ((cmd_arg = getopt_long(argc, argv,</span> -<span class="lineNum"> 1036 </span> : : GETOPTS_OPTION_STRING, cmd_opts, &amp;index)) != -1) { -<span class="lineNum"> 1037 </span> : : -<span class="lineNum"> 1038 </span> [<span class="branchCov" title="Branch 0 was taken 1002 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 1797 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span> :<span class="lineCov"> 11510 : switch(cmd_arg) {</span> -<span class="lineNum"> </span><span class="branchCov" title="Branch 4 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 5 was not taken"> - </span><span class="branchNoCov" title="Branch 6 was not taken"> - </span><span class="branchCov" title="Branch 7 was taken 795 times"> + </span><span class="branchCov" title="Branch 8 was taken 795 times"> + </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 9 was not taken"> - </span><span class="branchNoCov" title="Branch 10 was not taken"> - </span><span class="branchNoCov" title="Branch 11 was not taken"> - </span><span class="branchNoCov" title="Branch 12 was not taken"> - </span><span class="branchNoCov" title="Branch 13 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 14 was not taken"> - </span><span class="branchNoCov" title="Branch 15 was not taken"> - </span><span class="branchNoCov" title="Branch 16 was not taken"> - </span><span class="branchNoCov" title="Branch 17 was not taken"> - </span><span class="branchNoCov" title="Branch 18 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 19 was not taken"> - </span><span class="branchNoCov" title="Branch 20 was not taken"> - </span><span class="branchNoCov" title="Branch 21 was not taken"> - </span><span class="branchNoCov" title="Branch 22 was not taken"> - </span><span class="branchNoCov" title="Branch 23 was not taken"> - </span> -<span class="lineNum"> </span><span class="branchNoCov" title="Branch 24 was not taken"> - </span><span class="branchCov" title="Branch 25 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 26 was not taken"> - </span><span class="branchCov" title="Branch 27 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 28 was not taken"> - </span> -<span class="lineNum"> </span> <span class="branchCov" title="Branch 29 was taken 2385 times"> + </span><span class="branchNoCov" title="Branch 30 was not taken"> - </span><span class="branchNoCov" title="Branch 31 was not taken"> - </span><span class="branchNoCov" title="Branch 32 was not taken"> - </span> -<span class="lineNum"> </span> <span class="branchCov" title="Branch 33 was taken 3075 times"> + </span>] -<span class="lineNum"> 1039 </span> : : case 'A': -<span class="lineNum"> 1040 </span> : : #if AFL_FUZZING -<span class="lineNum"> 1041 </span> : : opts-&gt;afl_fuzzing = 1; -<span class="lineNum"> 1042 </span> : : #else -<span class="lineNum"> 1043 </span> :<span class="lineCov"> 1002 : log_msg(LOG_ERR, &quot;[*] fwknopd not compiled with AFL fuzzing support&quot;);</span> -<span class="lineNum"> 1044 </span> :<span class="lineCov"> 1002 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1045 </span> : : #endif -<span class="lineNum"> 1046 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1047 </span> : : case AFL_PKT_FILE: -<span class="lineNum"> 1048 </span> : : #if AFL_FUZZING -<span class="lineNum"> 1049 </span> : : opts-&gt;afl_fuzzing = 1; -<span class="lineNum"> 1050 </span> : : set_config_entry(opts, CONF_AFL_PKT_FILE, optarg); -<span class="lineNum"> 1051 </span> : : #else -<span class="lineNum"> 1052 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] fwknopd not compiled with AFL fuzzing support&quot;);</span> -<span class="lineNum"> 1053 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1054 </span> : : #endif -<span class="lineNum"> 1055 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1056 </span> : : case 'a': -<span class="lineNum"> 1057 </span> :<span class="lineCov"> 1797 : set_config_entry(opts, CONF_ACCESS_FILE, optarg);</span> -<span class="lineNum"> 1058 </span> :<span class="lineCov"> 1797 : break;</span> -<span class="lineNum"> 1059 </span> : : case 'c': -<span class="lineNum"> 1060 </span> : : /* This was handled earlier */ -<span class="lineNum"> 1061 </span> : : break; -<span class="lineNum"> 1062 </span> : : case 'C': -<span class="lineNum"> 1063 </span> :<span class="lineNoCov"> 0 : opts-&gt;packet_ctr_limit = strtol_wrapper(optarg,</span> -<span class="lineNum"> 1064 </span> : : 0, (2 &lt;&lt; 30), NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 1065 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 1066 </span> : : { -<span class="lineNum"> 1067 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1068 </span> : : &quot;[*] invalid -C packet count limit '%s'&quot;, -<span class="lineNum"> 1069 </span> : : optarg); -<span class="lineNum"> 1070 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1071 </span> : : } -<span class="lineNum"> 1072 </span> : : break; -<span class="lineNum"> 1073 </span> : : case 'd': -<span class="lineNum"> 1074 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 1075 </span> :<span class="lineCov"> 71 : set_config_entry(opts, CONF_DIGEST_FILE, optarg);</span> -<span class="lineNum"> 1076 </span> : : #else -<span class="lineNum"> 1077 </span> : : set_config_entry(opts, CONF_DIGEST_DB_FILE, optarg); -<span class="lineNum"> 1078 </span> : : #endif -<span class="lineNum"> 1079 </span> :<span class="lineCov"> 71 : break;</span> -<span class="lineNum"> 1080 </span> : : case 'D': -<span class="lineNum"> 1081 </span> :<span class="lineNoCov"> 0 : opts-&gt;dump_config = 1;</span> -<span class="lineNum"> 1082 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1083 </span> : : case DUMP_SERVER_ERR_CODES: -<span class="lineNum"> 1084 </span> :<span class="lineNoCov"> 0 : dump_server_errors();</span> -<span class="lineNum"> 1085 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 1086 </span> : : case EXIT_AFTER_PARSE_CONFIG: -<span class="lineNum"> 1087 </span> :<span class="lineCov"> 795 : opts-&gt;exit_after_parse_config = 1;</span> -<span class="lineNum"> 1088 </span> :<span class="lineCov"> 795 : opts-&gt;foreground = 1;</span> -<span class="lineNum"> 1089 </span> :<span class="lineCov"> 795 : break;</span> -<span class="lineNum"> 1090 </span> : : case 'f': -<span class="lineNum"> 1091 </span> :<span class="lineCov"> 795 : opts-&gt;foreground = 1;</span> -<span class="lineNum"> 1092 </span> :<span class="lineCov"> 795 : break;</span> -<span class="lineNum"> 1093 </span> : : case FAULT_INJECTION_TAG: -<span class="lineNum"> 1094 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 1095 </span> : : set_config_entry(opts, CONF_FAULT_INJECTION_TAG, optarg); -<span class="lineNum"> 1096 </span> : : #else -<span class="lineNum"> 1097 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] fwknopd not compiled with libfiu support&quot;);</span> -<span class="lineNum"> 1098 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1099 </span> : : #endif -<span class="lineNum"> 1100 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1101 </span> : : case FW_LIST: -<span class="lineNum"> 1102 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_list = 1;</span> -<span class="lineNum"> 1103 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1104 </span> : : case FW_LIST_ALL: -<span class="lineNum"> 1105 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_list = 1;</span> -<span class="lineNum"> 1106 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_list_all = 1;</span> -<span class="lineNum"> 1107 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1108 </span> : : case FW_FLUSH: -<span class="lineNum"> 1109 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_flush = 1;</span> -<span class="lineNum"> 1110 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1111 </span> : : case GPG_HOME_DIR: -<span class="lineNum"> 1112 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_valid_dir(optarg))</span> -<span class="lineNum"> 1113 </span> : : { -<span class="lineNum"> 1114 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_GPG_HOME_DIR, optarg);</span> -<span class="lineNum"> 1115 </span> : : } -<span class="lineNum"> 1116 </span> : : else -<span class="lineNum"> 1117 </span> : : { -<span class="lineNum"> 1118 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1119 </span> : : &quot;[*] Directory '%s' could not stat()/does not exist?&quot;, -<span class="lineNum"> 1120 </span> : : optarg); -<span class="lineNum"> 1121 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1122 </span> : : } -<span class="lineNum"> 1123 </span> : : break; -<span class="lineNum"> 1124 </span> : : case 'i': -<span class="lineNum"> 1125 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_PCAP_INTF, optarg);</span> -<span class="lineNum"> 1126 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1127 </span> : : case FIREWD_DISABLE_CHECK_SUPPORT: -<span class="lineNum"> 1128 </span> :<span class="lineNoCov"> 0 : opts-&gt;firewd_disable_check_support = 1;</span> -<span class="lineNum"> 1129 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1130 </span> : : case IPT_DISABLE_CHECK_SUPPORT: -<span class="lineNum"> 1131 </span> :<span class="lineNoCov"> 0 : opts-&gt;ipt_disable_check_support = 1;</span> -<span class="lineNum"> 1132 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1133 </span> : : case 'K': -<span class="lineNum"> 1134 </span> :<span class="lineNoCov"> 0 : opts-&gt;kill = 1;</span> -<span class="lineNum"> 1135 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1136 </span> : : case 'l': -<span class="lineNum"> 1137 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_LOCALE, optarg);</span> -<span class="lineNum"> 1138 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1139 </span> : : case 'O': -<span class="lineNum"> 1140 </span> : : /* This was handled earlier */ -<span class="lineNum"> 1141 </span> : : break; -<span class="lineNum"> 1142 </span> : : case 'p': -<span class="lineNum"> 1143 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_FWKNOP_PID_FILE, optarg);</span> -<span class="lineNum"> 1144 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1145 </span> : : case 'P': -<span class="lineNum"> 1146 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_PCAP_FILTER, optarg);</span> -<span class="lineNum"> 1147 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1148 </span> : : case PCAP_FILE: -<span class="lineNum"> 1149 </span> :<span class="lineNoCov"> 0 : set_config_entry(opts, CONF_PCAP_FILE, optarg);</span> -<span class="lineNum"> 1150 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1151 </span> : : case ENABLE_PCAP_ANY_DIRECTION: -<span class="lineNum"> 1152 </span> :<span class="lineNoCov"> 0 : opts-&gt;pcap_any_direction = 1;</span> -<span class="lineNum"> 1153 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1154 </span> : : case ROTATE_DIGEST_CACHE: -<span class="lineNum"> 1155 </span> :<span class="lineNoCov"> 0 : opts-&gt;rotate_digest_cache = 1;</span> -<span class="lineNum"> 1156 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1157 </span> : : case 'R': -<span class="lineNum"> 1158 </span> :<span class="lineNoCov"> 0 : opts-&gt;restart = 1;</span> -<span class="lineNum"> 1159 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1160 </span> : : case 'r': -<span class="lineNum"> 1161 </span> :<span class="lineCov"> 795 : set_config_entry(opts, CONF_FWKNOP_RUN_DIR, optarg);</span> -<span class="lineNum"> 1162 </span> :<span class="lineCov"> 795 : break;</span> -<span class="lineNum"> 1163 </span> : : case 'S': -<span class="lineNum"> 1164 </span> :<span class="lineNoCov"> 0 : opts-&gt;status = 1;</span> -<span class="lineNum"> 1165 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1166 </span> : : case 't': -<span class="lineNum"> 1167 </span> :<span class="lineCov"> 795 : opts-&gt;test = 1;</span> -<span class="lineNum"> 1168 </span> :<span class="lineCov"> 795 : break;</span> -<span class="lineNum"> 1169 </span> : : case 'U': -<span class="lineNum"> 1170 </span> :<span class="lineNoCov"> 0 : opts-&gt;enable_udp_server = 1;</span> -<span class="lineNum"> 1171 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1172 </span> : : /* Verbosity level */ -<span class="lineNum"> 1173 </span> : : case 'v': -<span class="lineNum"> 1174 </span> :<span class="lineCov"> 2385 : opts-&gt;verbose++;</span> -<span class="lineNum"> 1175 </span> :<span class="lineCov"> 2385 : break;</span> -<span class="lineNum"> 1176 </span> : : case SYSLOG_ENABLE: -<span class="lineNum"> 1177 </span> :<span class="lineNoCov"> 0 : opts-&gt;syslog_enable = 1;</span> -<span class="lineNum"> 1178 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 1179 </span> : : case 'V': -<span class="lineNum"> 1180 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;fwknopd server %s\n&quot;, MY_VERSION);</span> -<span class="lineNum"> 1181 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 1182 </span> : : default: -<span class="lineNum"> 1183 </span> :<span class="lineNoCov"> 0 : usage();</span> -<span class="lineNum"> 1184 </span> :<span class="lineCov"> 9230 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 1185 </span> : : } -<span class="lineNum"> 1186 </span> : : } -<span class="lineNum"> 1187 </span> : : -<span class="lineNum"> 1188 </span> : : /* Now that we have all of our options set, and we are actually going to -<span class="lineNum"> 1189 </span> : : * start fwknopd, we can validate them. -<span class="lineNum"> 1190 </span> : : */ -<span class="lineNum"> 1191 </span> :<span class="lineCov"> 795 : validate_options(opts);</span> -<span class="lineNum"> 1192 </span> : : -<span class="lineNum"> 1193 </span> :<span class="lineCov"> 795 : return;</span> -<span class="lineNum"> 1194 </span> : : } -<span class="lineNum"> 1195 </span> : : -<span class="lineNum"> 1196 </span> : : /* Dump the configuration -<a name="1197"><span class="lineNum"> 1197 </span> : : */</a> -<span class="lineNum"> 1198 </span> : : void -<span class="lineNum"> 1199 </span> :<span class="lineCov"> 249 : dump_config(const fko_srv_options_t *opts)</span> -<span class="lineNum"> 1200 </span> : : { -<span class="lineNum"> 1201 </span> : : int i; -<span class="lineNum"> 1202 </span> : : -<span class="lineNum"> 1203 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;Current fwknopd config settings:\n&quot;);</span> -<span class="lineNum"> 1204 </span> : : -<span class="lineNum"> 1205 </span> [<span class="branchCov" title="Branch 1 was taken 11952 times"> + </span><span class="branchCov" title="Branch 2 was taken 249 times"> + </span>]:<span class="lineCov"> 12201 : for(i=0; i&lt;NUMBER_OF_CONFIG_ENTRIES; i++)</span> -<span class="lineNum"> 1206 </span> [<span class="branchCov" title="Branch 0 was taken 10458 times"> + </span><span class="branchCov" title="Branch 1 was taken 1494 times"> + </span>]:<span class="lineCov"> 11952 : fprintf(stdout, &quot;%3i. %-28s = '%s'\n&quot;,</span> -<span class="lineNum"> 1207 </span> : : i, -<span class="lineNum"> 1208 </span> : : config_map[i], -<span class="lineNum"> 1209 </span> :<span class="lineCov"> 11952 : (opts-&gt;config[i] == NULL) ? &quot;&lt;not set&gt;&quot; : opts-&gt;config[i]</span> -<span class="lineNum"> 1210 </span> : : ); -<span class="lineNum"> 1211 </span> : : -<span class="lineNum"> 1212 </span> :<span class="lineCov"> 249 : fprintf(stdout, &quot;\n&quot;);</span> -<span class="lineNum"> 1213 </span> :<span class="lineCov"> 249 : fflush(stdout);</span> -<span class="lineNum"> 1214 </span> :<span class="lineCov"> 249 : }</span> -<span class="lineNum"> 1215 </span> : : -<span class="lineNum"> 1216 </span> : : /* Print usage message... -<a name="1217"><span class="lineNum"> 1217 </span> : : */</a> -<span class="lineNum"> 1218 </span> : : void -<span class="lineNum"> 1219 </span> :<span class="lineNoCov"> 0 : usage(void)</span> -<span class="lineNum"> 1220 </span> : : { -<span class="lineNum"> 1221 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;\n%s server version %s\n%s - http://www.cipherdyne.org/fwknop/\n\n&quot;,</span> -<span class="lineNum"> 1222 </span> : : MY_NAME, MY_VERSION, MY_DESC); -<span class="lineNum"> 1223 </span> :<span class="lineNoCov"> 0 : fprintf(stdout,</span> -<span class="lineNum"> 1224 </span> : : &quot;Usage: fwknopd [options]\n\n&quot; -<span class="lineNum"> 1225 </span> : : &quot; -a, --access-file - Specify an alternate access.conf file.\n&quot; -<span class="lineNum"> 1226 </span> : : &quot; -c, --config-file - Specify an alternate configuration file.\n&quot; -<span class="lineNum"> 1227 </span> : : &quot; -f, --foreground - Run fwknopd in the foreground (do not become\n&quot; -<span class="lineNum"> 1228 </span> : : &quot; a background daemon).\n&quot; -<span class="lineNum"> 1229 </span> : : &quot; -i, --interface - Specify interface to listen for incoming SPA\n&quot; -<span class="lineNum"> 1230 </span> : : &quot; packets.\n&quot; -<span class="lineNum"> 1231 </span> : : &quot; -C, --packet-limit - Limit the number of candidate SPA packets to\n&quot; -<span class="lineNum"> 1232 </span> : : &quot; process and exit when this limit is reached.\n&quot; -<span class="lineNum"> 1233 </span> : : &quot; -d, --digest-file - Specify an alternate digest.cache file.\n&quot; -<span class="lineNum"> 1234 </span> : : &quot; -D, --dump-config - Dump the current fwknop configuration values.\n&quot; -<span class="lineNum"> 1235 </span> : : &quot; -K, --kill - Kill the currently running fwknopd.\n&quot; -<span class="lineNum"> 1236 </span> : : &quot; -l, --locale - Provide a locale setting other than the system\n&quot; -<span class="lineNum"> 1237 </span> : : &quot; default.\n&quot; -<span class="lineNum"> 1238 </span> : : &quot; -O, --override-config - Specify a file with configuration entries that will\n&quot; -<span class="lineNum"> 1239 </span> : : &quot; overide those in fwknopd.conf\n&quot; -<span class="lineNum"> 1240 </span> : : &quot; -p, --pid-file - Specify an alternate fwknopd.pid file.\n&quot; -<span class="lineNum"> 1241 </span> : : &quot; -P, --pcap-filter - Specify a Berkeley packet filter statement to\n&quot; -<span class="lineNum"> 1242 </span> : : &quot; override the PCAP_FILTER variable in fwknopd.conf.\n&quot; -<span class="lineNum"> 1243 </span> : : &quot; -R, --restart - Force the currently running fwknopd to restart.\n&quot; -<span class="lineNum"> 1244 </span> : : &quot; --rotate-digest-cache\n&quot; -<span class="lineNum"> 1245 </span> : : &quot; - Rotate the digest cache file by renaming the file\n&quot; -<span class="lineNum"> 1246 </span> : : &quot; to the same path with the -old suffix.\n&quot; -<span class="lineNum"> 1247 </span> : : &quot; -r, --run-dir - Set path to local state run directory.\n&quot; -<span class="lineNum"> 1248 </span> : : &quot; - Rotate the digest cache file by renaming it to\n&quot; -<span class="lineNum"> 1249 </span> : : &quot; '&lt;name&gt;-old', and starting a new one.\n&quot; -<span class="lineNum"> 1250 </span> : : &quot; -S, --status - Display the status of any running fwknopd process.\n&quot; -<span class="lineNum"> 1251 </span> : : &quot; -t, --test - Test mode, process SPA packets but do not make any\n&quot; -<span class="lineNum"> 1252 </span> : : &quot; firewall modifications.\n&quot; -<span class="lineNum"> 1253 </span> : : &quot; -U, --udp-server - Set UDP server mode.\n&quot; -<span class="lineNum"> 1254 </span> : : &quot; -v, --verbose - Set verbose mode.\n&quot; -<span class="lineNum"> 1255 </span> : : &quot; --syslog-enable - Allow messages to be sent to syslog even if the\n&quot; -<span class="lineNum"> 1256 </span> : : &quot; foreground mode is set.\n&quot; -<span class="lineNum"> 1257 </span> : : &quot; -V, --version - Print version number.\n&quot; -<span class="lineNum"> 1258 </span> : : &quot; -A, --afl-fuzzing - Run in American Fuzzy Lop (AFL) fuzzing mode so\n&quot; -<span class="lineNum"> 1259 </span> : : &quot; that plaintext SPA packets are accepted via stdin.\n&quot; -<span class="lineNum"> 1260 </span> : : &quot; -h, --help - Print this usage message and exit.\n&quot; -<span class="lineNum"> 1261 </span> : : &quot; --dump-serv-err-codes - List all server error codes (only needed by the\n&quot; -<span class="lineNum"> 1262 </span> : : &quot; test suite).\n&quot; -<span class="lineNum"> 1263 </span> : : &quot; --exit-parse-config - Parse config files and exit.\n&quot; -<span class="lineNum"> 1264 </span> : : &quot; --fault-injection-tag - Enable a fault injection tag (only needed by the\n&quot; -<span class="lineNum"> 1265 </span> : : &quot; test suite).\n&quot; -<span class="lineNum"> 1266 </span> : : &quot; --pcap-file - Read potential SPA packets from an existing pcap\n&quot; -<span class="lineNum"> 1267 </span> : : &quot; file.\n&quot; -<span class="lineNum"> 1268 </span> : : &quot; --pcap-any-direction - By default fwknopd processes packets that are\n&quot; -<span class="lineNum"> 1269 </span> : : &quot; sent to the sniffing interface, but this option\n&quot; -<span class="lineNum"> 1270 </span> : : &quot; enables processing of packets that originate from\n&quot; -<span class="lineNum"> 1271 </span> : : &quot; an interface (such as in a forwarding situation).\n&quot; -<span class="lineNum"> 1272 </span> : : &quot; --fw-list - List all firewall rules that fwknop has created\n&quot; -<span class="lineNum"> 1273 </span> : : &quot; and then exit.\n&quot; -<span class="lineNum"> 1274 </span> : : &quot; --fw-list-all - List all firewall rules in the complete policy,\n&quot; -<span class="lineNum"> 1275 </span> : : &quot; including those that have nothing to do with\n&quot; -<span class="lineNum"> 1276 </span> : : &quot; fwknop.\n&quot; -<span class="lineNum"> 1277 </span> : : &quot; --fw-flush - Flush all firewall rules created by fwknop.\n&quot; -<span class="lineNum"> 1278 </span> : : &quot; --gpg-home-dir - Specify the GPG home directory (this is normally\n&quot; -<span class="lineNum"> 1279 </span> : : &quot; done in the access.conf file).\n&quot; -<span class="lineNum"> 1280 </span> : : &quot; --gpg-exe - Specify the path to GPG (this is normally done in\n&quot; -<span class="lineNum"> 1281 </span> : : &quot; the access.conf file).\n&quot; -<span class="lineNum"> 1282 </span> : : &quot; --no-firewd-check-support\n&quot; -<span class="lineNum"> 1283 </span> : : &quot; - Disable test for 'firewall-cmd ... -C' support.\n&quot; -<span class="lineNum"> 1284 </span> : : &quot; --no-ipt-check-support - Disable test for 'iptables -C' support.\n&quot; -<span class="lineNum"> 1285 </span> : : &quot;\n&quot; -<span class="lineNum"> 1286 </span> : : ); -<span class="lineNum"> 1287 </span> : : -<span class="lineNum"> 1288 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1289 </span> : : } -<span class="lineNum"> 1290 </span> : : -<span class="lineNum"> 1291 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html deleted file mode 100644 index 5c050657..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func-sort-c.html +++ /dev/null @@ -1,105 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/extcmd.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - extcmd.c<span style="font-size: 80%;"> (<a href="extcmd.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">100</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="extcmd.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#655">run_extcmd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#82">_run_extcmd.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#666">run_extcmd_as</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#677">search_extcmd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#552">_run_extcmd_write</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#687">run_extcmd_write</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html deleted file mode 100644 index 5fa8d663..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.func.html +++ /dev/null @@ -1,105 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/extcmd.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - extcmd.c<span style="font-size: 80%;"> (<a href="extcmd.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">100</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="extcmd.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#82">_run_extcmd.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#552">_run_extcmd_write</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#655">run_extcmd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#666">run_extcmd_as</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#687">run_extcmd_write</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="extcmd.c.gcov.html#677">search_extcmd</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html deleted file mode 100644 index 9886571d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/extcmd.c.gcov.html +++ /dev/null @@ -1,779 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/extcmd.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - extcmd.c<span style="font-size: 80%;"> (source / <a href="extcmd.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">100</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">6</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: extcmd.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Routines for executing and processing external commands. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;extcmd.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 35 </span> : : -<span class="lineNum"> 36 </span> : : #include &lt;errno.h&gt; -<span class="lineNum"> 37 </span> : : #include &lt;signal.h&gt; -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : #if HAVE_SYS_WAIT_H -<span class="lineNum"> 40 </span> : : #include &lt;sys/wait.h&gt; -<span class="lineNum"> 41 </span> : : #endif -<span class="lineNum"> 42 </span> : : -<span class="lineNum"> 43 </span> : : /* -<span class="lineNum"> 44 </span> : : static sig_atomic_t got_sigalrm; -<span class="lineNum"> 45 </span> : : */ -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> : : /* Takes a file descriptor and makes it non-blocking. -<span class="lineNum"> 48 </span> : : static int -<span class="lineNum"> 49 </span> : : set_nonblock(int fd) -<span class="lineNum"> 50 </span> : : { -<span class="lineNum"> 51 </span> : : int val; -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> : : if((val = fcntl(fd, F_GETFL, 0)) &lt; 0) -<span class="lineNum"> 54 </span> : : { -<span class="lineNum"> 55 </span> : : perror(&quot;fcntl F_GETFL error:&quot;); -<span class="lineNum"> 56 </span> : : return(-1); -<span class="lineNum"> 57 </span> : : } -<span class="lineNum"> 58 </span> : : -<span class="lineNum"> 59 </span> : : val |= O_NONBLOCK; -<span class="lineNum"> 60 </span> : : -<span class="lineNum"> 61 </span> : : if(fcntl(fd, F_SETFL, val) &lt; 0) -<span class="lineNum"> 62 </span> : : { -<span class="lineNum"> 63 </span> : : perror(&quot;fcntl F_SETFL error setting O_NONBLOCK&quot;); -<span class="lineNum"> 64 </span> : : return(-1); -<span class="lineNum"> 65 </span> : : } -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> : : return(0); -<span class="lineNum"> 68 </span> : : } -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> : : static void -<span class="lineNum"> 71 </span> : : alarm_handler(int sig) -<span class="lineNum"> 72 </span> : : { -<span class="lineNum"> 73 </span> : : got_sigalrm = 1; -<span class="lineNum"> 74 </span> : : } -<span class="lineNum"> 75 </span> : : */ -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : /* Run an external command returning exit status, and optionally filling -<span class="lineNum"> 78 </span> : : * provided buffer with STDOUT output up to the size provided. -<span class="lineNum"> 79 </span> : : * -<span class="lineNum"> 80 </span> : : * Note: XXX: We are not using the timeout parameter at present. We still need -<span class="lineNum"> 81 </span> : : * to implement a reliable timeout mechanism. -<a name="82"><span class="lineNum"> 82 </span> : : */</a> -<span class="lineNum"> 83 </span> : : static int -<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf,</span> -<span class="lineNum"> 85 </span> : : const size_t so_buf_sz, const int want_stderr, const int timeout, -<span class="lineNum"> 86 </span> : : const char *substr_search, int *pid_status, -<span class="lineNum"> 87 </span> : : const fko_srv_options_t * const opts) -<span class="lineNum"> 88 </span> : : { -<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : char so_read_buf[IO_READ_BUF_LEN] = {0};</span> -<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : pid_t pid=0;</span> -<span class="lineNum"> 91 </span> : : FILE *output; -<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : int retval = EXTCMD_SUCCESS_ALL_OUTPUT;</span> -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : int line_ctr = 0, found_str = 0;</span> -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> : : char *argv_new[MAX_CMDLINE_ARGS]; /* for validation and/or execvpe() */ -<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : int argc_new=0;</span> -<span class="lineNum"> 97 </span> : : -<span class="lineNum"> 98 </span> : : #if HAVE_EXECVPE -<span class="lineNum"> 99 </span> : : int pipe_fd[2]; -<span class="lineNum"> 100 </span> : : #endif -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : *pid_status = 0;</span> -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> : : /* Even without execvpe() we examine the command for basic validity -<span class="lineNum"> 105 </span> : : * in term of number of args -<span class="lineNum"> 106 </span> : : */ -<span class="lineNum"> 107 </span> : : memset(argv_new, 0x0, sizeof(argv_new)); -<span class="lineNum"> 108 </span> : : -<span class="lineNum"> 109 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(cmd, argv_new, &amp;argc_new, opts) != 1)</span> -<span class="lineNum"> 110 </span> : : { -<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 112 </span> : : &quot;run_extcmd(): Error converting cmd str to argv via strtoargv()&quot;); -<span class="lineNum"> 113 </span> : : return EXTCMD_ARGV_ERROR; -<span class="lineNum"> 114 </span> : : } -<span class="lineNum"> 115 </span> : : -<span class="lineNum"> 116 </span> : : #if !HAVE_EXECVPE -<span class="lineNum"> 117 </span> : : /* if we are not using execvpe() then free up argv_new unconditionally -<span class="lineNum"> 118 </span> : : * since was used only for validation -<span class="lineNum"> 119 </span> : : */ -<span class="lineNum"> 120 </span> : : free_argv(argv_new, &amp;argc_new); -<span class="lineNum"> 121 </span> : : #endif -<span class="lineNum"> 122 </span> : : -<span class="lineNum"> 123 </span> : : #if HAVE_EXECVPE -<span class="lineNum"> 124 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 1)</span> -<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;run_extcmd() (with execvpe()): running CMD: %s&quot;, cmd);</span> -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL || substr_search != NULL)</span> -<span class="lineNum"> 128 </span> : : { -<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pipe(pipe_fd) &lt; 0)</span> -<span class="lineNum"> 130 </span> : : { -<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd(): pipe() failed: %s&quot;, strerror(errno));</span> -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 133 </span> : : return EXTCMD_PIPE_ERROR; -<span class="lineNum"> 134 </span> : : } -<span class="lineNum"> 135 </span> : : } -<span class="lineNum"> 136 </span> : : -<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : pid = fork();</span> -<span class="lineNum"> 138 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (pid == 0)</span> -<span class="lineNum"> 139 </span> : : { -<span class="lineNum"> 140 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(chdir(&quot;/&quot;) != 0)</span> -<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_CHDIR_ERROR);</span> -<span class="lineNum"> 142 </span> : : -<span class="lineNum"> 143 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL || substr_search != NULL)</span> -<span class="lineNum"> 144 </span> : : { -<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[0]);</span> -<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDOUT_FILENO);</span> -<span class="lineNum"> 147 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(want_stderr)</span> -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[1], STDERR_FILENO);</span> -<span class="lineNum"> 149 </span> : : else -<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : close(STDERR_FILENO);</span> -<span class="lineNum"> 151 </span> : : } -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> : : /* Take care of gid/uid settings before running the command. -<span class="lineNum"> 154 </span> : : */ -<span class="lineNum"> 155 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(gid &gt; 0)</span> -<span class="lineNum"> 156 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(setgid(gid) &lt; 0)</span> -<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_SETGID_ERROR);</span> -<span class="lineNum"> 158 </span> : : -<span class="lineNum"> 159 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(uid &gt; 0)</span> -<span class="lineNum"> 160 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(setuid(uid) &lt; 0)</span> -<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_SETUID_ERROR);</span> -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> : : /* don't use env -<span class="lineNum"> 164 </span> : : */ -<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : execvpe(argv_new[0], argv_new, (char * const *)NULL);</span> -<span class="lineNum"> 166 </span> : : } -<span class="lineNum"> 167 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pid == -1)</span> -<span class="lineNum"> 168 </span> : : { -<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd(): fork() failed: %s&quot;, strerror(errno));</span> -<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 171 </span> : : return EXTCMD_FORK_ERROR; -<span class="lineNum"> 172 </span> : : } -<span class="lineNum"> 173 </span> : : -<span class="lineNum"> 174 </span> : : /* Only the parent process makes it here -<span class="lineNum"> 175 </span> : : */ -<span class="lineNum"> 176 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL || substr_search != NULL)</span> -<span class="lineNum"> 177 </span> : : { -<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> -<span class="lineNum"> 179 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((output = fdopen(pipe_fd[0], &quot;r&quot;)) != NULL)</span> -<span class="lineNum"> 180 </span> : : { -<span class="lineNum"> 181 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL)</span> -<span class="lineNum"> 182 </span> : : memset(so_buf, 0x0, so_buf_sz); -<span class="lineNum"> 183 </span> : : -<span class="lineNum"> 184 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while((fgets(so_read_buf, IO_READ_BUF_LEN, output)) != NULL)</span> -<span class="lineNum"> 185 </span> : : { -<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : line_ctr++;</span> -<span class="lineNum"> 187 </span> : : -<span class="lineNum"> 188 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(so_buf != NULL)</span> -<span class="lineNum"> 189 </span> : : { -<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : strlcat(so_buf, so_read_buf, so_buf_sz);</span> -<span class="lineNum"> 191 </span> : : -<span class="lineNum"> 192 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(so_buf) &gt;= so_buf_sz-1)</span> -<span class="lineNum"> 193 </span> : : break; -<span class="lineNum"> 194 </span> : : } -<span class="lineNum"> 195 </span> : : else /* we are looking for a substring */ -<span class="lineNum"> 196 </span> : : { -<span class="lineNum"> 197 </span> : : /* Get past comments and empty lines (note: we only look at the -<span class="lineNum"> 198 </span> : : * first character). -<span class="lineNum"> 199 </span> : : */ -<span class="lineNum"> 200 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_EMPTY_LINE(so_read_buf[0]))</span> -<span class="lineNum"> </span>[<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>][<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] -<span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 202 </span> : : -<span class="lineNum"> 203 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strstr(so_read_buf, substr_search) != NULL)</span> -<span class="lineNum"> 204 </span> : : { -<span class="lineNum"> 205 </span> : : found_str = 1; -<span class="lineNum"> 206 </span> : : break; -<span class="lineNum"> 207 </span> : : } -<span class="lineNum"> 208 </span> : : } -<span class="lineNum"> 209 </span> : : } -<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : fclose(output);</span> -<span class="lineNum"> 211 </span> : : } -<span class="lineNum"> 212 </span> : : else -<span class="lineNum"> 213 </span> : : { -<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 215 </span> : : &quot;run_extcmd(): could not fdopen() pipe output file descriptor.&quot;); -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 217 </span> : : return EXTCMD_OPEN_ERROR; -<span class="lineNum"> 218 </span> : : } -<span class="lineNum"> 219 </span> : : } -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 222 </span> : : -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : waitpid(pid, pid_status, 0);</span> -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> : : #else -<span class="lineNum"> 226 </span> : : -<span class="lineNum"> 227 </span> : : if(opts-&gt;verbose &gt; 1) -<span class="lineNum"> 228 </span> : : log_msg(LOG_INFO, &quot;run_extcmd() (without execvpe()): running CMD: %s&quot;, cmd); -<span class="lineNum"> 229 </span> : : -<span class="lineNum"> 230 </span> : : if(so_buf == NULL &amp;&amp; substr_search == NULL) -<span class="lineNum"> 231 </span> : : { -<span class="lineNum"> 232 </span> : : /* Since we do not have to capture output, we will fork here (which we -<span class="lineNum"> 233 </span> : : * * would have to do anyway if we are running as another user as well). -<span class="lineNum"> 234 </span> : : * */ -<span class="lineNum"> 235 </span> : : pid = fork(); -<span class="lineNum"> 236 </span> : : if(pid == -1) -<span class="lineNum"> 237 </span> : : { -<span class="lineNum"> 238 </span> : : log_msg(LOG_ERR, &quot;run_extcmd: fork failed: %s&quot;, strerror(errno)); -<span class="lineNum"> 239 </span> : : return(EXTCMD_FORK_ERROR); -<span class="lineNum"> 240 </span> : : } -<span class="lineNum"> 241 </span> : : else if (pid == 0) -<span class="lineNum"> 242 </span> : : { -<span class="lineNum"> 243 </span> : : /* We are the child */ -<span class="lineNum"> 244 </span> : : -<span class="lineNum"> 245 </span> : : if(chdir(&quot;/&quot;) != 0) -<span class="lineNum"> 246 </span> : : exit(EXTCMD_CHDIR_ERROR); -<span class="lineNum"> 247 </span> : : -<span class="lineNum"> 248 </span> : : /* Take care of gid/uid settings before running the command. -<span class="lineNum"> 249 </span> : : */ -<span class="lineNum"> 250 </span> : : if(gid &gt; 0) -<span class="lineNum"> 251 </span> : : if(setgid(gid) &lt; 0) -<span class="lineNum"> 252 </span> : : exit(EXTCMD_SETGID_ERROR); -<span class="lineNum"> 253 </span> : : -<span class="lineNum"> 254 </span> : : if(uid &gt; 0) -<span class="lineNum"> 255 </span> : : if(setuid(uid) &lt; 0) -<span class="lineNum"> 256 </span> : : exit(EXTCMD_SETUID_ERROR); -<span class="lineNum"> 257 </span> : : -<span class="lineNum"> 258 </span> : : *pid_status = system(cmd); -<span class="lineNum"> 259 </span> : : exit(*pid_status); -<span class="lineNum"> 260 </span> : : } -<span class="lineNum"> 261 </span> : : /* Retval is forced to 0 as we don't care about the exit status of -<span class="lineNum"> 262 </span> : : * the child (for now) -<span class="lineNum"> 263 </span> : : */ -<span class="lineNum"> 264 </span> : : retval = EXTCMD_SUCCESS_ALL_OUTPUT; -<span class="lineNum"> 265 </span> : : } -<span class="lineNum"> 266 </span> : : else -<span class="lineNum"> 267 </span> : : { -<span class="lineNum"> 268 </span> : : /* Looking for output use popen and fill the buffer to its limit. -<span class="lineNum"> 269 </span> : : */ -<span class="lineNum"> 270 </span> : : output = popen(cmd, &quot;r&quot;); -<span class="lineNum"> 271 </span> : : if(output == NULL) -<span class="lineNum"> 272 </span> : : { -<span class="lineNum"> 273 </span> : : log_msg(LOG_ERR, &quot;Got popen error %i: %s&quot;, errno, strerror(errno)); -<span class="lineNum"> 274 </span> : : retval = EXTCMD_OPEN_ERROR; -<span class="lineNum"> 275 </span> : : } -<span class="lineNum"> 276 </span> : : else -<span class="lineNum"> 277 </span> : : { -<span class="lineNum"> 278 </span> : : if(so_buf != NULL) -<span class="lineNum"> 279 </span> : : memset(so_buf, 0x0, so_buf_sz); -<span class="lineNum"> 280 </span> : : -<span class="lineNum"> 281 </span> : : while((fgets(so_read_buf, IO_READ_BUF_LEN, output)) != NULL) -<span class="lineNum"> 282 </span> : : { -<span class="lineNum"> 283 </span> : : line_ctr++; -<span class="lineNum"> 284 </span> : : if(so_buf != NULL) -<span class="lineNum"> 285 </span> : : { -<span class="lineNum"> 286 </span> : : strlcat(so_buf, so_read_buf, so_buf_sz); -<span class="lineNum"> 287 </span> : : if(strlen(so_buf) &gt;= so_buf_sz-1) -<span class="lineNum"> 288 </span> : : break; -<span class="lineNum"> 289 </span> : : } -<span class="lineNum"> 290 </span> : : else /* we are looking for a substring */ -<span class="lineNum"> 291 </span> : : { -<span class="lineNum"> 292 </span> : : /* Get past comments and empty lines (note: we only look at the -<span class="lineNum"> 293 </span> : : * first character). -<span class="lineNum"> 294 </span> : : */ -<span class="lineNum"> 295 </span> : : if(IS_EMPTY_LINE(so_read_buf[0])) -<span class="lineNum"> 296 </span> : : continue; -<span class="lineNum"> 297 </span> : : -<span class="lineNum"> 298 </span> : : if(strstr(so_read_buf, substr_search) != NULL) -<span class="lineNum"> 299 </span> : : { -<span class="lineNum"> 300 </span> : : found_str = 1; -<span class="lineNum"> 301 </span> : : break; -<span class="lineNum"> 302 </span> : : } -<span class="lineNum"> 303 </span> : : } -<span class="lineNum"> 304 </span> : : } -<span class="lineNum"> 305 </span> : : pclose(output); -<span class="lineNum"> 306 </span> : : } -<span class="lineNum"> 307 </span> : : } -<span class="lineNum"> 308 </span> : : -<span class="lineNum"> 309 </span> : : #endif -<span class="lineNum"> 310 </span> : : -<span class="lineNum"> 311 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(substr_search != NULL)</span> -<span class="lineNum"> 312 </span> : : { -<span class="lineNum"> 313 </span> : : /* The semantics of the return value changes in search mode to the line -<span class="lineNum"> 314 </span> : : * number where the substring match was found, or zero if it wasn't found -<span class="lineNum"> 315 </span> : : */ -<span class="lineNum"> 316 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(found_str)</span> -<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : retval = line_ctr;</span> -<span class="lineNum"> 318 </span> : : else -<span class="lineNum"> 319 </span> : : retval = 0; -<span class="lineNum"> 320 </span> : : } -<span class="lineNum"> 321 </span> : : else -<span class="lineNum"> 322 </span> : : { -<span class="lineNum"> 323 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(WIFEXITED(*pid_status))</span> -<span class="lineNum"> 324 </span> : : { -<span class="lineNum"> 325 </span> : : /* Even if the child exited with an error condition, if we make it here -<span class="lineNum"> 326 </span> : : * then the child exited normally as far as the OS is concerned (i.e. didn't -<span class="lineNum"> 327 </span> : : * crash or get hit with a signal) -<span class="lineNum"> 328 </span> : : */ -<span class="lineNum"> 329 </span> : : retval = EXTCMD_SUCCESS_ALL_OUTPUT; -<span class="lineNum"> 330 </span> : : } -<span class="lineNum"> 331 </span> : : else -<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : retval = EXTCMD_EXECUTION_ERROR;</span> -<span class="lineNum"> 333 </span> : : } -<span class="lineNum"> 334 </span> : : -<span class="lineNum"> 335 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 1)</span> -<span class="lineNum"> 336 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 337 </span> : : &quot;run_extcmd(): returning %d, pid_status: %d&quot;, -<span class="lineNum"> 338 </span> :<span class="lineNoCov"> 0 : retval, WIFEXITED(*pid_status) ? WEXITSTATUS(*pid_status) : *pid_status);</span> -<span class="lineNum"> 339 </span> : : -<span class="lineNum"> 340 </span> : : return(retval); -<span class="lineNum"> 341 </span> : : } -<span class="lineNum"> 342 </span> : : -<span class="lineNum"> 343 </span> : : -<span class="lineNum"> 344 </span> : : #if 0 /* --DSS the original method that did not work on some systems */ -<span class="lineNum"> 345 </span> : : -<span class="lineNum"> 346 </span> : : /* Create the pipes we will use for getting stdout and stderr -<span class="lineNum"> 347 </span> : : * from the child process. -<span class="lineNum"> 348 </span> : : */ -<span class="lineNum"> 349 </span> : : if(pipe(so) != 0) -<span class="lineNum"> 350 </span> : : return(EXTCMD_PIPE_ERROR); -<span class="lineNum"> 351 </span> : : -<span class="lineNum"> 352 </span> : : if(pipe(se) != 0) -<span class="lineNum"> 353 </span> : : return(EXTCMD_PIPE_ERROR); -<span class="lineNum"> 354 </span> : : -<span class="lineNum"> 355 </span> : : /* Fork off a child process to run the command and provide its outputs. -<span class="lineNum"> 356 </span> : : */ -<span class="lineNum"> 357 </span> : : pid = fork(); -<span class="lineNum"> 358 </span> : : if(pid == -1) -<span class="lineNum"> 359 </span> : : { -<span class="lineNum"> 360 </span> : : return(EXTCMD_FORK_ERROR); -<span class="lineNum"> 361 </span> : : } -<span class="lineNum"> 362 </span> : : else if (pid == 0) -<span class="lineNum"> 363 </span> : : { -<span class="lineNum"> 364 </span> : : /* We are the child, so we dup stdout and stderr to our respective -<span class="lineNum"> 365 </span> : : * write-end of the pipes, close stdin and the read-end of the pipes -<span class="lineNum"> 366 </span> : : * (since we don't need them here). Then use system() to run the -<span class="lineNum"> 367 </span> : : * command and exit with the exit status of that command so we can -<span class="lineNum"> 368 </span> : : * grab it from the waitpid call in the parent. -<span class="lineNum"> 369 </span> : : */ -<span class="lineNum"> 370 </span> : : close(fileno(stdin)); -<span class="lineNum"> 371 </span> : : dup2(so[1], fileno(stdout)); -<span class="lineNum"> 372 </span> : : dup2(se[1], fileno(stderr)); -<span class="lineNum"> 373 </span> : : close(so[0]); -<span class="lineNum"> 374 </span> : : close(se[0]); -<span class="lineNum"> 375 </span> : : -<span class="lineNum"> 376 </span> : : /* If user is not null, then we setuid to that user before running the -<span class="lineNum"> 377 </span> : : * command. -<span class="lineNum"> 378 </span> : : */ -<span class="lineNum"> 379 </span> : : if(uid &gt; 0) -<span class="lineNum"> 380 </span> : : { -<span class="lineNum"> 381 </span> : : if(setuid(uid) &lt; 0) -<span class="lineNum"> 382 </span> : : { -<span class="lineNum"> 383 </span> : : exit(EXTCMD_SETUID_ERROR); -<span class="lineNum"> 384 </span> : : } -<span class="lineNum"> 385 </span> : : } -<span class="lineNum"> 386 </span> : : -<span class="lineNum"> 387 </span> : : /* --DSS XXX: Would it be more efficient to use one of the exec() -<span class="lineNum"> 388 </span> : : * calls (i.e. 'return(execvp(ext_cmd, &amp;argv[1]));')? -<span class="lineNum"> 389 </span> : : * For now, we use system() and exit with the external -<span class="lineNum"> 390 </span> : : * command exit status. -<span class="lineNum"> 391 </span> : : */ -<span class="lineNum"> 392 </span> : : exit(WEXITSTATUS(system(cmd))); -<span class="lineNum"> 393 </span> : : } -<span class="lineNum"> 394 </span> : : -<span class="lineNum"> 395 </span> : : /* Parent from here */ -<span class="lineNum"> 396 </span> : : -<span class="lineNum"> 397 </span> : : /* Give the exit status an initial value of -1. -<span class="lineNum"> 398 </span> : : */ -<span class="lineNum"> 399 </span> : : *status = -1; -<span class="lineNum"> 400 </span> : : -<span class="lineNum"> 401 </span> : : /* Close the write-end of the pipes (we are only reading). -<span class="lineNum"> 402 </span> : : */ -<span class="lineNum"> 403 </span> : : close(so[1]); -<span class="lineNum"> 404 </span> : : close(se[1]); -<span class="lineNum"> 405 </span> : : -<span class="lineNum"> 406 </span> : : /* Set our pipes to non-blocking -<span class="lineNum"> 407 </span> : : */ -<span class="lineNum"> 408 </span> : : set_nonblock(so[0]); -<span class="lineNum"> 409 </span> : : set_nonblock(se[0]); -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> : : tv.tv_sec = EXTCMD_DEF_TIMEOUT; -<span class="lineNum"> 412 </span> : : tv.tv_usec = 0; -<span class="lineNum"> 413 </span> : : -<span class="lineNum"> 414 </span> : : /* Initialize and setup our file descriptor sets for select. -<span class="lineNum"> 415 </span> : : */ -<span class="lineNum"> 416 </span> : : FD_ZERO(&amp;rfds); -<span class="lineNum"> 417 </span> : : FD_ZERO(&amp;efds); -<span class="lineNum"> 418 </span> : : FD_SET(so[0], &amp;rfds); -<span class="lineNum"> 419 </span> : : FD_SET(se[0], &amp;rfds); -<span class="lineNum"> 420 </span> : : FD_SET(so[0], &amp;efds); -<span class="lineNum"> 421 </span> : : FD_SET(se[0], &amp;efds); -<span class="lineNum"> 422 </span> : : -<span class="lineNum"> 423 </span> : : /* Start with fully clear buffers. -<span class="lineNum"> 424 </span> : : */ -<span class="lineNum"> 425 </span> : : memset(so_buf, 0x0, so_buf_sz); -<span class="lineNum"> 426 </span> : : memset(se_buf, 0x0, se_buf_sz); -<span class="lineNum"> 427 </span> : : -<span class="lineNum"> 428 </span> : : /* Read both stdout and stderr piped from the child until we get eof, -<span class="lineNum"> 429 </span> : : * fill the buffers, or error out. -<span class="lineNum"> 430 </span> : : */ -<span class="lineNum"> 431 </span> : : while(so_buf_remaining &gt; 0 || se_buf_remaining &gt; 0) -<span class="lineNum"> 432 </span> : : { -<span class="lineNum"> 433 </span> : : selval = select(8, &amp;rfds, NULL, &amp;efds, &amp;tv); -<span class="lineNum"> 434 </span> : : -<span class="lineNum"> 435 </span> : : if(selval == -1) -<span class="lineNum"> 436 </span> : : { -<span class="lineNum"> 437 </span> : : /* Select error - so kill the child and bail. -<span class="lineNum"> 438 </span> : : */ -<span class="lineNum"> 439 </span> : : kill(pid, SIGTERM); -<span class="lineNum"> 440 </span> : : retval |= EXTCMD_SELECT_ERROR; -<span class="lineNum"> 441 </span> : : break; -<span class="lineNum"> 442 </span> : : } -<span class="lineNum"> 443 </span> : : -<span class="lineNum"> 444 </span> : : if(selval == 0) -<span class="lineNum"> 445 </span> : : { -<span class="lineNum"> 446 </span> : : /* Timeout - so kill the child and bail -<span class="lineNum"> 447 </span> : : */ -<span class="lineNum"> 448 </span> : : kill(pid, SIGTERM); -<span class="lineNum"> 449 </span> : : retval |= EXTCMD_EXECUTION_TIMEOUT; -<span class="lineNum"> 450 </span> : : break; -<span class="lineNum"> 451 </span> : : } -<span class="lineNum"> 452 </span> : : -<span class="lineNum"> 453 </span> : : /* The stdout pipe... -<span class="lineNum"> 454 </span> : : */ -<span class="lineNum"> 455 </span> : : bytes_read = read(so[0], so_read_buf, IO_READ_BUF_LEN); -<span class="lineNum"> 456 </span> : : if(so_buf_remaining &gt; 0) -<span class="lineNum"> 457 </span> : : { -<span class="lineNum"> 458 </span> : : if(bytes_read &gt; 0) -<span class="lineNum"> 459 </span> : : { -<span class="lineNum"> 460 </span> : : /* We have data, so process it... -<span class="lineNum"> 461 </span> : : */ -<span class="lineNum"> 462 </span> : : if(bytes_read &gt; so_buf_remaining) -<span class="lineNum"> 463 </span> : : { -<span class="lineNum"> 464 </span> : : bytes_read = so_buf_remaining; -<span class="lineNum"> 465 </span> : : retval |= EXTCMD_SUCCESS_PARTIAL_STDOUT; -<span class="lineNum"> 466 </span> : : } -<span class="lineNum"> 467 </span> : : -<span class="lineNum"> 468 </span> : : memcpy(so_buf, so_read_buf, bytes_read); -<span class="lineNum"> 469 </span> : : so_buf += bytes_read; -<span class="lineNum"> 470 </span> : : so_buf_remaining -= bytes_read; -<span class="lineNum"> 471 </span> : : } -<span class="lineNum"> 472 </span> : : else if(bytes_read &lt; 0) -<span class="lineNum"> 473 </span> : : { -<span class="lineNum"> 474 </span> : : /* Anything other than EAGAIN or EWOULDBLOCK is conisdered -<span class="lineNum"> 475 </span> : : * error enough to bail. We are done here so we force the -<span class="lineNum"> 476 </span> : : * buf_remaining value to 0. -<span class="lineNum"> 477 </span> : : */ -<span class="lineNum"> 478 </span> : : if(errno != EAGAIN &amp;&amp; errno != EWOULDBLOCK) -<span class="lineNum"> 479 </span> : : { -<span class="lineNum"> 480 </span> : : retval |= EXTCMD_STDOUT_READ_ERROR; -<span class="lineNum"> 481 </span> : : so_buf_remaining = 0; -<span class="lineNum"> 482 </span> : : } -<span class="lineNum"> 483 </span> : : } -<span class="lineNum"> 484 </span> : : else -<span class="lineNum"> 485 </span> : : { -<span class="lineNum"> 486 </span> : : /* Bytes read was 0 which indicate end of file. So we are -<span class="lineNum"> 487 </span> : : * done. -<span class="lineNum"> 488 </span> : : */ -<span class="lineNum"> 489 </span> : : so_buf_remaining = 0; -<span class="lineNum"> 490 </span> : : } -<span class="lineNum"> 491 </span> : : } -<span class="lineNum"> 492 </span> : : else -<span class="lineNum"> 493 </span> : : break; -<span class="lineNum"> 494 </span> : : -<span class="lineNum"> 495 </span> : : /* The stderr pipe... -<span class="lineNum"> 496 </span> : : */ -<span class="lineNum"> 497 </span> : : bytes_read = read(se[0], se_read_buf, IO_READ_BUF_LEN); -<span class="lineNum"> 498 </span> : : if(se_buf_remaining &gt; 0) -<span class="lineNum"> 499 </span> : : { -<span class="lineNum"> 500 </span> : : if(bytes_read &gt; 0) -<span class="lineNum"> 501 </span> : : { -<span class="lineNum"> 502 </span> : : /* We have data, so process it... -<span class="lineNum"> 503 </span> : : */ -<span class="lineNum"> 504 </span> : : if(bytes_read &gt; se_buf_remaining) -<span class="lineNum"> 505 </span> : : { -<span class="lineNum"> 506 </span> : : bytes_read = se_buf_remaining; -<span class="lineNum"> 507 </span> : : retval |= EXTCMD_SUCCESS_PARTIAL_STDERR; -<span class="lineNum"> 508 </span> : : } -<span class="lineNum"> 509 </span> : : -<span class="lineNum"> 510 </span> : : memcpy(se_buf, se_read_buf, bytes_read); -<span class="lineNum"> 511 </span> : : se_buf += bytes_read; -<span class="lineNum"> 512 </span> : : se_buf_remaining -= bytes_read; -<span class="lineNum"> 513 </span> : : } -<span class="lineNum"> 514 </span> : : else if(bytes_read &lt; 0) -<span class="lineNum"> 515 </span> : : { -<span class="lineNum"> 516 </span> : : /* Anything other than EAGAIN or EWOULDBLOCK is conisdered -<span class="lineNum"> 517 </span> : : * error enough to bail. We are done here so we force the -<span class="lineNum"> 518 </span> : : * buf_remaining value to 0. -<span class="lineNum"> 519 </span> : : */ -<span class="lineNum"> 520 </span> : : if(errno != EAGAIN &amp;&amp; errno != EWOULDBLOCK) -<span class="lineNum"> 521 </span> : : { -<span class="lineNum"> 522 </span> : : retval |= EXTCMD_STDERR_READ_ERROR; -<span class="lineNum"> 523 </span> : : se_buf_remaining = 0; -<span class="lineNum"> 524 </span> : : } -<span class="lineNum"> 525 </span> : : } -<span class="lineNum"> 526 </span> : : else -<span class="lineNum"> 527 </span> : : { -<span class="lineNum"> 528 </span> : : /* Bytes read was 0 which indicate end of file. So we are -<span class="lineNum"> 529 </span> : : * done. -<span class="lineNum"> 530 </span> : : */ -<span class="lineNum"> 531 </span> : : se_buf_remaining = 0; -<span class="lineNum"> 532 </span> : : } -<span class="lineNum"> 533 </span> : : } -<span class="lineNum"> 534 </span> : : else -<span class="lineNum"> 535 </span> : : break; -<span class="lineNum"> 536 </span> : : } -<span class="lineNum"> 537 </span> : : -<span class="lineNum"> 538 </span> : : close(so[0]); -<span class="lineNum"> 539 </span> : : close(se[0]); -<span class="lineNum"> 540 </span> : : -<span class="lineNum"> 541 </span> : : /* Wait for the external command to finish and capture its exit status. -<span class="lineNum"> 542 </span> : : */ -<span class="lineNum"> 543 </span> : : waitpid(pid, status, 0); -<span class="lineNum"> 544 </span> : : -<span class="lineNum"> 545 </span> : : if(*status != 0) -<span class="lineNum"> 546 </span> : : retval != EXTCMD_EXECUTION_ERROR; -<span class="lineNum"> 547 </span> : : -<span class="lineNum"> 548 </span> : : /* Return the our status of this operation command. -<span class="lineNum"> 549 </span> : : */ -<span class="lineNum"> 550 </span> : : return(retval); -<span class="lineNum"> 551 </span> : : } -<a name="552"><span class="lineNum"> 552 </span> : : #endif</a> -<span class="lineNum"> 553 </span> : : -<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : int _run_extcmd_write(const char *cmd, const char *cmd_write, int *pid_status,</span> -<span class="lineNum"> 555 </span> : : const fko_srv_options_t * const opts) -<span class="lineNum"> 556 </span> : : { -<span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : int retval = EXTCMD_SUCCESS_ALL_OUTPUT;</span> -<span class="lineNum"> 558 </span> : : char *argv_new[MAX_CMDLINE_ARGS]; /* for validation and/or execvpe() */ -<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : int argc_new=0;</span> -<span class="lineNum"> 560 </span> : : -<span class="lineNum"> 561 </span> : : #if HAVE_EXECVPE -<span class="lineNum"> 562 </span> : : int pipe_fd[2]; -<span class="lineNum"> 563 </span> :<span class="lineNoCov"> 0 : pid_t pid=0;</span> -<span class="lineNum"> 564 </span> : : #else -<span class="lineNum"> 565 </span> : : FILE *fd = NULL; -<span class="lineNum"> 566 </span> : : #endif -<span class="lineNum"> 567 </span> : : -<span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : *pid_status = 0;</span> -<span class="lineNum"> 569 </span> : : -<span class="lineNum"> 570 </span> : : /* Even without execvpe() we examine the command for basic validity -<span class="lineNum"> 571 </span> : : * in term of number of args -<span class="lineNum"> 572 </span> : : */ -<span class="lineNum"> 573 </span> : : memset(argv_new, 0x0, sizeof(argv_new)); -<span class="lineNum"> 574 </span> : : -<span class="lineNum"> 575 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strtoargv(cmd, argv_new, &amp;argc_new, opts) != 1)</span> -<span class="lineNum"> 576 </span> : : { -<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 578 </span> : : &quot;run_extcmd_write(): Error converting cmd str to argv via strtoargv()&quot;); -<span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : return EXTCMD_ARGV_ERROR;</span> -<span class="lineNum"> 580 </span> : : } -<span class="lineNum"> 581 </span> : : -<span class="lineNum"> 582 </span> : : #if !HAVE_EXECVPE -<span class="lineNum"> 583 </span> : : /* if we are not using execvpe() then free up argv_new unconditionally -<span class="lineNum"> 584 </span> : : * since was used only for validation -<span class="lineNum"> 585 </span> : : */ -<span class="lineNum"> 586 </span> : : free_argv(argv_new, &amp;argc_new); -<span class="lineNum"> 587 </span> : : #endif -<span class="lineNum"> 588 </span> : : -<span class="lineNum"> 589 </span> : : #if HAVE_EXECVPE -<span class="lineNum"> 590 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 1)</span> -<span class="lineNum"> 591 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;run_extcmd_write() (with execvpe()): running CMD: %s | %s&quot;,</span> -<span class="lineNum"> 592 </span> : : cmd_write, cmd); -<span class="lineNum"> 593 </span> : : -<span class="lineNum"> 594 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pipe(pipe_fd) &lt; 0)</span> -<span class="lineNum"> 595 </span> : : { -<span class="lineNum"> 596 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd_write(): pipe() failed: %s&quot;, strerror(errno));</span> -<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : return EXTCMD_PIPE_ERROR;</span> -<span class="lineNum"> 599 </span> : : } -<span class="lineNum"> 600 </span> : : -<span class="lineNum"> 601 </span> :<span class="lineNoCov"> 0 : pid = fork();</span> -<span class="lineNum"> 602 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (pid == 0)</span> -<span class="lineNum"> 603 </span> : : { -<span class="lineNum"> 604 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(chdir(&quot;/&quot;) != 0)</span> -<span class="lineNum"> 605 </span> :<span class="lineNoCov"> 0 : exit(EXTCMD_CHDIR_ERROR);</span> -<span class="lineNum"> 606 </span> : : -<span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> -<span class="lineNum"> 608 </span> :<span class="lineNoCov"> 0 : dup2(pipe_fd[0], STDIN_FILENO);</span> -<span class="lineNum"> 609 </span> : : -<span class="lineNum"> 610 </span> : : /* don't use env -<span class="lineNum"> 611 </span> : : */ -<span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : execvpe(argv_new[0], argv_new, (char * const *)NULL);</span> -<span class="lineNum"> 613 </span> : : } -<span class="lineNum"> 614 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pid == -1)</span> -<span class="lineNum"> 615 </span> : : { -<span class="lineNum"> 616 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_extcmd_write(): fork() failed: %s&quot;, strerror(errno));</span> -<span class="lineNum"> 617 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 618 </span> :<span class="lineNoCov"> 0 : return EXTCMD_FORK_ERROR;</span> -<span class="lineNum"> 619 </span> : : } -<span class="lineNum"> 620 </span> : : -<span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[0]);</span> -<span class="lineNum"> 622 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(pipe_fd[1], cmd_write, strlen(cmd_write)) &lt; 0)</span> -<span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : retval = EXTCMD_WRITE_ERROR;</span> -<span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : close(pipe_fd[1]);</span> -<span class="lineNum"> 625 </span> : : -<span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, &amp;argc_new);</span> -<span class="lineNum"> 627 </span> : : -<span class="lineNum"> 628 </span> :<span class="lineNoCov"> 0 : waitpid(pid, pid_status, 0);</span> -<span class="lineNum"> 629 </span> : : -<span class="lineNum"> 630 </span> : : #else -<span class="lineNum"> 631 </span> : : if(opts-&gt;verbose &gt; 1) -<span class="lineNum"> 632 </span> : : log_msg(LOG_INFO, &quot;run_extcmd_write() (without execvpe()): running CMD: %s | %s&quot;, -<span class="lineNum"> 633 </span> : : cmd_write, cmd); -<span class="lineNum"> 634 </span> : : -<span class="lineNum"> 635 </span> : : if ((fd = popen(cmd, &quot;w&quot;)) == NULL) -<span class="lineNum"> 636 </span> : : { -<span class="lineNum"> 637 </span> : : log_msg(LOG_ERR, &quot;Got popen error %i: %s&quot;, errno, strerror(errno)); -<span class="lineNum"> 638 </span> : : retval = EXTCMD_OPEN_ERROR; -<span class="lineNum"> 639 </span> : : } -<span class="lineNum"> 640 </span> : : else -<span class="lineNum"> 641 </span> : : { -<span class="lineNum"> 642 </span> : : if (fwrite(cmd_write, strlen(cmd_write), 1, fd) != 1) -<span class="lineNum"> 643 </span> : : { -<span class="lineNum"> 644 </span> : : log_msg(LOG_ERR, &quot;Could not write to cmd stdin&quot;); -<span class="lineNum"> 645 </span> : : retval = -1; -<span class="lineNum"> 646 </span> : : } -<span class="lineNum"> 647 </span> : : pclose(fd); -<span class="lineNum"> 648 </span> : : } -<span class="lineNum"> 649 </span> : : -<span class="lineNum"> 650 </span> : : #endif -<span class="lineNum"> 651 </span> :<span class="lineNoCov"> 0 : return retval;</span> -<span class="lineNum"> 652 </span> : : } -<span class="lineNum"> 653 </span> : : -<span class="lineNum"> 654 </span> : : /* _run_extcmd() wrapper, run an external command. -<a name="655"><span class="lineNum"> 655 </span> : : */</a> -<span class="lineNum"> 656 </span> : : int -<span class="lineNum"> 657 </span> :<span class="lineNoCov"> 0 : run_extcmd(const char *cmd, char *so_buf, const size_t so_buf_sz,</span> -<span class="lineNum"> 658 </span> : : const int want_stderr, const int timeout, int *pid_status, -<span class="lineNum"> 659 </span> : : const fko_srv_options_t * const opts) -<span class="lineNum"> 660 </span> : : { -<span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : return _run_extcmd(0, 0, cmd, so_buf, so_buf_sz, want_stderr,</span> -<span class="lineNum"> 662 </span> : : timeout, NULL, pid_status, opts); -<span class="lineNum"> 663 </span> : : } -<span class="lineNum"> 664 </span> : : -<span class="lineNum"> 665 </span> : : /* _run_extcmd() wrapper, run an external command as the specified user. -<a name="666"><span class="lineNum"> 666 </span> : : */</a> -<span class="lineNum"> 667 </span> : : int -<span class="lineNum"> 668 </span> :<span class="lineNoCov"> 0 : run_extcmd_as(uid_t uid, gid_t gid, const char *cmd,char *so_buf,</span> -<span class="lineNum"> 669 </span> : : const size_t so_buf_sz, const int want_stderr, const int timeout, -<span class="lineNum"> 670 </span> : : int *pid_status, const fko_srv_options_t * const opts) -<span class="lineNum"> 671 </span> : : { -<span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : return _run_extcmd(uid, gid, cmd, so_buf, so_buf_sz,</span> -<span class="lineNum"> 673 </span> : : want_stderr, timeout, NULL, pid_status, opts); -<span class="lineNum"> 674 </span> : : } -<span class="lineNum"> 675 </span> : : -<span class="lineNum"> 676 </span> : : /* _run_extcmd() wrapper, search command output for a substring. -<a name="677"><span class="lineNum"> 677 </span> : : */</a> -<span class="lineNum"> 678 </span> : : int -<span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : search_extcmd(const char *cmd, const int want_stderr, const int timeout,</span> -<span class="lineNum"> 680 </span> : : const char *substr_search, int *pid_status, -<span class="lineNum"> 681 </span> : : const fko_srv_options_t * const opts) -<span class="lineNum"> 682 </span> : : { -<span class="lineNum"> 683 </span> :<span class="lineNoCov"> 0 : return _run_extcmd(0, 0, cmd, NULL, 0, want_stderr, timeout,</span> -<span class="lineNum"> 684 </span> : : substr_search, pid_status, opts); -<span class="lineNum"> 685 </span> : : } -<span class="lineNum"> 686 </span> : : -<a name="687"><span class="lineNum"> 687 </span> : : /* _run_extcmd_write() wrapper, run a command which is expecting input via stdin</a> -<span class="lineNum"> 688 </span> : : */ -<span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : int run_extcmd_write(const char *cmd, const char *cmd_write, int *pid_status,</span> -<span class="lineNum"> 690 </span> : : const fko_srv_options_t * const opts) -<span class="lineNum"> 691 </span> : : { -<span class="lineNum"> 692 </span> :<span class="lineNoCov"> 0 : return _run_extcmd_write(cmd, cmd_write, pid_status, opts);</span> -<span class="lineNum"> 693 </span> : : } -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html deleted file mode 100644 index 68134842..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func-sort-c.html +++ /dev/null @@ -1,197 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fw_util_firewalld.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fw_util_firewalld.c<span style="font-size: 80%;"> (<a href="fw_util_firewalld.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">53</td> - <td class="headerCovTableEntry">575</td> - <td class="headerCovTableEntryLo">9.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">29</td> - <td class="headerCovTableEntryLo">10.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">34</td> - <td class="headerCovTableEntry">302</td> - <td class="headerCovTableEntryLo">11.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fw_util_firewalld.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1581">validate_firewd_chain_conf</a></td> - <td class="coverFnHi">4770</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#710">set_fw_chain_conf</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#805">fw_config_init</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#922">fw_cleanup</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#408">jump_rule_exists_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#273">comment_match_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#961">firewd_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#341">add_jump_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1389">check_firewall_rules</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#877">fw_initialize</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#933">create_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#177">rule_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#643">create_chain</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#69">rule_exists_no_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#674">mk_chain</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#201">firewd_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#476">fw_dump_rules</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1123">snat_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1064">dnat_rule.isra.1</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#375">chain_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#51">zero_cmd_buffers</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#560">delete_all_chains</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#143">rule_exists_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#460">jump_rule_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#430">jump_rule_exists_no_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#61">chop_newline</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1240">process_spa_request</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1018">forward_access_rule.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#694">create_fw_chains</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html deleted file mode 100644 index b1ab7a63..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.func.html +++ /dev/null @@ -1,197 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fw_util_firewalld.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fw_util_firewalld.c<span style="font-size: 80%;"> (<a href="fw_util_firewalld.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">53</td> - <td class="headerCovTableEntry">575</td> - <td class="headerCovTableEntryLo">9.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">29</td> - <td class="headerCovTableEntryLo">10.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">34</td> - <td class="headerCovTableEntry">302</td> - <td class="headerCovTableEntryLo">11.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fw_util_firewalld.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#341">add_jump_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#375">chain_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1389">check_firewall_rules</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#61">chop_newline</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#273">comment_match_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#643">create_chain</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#694">create_fw_chains</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#933">create_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#560">delete_all_chains</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1064">dnat_rule.isra.1</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#201">firewd_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#961">firewd_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1018">forward_access_rule.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#922">fw_cleanup</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#805">fw_config_init</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#476">fw_dump_rules</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#877">fw_initialize</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#460">jump_rule_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#408">jump_rule_exists_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#430">jump_rule_exists_no_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#674">mk_chain</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1240">process_spa_request</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#177">rule_exists</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#143">rule_exists_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#69">rule_exists_no_chk_support</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#710">set_fw_chain_conf</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1123">snat_rule</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#1581">validate_firewd_chain_conf</a></td> - <td class="coverFnHi">4770</td> - </tr> - <tr> - <td class="coverFn"><a href="fw_util_firewalld.c.gcov.html#51">zero_cmd_buffers</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html deleted file mode 100644 index 9d5b4ca5..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fw_util_firewalld.c.gcov.html +++ /dev/null @@ -1,1702 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fw_util_firewalld.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fw_util_firewalld.c<span style="font-size: 80%;"> (source / <a href="fw_util_firewalld.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">53</td> - <td class="headerCovTableEntry">575</td> - <td class="headerCovTableEntryLo">9.2 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">29</td> - <td class="headerCovTableEntryLo">10.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">34</td> - <td class="headerCovTableEntry">302</td> - <td class="headerCovTableEntryLo">11.3 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fw_util_firewalld.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Fwknop routines for managing firewalld firewall rules. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : -<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #ifdef FIREWALL_FIREWALLD -<span class="lineNum"> 35 </span> : : -<span class="lineNum"> 36 </span> : : #include &quot;fw_util.h&quot; -<span class="lineNum"> 37 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 38 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 39 </span> : : #include &quot;extcmd.h&quot; -<span class="lineNum"> 40 </span> : : #include &quot;access.h&quot; -<span class="lineNum"> 41 </span> : : -<span class="lineNum"> 42 </span> : : static struct fw_config fwc; -<span class="lineNum"> 43 </span> : : static char cmd_buf[CMD_BUFSIZE]; -<span class="lineNum"> 44 </span> : : static char err_buf[CMD_BUFSIZE]; -<span class="lineNum"> 45 </span> : : static char cmd_out[STANDARD_CMD_OUT_BUFSIZE]; -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> : : /* assume 'firewall-cmd --direct --passthrough ipv4 -C' is offered -<span class="lineNum"> 48 </span> : : * (see firewd_chk_support()). -<span class="lineNum"> 49 </span> : : */ -<span class="lineNum"> 50 </span> : : static int have_firewd_chk_support = 1; -<a name="51"><span class="lineNum"> 51 </span> : : </a> -<span class="lineNum"> 52 </span> : : static void -<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers(void)</span> -<span class="lineNum"> 54 </span> : : { -<span class="lineNum"> 55 </span> : : memset(cmd_buf, 0x0, CMD_BUFSIZE); -<span class="lineNum"> 56 </span> : : memset(err_buf, 0x0, CMD_BUFSIZE); -<span class="lineNum"> 57 </span> : : memset(cmd_out, 0x0, STANDARD_CMD_OUT_BUFSIZE); -<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 59 </span> : : -<span class="lineNum"> 60 </span> : : static int pid_status = 0; -<a name="61"><span class="lineNum"> 61 </span> : : </a> -<span class="lineNum"> 62 </span> : : static void -<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : chop_newline(char *str)</span> -<span class="lineNum"> 64 </span> : : { -<span class="lineNum"> 65 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(str[0] != 0x0 &amp;&amp; str[strlen(str)-1] == 0x0a)</span> -<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : str[strlen(str)-1] = 0x0;</span> -<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 68 </span> : : } -<a name="69"><span class="lineNum"> 69 </span> : : </a> -<span class="lineNum"> 70 </span> : : static int -<span class="lineNum"> 71 </span> :<span class="lineNoCov"> 0 : rule_exists_no_chk_support(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 72 </span> : : const struct fw_chain * const fwc, const unsigned int proto, -<span class="lineNum"> 73 </span> : : const char * const srcip, const char * const dstip, -<span class="lineNum"> 74 </span> : : const unsigned int port, const unsigned int exp_ts) -<span class="lineNum"> 75 </span> : : { -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : int rule_exists=0;</span> -<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : char cmd_buf[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : char target_search[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : char proto_search[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : char srcip_search[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : char dstip_search[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 82 </span> :<span class="lineNoCov"> 0 : char port_search[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : char exp_ts_search[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 84 </span> : : -<span class="lineNum"> 85 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, -<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : fwc-&gt;table,</span> -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : fwc-&gt;to_chain</span> -<span class="lineNum"> 89 </span> : : ); -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> : : #if CODE_COVERAGE -<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : int pid_status = 0;</span> -<span class="lineNum"> 93 </span> : : /* If we're maximizing code coverage, then exercise the run_extcmd_write() -<span class="lineNum"> 94 </span> : : * function which is normally only used for the PF firewall. This is to -<span class="lineNum"> 95 </span> : : * maximize code coverage in conjunction with the test suite, and is never -<span class="lineNum"> 96 </span> : : * compiled in for a production release of fwknop. -<span class="lineNum"> 97 </span> : : */ -<span class="lineNum"> 98 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(run_extcmd_write(&quot;/bin/grep -v test&quot;, &quot;/bin/echo test&quot;, &amp;pid_status, opts) == 0)</span> -<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[ignore] Code coverage: Executed command&quot;);</span> -<span class="lineNum"> 100 </span> : : #endif -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(proto == IPPROTO_TCP)</span> -<span class="lineNum"> 103 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; tcp &quot;); -<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(proto == IPPROTO_UDP)</span> -<span class="lineNum"> 105 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; udp &quot;); -<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(proto == IPPROTO_ICMP)</span> -<span class="lineNum"> 107 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; icmp &quot;); -<span class="lineNum"> 108 </span> : : else -<span class="lineNum"> 109 </span> : : snprintf(proto_search, CMD_BUFSIZE-1, &quot; %u &quot;, proto); -<span class="lineNum"> 110 </span> : : -<span class="lineNum"> 111 </span> : : snprintf(port_search, CMD_BUFSIZE-1, &quot;:%u &quot;, port); -<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : snprintf(target_search, CMD_BUFSIZE-1, &quot; %s &quot;, fwc-&gt;target);</span> -<span class="lineNum"> 113 </span> : : snprintf(srcip_search, CMD_BUFSIZE-1, &quot; %s &quot;, srcip); -<span class="lineNum"> 114 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (dstip != NULL)</span> -<span class="lineNum"> 115 </span> : : { -<span class="lineNum"> 116 </span> : : snprintf(dstip_search, CMD_BUFSIZE-1, &quot; %s &quot;, dstip); -<span class="lineNum"> 117 </span> : : } -<span class="lineNum"> 118 </span> : : snprintf(exp_ts_search, CMD_BUFSIZE-1, &quot;%u &quot;, exp_ts); -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> : : /* search for each of the substrings - yes, matches from different -<span class="lineNum"> 121 </span> : : * rules may get triggered here, but the expiration time is the -<span class="lineNum"> 122 </span> : : * primary search method -<span class="lineNum"> 123 </span> : : */ -<span class="lineNum"> 124 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, exp_ts_search, &amp;pid_status, opts)</span> -<span class="lineNum"> 125 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, proto_search, &amp;pid_status, opts)</span> -<span class="lineNum"> 126 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, srcip_search, &amp;pid_status, opts)</span> -<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (dstip == NULL) ? 1 : search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, dstip_search, &amp;pid_status, opts)</span> -<span class="lineNum"> 128 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, target_search, &amp;pid_status, opts)</span> -<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, port_search, &amp;pid_status, opts))</span> -<span class="lineNum"> 130 </span> : : rule_exists = 1; -<span class="lineNum"> 131 </span> : : -<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists)</span> -<span class="lineNum"> 133 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> -<span class="lineNum"> 134 </span> : : &quot;rule_exists_no_chk_support() %s %u -&gt; %s expires: %u rule (already exists&quot;, -<span class="lineNum"> 135 </span> : : proto_search, port, srcip, exp_ts); -<span class="lineNum"> 136 </span> : : else -<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> -<span class="lineNum"> 138 </span> : : &quot;rule_exists_no_chk_support() %s %u -&gt; %s expires: %u rule does not exist&quot;, -<span class="lineNum"> 139 </span> : : proto_search, port, srcip, exp_ts); -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : return(rule_exists);</span> -<span class="lineNum"> 142 </span> : : } -<a name="143"><span class="lineNum"> 143 </span> : : </a> -<span class="lineNum"> 144 </span> : : static int -<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : rule_exists_chk_support(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 146 </span> : : const char * const chain, const char * const rule) -<span class="lineNum"> 147 </span> : : { -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : int rule_exists = 0;</span> -<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : int res = 0;</span> -<span class="lineNum"> 150 </span> : : -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_CHK_RULE_ARGS, -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command, chain, rule);</span> -<span class="lineNum"> 155 </span> : : -<span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 157 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 159 </span> : : -<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists_chk_support() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 161 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncmp(err_buf, &quot;success&quot;, strlen(&quot;success&quot;)) == 0)</span> -<span class="lineNum"> 164 </span> : : { -<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : rule_exists = 1;</span> -<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists_chk_support() Rule : '%s' in %s already exists&quot;,</span> -<span class="lineNum"> 167 </span> : : rule, chain); -<span class="lineNum"> 168 </span> : : } -<span class="lineNum"> 169 </span> : : else -<span class="lineNum"> 170 </span> : : { -<span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists_chk_support() Rule : '%s' in %s does not exist&quot;,</span> -<span class="lineNum"> 172 </span> : : rule, chain); -<span class="lineNum"> 173 </span> : : } -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : return(rule_exists);</span> -<span class="lineNum"> 176 </span> : : } -<a name="177"><span class="lineNum"> 177 </span> : : </a> -<span class="lineNum"> 178 </span> : : static int -<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : rule_exists(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 180 </span> : : const struct fw_chain * const fwc, const char * const rule, -<span class="lineNum"> 181 </span> : : const unsigned int proto, const char * const srcip, -<span class="lineNum"> 182 </span> : : const char * const dstip, const unsigned int port, -<span class="lineNum"> 183 </span> : : const unsigned int exp_ts) -<span class="lineNum"> 184 </span> : : { -<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : int rule_exists = 0;</span> -<span class="lineNum"> 186 </span> : : -<span class="lineNum"> 187 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(have_firewd_chk_support == 1)</span> -<span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : rule_exists = rule_exists_chk_support(opts, fwc-&gt;to_chain, rule);</span> -<span class="lineNum"> 189 </span> : : else -<span class="lineNum"> 190 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : rule_exists = rule_exists_no_chk_support(opts, fwc, proto, srcip, (opts-&gt;fw_config-&gt;use_destination ? dstip : NULL), port, exp_ts);</span> -<span class="lineNum"> 191 </span> : : -<span class="lineNum"> 192 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists == 1)</span> -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists() Rule : '%s' in %s already exists&quot;,</span> -<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : rule, fwc-&gt;to_chain);</span> -<span class="lineNum"> 195 </span> : : else -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;rule_exists() Rule : '%s' in %s does not exist&quot;,</span> -<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : rule, fwc-&gt;to_chain);</span> -<span class="lineNum"> 198 </span> : : -<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : return(rule_exists);</span> -<span class="lineNum"> 200 </span> : : } -<a name="201"><span class="lineNum"> 201 </span> : : </a> -<span class="lineNum"> 202 </span> : : static void -<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : firewd_chk_support(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 204 </span> : : { -<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : int res = 1;</span> -<span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : struct fw_chain *in_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_INPUT_ACCESS]);</span> -<span class="lineNum"> 207 </span> : : -<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 209 </span> : : -<span class="lineNum"> 210 </span> : : /* Add a harmless rule to the firewalld INPUT chain and see if firewalld -<span class="lineNum"> 211 </span> : : * supports '-C' to check for it. Set &quot;have_firewd_chk_support&quot; accordingly, -<span class="lineNum"> 212 </span> : : * delete the rule, and return. -<span class="lineNum"> 213 </span> : : */ -<span class="lineNum"> 214 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_TMP_CHK_RULE_ARGS, -<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;table,</span> -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;from_chain,</span> -<span class="lineNum"> 218 </span> : : 1, /* first rule */ -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;target</span> -<span class="lineNum"> 220 </span> : : ); -<span class="lineNum"> 221 </span> : : -<span class="lineNum"> 222 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 223 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 225 </span> : : -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 227 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 228 </span> : : -<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> : : /* Now see if '-C' works -<span class="lineNum"> 232 </span> : : */ -<span class="lineNum"> 233 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_TMP_VERIFY_CHK_ARGS, -<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 235 </span> : : in_chain-&gt;table, -<span class="lineNum"> 236 </span> : : in_chain-&gt;from_chain, -<span class="lineNum"> 237 </span> : : in_chain-&gt;target -<span class="lineNum"> 238 </span> : : ); -<span class="lineNum"> 239 </span> : : -<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 241 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 243 </span> : : -<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 245 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncmp(err_buf, &quot;success&quot;, strlen(&quot;success&quot;)) == 0)</span> -<span class="lineNum"> 248 </span> : : { -<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() -C supported&quot;);</span> -<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : have_firewd_chk_support = 1;</span> -<span class="lineNum"> 251 </span> : : } -<span class="lineNum"> 252 </span> : : else -<span class="lineNum"> 253 </span> : : { -<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;firewd_chk_support() -C not supported&quot;);</span> -<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : have_firewd_chk_support = 0;</span> -<span class="lineNum"> 256 </span> : : } -<span class="lineNum"> 257 </span> : : -<span class="lineNum"> 258 </span> : : /* Delete the tmp rule -<span class="lineNum"> 259 </span> : : */ -<span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 261 </span> : : -<span class="lineNum"> 262 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_RULE_ARGS, -<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 264 </span> : : in_chain-&gt;table, -<span class="lineNum"> 265 </span> : : in_chain-&gt;from_chain, -<span class="lineNum"> 266 </span> : : 1 -<span class="lineNum"> 267 </span> : : ); -<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 269 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 270 </span> : : -<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 272 </span> : : } -<a name="273"><span class="lineNum"> 273 </span> : : </a> -<span class="lineNum"> 274 </span> : : static int -<span class="lineNum"> 275 </span> :<span class="lineNoCov"> 0 : comment_match_exists(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 276 </span> : : { -<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : int res = 1;</span> -<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : char *ndx = NULL;</span> -<span class="lineNum"> 279 </span> :<span class="lineNoCov"> 0 : struct fw_chain *in_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_INPUT_ACCESS]);</span> -<span class="lineNum"> 280 </span> : : -<span class="lineNum"> 281 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 282 </span> : : -<span class="lineNum"> 283 </span> : : /* Add a harmless rule to the firewalld INPUT chain that uses the comment -<span class="lineNum"> 284 </span> : : * match and make sure it exists. If not, return zero. Otherwise, delete -<span class="lineNum"> 285 </span> : : * the rule and return true. -<span class="lineNum"> 286 </span> : : */ -<span class="lineNum"> 287 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_TMP_COMMENT_ARGS, -<span class="lineNum"> 288 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 289 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;table,</span> -<span class="lineNum"> 290 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;from_chain,</span> -<span class="lineNum"> 291 </span> : : 1, /* first rule */ -<span class="lineNum"> 292 </span> :<span class="lineNoCov"> 0 : in_chain-&gt;target</span> -<span class="lineNum"> 293 </span> : : ); -<span class="lineNum"> 294 </span> : : -<span class="lineNum"> 295 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 296 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 298 </span> : : -<span class="lineNum"> 299 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;comment_match_exists() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 300 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 301 </span> : : -<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 303 </span> : : -<span class="lineNum"> 304 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, -<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 306 </span> : : in_chain-&gt;table, -<span class="lineNum"> 307 </span> : : in_chain-&gt;from_chain -<span class="lineNum"> 308 </span> : : ); -<span class="lineNum"> 309 </span> : : -<span class="lineNum"> 310 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE,</span> -<span class="lineNum"> 311 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 312 </span> :<span class="lineNoCov"> 0 : chop_newline(cmd_out);</span> -<span class="lineNum"> 313 </span> : : -<span class="lineNum"> 314 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, cmd_out);</span> -<span class="lineNum"> 316 </span> : : -<span class="lineNum"> 317 </span> :<span class="lineNoCov"> 0 : ndx = strstr(cmd_out, TMP_COMMENT);</span> -<span class="lineNum"> 318 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> -<span class="lineNum"> 319 </span> : : res = 0; /* did not find the tmp comment */ -<span class="lineNum"> 320 </span> : : else -<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : res = 1;</span> -<span class="lineNum"> 322 </span> : : -<span class="lineNum"> 323 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 1)</span> -<span class="lineNum"> 324 </span> : : { -<span class="lineNum"> 325 </span> : : /* Delete the tmp comment rule -<span class="lineNum"> 326 </span> : : */ -<span class="lineNum"> 327 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 328 </span> : : -<span class="lineNum"> 329 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_RULE_ARGS, -<span class="lineNum"> 330 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 331 </span> : : in_chain-&gt;table, -<span class="lineNum"> 332 </span> : : in_chain-&gt;from_chain, -<span class="lineNum"> 333 </span> : : 1 -<span class="lineNum"> 334 </span> : : ); -<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 336 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 337 </span> : : } -<span class="lineNum"> 338 </span> : : -<span class="lineNum"> 339 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 340 </span> : : } -<a name="341"><span class="lineNum"> 341 </span> : : </a> -<span class="lineNum"> 342 </span> : : static int -<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : add_jump_rule(const fko_srv_options_t * const opts, const int chain_num)</span> -<span class="lineNum"> 344 </span> : : { -<span class="lineNum"> 345 </span> :<span class="lineNoCov"> 0 : int res = 0, rv = 0;</span> -<span class="lineNum"> 346 </span> : : -<span class="lineNum"> 347 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 348 </span> : : -<span class="lineNum"> 349 </span> :<span class="lineNoCov"> 0 : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_ADD_JUMP_RULE_ARGS,</span> -<span class="lineNum"> 350 </span> : : fwc.fw_command, -<span class="lineNum"> 351 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> -<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].from_chain,</span> -<span class="lineNum"> 353 </span> : : fwc.chain[chain_num].jump_rule_pos, -<span class="lineNum"> 354 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> -<span class="lineNum"> 355 </span> : : ); -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 358 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 359 </span> : : -<span class="lineNum"> 360 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;add_jump_rule() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 361 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 362 </span> : : -<span class="lineNum"> 363 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 364 </span> : : { -<span class="lineNum"> 365 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Added jump rule from chain: %s to chain: %s&quot;,</span> -<span class="lineNum"> 366 </span> : : fwc.chain[chain_num].from_chain, -<span class="lineNum"> 367 </span> : : fwc.chain[chain_num].to_chain); -<span class="lineNum"> 368 </span> :<span class="lineNoCov"> 0 : rv = 1;</span> -<span class="lineNum"> 369 </span> : : } -<span class="lineNum"> 370 </span> : : else -<span class="lineNum"> 371 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 372 </span> : : -<span class="lineNum"> 373 </span> :<span class="lineNoCov"> 0 : return rv;</span> -<span class="lineNum"> 374 </span> : : } -<a name="375"><span class="lineNum"> 375 </span> : : </a> -<span class="lineNum"> 376 </span> : : static int -<span class="lineNum"> 377 </span> :<span class="lineNoCov"> 0 : chain_exists(const fko_srv_options_t * const opts, const int chain_num)</span> -<span class="lineNum"> 378 </span> : : { -<span class="lineNum"> 379 </span> :<span class="lineNoCov"> 0 : int res = 0, rv = 0;</span> -<span class="lineNum"> 380 </span> : : -<span class="lineNum"> 381 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 382 </span> : : -<span class="lineNum"> 383 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_CHAIN_EXISTS_ARGS, -<span class="lineNum"> 384 </span> : : fwc.fw_command, -<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> -<span class="lineNum"> 386 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> -<span class="lineNum"> 387 </span> : : ); -<span class="lineNum"> 388 </span> : : -<span class="lineNum"> 389 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 390 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 391 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 392 </span> : : -<span class="lineNum"> 393 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;chain_exists() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 394 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 395 </span> : : -<span class="lineNum"> 396 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strstr(err_buf, FIREWD_CMD_FAIL_STR) == NULL)</span> -<span class="lineNum"> 397 </span> : : { -<span class="lineNum"> 398 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;'%s' table '%s' chain exists&quot;,</span> -<span class="lineNum"> 399 </span> : : fwc.chain[chain_num].table, -<span class="lineNum"> 400 </span> : : fwc.chain[chain_num].to_chain); -<span class="lineNum"> 401 </span> :<span class="lineNoCov"> 0 : rv = 1;</span> -<span class="lineNum"> 402 </span> : : } -<span class="lineNum"> 403 </span> : : else -<span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 405 </span> : : -<span class="lineNum"> 406 </span> :<span class="lineNoCov"> 0 : return rv;</span> -<span class="lineNum"> 407 </span> : : } -<a name="408"><span class="lineNum"> 408 </span> : : </a> -<span class="lineNum"> 409 </span> : : static int -<span class="lineNum"> 410 </span> :<span class="lineNoCov"> 0 : jump_rule_exists_chk_support(const fko_srv_options_t * const opts, const int chain_num)</span> -<span class="lineNum"> 411 </span> : : { -<span class="lineNum"> 412 </span> :<span class="lineNoCov"> 0 : int exists = 0;</span> -<span class="lineNum"> 413 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 414 </span> : : -<span class="lineNum"> 415 </span> : : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_CHK_JUMP_RULE_ARGS, -<span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> -<span class="lineNum"> 417 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> -<span class="lineNum"> 418 </span> : : ); -<span class="lineNum"> 419 </span> : : -<span class="lineNum"> 420 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists_chk_support(opts, fwc.chain[chain_num].from_chain, rule_buf) == 1)</span> -<span class="lineNum"> 421 </span> : : { -<span class="lineNum"> 422 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_chk_support() jump rule found&quot;);</span> -<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : exists = 1;</span> -<span class="lineNum"> 424 </span> : : } -<span class="lineNum"> 425 </span> : : else -<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_chk_support() jump rule not found&quot;);</span> -<span class="lineNum"> 427 </span> : : -<span class="lineNum"> 428 </span> :<span class="lineNoCov"> 0 : return exists;</span> -<span class="lineNum"> 429 </span> : : } -<a name="430"><span class="lineNum"> 430 </span> : : </a> -<span class="lineNum"> 431 </span> : : static int -<span class="lineNum"> 432 </span> :<span class="lineNoCov"> 0 : jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, const int chain_num)</span> -<span class="lineNum"> 433 </span> : : { -<span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : int exists = 0;</span> -<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : char cmd_buf[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 436 </span> :<span class="lineNoCov"> 0 : char chain_search[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 437 </span> : : -<span class="lineNum"> 438 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, -<span class="lineNum"> 439 </span> : : fwc.fw_command, -<span class="lineNum"> 440 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> -<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].from_chain</span> -<span class="lineNum"> 442 </span> : : ); -<span class="lineNum"> 443 </span> : : -<span class="lineNum"> 444 </span> : : /* include spaces on either side as produced by 'firewalld -L' output -<span class="lineNum"> 445 </span> : : */ -<span class="lineNum"> 446 </span> : : snprintf(chain_search, CMD_BUFSIZE-1, &quot; %s &quot;, -<span class="lineNum"> 447 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain);</span> -<span class="lineNum"> 448 </span> : : -<span class="lineNum"> 449 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(search_extcmd(cmd_buf, WANT_STDERR,</span> -<span class="lineNum"> 450 </span> : : NO_TIMEOUT, chain_search, &amp;pid_status, opts) &gt; 0) -<span class="lineNum"> 451 </span> :<span class="lineNoCov"> 0 : exists = 1;</span> -<span class="lineNum"> 452 </span> : : -<span class="lineNum"> 453 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(exists)</span> -<span class="lineNum"> 454 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_no_chk_support() jump rule found&quot;);</span> -<span class="lineNum"> 455 </span> : : else -<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;jump_rule_exists_no_chk_support() jump rule not found&quot;);</span> -<span class="lineNum"> 457 </span> : : -<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : return(exists);</span> -<span class="lineNum"> 459 </span> : : } -<a name="460"><span class="lineNum"> 460 </span> : : </a> -<span class="lineNum"> 461 </span> : : static int -<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : jump_rule_exists(const fko_srv_options_t * const opts, const int chain_num)</span> -<span class="lineNum"> 463 </span> : : { -<span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : int exists = 0;</span> -<span class="lineNum"> 465 </span> : : -<span class="lineNum"> 466 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(have_firewd_chk_support == 1)</span> -<span class="lineNum"> 467 </span> :<span class="lineNoCov"> 0 : exists = jump_rule_exists_chk_support(opts, chain_num);</span> -<span class="lineNum"> 468 </span> : : else -<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : exists = jump_rule_exists_no_chk_support(opts, chain_num);</span> -<span class="lineNum"> 470 </span> : : -<span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : return exists;</span> -<span class="lineNum"> 472 </span> : : } -<span class="lineNum"> 473 </span> : : -<span class="lineNum"> 474 </span> : : /* Print all firewall rules currently instantiated by the running fwknopd -<span class="lineNum"> 475 </span> : : * daemon to stdout. -<a name="476"><span class="lineNum"> 476 </span> : : */</a> -<span class="lineNum"> 477 </span> : : int -<span class="lineNum"> 478 </span> :<span class="lineNoCov"> 0 : fw_dump_rules(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 479 </span> : : { -<span class="lineNum"> 480 </span> : : int i; -<span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : int res, got_err = 0;</span> -<span class="lineNum"> 482 </span> : : -<span class="lineNum"> 483 </span> :<span class="lineNoCov"> 0 : struct fw_chain *ch = opts-&gt;fw_config-&gt;chain;</span> -<span class="lineNum"> 484 </span> : : -<span class="lineNum"> 485 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;fw_list_all == 1)</span> -<span class="lineNum"> 486 </span> : : { -<span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Listing all firewalld rules in applicable tables...\n&quot;);</span> -<span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> -<span class="lineNum"> 489 </span> : : -<span class="lineNum"> 490 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> -<span class="lineNum"> 491 </span> : : { -<span class="lineNum"> 492 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> -<span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 494 </span> : : -<span class="lineNum"> 495 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 496 </span> : : -<span class="lineNum"> 497 </span> : : /* Create the list command -<span class="lineNum"> 498 </span> : : */ -<span class="lineNum"> 499 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_ALL_RULES_ARGS, -<span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : ch[i].table</span> -<span class="lineNum"> 502 </span> : : ); -<span class="lineNum"> 503 </span> : : -<span class="lineNum"> 504 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, NULL, 0, NO_STDERR,</span> -<span class="lineNum"> 505 </span> : : NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 506 </span> : : -<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;fw_dump_rules() CMD: '%s' (res: %d)&quot;,</span> -<span class="lineNum"> 508 </span> : : cmd_buf, res); -<span class="lineNum"> 509 </span> : : -<span class="lineNum"> 510 </span> : : /* Expect full success on this */ -<span class="lineNum"> 511 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 512 </span> : : { -<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : got_err++;</span> -<span class="lineNum"> 515 </span> : : } -<span class="lineNum"> 516 </span> : : } -<span class="lineNum"> 517 </span> : : } -<span class="lineNum"> 518 </span> : : else -<span class="lineNum"> 519 </span> : : { -<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Listing rules in fwknopd firewalld chains...\n&quot;);</span> -<span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> -<span class="lineNum"> 522 </span> : : -<span class="lineNum"> 523 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> -<span class="lineNum"> 524 </span> : : { -<span class="lineNum"> 525 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> -<span class="lineNum"> 526 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 527 </span> : : -<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 529 </span> : : -<span class="lineNum"> 530 </span> : : /* Create the list command -<span class="lineNum"> 531 </span> : : */ -<span class="lineNum"> 532 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, -<span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : ch[i].table,</span> -<span class="lineNum"> 535 </span> :<span class="lineNoCov"> 0 : ch[i].to_chain</span> -<span class="lineNum"> 536 </span> : : ); -<span class="lineNum"> 537 </span> : : -<span class="lineNum"> 538 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;\n&quot;);</span> -<span class="lineNum"> 539 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> -<span class="lineNum"> 540 </span> : : -<span class="lineNum"> 541 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, NULL, 0, NO_STDERR,</span> -<span class="lineNum"> 542 </span> : : NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 543 </span> : : -<span class="lineNum"> 544 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;fw_dump_rules() CMD: '%s' (res: %d)&quot;,</span> -<span class="lineNum"> 545 </span> : : cmd_buf, res); -<span class="lineNum"> 546 </span> : : -<span class="lineNum"> 547 </span> : : /* Expect full success on this */ -<span class="lineNum"> 548 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 549 </span> : : { -<span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : got_err++;</span> -<span class="lineNum"> 552 </span> : : } -<span class="lineNum"> 553 </span> : : } -<span class="lineNum"> 554 </span> : : } -<span class="lineNum"> 555 </span> : : -<span class="lineNum"> 556 </span> :<span class="lineNoCov"> 0 : return(got_err);</span> -<span class="lineNum"> 557 </span> : : } -<span class="lineNum"> 558 </span> : : -<span class="lineNum"> 559 </span> : : /* Quietly flush and delete all fwknop custom chains. -<a name="560"><span class="lineNum"> 560 </span> : : */</a> -<span class="lineNum"> 561 </span> : : static void -<span class="lineNum"> 562 </span> :<span class="lineNoCov"> 0 : delete_all_chains(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 563 </span> : : { -<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : int i, res, cmd_ctr = 0;</span> -<span class="lineNum"> 565 </span> : : -<span class="lineNum"> 566 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> -<span class="lineNum"> 567 </span> : : { -<span class="lineNum"> 568 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> -<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 570 </span> : : -<span class="lineNum"> 571 </span> : : /* First look for a jump rule to this chain and remove it if it -<span class="lineNum"> 572 </span> : : * is there. -<span class="lineNum"> 573 </span> : : */ -<span class="lineNum"> 574 </span> : : cmd_ctr = 0; -<span class="lineNum"> 575 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(cmd_ctr &lt; CMD_LOOP_TRIES &amp;&amp; (jump_rule_exists(opts, i) == 1))</span> -<span class="lineNum"> 576 </span> : : { -<span class="lineNum"> 577 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 578 </span> : : -<span class="lineNum"> 579 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_JUMP_RULE_ARGS, -<span class="lineNum"> 580 </span> : : fwc.fw_command, -<span class="lineNum"> 581 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].table,</span> -<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].from_chain,</span> -<span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].to_chain</span> -<span class="lineNum"> 584 </span> : : ); -<span class="lineNum"> 585 </span> : : -<span class="lineNum"> 586 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 587 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 589 </span> : : -<span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;delete_all_chains() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 591 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 592 </span> : : -<span class="lineNum"> 593 </span> : : /* Expect full success on this */ -<span class="lineNum"> 594 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 596 </span> : : -<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : cmd_ctr++;</span> -<span class="lineNum"> 598 </span> : : } -<span class="lineNum"> 599 </span> : : -<span class="lineNum"> 600 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 601 </span> : : -<span class="lineNum"> 602 </span> : : /* Now flush and remove the chain. -<span class="lineNum"> 603 </span> : : */ -<span class="lineNum"> 604 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_FLUSH_CHAIN_ARGS, -<span class="lineNum"> 605 </span> : : fwc.fw_command, -<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].table,</span> -<span class="lineNum"> 607 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].to_chain</span> -<span class="lineNum"> 608 </span> : : ); -<span class="lineNum"> 609 </span> : : -<span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> -<span class="lineNum"> 611 </span> : : NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 612 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 613 </span> : : -<span class="lineNum"> 614 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;delete_all_chains() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 615 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 616 </span> : : -<span class="lineNum"> 617 </span> : : /* Expect full success on this */ -<span class="lineNum"> 618 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 619 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 620 </span> : : -<span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 622 </span> : : -<span class="lineNum"> 623 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_CHAIN_ARGS, -<span class="lineNum"> 624 </span> : : fwc.fw_command, -<span class="lineNum"> 625 </span> :<span class="lineNoCov"> 0 : fwc.chain[i].table,</span> -<span class="lineNum"> 626 </span> : : fwc.chain[i].to_chain -<span class="lineNum"> 627 </span> : : ); -<span class="lineNum"> 628 </span> : : -<span class="lineNum"> 629 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> -<span class="lineNum"> 630 </span> : : NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 632 </span> : : -<span class="lineNum"> 633 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;delete_all_chains() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 634 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 635 </span> : : -<span class="lineNum"> 636 </span> : : /* Expect full success on this */ -<span class="lineNum"> 637 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 639 </span> : : -<span class="lineNum"> 640 </span> : : } -<span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 642 </span> : : } -<a name="643"><span class="lineNum"> 643 </span> : : </a> -<span class="lineNum"> 644 </span> : : static int -<span class="lineNum"> 645 </span> :<span class="lineNoCov"> 0 : create_chain(const fko_srv_options_t * const opts, const int chain_num)</span> -<span class="lineNum"> 646 </span> : : { -<span class="lineNum"> 647 </span> :<span class="lineNoCov"> 0 : int res = 0, rv = 0;</span> -<span class="lineNum"> 648 </span> : : -<span class="lineNum"> 649 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 650 </span> : : -<span class="lineNum"> 651 </span> : : /* Create the custom chain. -<span class="lineNum"> 652 </span> : : */ -<span class="lineNum"> 653 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_NEW_CHAIN_ARGS, -<span class="lineNum"> 654 </span> : : fwc.fw_command, -<span class="lineNum"> 655 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].table,</span> -<span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : fwc.chain[chain_num].to_chain</span> -<span class="lineNum"> 657 </span> : : ); -<span class="lineNum"> 658 </span> : : -<span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> -<span class="lineNum"> 660 </span> : : NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 661 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 662 </span> : : -<span class="lineNum"> 663 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;create_chain() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 664 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 665 </span> : : -<span class="lineNum"> 666 </span> : : /* Expect full success on this */ -<span class="lineNum"> 667 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 668 </span> : : rv = 1; -<span class="lineNum"> 669 </span> : : else -<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 671 </span> : : -<span class="lineNum"> 672 </span> :<span class="lineNoCov"> 0 : return rv;</span> -<span class="lineNum"> 673 </span> : : } -<a name="674"><span class="lineNum"> 674 </span> : : </a> -<span class="lineNum"> 675 </span> : : static int -<span class="lineNum"> 676 </span> :<span class="lineNoCov"> 0 : mk_chain(const fko_srv_options_t * const opts, const int chain_num)</span> -<span class="lineNum"> 677 </span> : : { -<span class="lineNum"> 678 </span> :<span class="lineNoCov"> 0 : int err = 0;</span> -<span class="lineNum"> 679 </span> : : -<span class="lineNum"> 680 </span> : : /* Make sure the required chain and jump rule exist -<span class="lineNum"> 681 </span> : : */ -<span class="lineNum"> 682 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! chain_exists(opts, chain_num))</span> -<span class="lineNum"> 683 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! create_chain(opts, chain_num))</span> -<span class="lineNum"> 684 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 685 </span> : : -<span class="lineNum"> 686 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! jump_rule_exists(opts, chain_num))</span> -<span class="lineNum"> 687 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! add_jump_rule(opts, chain_num))</span> -<span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 689 </span> : : -<span class="lineNum"> 690 </span> :<span class="lineNoCov"> 0 : return err;</span> -<span class="lineNum"> 691 </span> : : } -<span class="lineNum"> 692 </span> : : -<span class="lineNum"> 693 </span> : : /* Create the fwknop custom chains (at least those that are configured). -<a name="694"><span class="lineNum"> 694 </span> : : */</a> -<span class="lineNum"> 695 </span> : : static int -<span class="lineNum"> 696 </span> :<span class="lineNoCov"> 0 : create_fw_chains(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 697 </span> : : { -<span class="lineNum"> 698 </span> :<span class="lineNoCov"> 0 : int i, got_err = 0;</span> -<span class="lineNum"> 699 </span> : : -<span class="lineNum"> 700 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> -<span class="lineNum"> 701 </span> : : { -<span class="lineNum"> 702 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fwc.chain[i].target[0] == '\0')</span> -<span class="lineNum"> 703 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 704 </span> : : -<span class="lineNum"> 705 </span> :<span class="lineNoCov"> 0 : got_err += mk_chain(opts, i);</span> -<span class="lineNum"> 706 </span> : : } -<span class="lineNum"> 707 </span> : : -<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : return(got_err);</span> -<span class="lineNum"> 709 </span> : : } -<a name="710"><span class="lineNum"> 710 </span> : : </a> -<span class="lineNum"> 711 </span> : : static int -<span class="lineNum"> 712 </span> :<span class="lineCov"> 795 : set_fw_chain_conf(const int type, const char * const conf_str)</span> -<span class="lineNum"> 713 </span> : : { -<span class="lineNum"> 714 </span> : : int i, j, is_err; -<span class="lineNum"> 715 </span> :<span class="lineCov"> 795 : char tbuf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 716 </span> :<span class="lineCov"> 795 : const char *ndx = conf_str;</span> -<span class="lineNum"> 717 </span> : : -<span class="lineNum"> 718 </span> : : char *chain_fields[FW_NUM_CHAIN_FIELDS]; -<span class="lineNum"> 719 </span> : : -<span class="lineNum"> 720 </span> :<span class="lineCov"> 795 : struct fw_chain *chain = &amp;(fwc.chain[type]);</span> -<span class="lineNum"> 721 </span> : : -<span class="lineNum"> 722 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(conf_str == NULL)</span> -<span class="lineNum"> 723 </span> : : { -<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] NULL conf_str&quot;);</span> -<span class="lineNum"> 725 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 726 </span> : : } -<span class="lineNum"> 727 </span> : : -<span class="lineNum"> 728 </span> :<span class="lineCov"> 795 : chain-&gt;type = type;</span> -<span class="lineNum"> 729 </span> : : -<span class="lineNum"> 730 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(ndx != NULL)</span> -<span class="lineNum"> 731 </span> :<span class="lineCov"> 795 : chain_fields[0] = tbuf;</span> -<span class="lineNum"> 732 </span> : : -<span class="lineNum"> 733 </span> : : i = 0; -<span class="lineNum"> 734 </span> : : j = 1; -<span class="lineNum"> 735 </span> [<span class="branchCov" title="Branch 0 was taken 32595 times"> + </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 33390 : while(*ndx != '\0')</span> -<span class="lineNum"> 736 </span> : : { -<span class="lineNum"> 737 </span> [<span class="branchCov" title="Branch 0 was taken 28620 times"> + </span><span class="branchCov" title="Branch 1 was taken 3975 times"> + </span>]:<span class="lineCov"> 32595 : if(*ndx != ' ')</span> -<span class="lineNum"> 738 </span> : : { -<span class="lineNum"> 739 </span> [<span class="branchCov" title="Branch 0 was taken 3975 times"> + </span><span class="branchCov" title="Branch 1 was taken 24645 times"> + </span>]:<span class="lineCov"> 28620 : if(*ndx == ',')</span> -<span class="lineNum"> 740 </span> : : { -<span class="lineNum"> 741 </span> :<span class="lineCov"> 3975 : tbuf[i] = '\0';</span> -<span class="lineNum"> 742 </span> :<span class="lineCov"> 3975 : chain_fields[j++] = &amp;(tbuf[++i]);</span> -<span class="lineNum"> 743 </span> : : } -<span class="lineNum"> 744 </span> : : else -<span class="lineNum"> 745 </span> :<span class="lineCov"> 24645 : tbuf[i++] = *ndx;</span> -<span class="lineNum"> 746 </span> : : } -<span class="lineNum"> 747 </span> [<span class="branchCov" title="Branch 0 was taken 28620 times"> + </span><span class="branchCov" title="Branch 1 was taken 3975 times"> + </span>]:<span class="lineCov"> 32595 : if(*ndx != '\0'</span> -<span class="lineNum"> 748 </span> :<span class="lineCov"> 32595 : &amp;&amp; *ndx != ' '</span> -<span class="lineNum"> 749 </span> [<span class="branchCov" title="Branch 0 was taken 24645 times"> + </span><span class="branchCov" title="Branch 1 was taken 3975 times"> + </span>]:<span class="lineCov"> 28620 : &amp;&amp; *ndx != ','</span> -<span class="lineNum"> 750 </span> [<span class="branchCov" title="Branch 0 was taken 23850 times"> + </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 24645 : &amp;&amp; *ndx != '_'</span> -<span class="lineNum"> 751 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 23850 times"> + </span>]:<span class="lineCov"> 23850 : &amp;&amp; isalnum(*ndx) == 0)</span> -<span class="lineNum"> 752 </span> : : { -<span class="lineNum"> 753 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Custom chain config parse error: &quot;</span> -<span class="lineNum"> 754 </span> : : &quot;invalid character '%c' for chain type %i, &quot; -<span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : &quot;line: %s&quot;, *ndx, type, conf_str);</span> -<span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 757 </span> : : } -<span class="lineNum"> 758 </span> :<span class="lineCov"> 32595 : ndx++;</span> -<span class="lineNum"> 759 </span> : : } -<span class="lineNum"> 760 </span> : : -<span class="lineNum"> 761 </span> : : /* Sanity check - j should be the number of chain fields -<span class="lineNum"> 762 </span> : : * (excluding the type). -<span class="lineNum"> 763 </span> : : */ -<span class="lineNum"> 764 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(j != FW_NUM_CHAIN_FIELDS)</span> -<span class="lineNum"> 765 </span> : : { -<span class="lineNum"> 766 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Custom chain config parse error: &quot;</span> -<span class="lineNum"> 767 </span> : : &quot;wrong number of fields for chain type %i, &quot; -<span class="lineNum"> 768 </span> : : &quot;line: %s&quot;, type, conf_str); -<span class="lineNum"> 769 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 770 </span> : : } -<span class="lineNum"> 771 </span> : : -<span class="lineNum"> 772 </span> : : /* Pull and set Target */ -<span class="lineNum"> 773 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;target, chain_fields[0], sizeof(chain-&gt;target));</span> -<span class="lineNum"> 774 </span> : : -<span class="lineNum"> 775 </span> : : /* Pull and set Table */ -<span class="lineNum"> 776 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;table, chain_fields[1], sizeof(chain-&gt;table));</span> -<span class="lineNum"> 777 </span> : : -<span class="lineNum"> 778 </span> : : /* Pull and set From_chain */ -<span class="lineNum"> 779 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;from_chain, chain_fields[2], sizeof(chain-&gt;from_chain));</span> -<span class="lineNum"> 780 </span> : : -<span class="lineNum"> 781 </span> : : /* Pull and set Jump_rule_position */ -<span class="lineNum"> 782 </span> :<span class="lineCov"> 795 : chain-&gt;jump_rule_pos = strtol_wrapper(chain_fields[3],</span> -<span class="lineNum"> 783 </span> : : 0, RCHK_MAX_FIREWD_RULE_NUM, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 784 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 785 </span> : : { -<span class="lineNum"> 786 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid jump rule position in Line: %s&quot;,</span> -<span class="lineNum"> 787 </span> : : conf_str); -<span class="lineNum"> 788 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 789 </span> : : } -<span class="lineNum"> 790 </span> : : -<span class="lineNum"> 791 </span> : : /* Pull and set To_chain */ -<span class="lineNum"> 792 </span> :<span class="lineCov"> 795 : strlcpy(chain-&gt;to_chain, chain_fields[4], sizeof(chain-&gt;to_chain));</span> -<span class="lineNum"> 793 </span> : : -<span class="lineNum"> 794 </span> : : /* Pull and set to_chain rule position */ -<span class="lineNum"> 795 </span> :<span class="lineCov"> 795 : chain-&gt;rule_pos = strtol_wrapper(chain_fields[5],</span> -<span class="lineNum"> 796 </span> : : 0, RCHK_MAX_FIREWD_RULE_NUM, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 797 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 798 </span> : : { -<span class="lineNum"> 799 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid to_chain rule position in Line: %s&quot;,</span> -<span class="lineNum"> 800 </span> : : conf_str); -<span class="lineNum"> 801 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 802 </span> : : } -<span class="lineNum"> 803 </span> : : return 1; -<span class="lineNum"> 804 </span> : : } -<a name="805"><span class="lineNum"> 805 </span> : : </a> -<span class="lineNum"> 806 </span> : : int -<span class="lineNum"> 807 </span> :<span class="lineCov"> 795 : fw_config_init(fko_srv_options_t * const opts)</span> -<span class="lineNum"> 808 </span> : : { -<span class="lineNum"> 809 </span> : : memset(&amp;fwc, 0x0, sizeof(struct fw_config)); -<span class="lineNum"> 810 </span> : : -<span class="lineNum"> 811 </span> : : /* Set our firewall exe command path (firewall-cmd or iptables in most cases). -<span class="lineNum"> 812 </span> : : */ -<span class="lineNum"> 813 </span> : : #if FIREWALL_FIREWALLD -<span class="lineNum"> 814 </span> : : char cmd_passthru[512]; -<span class="lineNum"> 815 </span> :<span class="lineCov"> 795 : snprintf(cmd_passthru, sizeof cmd_passthru, &quot;%s %s &quot;,</span> -<span class="lineNum"> 816 </span> : : opts-&gt;config[CONF_FIREWALL_EXE], FIREWD_CMD_PREFIX); -<span class="lineNum"> 817 </span> :<span class="lineCov"> 795 : strlcpy(fwc.fw_command, cmd_passthru, sizeof(fwc.fw_command));</span> -<span class="lineNum"> 818 </span> : : #else -<span class="lineNum"> 819 </span> : : strlcpy(fwc.fw_command, opts-&gt;config[CONF_FIREWALL_EXE], sizeof(fwc.fw_command)); -<span class="lineNum"> 820 </span> : : #endif -<span class="lineNum"> 821 </span> : : -<span class="lineNum"> 822 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 823 </span> : : fiu_return_on(&quot;fw_config_init&quot;, 0); -<span class="lineNum"> 824 </span> : : #endif -<span class="lineNum"> 825 </span> : : -<span class="lineNum"> 826 </span> : : /* Pull the fwknop chain config info and setup our internal -<span class="lineNum"> 827 </span> : : * config struct. The FIREWD_INPUT is the only one that is -<span class="lineNum"> 828 </span> : : * required. The rest are optional. -<span class="lineNum"> 829 </span> : : */ -<span class="lineNum"> 830 </span> [<span class="branchCov" title="Branch 1 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 795 : if(set_fw_chain_conf(FIREWD_INPUT_ACCESS, opts-&gt;config[CONF_FIREWD_INPUT_ACCESS]) != 1)</span> -<span class="lineNum"> 831 </span> : : return 0; -<span class="lineNum"> 832 </span> : : -<span class="lineNum"> 833 </span> : : /* The FWKNOP_OUTPUT_ACCESS requires ENABLE_FIREWD_OUTPUT_ACCESS == Y -<span class="lineNum"> 834 </span> : : */ -<span class="lineNum"> 835 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_OUTPUT], &quot;Y&quot;, 1)==0)</span> -<span class="lineNum"> 836 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_OUTPUT_ACCESS, opts-&gt;config[CONF_FIREWD_OUTPUT_ACCESS]) != 1)</span> -<span class="lineNum"> 837 </span> : : return 0; -<span class="lineNum"> 838 </span> : : -<span class="lineNum"> 839 </span> : : /* The remaining access chains require ENABLE_FIREWD_FORWARDING = Y -<span class="lineNum"> 840 </span> : : */ -<span class="lineNum"> 841 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1)==0)</span> -<span class="lineNum"> 842 </span> : : { -<span class="lineNum"> 843 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_FORWARD_ACCESS, opts-&gt;config[CONF_FIREWD_FORWARD_ACCESS]) != 1)</span> -<span class="lineNum"> 844 </span> : : return 0; -<span class="lineNum"> 845 </span> : : -<span class="lineNum"> 846 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_DNAT_ACCESS, opts-&gt;config[CONF_FIREWD_DNAT_ACCESS]) != 1)</span> -<span class="lineNum"> 847 </span> : : return 0; -<span class="lineNum"> 848 </span> : : -<span class="lineNum"> 849 </span> : : /* Requires ENABLE_FIREWD_SNAT = Y -<span class="lineNum"> 850 </span> : : */ -<span class="lineNum"> 851 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT], &quot;Y&quot;, 1)==0)</span> -<span class="lineNum"> 852 </span> : : { -<span class="lineNum"> 853 </span> : : /* Support both SNAT and MASQUERADE - this will be controlled -<span class="lineNum"> 854 </span> : : * via the access.conf configuration for individual rules -<span class="lineNum"> 855 </span> : : */ -<span class="lineNum"> 856 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_MASQUERADE_ACCESS,</span> -<span class="lineNum"> 857 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_FIREWD_MASQUERADE_ACCESS]) != 1)</span> -<span class="lineNum"> 858 </span> : : return 0; -<span class="lineNum"> 859 </span> : : -<span class="lineNum"> 860 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_fw_chain_conf(FIREWD_SNAT_ACCESS,</span> -<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_FIREWD_SNAT_ACCESS]) != 1)</span> -<span class="lineNum"> 862 </span> : : return 0; -<span class="lineNum"> 863 </span> : : } -<span class="lineNum"> 864 </span> : : } -<span class="lineNum"> 865 </span> : : -<span class="lineNum"> 866 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_DESTINATION_RULE], &quot;Y&quot;, 1)==0)</span> -<span class="lineNum"> 867 </span> : : { -<span class="lineNum"> 868 </span> :<span class="lineNoCov"> 0 : fwc.use_destination = 1;</span> -<span class="lineNum"> 869 </span> : : } -<span class="lineNum"> 870 </span> : : -<span class="lineNum"> 871 </span> : : /* Let us find it via our opts struct as well. -<span class="lineNum"> 872 </span> : : */ -<span class="lineNum"> 873 </span> :<span class="lineCov"> 795 : opts-&gt;fw_config = &amp;fwc;</span> -<span class="lineNum"> 874 </span> : : -<span class="lineNum"> 875 </span> :<span class="lineCov"> 795 : return 1;</span> -<span class="lineNum"> 876 </span> : : } -<a name="877"><span class="lineNum"> 877 </span> : : </a> -<span class="lineNum"> 878 </span> : : int -<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : fw_initialize(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 880 </span> : : { -<span class="lineNum"> 881 </span> :<span class="lineNoCov"> 0 : int res = 1;</span> -<span class="lineNum"> 882 </span> : : -<span class="lineNum"> 883 </span> : : /* Flush the chains (just in case) so we can start fresh. -<span class="lineNum"> 884 </span> : : */ -<span class="lineNum"> 885 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_FLUSH_FIREWD_AT_INIT], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 886 </span> :<span class="lineNoCov"> 0 : delete_all_chains(opts);</span> -<span class="lineNum"> 887 </span> : : -<span class="lineNum"> 888 </span> : : /* Now create any configured chains. -<span class="lineNum"> 889 </span> : : */ -<span class="lineNum"> 890 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(create_fw_chains(opts) != 0)</span> -<span class="lineNum"> 891 </span> : : { -<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 893 </span> : : &quot;Warning: Errors detected during fwknop custom chain creation&quot;); -<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : res = 0;</span> -<span class="lineNum"> 895 </span> : : } -<span class="lineNum"> 896 </span> : : -<span class="lineNum"> 897 </span> : : /* Make sure that the 'comment' match is available -<span class="lineNum"> 898 </span> : : */ -<span class="lineNum"> 899 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_COMMENT_CHECK], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 900 </span> : : { -<span class="lineNum"> 901 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(comment_match_exists(opts) == 1)</span> -<span class="lineNum"> 902 </span> : : { -<span class="lineNum"> 903 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;firewalld 'comment' match is available&quot;);</span> -<span class="lineNum"> 904 </span> : : } -<span class="lineNum"> 905 </span> : : else -<span class="lineNum"> 906 </span> : : { -<span class="lineNum"> 907 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Warning: Could not use the 'comment' match&quot;);</span> -<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : res = 0;</span> -<span class="lineNum"> 909 </span> : : } -<span class="lineNum"> 910 </span> : : } -<span class="lineNum"> 911 </span> : : -<span class="lineNum"> 912 </span> : : /* See if firewalld offers the '-C' argument (older versions don't). If not, -<span class="lineNum"> 913 </span> : : * then switch to parsing firewalld -L output to find rules. -<span class="lineNum"> 914 </span> : : */ -<span class="lineNum"> 915 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;firewd_disable_check_support)</span> -<span class="lineNum"> 916 </span> :<span class="lineNoCov"> 0 : have_firewd_chk_support = 0;</span> -<span class="lineNum"> 917 </span> : : else -<span class="lineNum"> 918 </span> :<span class="lineNoCov"> 0 : firewd_chk_support(opts);</span> -<span class="lineNum"> 919 </span> : : -<span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 921 </span> : : } -<a name="922"><span class="lineNum"> 922 </span> : : </a> -<span class="lineNum"> 923 </span> : : int -<span class="lineNum"> 924 </span> :<span class="lineNoCov"> 0 : fw_cleanup(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 925 </span> : : { -<span class="lineNum"> 926 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_FLUSH_FIREWD_AT_EXIT], &quot;N&quot;, 1) == 0</span> -<span class="lineNum"> 927 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; opts-&gt;fw_flush == 0)</span> -<span class="lineNum"> 928 </span> : : return(0); -<span class="lineNum"> 929 </span> : : -<span class="lineNum"> 930 </span> :<span class="lineNoCov"> 0 : delete_all_chains(opts);</span> -<span class="lineNum"> 931 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 932 </span> : : } -<a name="933"><span class="lineNum"> 933 </span> : : </a> -<span class="lineNum"> 934 </span> : : static int -<span class="lineNum"> 935 </span> :<span class="lineNoCov"> 0 : create_rule(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 936 </span> : : const char * const fw_chain, const char * const fw_rule) -<span class="lineNum"> 937 </span> : : { -<span class="lineNum"> 938 </span> :<span class="lineNoCov"> 0 : int res = 0;</span> -<span class="lineNum"> 939 </span> : : -<span class="lineNum"> 940 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 941 </span> : : -<span class="lineNum"> 942 </span> :<span class="lineNoCov"> 0 : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s -A %s %s&quot;, opts-&gt;fw_config-&gt;fw_command, fw_chain, fw_rule);</span> -<span class="lineNum"> 943 </span> : : -<span class="lineNum"> 944 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR,</span> -<span class="lineNum"> 945 </span> : : NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 946 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 947 </span> : : -<span class="lineNum"> 948 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;create_rule() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 949 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 950 </span> : : -<span class="lineNum"> 951 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 952 </span> : : { -<span class="lineNum"> 953 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;create_rule() Rule: '%s' added to %s&quot;, fw_rule, fw_chain);</span> -<span class="lineNum"> 954 </span> :<span class="lineNoCov"> 0 : res = 1;</span> -<span class="lineNum"> 955 </span> : : } -<span class="lineNum"> 956 </span> : : else -<span class="lineNum"> 957 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 958 </span> : : -<span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 960 </span> : : } -<a name="961"><span class="lineNum"> 961 </span> : : </a> -<span class="lineNum"> 962 </span> : : static void -<span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : firewd_rule(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 964 </span> : : const char * const complete_rule_buf, -<span class="lineNum"> 965 </span> : : const char * const fw_rule_macro, -<span class="lineNum"> 966 </span> : : const char * const srcip, const char * const dstip, -<span class="lineNum"> 967 </span> : : const unsigned int proto, const unsigned int port, -<span class="lineNum"> 968 </span> : : struct fw_chain * const chain, -<span class="lineNum"> 969 </span> : : const unsigned int exp_ts, const time_t now, -<span class="lineNum"> 970 </span> : : const char * const msg, const char * const access_msg) -<span class="lineNum"> 971 </span> : : { -<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 973 </span> : : -<span class="lineNum"> 974 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(complete_rule_buf != NULL &amp;&amp; complete_rule_buf[0] != 0x0)</span> -<span class="lineNum"> 975 </span> : : { -<span class="lineNum"> 976 </span> :<span class="lineNoCov"> 0 : strlcpy(rule_buf, complete_rule_buf, CMD_BUFSIZE-1);</span> -<span class="lineNum"> 977 </span> : : } -<span class="lineNum"> 978 </span> : : else -<span class="lineNum"> 979 </span> : : { -<span class="lineNum"> 980 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); -<span class="lineNum"> 981 </span> : : -<span class="lineNum"> 982 </span> : : snprintf(rule_buf, CMD_BUFSIZE-1, fw_rule_macro, -<span class="lineNum"> 983 </span> :<span class="lineNoCov"> 0 : chain-&gt;table,</span> -<span class="lineNum"> 984 </span> : : proto, -<span class="lineNum"> 985 </span> : : srcip, -<span class="lineNum"> 986 </span> : : dstip, -<span class="lineNum"> 987 </span> : : port, -<span class="lineNum"> 988 </span> : : exp_ts, -<span class="lineNum"> 989 </span> :<span class="lineNoCov"> 0 : chain-&gt;target</span> -<span class="lineNum"> 990 </span> : : ); -<span class="lineNum"> 991 </span> : : } -<span class="lineNum"> 992 </span> : : -<span class="lineNum"> 993 </span> : : /* Check to make sure that the chain and jump rule exists -<span class="lineNum"> 994 </span> : : */ -<span class="lineNum"> 995 </span> :<span class="lineNoCov"> 0 : mk_chain(opts, chain-&gt;type);</span> -<span class="lineNum"> 996 </span> : : -<span class="lineNum"> 997 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exists(opts, chain, rule_buf,</span> -<span class="lineNum"> 998 </span> : : proto, srcip, dstip, port, exp_ts) == 0) -<span class="lineNum"> 999 </span> : : { -<span class="lineNum"> 1000 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(create_rule(opts, chain-&gt;to_chain, rule_buf))</span> -<span class="lineNum"> 1001 </span> : : { -<span class="lineNum"> 1002 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Added %s rule to %s for %s -&gt; %s %s, expires at %u&quot;,</span> -<span class="lineNum"> 1003 </span> : : msg, chain-&gt;to_chain, srcip, (dstip == NULL) ? FIREWD_ANY_IP : dstip, -<span class="lineNum"> 1004 </span> : : access_msg, exp_ts -<span class="lineNum"> 1005 </span> : : ); -<span class="lineNum"> 1006 </span> : : -<span class="lineNum"> 1007 </span> :<span class="lineNoCov"> 0 : chain-&gt;active_rules++;</span> -<span class="lineNum"> 1008 </span> : : -<span class="lineNum"> 1009 </span> : : /* Reset the next expected expire time for this chain if it -<span class="lineNum"> 1010 </span> : : * is warranted. -<span class="lineNum"> 1011 </span> : : */ -<span class="lineNum"> 1012 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(chain-&gt;next_expire &lt; now || exp_ts &lt; chain-&gt;next_expire)</span> -<span class="lineNum"> 1013 </span> :<span class="lineNoCov"> 0 : chain-&gt;next_expire = exp_ts;</span> -<span class="lineNum"> 1014 </span> : : } -<span class="lineNum"> 1015 </span> : : } -<span class="lineNum"> 1016 </span> : : -<span class="lineNum"> 1017 </span> :<span class="lineNoCov"> 0 : return;</span> -<a name="1018"><span class="lineNum"> 1018 </span> : : }</a> -<span class="lineNum"> 1019 </span> : : -<span class="lineNum"> 1020 </span> :<span class="lineNoCov"> 0 : static void forward_access_rule(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 1021 </span> : : const acc_stanza_t * const acc, -<span class="lineNum"> 1022 </span> : : struct fw_chain * const fwd_chain, -<span class="lineNum"> 1023 </span> : : const char * const nat_ip, -<span class="lineNum"> 1024 </span> : : const unsigned int nat_port, -<span class="lineNum"> 1025 </span> : : const unsigned int fst_proto, -<span class="lineNum"> 1026 </span> : : const unsigned int fst_port, -<span class="lineNum"> 1027 </span> : : spa_data_t * const spadat, -<span class="lineNum"> 1028 </span> : : const unsigned int exp_ts, -<span class="lineNum"> 1029 </span> : : const time_t now) -<span class="lineNum"> 1030 </span> : : { -<span class="lineNum"> 1031 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 1032 </span> : : -<span class="lineNum"> 1033 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> -<span class="lineNum"> 1034 </span> : : &quot;forward_access_rule() forward_all: %d, nat_ip: %s, nat_port: %d&quot;, -<span class="lineNum"> 1035 </span> :<span class="lineNoCov"> 0 : acc-&gt;forward_all, nat_ip, nat_port);</span> -<span class="lineNum"> 1036 </span> : : -<span class="lineNum"> 1037 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all)</span> -<span class="lineNum"> 1038 </span> : : { -<span class="lineNum"> 1039 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); -<span class="lineNum"> 1040 </span> : : -<span class="lineNum"> 1041 </span> :<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_FWD_ALL_RULE_ARGS,</span> -<span class="lineNum"> 1042 </span> :<span class="lineNoCov"> 0 : fwd_chain-&gt;table,</span> -<span class="lineNum"> 1043 </span> : : spadat-&gt;use_src_ip, -<span class="lineNum"> 1044 </span> : : exp_ts, -<span class="lineNum"> 1045 </span> :<span class="lineNoCov"> 0 : fwd_chain-&gt;target</span> -<span class="lineNum"> 1046 </span> : : ); -<span class="lineNum"> 1047 </span> : : -<span class="lineNum"> 1048 </span> : : /* Make a global ACCEPT rule for all ports/protocols -<span class="lineNum"> 1049 </span> : : */ -<span class="lineNum"> 1050 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1051 </span> : : NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, -<span class="lineNum"> 1052 </span> : : &quot;FORWARD ALL&quot;, &quot;*/*&quot;); -<span class="lineNum"> 1053 </span> : : } -<span class="lineNum"> 1054 </span> : : else -<span class="lineNum"> 1055 </span> : : { -<span class="lineNum"> 1056 </span> : : /* Make the FORWARD access rule -<span class="lineNum"> 1057 </span> : : */ -<span class="lineNum"> 1058 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_FWD_RULE_ARGS, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1059 </span> : : nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, -<span class="lineNum"> 1060 </span> :<span class="lineNoCov"> 0 : &quot;FORWARD&quot;, spadat-&gt;spa_message_remain);</span> -<span class="lineNum"> 1061 </span> : : -<span class="lineNum"> 1062 </span> : : } -<span class="lineNum"> 1063 </span> :<span class="lineNoCov"> 0 : return;</span> -<a name="1064"><span class="lineNum"> 1064 </span> : : }</a> -<span class="lineNum"> 1065 </span> : : -<span class="lineNum"> 1066 </span> :<span class="lineNoCov"> 0 : static void dnat_rule(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 1067 </span> : : const acc_stanza_t * const acc, -<span class="lineNum"> 1068 </span> : : struct fw_chain * const dnat_chain, -<span class="lineNum"> 1069 </span> : : const char * const nat_ip, -<span class="lineNum"> 1070 </span> : : const unsigned int nat_port, -<span class="lineNum"> 1071 </span> : : const unsigned int fst_proto, -<span class="lineNum"> 1072 </span> : : const unsigned int fst_port, -<span class="lineNum"> 1073 </span> : : spa_data_t * const spadat, -<span class="lineNum"> 1074 </span> : : const unsigned int exp_ts, -<span class="lineNum"> 1075 </span> : : const time_t now) -<span class="lineNum"> 1076 </span> : : { -<span class="lineNum"> 1077 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 1078 </span> : : -<span class="lineNum"> 1079 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;dnat_rule() forward_all: %d, nat_ip: %s, nat_port: %d&quot;,</span> -<span class="lineNum"> 1080 </span> :<span class="lineNoCov"> 0 : acc-&gt;forward_all, nat_ip, nat_port);</span> -<span class="lineNum"> 1081 </span> : : -<span class="lineNum"> 1082 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all)</span> -<span class="lineNum"> 1083 </span> : : { -<span class="lineNum"> 1084 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); -<span class="lineNum"> 1085 </span> : : -<span class="lineNum"> 1086 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_ALL_RULE_ARGS,</span> -<span class="lineNum"> 1087 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;table,</span> -<span class="lineNum"> 1088 </span> : : spadat-&gt;use_src_ip, -<span class="lineNum"> 1089 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> -<span class="lineNum"> 1090 </span> : : exp_ts, -<span class="lineNum"> 1091 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;target,</span> -<span class="lineNum"> 1092 </span> : : nat_ip -<span class="lineNum"> 1093 </span> : : ); -<span class="lineNum"> 1094 </span> : : -<span class="lineNum"> 1095 </span> : : /* Make a global DNAT rule for all ports/protocols -<span class="lineNum"> 1096 </span> : : */ -<span class="lineNum"> 1097 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1098 </span> : : NULL, ANY_PROTO, ANY_PORT, dnat_chain, exp_ts, now, -<span class="lineNum"> 1099 </span> : : &quot;DNAT ALL&quot;, &quot;*/*&quot;); -<span class="lineNum"> 1100 </span> : : } -<span class="lineNum"> 1101 </span> : : else -<span class="lineNum"> 1102 </span> : : { -<span class="lineNum"> 1103 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); -<span class="lineNum"> 1104 </span> : : -<span class="lineNum"> 1105 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_DNAT_RULE_ARGS,</span> -<span class="lineNum"> 1106 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;table,</span> -<span class="lineNum"> 1107 </span> : : fst_proto, -<span class="lineNum"> 1108 </span> : : spadat-&gt;use_src_ip, -<span class="lineNum"> 1109 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> -<span class="lineNum"> 1110 </span> : : fst_port, -<span class="lineNum"> 1111 </span> : : exp_ts, -<span class="lineNum"> 1112 </span> :<span class="lineNoCov"> 0 : dnat_chain-&gt;target,</span> -<span class="lineNum"> 1113 </span> : : nat_ip, -<span class="lineNum"> 1114 </span> : : nat_port -<span class="lineNum"> 1115 </span> : : ); -<span class="lineNum"> 1116 </span> : : -<span class="lineNum"> 1117 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1118 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> -<span class="lineNum"> 1119 </span> : : fst_proto, fst_port, dnat_chain, exp_ts, now, &quot;DNAT&quot;, -<span class="lineNum"> 1120 </span> :<span class="lineNoCov"> 0 : spadat-&gt;spa_message_remain);</span> -<span class="lineNum"> 1121 </span> : : } -<span class="lineNum"> 1122 </span> :<span class="lineNoCov"> 0 : return;</span> -<a name="1123"><span class="lineNum"> 1123 </span> : : }</a> -<span class="lineNum"> 1124 </span> : : -<span class="lineNum"> 1125 </span> :<span class="lineNoCov"> 0 : static void snat_rule(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 1126 </span> : : const acc_stanza_t * const acc, -<span class="lineNum"> 1127 </span> : : const char * const nat_ip, -<span class="lineNum"> 1128 </span> : : const unsigned int nat_port, -<span class="lineNum"> 1129 </span> : : const unsigned int fst_proto, -<span class="lineNum"> 1130 </span> : : const unsigned int fst_port, -<span class="lineNum"> 1131 </span> : : spa_data_t * const spadat, -<span class="lineNum"> 1132 </span> : : const unsigned int exp_ts, -<span class="lineNum"> 1133 </span> : : const time_t now) -<span class="lineNum"> 1134 </span> : : { -<span class="lineNum"> 1135 </span> :<span class="lineNoCov"> 0 : char rule_buf[CMD_BUFSIZE] = {0};</span> -<span class="lineNum"> 1136 </span> :<span class="lineNoCov"> 0 : char snat_target[SNAT_TARGET_BUFSIZE] = {0};</span> -<span class="lineNum"> 1137 </span> :<span class="lineNoCov"> 0 : struct fw_chain *snat_chain = NULL;</span> -<span class="lineNum"> 1138 </span> : : -<span class="lineNum"> 1139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> -<span class="lineNum"> 1140 </span> : : &quot;snat_rule() forward_all: %d, nat_ip: %s, nat_port: %d, force_snat: %d, force_snat_ip: %s, force_masq: %d&quot;, -<span class="lineNum"> 1141 </span> :<span class="lineNoCov"> 0 : acc-&gt;forward_all, nat_ip, nat_port, acc-&gt;force_snat,</span> -<span class="lineNum"> 1142 </span> :<span class="lineNoCov"> 0 : (acc-&gt;force_snat_ip == NULL) ? &quot;(NONE)&quot; : acc-&gt;force_snat_ip,</span> -<span class="lineNum"> 1143 </span> :<span class="lineNoCov"> 0 : acc-&gt;force_masquerade);</span> -<span class="lineNum"> 1144 </span> : : -<span class="lineNum"> 1145 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;forward_all)</span> -<span class="lineNum"> 1146 </span> : : { -<span class="lineNum"> 1147 </span> : : /* Default to MASQUERADE */ -<span class="lineNum"> 1148 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_MASQUERADE_ACCESS]);</span> -<span class="lineNum"> 1149 </span> : : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, &quot; &quot;); -<span class="lineNum"> 1150 </span> : : -<span class="lineNum"> 1151 </span> : : /* Add SNAT or MASQUERADE rules. -<span class="lineNum"> 1152 </span> : : */ -<span class="lineNum"> 1153 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_snat &amp;&amp; is_valid_ipv4_addr(acc-&gt;force_snat_ip))</span> -<span class="lineNum"> 1154 </span> : : { -<span class="lineNum"> 1155 </span> : : /* Using static SNAT */ -<span class="lineNum"> 1156 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> -<span class="lineNum"> 1157 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> -<span class="lineNum"> 1158 </span> : : &quot;--to-source %s&quot;, acc-&gt;force_snat_ip); -<span class="lineNum"> 1159 </span> : : } -<span class="lineNum"> 1160 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if((opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL)</span> -<span class="lineNum"> 1161 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP]))</span> -<span class="lineNum"> 1162 </span> : : { -<span class="lineNum"> 1163 </span> : : /* Using static SNAT */ -<span class="lineNum"> 1164 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> -<span class="lineNum"> 1165 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> -<span class="lineNum"> 1166 </span> : : &quot;--to-source %s&quot;, opts-&gt;config[CONF_SNAT_TRANSLATE_IP]); -<span class="lineNum"> 1167 </span> : : } -<span class="lineNum"> 1168 </span> : : -<span class="lineNum"> 1169 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); -<span class="lineNum"> 1170 </span> : : -<span class="lineNum"> 1171 </span> :<span class="lineNoCov"> 0 : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_ALL_RULE_ARGS,</span> -<span class="lineNum"> 1172 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;table,</span> -<span class="lineNum"> 1173 </span> : : spadat-&gt;use_src_ip, -<span class="lineNum"> 1174 </span> : : exp_ts, -<span class="lineNum"> 1175 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;target,</span> -<span class="lineNum"> 1176 </span> : : snat_target -<span class="lineNum"> 1177 </span> : : ); -<span class="lineNum"> 1178 </span> : : -<span class="lineNum"> 1179 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1180 </span> : : NULL, ANY_PROTO, ANY_PORT, snat_chain, exp_ts, now, -<span class="lineNum"> 1181 </span> : : &quot;SNAT ALL&quot;, &quot;*/*&quot;); -<span class="lineNum"> 1182 </span> : : } -<span class="lineNum"> 1183 </span> : : else -<span class="lineNum"> 1184 </span> : : { -<span class="lineNum"> 1185 </span> : : /* Add SNAT or MASQUERADE rules. -<span class="lineNum"> 1186 </span> : : */ -<span class="lineNum"> 1187 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_snat &amp;&amp; is_valid_ipv4_addr(acc-&gt;force_snat_ip))</span> -<span class="lineNum"> 1188 </span> : : { -<span class="lineNum"> 1189 </span> : : /* Using static SNAT */ -<span class="lineNum"> 1190 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> -<span class="lineNum"> 1191 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> -<span class="lineNum"> 1192 </span> : : &quot;--to-source %s:%i&quot;, acc-&gt;force_snat_ip, fst_port); -<span class="lineNum"> 1193 </span> : : } -<span class="lineNum"> 1194 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(acc-&gt;force_snat &amp;&amp; acc-&gt;force_masquerade)</span> -<span class="lineNum"> 1195 </span> : : { -<span class="lineNum"> 1196 </span> : : /* Using MASQUERADE */ -<span class="lineNum"> 1197 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_MASQUERADE_ACCESS]);</span> -<span class="lineNum"> 1198 </span> : : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, -<span class="lineNum"> 1199 </span> : : &quot;--to-ports %i&quot;, fst_port); -<span class="lineNum"> 1200 </span> : : } -<span class="lineNum"> 1201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if((opts-&gt;config[CONF_SNAT_TRANSLATE_IP] != NULL)</span> -<span class="lineNum"> 1202 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; is_valid_ipv4_addr(opts-&gt;config[CONF_SNAT_TRANSLATE_IP]))</span> -<span class="lineNum"> 1203 </span> : : { -<span class="lineNum"> 1204 </span> : : /* Using static SNAT */ -<span class="lineNum"> 1205 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_SNAT_ACCESS]);</span> -<span class="lineNum"> 1206 </span> :<span class="lineNoCov"> 0 : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1,</span> -<span class="lineNum"> 1207 </span> : : &quot;--to-source %s:%i&quot;, opts-&gt;config[CONF_SNAT_TRANSLATE_IP], -<span class="lineNum"> 1208 </span> : : fst_port); -<span class="lineNum"> 1209 </span> : : } -<span class="lineNum"> 1210 </span> : : else -<span class="lineNum"> 1211 </span> : : { -<span class="lineNum"> 1212 </span> : : /* Using MASQUERADE */ -<span class="lineNum"> 1213 </span> :<span class="lineNoCov"> 0 : snat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_MASQUERADE_ACCESS]);</span> -<span class="lineNum"> 1214 </span> : : snprintf(snat_target, SNAT_TARGET_BUFSIZE-1, -<span class="lineNum"> 1215 </span> : : &quot;--to-ports %i&quot;, fst_port); -<span class="lineNum"> 1216 </span> : : } -<span class="lineNum"> 1217 </span> : : -<span class="lineNum"> 1218 </span> : : memset(rule_buf, 0, CMD_BUFSIZE); -<span class="lineNum"> 1219 </span> : : -<span class="lineNum"> 1220 </span> : : snprintf(rule_buf, CMD_BUFSIZE-1, FIREWD_SNAT_RULE_ARGS, -<span class="lineNum"> 1221 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;table,</span> -<span class="lineNum"> 1222 </span> : : fst_proto, -<span class="lineNum"> 1223 </span> : : nat_ip, -<span class="lineNum"> 1224 </span> : : nat_port, -<span class="lineNum"> 1225 </span> : : exp_ts, -<span class="lineNum"> 1226 </span> :<span class="lineNoCov"> 0 : snat_chain-&gt;target,</span> -<span class="lineNum"> 1227 </span> : : snat_target -<span class="lineNum"> 1228 </span> : : ); -<span class="lineNum"> 1229 </span> : : -<span class="lineNum"> 1230 </span> :<span class="lineNoCov"> 0 : firewd_rule(opts, rule_buf, NULL, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1231 </span> : : NULL, fst_proto, nat_port, snat_chain, exp_ts, now, &quot;SNAT&quot;, -<span class="lineNum"> 1232 </span> :<span class="lineNoCov"> 0 : spadat-&gt;spa_message_remain);</span> -<span class="lineNum"> 1233 </span> : : } -<span class="lineNum"> 1234 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 1235 </span> : : } -<span class="lineNum"> 1236 </span> : : -<span class="lineNum"> 1237 </span> : : /****************************************************************************/ -<span class="lineNum"> 1238 </span> : : -<span class="lineNum"> 1239 </span> : : /* Rule Processing - Create an access request... -<a name="1240"><span class="lineNum"> 1240 </span> : : */</a> -<span class="lineNum"> 1241 </span> : : int -<span class="lineNum"> 1242 </span> :<span class="lineNoCov"> 0 : process_spa_request(const fko_srv_options_t * const opts,</span> -<span class="lineNum"> 1243 </span> : : const acc_stanza_t * const acc, spa_data_t * const spadat) -<span class="lineNum"> 1244 </span> : : { -<span class="lineNum"> 1245 </span> :<span class="lineNoCov"> 0 : char nat_ip[MAX_IPV4_STR_LEN] = {0};</span> -<span class="lineNum"> 1246 </span> :<span class="lineNoCov"> 0 : unsigned int nat_port = 0;</span> -<span class="lineNum"> 1247 </span> : : unsigned int fst_proto; -<span class="lineNum"> 1248 </span> : : unsigned int fst_port; -<span class="lineNum"> 1249 </span> : : -<span class="lineNum"> 1250 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const in_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_INPUT_ACCESS]);</span> -<span class="lineNum"> 1251 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const out_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_OUTPUT_ACCESS]);</span> -<span class="lineNum"> 1252 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const fwd_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_FORWARD_ACCESS]);</span> -<span class="lineNum"> 1253 </span> :<span class="lineNoCov"> 0 : struct fw_chain * const dnat_chain = &amp;(opts-&gt;fw_config-&gt;chain[FIREWD_DNAT_ACCESS]);</span> -<span class="lineNum"> 1254 </span> : : -<span class="lineNum"> 1255 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *port_list = NULL;</span> -<span class="lineNum"> 1256 </span> :<span class="lineNoCov"> 0 : acc_port_list_t *ple = NULL;</span> -<span class="lineNum"> 1257 </span> : : -<span class="lineNum"> 1258 </span> :<span class="lineNoCov"> 0 : char *ndx = NULL;</span> -<span class="lineNum"> 1259 </span> :<span class="lineNoCov"> 0 : int res = 0, is_err;</span> -<span class="lineNum"> 1260 </span> : : time_t now; -<span class="lineNum"> 1261 </span> : : unsigned int exp_ts; -<span class="lineNum"> 1262 </span> : : -<span class="lineNum"> 1263 </span> : : /* Parse and expand our access message. -<span class="lineNum"> 1264 </span> : : */ -<span class="lineNum"> 1265 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(expand_acc_port_list(&amp;port_list, spadat-&gt;spa_message_remain) != 1)</span> -<span class="lineNum"> 1266 </span> : : { -<span class="lineNum"> 1267 </span> : : /* technically we would already have exited with an error if there were -<span class="lineNum"> 1268 </span> : : * any memory allocation errors (see the add_port_list() function), but -<span class="lineNum"> 1269 </span> : : * for completeness... -<span class="lineNum"> 1270 </span> : : */ -<span class="lineNum"> 1271 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> -<span class="lineNum"> 1272 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 1273 </span> : : } -<span class="lineNum"> 1274 </span> : : -<span class="lineNum"> 1275 </span> : : /* Start at the top of the proto-port list... -<span class="lineNum"> 1276 </span> : : */ -<span class="lineNum"> 1277 </span> :<span class="lineNoCov"> 0 : ple = port_list;</span> -<span class="lineNum"> 1278 </span> : : -<span class="lineNum"> 1279 </span> : : /* Remember the first proto/port combo in case we need them -<span class="lineNum"> 1280 </span> : : * for NAT access requests. -<span class="lineNum"> 1281 </span> : : */ -<span class="lineNum"> 1282 </span> :<span class="lineNoCov"> 0 : fst_proto = ple-&gt;proto;</span> -<span class="lineNum"> 1283 </span> :<span class="lineNoCov"> 0 : fst_port = ple-&gt;port;</span> -<span class="lineNum"> 1284 </span> : : -<span class="lineNum"> 1285 </span> : : /* Set our expire time value. -<span class="lineNum"> 1286 </span> : : */ -<span class="lineNum"> 1287 </span> :<span class="lineNoCov"> 0 : time(&amp;now);</span> -<span class="lineNum"> 1288 </span> :<span class="lineNoCov"> 0 : exp_ts = now + spadat-&gt;fw_access_timeout;</span> -<span class="lineNum"> 1289 </span> : : -<span class="lineNum"> 1290 </span> : : /* deal with SPA packets that themselves request a NAT operation -<span class="lineNum"> 1291 </span> : : */ -<span class="lineNum"> 1292 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat-&gt;message_type == FKO_LOCAL_NAT_ACCESS_MSG</span> -<span class="lineNum"> 1293 </span> : : || spadat-&gt;message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG -<span class="lineNum"> 1294 </span> :<span class="lineNoCov"> 0 : || spadat-&gt;message_type == FKO_NAT_ACCESS_MSG</span> -<span class="lineNum"> 1295 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || spadat-&gt;message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG</span> -<span class="lineNum"> 1296 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || acc-&gt;force_nat)</span> -<span class="lineNum"> 1297 </span> : : { -<span class="lineNum"> 1298 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_nat)</span> -<span class="lineNum"> 1299 </span> : : { -<span class="lineNum"> 1300 </span> :<span class="lineNoCov"> 0 : strlcpy(nat_ip, acc-&gt;force_nat_ip, sizeof(nat_ip));</span> -<span class="lineNum"> 1301 </span> :<span class="lineNoCov"> 0 : nat_port = acc-&gt;force_nat_port;</span> -<span class="lineNum"> 1302 </span> : : } -<span class="lineNum"> 1303 </span> : : else -<span class="lineNum"> 1304 </span> : : { -<span class="lineNum"> 1305 </span> :<span class="lineNoCov"> 0 : ndx = strchr(spadat-&gt;nat_access, ',');</span> -<span class="lineNum"> 1306 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx != NULL)</span> -<span class="lineNum"> 1307 </span> : : { -<span class="lineNum"> 1308 </span> :<span class="lineNoCov"> 0 : strlcpy(nat_ip, spadat-&gt;nat_access, (ndx-spadat-&gt;nat_access)+1);</span> -<span class="lineNum"> 1309 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! is_valid_ipv4_addr(nat_ip))</span> -<span class="lineNum"> 1310 </span> : : { -<span class="lineNum"> 1311 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Invalid NAT IP in SPA message&quot;);</span> -<span class="lineNum"> 1312 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> -<span class="lineNum"> 1313 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 1314 </span> : : } -<span class="lineNum"> 1315 </span> : : -<span class="lineNum"> 1316 </span> :<span class="lineNoCov"> 0 : nat_port = strtol_wrapper(ndx+1, 0, MAX_PORT,</span> -<span class="lineNum"> 1317 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 1318 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 1319 </span> : : { -<span class="lineNum"> 1320 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Invalid NAT port in SPA message&quot;);</span> -<span class="lineNum"> 1321 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> -<span class="lineNum"> 1322 </span> :<span class="lineNoCov"> 0 : res = is_err;</span> -<span class="lineNum"> 1323 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 1324 </span> : : } -<span class="lineNum"> 1325 </span> : : } -<span class="lineNum"> 1326 </span> : : } -<span class="lineNum"> 1327 </span> : : -<span class="lineNum"> 1328 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat-&gt;message_type == FKO_LOCAL_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 1329 </span> : : { -<span class="lineNum"> 1330 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1331 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> -<span class="lineNum"> 1332 </span> : : fst_proto, nat_port, in_chain, exp_ts, now, &quot;local NAT&quot;, -<span class="lineNum"> 1333 </span> : : spadat-&gt;spa_message_remain); -<span class="lineNum"> 1334 </span> : : } -<span class="lineNum"> 1335 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(strlen(fwd_chain-&gt;to_chain))</span> -<span class="lineNum"> 1336 </span> : : { -<span class="lineNum"> 1337 </span> : : /* FORWARD access rule -<span class="lineNum"> 1338 </span> : : */ -<span class="lineNum"> 1339 </span> :<span class="lineNoCov"> 0 : forward_access_rule(opts, acc, fwd_chain, nat_ip,</span> -<span class="lineNum"> 1340 </span> : : nat_port, fst_proto, fst_port, spadat, exp_ts, now); -<span class="lineNum"> 1341 </span> : : } -<span class="lineNum"> 1342 </span> : : -<span class="lineNum"> 1343 </span> : : /* DNAT rule -<span class="lineNum"> 1344 </span> : : */ -<span class="lineNum"> 1345 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(dnat_chain-&gt;to_chain) &amp;&amp; !acc-&gt;disable_dnat)</span> -<span class="lineNum"> 1346 </span> :<span class="lineNoCov"> 0 : dnat_rule(opts, acc, dnat_chain, nat_ip,</span> -<span class="lineNum"> 1347 </span> : : nat_port, fst_proto, fst_port, spadat, exp_ts, now); -<span class="lineNum"> 1348 </span> : : -<span class="lineNum"> 1349 </span> : : /* SNAT rule -<span class="lineNum"> 1350 </span> : : */ -<span class="lineNum"> 1351 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;force_snat || strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_SNAT], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 1352 </span> :<span class="lineNoCov"> 0 : snat_rule(opts, acc, nat_ip, nat_port,</span> -<span class="lineNum"> 1353 </span> : : fst_proto, fst_port, spadat, exp_ts, now); -<span class="lineNum"> 1354 </span> : : } -<span class="lineNum"> 1355 </span> : : else /* Non-NAT request - this is the typical case. */ -<span class="lineNum"> 1356 </span> : : { -<span class="lineNum"> 1357 </span> : : /* Create an access command for each proto/port for the source ip. -<span class="lineNum"> 1358 </span> : : */ -<span class="lineNum"> 1359 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(ple != NULL)</span> -<span class="lineNum"> 1360 </span> : : { -<span class="lineNum"> 1361 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1362 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> -<span class="lineNum"> 1363 </span> : : ple-&gt;proto, ple-&gt;port, in_chain, exp_ts, now, &quot;access&quot;, -<span class="lineNum"> 1364 </span> : : spadat-&gt;spa_message_remain); -<span class="lineNum"> 1365 </span> : : -<span class="lineNum"> 1366 </span> : : /* We need to make a corresponding OUTPUT rule if out_chain target -<span class="lineNum"> 1367 </span> : : * is not NULL. -<span class="lineNum"> 1368 </span> : : */ -<span class="lineNum"> 1369 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strlen(out_chain-&gt;to_chain))</span> -<span class="lineNum"> 1370 </span> : : { -<span class="lineNum"> 1371 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : firewd_rule(opts, NULL, FIREWD_OUT_RULE_ARGS, spadat-&gt;use_src_ip,</span> -<span class="lineNum"> 1372 </span> :<span class="lineNoCov"> 0 : (fwc.use_destination ? spadat-&gt;pkt_destination_ip : FIREWD_ANY_IP),</span> -<span class="lineNum"> 1373 </span> : : ple-&gt;proto, ple-&gt;port, out_chain, exp_ts, now, &quot;OUTPUT&quot;, -<span class="lineNum"> 1374 </span> : : spadat-&gt;spa_message_remain); -<span class="lineNum"> 1375 </span> : : } -<span class="lineNum"> 1376 </span> :<span class="lineNoCov"> 0 : ple = ple-&gt;next;</span> -<span class="lineNum"> 1377 </span> : : } -<span class="lineNum"> 1378 </span> : : } -<span class="lineNum"> 1379 </span> : : -<span class="lineNum"> 1380 </span> : : /* Done with the port list for access rules. -<span class="lineNum"> 1381 </span> : : */ -<span class="lineNum"> 1382 </span> :<span class="lineNoCov"> 0 : free_acc_port_list(port_list);</span> -<span class="lineNum"> 1383 </span> : : -<span class="lineNum"> 1384 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 1385 </span> : : } -<span class="lineNum"> 1386 </span> : : -<span class="lineNum"> 1387 </span> : : /* Iterate over the configure firewall access chains and purge expired -<span class="lineNum"> 1388 </span> : : * firewall rules. -<a name="1389"><span class="lineNum"> 1389 </span> : : */</a> -<span class="lineNum"> 1390 </span> : : void -<span class="lineNum"> 1391 </span> :<span class="lineNoCov"> 0 : check_firewall_rules(const fko_srv_options_t * const opts)</span> -<span class="lineNum"> 1392 </span> : : { -<span class="lineNum"> 1393 </span> :<span class="lineNoCov"> 0 : char exp_str[12] = {0};</span> -<span class="lineNum"> 1394 </span> :<span class="lineNoCov"> 0 : char rule_num_str[6] = {0};</span> -<span class="lineNum"> 1395 </span> : : char *ndx, *rn_start, *rn_end, *tmp_mark; -<span class="lineNum"> 1396 </span> : : -<span class="lineNum"> 1397 </span> : : int i, res, rn_offset, rule_num, is_err; -<span class="lineNum"> 1398 </span> :<span class="lineNoCov"> 0 : time_t now, rule_exp, min_exp = 0;</span> -<span class="lineNum"> 1399 </span> : : -<span class="lineNum"> 1400 </span> :<span class="lineNoCov"> 0 : struct fw_chain *ch = opts-&gt;fw_config-&gt;chain;</span> -<span class="lineNum"> 1401 </span> : : -<span class="lineNum"> 1402 </span> :<span class="lineNoCov"> 0 : time(&amp;now);</span> -<span class="lineNum"> 1403 </span> : : -<span class="lineNum"> 1404 </span> : : /* Iterate over each chain and look for active rules to delete. -<span class="lineNum"> 1405 </span> : : */ -<span class="lineNum"> 1406 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; NUM_FWKNOP_ACCESS_TYPES; i++)</span> -<span class="lineNum"> 1407 </span> : : { -<span class="lineNum"> 1408 </span> : : /* If there are no active rules or we have not yet -<span class="lineNum"> 1409 </span> : : * reached our expected next expire time, continue. -<span class="lineNum"> 1410 </span> : : */ -<span class="lineNum"> 1411 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ch[i].active_rules == 0 || ch[i].next_expire &gt; now)</span> -<span class="lineNum"> 1412 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 1413 </span> : : -<span class="lineNum"> 1414 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 1415 </span> : : -<span class="lineNum"> 1416 </span> :<span class="lineNoCov"> 0 : rn_offset = 0;</span> -<span class="lineNum"> 1417 </span> : : -<span class="lineNum"> 1418 </span> : : /* There should be a rule to delete. Get the current list of -<span class="lineNum"> 1419 </span> : : * rules for this chain and delete the ones that are expired. -<span class="lineNum"> 1420 </span> : : */ -<span class="lineNum"> 1421 </span> : : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_LIST_RULES_ARGS, -<span class="lineNum"> 1422 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 1423 </span> :<span class="lineNoCov"> 0 : ch[i].table,</span> -<span class="lineNum"> 1424 </span> :<span class="lineNoCov"> 0 : ch[i].to_chain</span> -<span class="lineNum"> 1425 </span> : : ); -<span class="lineNum"> 1426 </span> : : -<span class="lineNum"> 1427 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE,</span> -<span class="lineNum"> 1428 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 1429 </span> :<span class="lineNoCov"> 0 : chop_newline(cmd_out);</span> -<span class="lineNum"> 1430 </span> : : -<span class="lineNum"> 1431 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)&quot;,</span> -<span class="lineNum"> 1432 </span> : : cmd_buf, res, cmd_out); -<span class="lineNum"> 1433 </span> : : -<span class="lineNum"> 1434 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 1435 </span> : : { -<span class="lineNum"> 1436 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, cmd_out);</span> -<span class="lineNum"> 1437 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 1438 </span> : : } -<span class="lineNum"> 1439 </span> : : -<span class="lineNum"> 1440 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;RES=%i, CMD_BUF: %s\nRULES LIST: %s&quot;, res, cmd_buf, cmd_out);</span> -<span class="lineNum"> 1441 </span> : : -<span class="lineNum"> 1442 </span> :<span class="lineNoCov"> 0 : ndx = strstr(cmd_out, EXPIRE_COMMENT_PREFIX);</span> -<span class="lineNum"> 1443 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ndx == NULL)</span> -<span class="lineNum"> 1444 </span> : : { -<span class="lineNum"> 1445 </span> : : /* we did not find an expected rule. -<span class="lineNum"> 1446 </span> : : */ -<span class="lineNum"> 1447 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1448 </span> : : &quot;Did not find expire comment in rules list %i&quot;, i); -<span class="lineNum"> 1449 </span> : : -<span class="lineNum"> 1450 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> -<span class="lineNum"> 1451 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> -<span class="lineNum"> 1452 </span> : : -<span class="lineNum"> 1453 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 1454 </span> : : } -<span class="lineNum"> 1455 </span> : : -<span class="lineNum"> 1456 </span> : : /* walk the list and process rules as needed. -<span class="lineNum"> 1457 </span> : : */ -<span class="lineNum"> 1458 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (ndx != NULL) {</span> -<span class="lineNum"> 1459 </span> : : /* Jump forward and extract the timestamp -<span class="lineNum"> 1460 </span> : : */ -<span class="lineNum"> 1461 </span> :<span class="lineNoCov"> 0 : ndx += strlen(EXPIRE_COMMENT_PREFIX);</span> -<span class="lineNum"> 1462 </span> : : -<span class="lineNum"> 1463 </span> : : /* remember this spot for when we look for the next -<span class="lineNum"> 1464 </span> : : * rule. -<span class="lineNum"> 1465 </span> : : */ -<span class="lineNum"> 1466 </span> :<span class="lineNoCov"> 0 : tmp_mark = ndx;</span> -<span class="lineNum"> 1467 </span> : : -<span class="lineNum"> 1468 </span> :<span class="lineNoCov"> 0 : strlcpy(exp_str, ndx, sizeof(exp_str));</span> -<span class="lineNum"> 1469 </span> :<span class="lineNoCov"> 0 : rule_exp = (time_t)atoll(exp_str);</span> -<span class="lineNum"> 1470 </span> : : -<span class="lineNum"> 1471 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exp &lt;= now)</span> -<span class="lineNum"> 1472 </span> : : { -<span class="lineNum"> 1473 </span> : : /* Backtrack and get the rule number and delete it. -<span class="lineNum"> 1474 </span> : : */ -<span class="lineNum"> 1475 </span> : : rn_start = ndx; -<span class="lineNum"> 1476 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(--rn_start &gt; cmd_out)</span> -<span class="lineNum"> 1477 </span> : : { -<span class="lineNum"> 1478 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*rn_start == '\n')</span> -<span class="lineNum"> 1479 </span> : : break; -<span class="lineNum"> 1480 </span> : : } -<span class="lineNum"> 1481 </span> : : -<span class="lineNum"> 1482 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*rn_start != '\n')</span> -<span class="lineNum"> 1483 </span> : : { -<span class="lineNum"> 1484 </span> : : /* This should not happen. But if it does, complain, -<span class="lineNum"> 1485 </span> : : * decrement the active rule value, and go on. -<span class="lineNum"> 1486 </span> : : */ -<span class="lineNum"> 1487 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1488 </span> : : &quot;Rule parse error while finding rule line start in chain %i&quot;, i); -<span class="lineNum"> 1489 </span> : : -<span class="lineNum"> 1490 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> -<span class="lineNum"> 1491 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> -<span class="lineNum"> 1492 </span> : : -<span class="lineNum"> 1493 </span> : : break; -<span class="lineNum"> 1494 </span> : : } -<span class="lineNum"> 1495 </span> :<span class="lineNoCov"> 0 : rn_start++;</span> -<span class="lineNum"> 1496 </span> : : -<span class="lineNum"> 1497 </span> :<span class="lineNoCov"> 0 : rn_end = strchr(rn_start, ' ');</span> -<span class="lineNum"> 1498 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rn_end == NULL)</span> -<span class="lineNum"> 1499 </span> : : { -<span class="lineNum"> 1500 </span> : : /* This should not happen. But if it does, complain, -<span class="lineNum"> 1501 </span> : : * decrement the active rule value, and go on. -<span class="lineNum"> 1502 </span> : : */ -<span class="lineNum"> 1503 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1504 </span> : : &quot;Rule parse error while finding rule number in chain %i&quot;, i); -<span class="lineNum"> 1505 </span> : : -<span class="lineNum"> 1506 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> -<span class="lineNum"> 1507 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> -<span class="lineNum"> 1508 </span> : : -<span class="lineNum"> 1509 </span> : : break; -<span class="lineNum"> 1510 </span> : : } -<span class="lineNum"> 1511 </span> : : -<span class="lineNum"> 1512 </span> :<span class="lineNoCov"> 0 : strlcpy(rule_num_str, rn_start, (rn_end - rn_start)+1);</span> -<span class="lineNum"> 1513 </span> : : -<span class="lineNum"> 1514 </span> :<span class="lineNoCov"> 0 : rule_num = strtol_wrapper(rule_num_str, rn_offset, RCHK_MAX_FIREWD_RULE_NUM,</span> -<span class="lineNum"> 1515 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 1516 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 1517 </span> : : { -<span class="lineNum"> 1518 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 1519 </span> : : &quot;Rule parse error while finding rule number in chain %i&quot;, i); -<span class="lineNum"> 1520 </span> : : -<span class="lineNum"> 1521 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> -<span class="lineNum"> 1522 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> -<span class="lineNum"> 1523 </span> : : -<span class="lineNum"> 1524 </span> : : break; -<span class="lineNum"> 1525 </span> : : } -<span class="lineNum"> 1526 </span> : : -<span class="lineNum"> 1527 </span> :<span class="lineNoCov"> 0 : zero_cmd_buffers();</span> -<span class="lineNum"> 1528 </span> : : -<span class="lineNum"> 1529 </span> :<span class="lineNoCov"> 0 : snprintf(cmd_buf, CMD_BUFSIZE-1, &quot;%s &quot; FIREWD_DEL_RULE_ARGS,</span> -<span class="lineNum"> 1530 </span> :<span class="lineNoCov"> 0 : opts-&gt;fw_config-&gt;fw_command,</span> -<span class="lineNum"> 1531 </span> : : ch[i].table, -<span class="lineNum"> 1532 </span> : : ch[i].to_chain, -<span class="lineNum"> 1533 </span> : : rule_num - rn_offset -<span class="lineNum"> 1534 </span> : : ); -<span class="lineNum"> 1535 </span> : : -<span class="lineNum"> 1536 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE,</span> -<span class="lineNum"> 1537 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 1538 </span> :<span class="lineNoCov"> 0 : chop_newline(err_buf);</span> -<span class="lineNum"> 1539 </span> : : -<span class="lineNum"> 1540 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;check_firewall_rules() CMD: '%s' (res: %d, err: %s)&quot;,</span> -<span class="lineNum"> 1541 </span> : : cmd_buf, res, err_buf); -<span class="lineNum"> 1542 </span> : : -<span class="lineNum"> 1543 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(EXTCMD_IS_SUCCESS(res))</span> -<span class="lineNum"> 1544 </span> : : { -<span class="lineNum"> 1545 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Removed rule %s from %s with expire time of %u&quot;,</span> -<span class="lineNum"> 1546 </span> : : rule_num_str, ch[i].to_chain, rule_exp -<span class="lineNum"> 1547 </span> : : ); -<span class="lineNum"> 1548 </span> : : -<span class="lineNum"> 1549 </span> :<span class="lineNoCov"> 0 : rn_offset++;</span> -<span class="lineNum"> 1550 </span> : : -<span class="lineNum"> 1551 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ch[i].active_rules &gt; 0)</span> -<span class="lineNum"> 1552 </span> :<span class="lineNoCov"> 0 : ch[i].active_rules--;</span> -<span class="lineNum"> 1553 </span> : : } -<span class="lineNum"> 1554 </span> : : else -<span class="lineNum"> 1555 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Error %i from cmd:'%s': %s&quot;, res, cmd_buf, err_buf);</span> -<span class="lineNum"> 1556 </span> : : -<span class="lineNum"> 1557 </span> : : } -<span class="lineNum"> 1558 </span> : : else -<span class="lineNum"> 1559 </span> : : { -<span class="lineNum"> 1560 </span> : : /* Track the minimum future rule expire time. -<span class="lineNum"> 1561 </span> : : */ -<span class="lineNum"> 1562 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(rule_exp &gt; now)</span> -<span class="lineNum"> 1563 </span> :<span class="lineNoCov"> 0 : min_exp = (min_exp &lt; rule_exp) ? min_exp : rule_exp;</span> -<span class="lineNum"> 1564 </span> : : } -<span class="lineNum"> 1565 </span> : : -<span class="lineNum"> 1566 </span> : : /* Push our tracking index forward beyond (just processed) _exp_ -<span class="lineNum"> 1567 </span> : : * string so we can continue to the next rule in the list. -<span class="lineNum"> 1568 </span> : : */ -<span class="lineNum"> 1569 </span> :<span class="lineNoCov"> 0 : ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX);</span> -<span class="lineNum"> 1570 </span> : : } -<span class="lineNum"> 1571 </span> : : -<span class="lineNum"> 1572 </span> : : /* Set the next pending expire time accordingly. 0 if there are no -<span class="lineNum"> 1573 </span> : : * more rules, or whatever the next expected (min_exp) time will be. -<span class="lineNum"> 1574 </span> : : */ -<span class="lineNum"> 1575 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ch[i].active_rules &lt; 1)</span> -<span class="lineNum"> 1576 </span> :<span class="lineNoCov"> 0 : ch[i].next_expire = 0;</span> -<span class="lineNum"> 1577 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(min_exp)</span> -<span class="lineNum"> 1578 </span> :<span class="lineNoCov"> 0 : ch[i].next_expire = min_exp;</span> -<span class="lineNum"> 1579 </span> : : } -<span class="lineNum"> 1580 </span> :<span class="lineNoCov"> 0 : }</span> -<a name="1581"><span class="lineNum"> 1581 </span> : : </a> -<span class="lineNum"> 1582 </span> : : int -<span class="lineNum"> 1583 </span> :<span class="lineCov"> 4770 : validate_firewd_chain_conf(const char * const chain_str)</span> -<span class="lineNum"> 1584 </span> : : { -<span class="lineNum"> 1585 </span> :<span class="lineCov"> 4770 : int j, rv = 1;</span> -<span class="lineNum"> 1586 </span> :<span class="lineCov"> 4770 : const char *ndx = chain_str;</span> -<span class="lineNum"> 1587 </span> : : -<span class="lineNum"> 1588 </span> :<span class="lineCov"> 4770 : j = 1;</span> -<span class="lineNum"> 1589 </span> [<span class="branchCov" title="Branch 0 was taken 219420 times"> + </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 224190 : while(*ndx != '\0')</span> -<span class="lineNum"> 1590 </span> : : { -<span class="lineNum"> 1591 </span> [<span class="branchCov" title="Branch 0 was taken 23850 times"> + </span><span class="branchCov" title="Branch 1 was taken 195570 times"> + </span>]:<span class="lineCov"> 219420 : if(*ndx == ',')</span> -<span class="lineNum"> 1592 </span> :<span class="lineCov"> 23850 : j++;</span> -<span class="lineNum"> 1593 </span> : : -<span class="lineNum"> 1594 </span> [<span class="branchCov" title="Branch 0 was taken 195570 times"> + </span><span class="branchCov" title="Branch 1 was taken 23850 times"> + </span>]:<span class="lineCov"> 219420 : if(*ndx != '\0'</span> -<span class="lineNum"> 1595 </span> :<span class="lineCov"> 219420 : &amp;&amp; *ndx != ' '</span> -<span class="lineNum"> 1596 </span> [<span class="branchCov" title="Branch 0 was taken 171720 times"> + </span><span class="branchCov" title="Branch 1 was taken 23850 times"> + </span>]:<span class="lineCov"> 195570 : &amp;&amp; *ndx != ','</span> -<span class="lineNum"> 1597 </span> [<span class="branchCov" title="Branch 0 was taken 166950 times"> + </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 171720 : &amp;&amp; *ndx != '_'</span> -<span class="lineNum"> 1598 </span> [<span class="branchCov" title="Branch 1 was taken 166950 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 166950 : &amp;&amp; isalnum(*ndx) == 0)</span> -<span class="lineNum"> 1599 </span> : : { -<span class="lineNum"> 1600 </span> : : rv = 0; -<span class="lineNum"> 1601 </span> : : break; -<span class="lineNum"> 1602 </span> : : } -<span class="lineNum"> 1603 </span> :<span class="lineCov"> 219420 : ndx++;</span> -<span class="lineNum"> 1604 </span> : : } -<span class="lineNum"> 1605 </span> : : -<span class="lineNum"> 1606 </span> : : /* Sanity check - j should be the number of chain fields -<span class="lineNum"> 1607 </span> : : * (excluding the type). -<span class="lineNum"> 1608 </span> : : */ -<span class="lineNum"> 1609 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4770 times"> + </span>]:<span class="lineCov"> 4770 : if(j != FW_NUM_CHAIN_FIELDS)</span> -<span class="lineNum"> 1610 </span> :<span class="lineNoCov"> 0 : rv = 0;</span> -<span class="lineNum"> 1611 </span> : : -<span class="lineNum"> 1612 </span> :<span class="lineCov"> 4770 : return rv;</span> -<span class="lineNum"> 1613 </span> : : } -<span class="lineNum"> 1614 </span> : : -<span class="lineNum"> 1615 </span> : : #endif /* FIREWALL_FIREWALLD */ -<span class="lineNum"> 1616 </span> : : -<span class="lineNum"> 1617 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html deleted file mode 100644 index e19110a1..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func-sort-c.html +++ /dev/null @@ -1,133 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd.c<span style="font-size: 80%;"> (<a href="fwknopd.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">80</td> - <td class="headerCovTableEntry">275</td> - <td class="headerCovTableEntryLo">29.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">13</td> - <td class="headerCovTableEntryLo">53.8 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">36</td> - <td class="headerCovTableEntry">164</td> - <td class="headerCovTableEntryLo">22.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fwknopd.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#74">main</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#654">check_dir_path</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#274">set_locale.isra.0</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#866">write_pid_file</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#948">get_running_pid</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#447">setup_pid</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#409">init_digest_cache</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#522">status_fwknopd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#538">handle_signals</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#740">make_dir_path</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#496">restart_fwknopd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#586">stop_fwknopd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#809">daemonize_process</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html deleted file mode 100644 index 18292af7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.func.html +++ /dev/null @@ -1,133 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd.c<span style="font-size: 80%;"> (<a href="fwknopd.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">80</td> - <td class="headerCovTableEntry">275</td> - <td class="headerCovTableEntryLo">29.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">13</td> - <td class="headerCovTableEntryLo">53.8 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">36</td> - <td class="headerCovTableEntry">164</td> - <td class="headerCovTableEntryLo">22.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fwknopd.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#654">check_dir_path</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#809">daemonize_process</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#948">get_running_pid</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#538">handle_signals</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#409">init_digest_cache</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#74">main</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#740">make_dir_path</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#496">restart_fwknopd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#274">set_locale.isra.0</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#447">setup_pid</a></td> - <td class="coverFnHi">249</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#522">status_fwknopd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#586">stop_fwknopd</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd.c.gcov.html#866">write_pid_file</a></td> - <td class="coverFnHi">249</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html deleted file mode 100644 index 60a41355..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd.c.gcov.html +++ /dev/null @@ -1,1102 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd.c<span style="font-size: 80%;"> (source / <a href="fwknopd.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">80</td> - <td class="headerCovTableEntry">275</td> - <td class="headerCovTableEntryLo">29.1 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntry">13</td> - <td class="headerCovTableEntryLo">53.8 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">36</td> - <td class="headerCovTableEntry">164</td> - <td class="headerCovTableEntryLo">22.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: fwknopd.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: An implementation of an fwknop server. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fwknopd.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;access.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;config_init.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 36 </span> : : #include &quot;fw_util.h&quot; -<span class="lineNum"> 37 </span> : : #include &quot;sig_handler.h&quot; -<span class="lineNum"> 38 </span> : : #include &quot;replay_cache.h&quot; -<span class="lineNum"> 39 </span> : : #include &quot;tcp_server.h&quot; -<span class="lineNum"> 40 </span> : : #include &quot;udp_server.h&quot; -<span class="lineNum"> 41 </span> : : -<span class="lineNum"> 42 </span> : : #if USE_LIBPCAP -<span class="lineNum"> 43 </span> : : #include &quot;pcap_capture.h&quot; -<span class="lineNum"> 44 </span> : : #endif -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : /* Prototypes -<span class="lineNum"> 47 </span> : : */ -<span class="lineNum"> 48 </span> : : static int check_dir_path(const char * const path, -<span class="lineNum"> 49 </span> : : const char * const path_name, const unsigned char use_basename); -<span class="lineNum"> 50 </span> : : static int make_dir_path(const char * const path); -<span class="lineNum"> 51 </span> : : static void daemonize_process(fko_srv_options_t * const opts); -<span class="lineNum"> 52 </span> : : static int stop_fwknopd(fko_srv_options_t * const opts); -<span class="lineNum"> 53 </span> : : static int status_fwknopd(fko_srv_options_t * const opts); -<span class="lineNum"> 54 </span> : : static int restart_fwknopd(fko_srv_options_t * const opts); -<span class="lineNum"> 55 </span> : : static int write_pid_file(fko_srv_options_t *opts); -<span class="lineNum"> 56 </span> : : static int handle_signals(fko_srv_options_t *opts); -<span class="lineNum"> 57 </span> : : static void setup_pid(fko_srv_options_t *opts); -<span class="lineNum"> 58 </span> : : static void init_digest_cache(fko_srv_options_t *opts); -<span class="lineNum"> 59 </span> : : static void set_locale(fko_srv_options_t *opts); -<span class="lineNum"> 60 </span> : : static pid_t get_running_pid(const fko_srv_options_t *opts); -<span class="lineNum"> 61 </span> : : #if AFL_FUZZING -<span class="lineNum"> 62 </span> : : static void afl_enc_pkt_from_file(fko_srv_options_t *opts); -<span class="lineNum"> 63 </span> : : static void afl_pkt_from_stdin(fko_srv_options_t *opts); -<span class="lineNum"> 64 </span> : : #endif -<span class="lineNum"> 65 </span> : : -<span class="lineNum"> 66 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 67 </span> : : static void enable_fault_injections(fko_srv_options_t * const opts); -<span class="lineNum"> 68 </span> : : #endif -<span class="lineNum"> 69 </span> : : -<span class="lineNum"> 70 </span> : : #if AFL_FUZZING -<span class="lineNum"> 71 </span> : : #define AFL_MAX_PKT_SIZE 1024 -<span class="lineNum"> 72 </span> : : #define AFL_DUMP_CTX_SIZE 4096 -<span class="lineNum"> 73 </span> : : #endif -<a name="74"><span class="lineNum"> 74 </span> : : </a> -<span class="lineNum"> 75 </span> : : int -<span class="lineNum"> 76 </span> :<span class="lineCov"> 3628 : main(int argc, char **argv)</span> -<span class="lineNum"> 77 </span> : : { -<span class="lineNum"> 78 </span> : : fko_srv_options_t opts; -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> : : while(1) -<span class="lineNum"> 81 </span> : : { -<span class="lineNum"> 82 </span> : : /* Handle command line -<span class="lineNum"> 83 </span> : : */ -<span class="lineNum"> 84 </span> :<span class="lineCov"> 1814 : config_init(&amp;opts, argc, argv);</span> -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 87 </span> : : /* Set any fault injection points early -<span class="lineNum"> 88 </span> : : */ -<span class="lineNum"> 89 </span> : : enable_fault_injections(&amp;opts); -<span class="lineNum"> 90 </span> : : #endif -<span class="lineNum"> 91 </span> : : -<span class="lineNum"> 92 </span> : : /* Process any options that do their thing and exit. -<span class="lineNum"> 93 </span> : : */ -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> : : /* Kill the currently running fwknopd process? -<span class="lineNum"> 96 </span> : : */ -<span class="lineNum"> 97 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.kill == 1)</span> -<span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, stop_fwknopd(&amp;opts));</span> -<span class="lineNum"> 99 </span> : : -<span class="lineNum"> 100 </span> : : /* Status of the currently running fwknopd process? -<span class="lineNum"> 101 </span> : : */ -<span class="lineNum"> 102 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.status == 1)</span> -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, status_fwknopd(&amp;opts));</span> -<span class="lineNum"> 104 </span> : : -<span class="lineNum"> 105 </span> : : /* Restart the currently running fwknopd process? -<span class="lineNum"> 106 </span> : : */ -<span class="lineNum"> 107 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.restart == 1)</span> -<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, restart_fwknopd(&amp;opts));</span> -<span class="lineNum"> 109 </span> : : -<span class="lineNum"> 110 </span> : : /* Initialize logging. -<span class="lineNum"> 111 </span> : : */ -<span class="lineNum"> 112 </span> :<span class="lineCov"> 795 : init_logging(&amp;opts);</span> -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : /* Update the verbosity level for the log module */ -<span class="lineNum"> 115 </span> :<span class="lineCov"> 795 : log_set_verbosity(LOG_DEFAULT_VERBOSITY + opts.verbose);</span> -<span class="lineNum"> 116 </span> : : -<span class="lineNum"> 117 </span> : : #if HAVE_LOCALE_H -<span class="lineNum"> 118 </span> : : /* Set the locale if specified. -<span class="lineNum"> 119 </span> : : */ -<span class="lineNum"> 120 </span> :<span class="lineCov"> 795 : set_locale(&amp;opts);</span> -<span class="lineNum"> 121 </span> : : #endif -<span class="lineNum"> 122 </span> : : -<span class="lineNum"> 123 </span> : : /* Make sure we have a valid run dir and path leading to digest file -<span class="lineNum"> 124 </span> : : * in case it configured to be somewhere other than the run dir. -<span class="lineNum"> 125 </span> : : */ -<span class="lineNum"> 126 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(!opts.afl_fuzzing</span> -<span class="lineNum"> 127 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : &amp;&amp; ! check_dir_path((const char *)opts.config[CONF_FWKNOP_RUN_DIR], &quot;Run&quot;, 0))</span> -<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> : : /* Initialize the firewall rules handler based on the fwknopd.conf -<span class="lineNum"> 131 </span> : : * file, but (for iptables firewalls) don't flush any rules or create -<span class="lineNum"> 132 </span> : : * any chains yet. This allows us to dump the current firewall rules -<span class="lineNum"> 133 </span> : : * via fw_rules_dump() in --fw-list mode before changing around any rules -<span class="lineNum"> 134 </span> : : * of an existing fwknopd process. -<span class="lineNum"> 135 </span> : : */ -<span class="lineNum"> 136 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(fw_config_init(&amp;opts) != 1)</span> -<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 138 </span> : : -<span class="lineNum"> 139 </span>[<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.fw_list == 1 || opts.fw_list_all == 1)</span> -<span class="lineNum"> 140 </span> : : { -<span class="lineNum"> 141 </span> :<span class="lineNoCov"> 0 : fw_dump_rules(&amp;opts);</span> -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 143 </span> : : } -<span class="lineNum"> 144 </span> : : -<span class="lineNum"> 145 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts.fw_flush == 1)</span> -<span class="lineNum"> 146 </span> : : { -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Deleting any existing firewall rules...\n&quot;);</span> -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 149 </span> : : } -<span class="lineNum"> 150 </span> : : -<span class="lineNum"> 151 </span> : : /* Process the access.conf file. -<span class="lineNum"> 152 </span> : : */ -<span class="lineNum"> 153 </span> :<span class="lineCov"> 795 : parse_access_file(&amp;opts);</span> -<span class="lineNum"> 154 </span> : : -<span class="lineNum"> 155 </span> : : /* Show config (including access.conf vars) and exit dump config was -<span class="lineNum"> 156 </span> : : * wanted. -<span class="lineNum"> 157 </span> : : */ -<span class="lineNum"> 158 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(opts.dump_config == 1)</span> -<span class="lineNum"> 159 </span> : : { -<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : dump_config(&amp;opts);</span> -<span class="lineNum"> 161 </span> :<span class="lineNoCov"> 0 : dump_access_list(&amp;opts);</span> -<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 163 </span> : : } -<span class="lineNum"> 164 </span> : : -<span class="lineNum"> 165 </span> : : /* Acquire pid, become a daemon or run in the foreground, write pid -<span class="lineNum"> 166 </span> : : * to pid file. -<span class="lineNum"> 167 </span> : : */ -<span class="lineNum"> 168 </span> :<span class="lineCov"> 249 : setup_pid(&amp;opts);</span> -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span>[<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchCov" title="Branch 2 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 249 : if(opts.verbose &gt; 1 &amp;&amp; opts.foreground)</span> -<span class="lineNum"> 171 </span> : : { -<span class="lineNum"> 172 </span> :<span class="lineCov"> 249 : dump_config(&amp;opts);</span> -<span class="lineNum"> 173 </span> :<span class="lineCov"> 249 : dump_access_list(&amp;opts);</span> -<span class="lineNum"> 174 </span> : : } -<span class="lineNum"> 175 </span> : : -<span class="lineNum"> 176 </span> : : /* Initialize the digest cache for replay attack detection (either -<span class="lineNum"> 177 </span> : : * with dbm support or with the default simple cache file strategy) -<span class="lineNum"> 178 </span> : : * if so configured. -<span class="lineNum"> 179 </span> : : */ -<span class="lineNum"> 180 </span> :<span class="lineCov"> 249 : init_digest_cache(&amp;opts);</span> -<span class="lineNum"> 181 </span> : : -<span class="lineNum"> 182 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if(opts.exit_after_parse_config)</span> -<span class="lineNum"> 183 </span> : : { -<span class="lineNum"> 184 </span> :<span class="lineCov"> 249 : log_msg(LOG_INFO, &quot;Configs parsed, exiting.&quot;);</span> -<span class="lineNum"> 185 </span> :<span class="lineCov"> 249 : clean_exit(&amp;opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 186 </span> : : } -<span class="lineNum"> 187 </span> : : -<span class="lineNum"> 188 </span> : : #if AFL_FUZZING -<span class="lineNum"> 189 </span> : : /* SPA data from STDIN. */ -<span class="lineNum"> 190 </span> : : if(opts.afl_fuzzing) -<span class="lineNum"> 191 </span> : : { -<span class="lineNum"> 192 </span> : : if(opts.config[CONF_AFL_PKT_FILE] != 0x0) -<span class="lineNum"> 193 </span> : : { -<span class="lineNum"> 194 </span> : : afl_enc_pkt_from_file(&amp;opts); -<span class="lineNum"> 195 </span> : : } -<span class="lineNum"> 196 </span> : : else -<span class="lineNum"> 197 </span> : : { -<span class="lineNum"> 198 </span> : : afl_pkt_from_stdin(&amp;opts); -<span class="lineNum"> 199 </span> : : } -<span class="lineNum"> 200 </span> : : } -<span class="lineNum"> 201 </span> : : #endif -<span class="lineNum"> 202 </span> : : -<span class="lineNum"> 203 </span> : : /* Prepare the firewall - i.e. flush any old rules and (for iptables) -<span class="lineNum"> 204 </span> : : * create fwknop chains. -<span class="lineNum"> 205 </span> : : */ -<span class="lineNum"> 206 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!opts.test &amp;&amp; (fw_initialize(&amp;opts) != 1))</span> -<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 208 </span> : : -<span class="lineNum"> 209 </span> : : /* If we are to acquire SPA data via a UDP socket, start it up here. -<span class="lineNum"> 210 </span> : : */ -<span class="lineNum"> 211 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts.enable_udp_server ||</span> -<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : strncasecmp(opts.config[CONF_ENABLE_UDP_SERVER], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 213 </span> : : { -<span class="lineNum"> 214 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(run_udp_server(&amp;opts) &lt; 0)</span> -<span class="lineNum"> 215 </span> : : { -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Fatal run_udp_server() error&quot;);</span> -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 218 </span> : : } -<span class="lineNum"> 219 </span> : : else -<span class="lineNum"> 220 </span> : : { -<span class="lineNum"> 221 </span> : : break; -<span class="lineNum"> 222 </span> : : } -<span class="lineNum"> 223 </span> : : } -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> : : /* If the TCP server option was set, fire it up here. Note that in -<span class="lineNum"> 226 </span> : : * this mode, fwknopd still acquires SPA packets via libpcap. If you -<span class="lineNum"> 227 </span> : : * want to use UDP only without the libpcap dependency, see the FIXME... -<span class="lineNum"> 228 </span> : : */ -<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts.config[CONF_ENABLE_TCP_SERVER], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 230 </span> : : { -<span class="lineNum"> 231 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(run_tcp_server(&amp;opts) &lt; 0)</span> -<span class="lineNum"> 232 </span> : : { -<span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Fatal run_tcp_server() error&quot;);</span> -<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 235 </span> : : } -<span class="lineNum"> 236 </span> : : } -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> : : #if USE_LIBPCAP -<span class="lineNum"> 239 </span> : : /* Intiate pcap capture mode... -<span class="lineNum"> 240 </span> : : */ -<span class="lineNum"> 241 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts.config[CONF_ENABLE_UDP_SERVER], &quot;N&quot;, 1) == 0)</span> -<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : pcap_capture(&amp;opts);</span> -<span class="lineNum"> 243 </span> : : #endif -<span class="lineNum"> 244 </span> : : -<span class="lineNum"> 245 </span> : : /* Deal with any signals that we've received and break out -<span class="lineNum"> 246 </span> : : * of the loop for any terminating signals -<span class="lineNum"> 247 </span> : : */ -<span class="lineNum"> 248 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(handle_signals(&amp;opts) == 1)</span> -<span class="lineNum"> 249 </span> : : break; -<span class="lineNum"> 250 </span> : : } -<span class="lineNum"> 251 </span> : : -<span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Shutting Down fwknopd.&quot;);</span> -<span class="lineNum"> 253 </span> : : -<span class="lineNum"> 254 </span> : : /* Kill the TCP server (if we have one running). -<span class="lineNum"> 255 </span> : : */ -<span class="lineNum"> 256 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts.tcp_server_pid &gt; 0)</span> -<span class="lineNum"> 257 </span> : : { -<span class="lineNum"> 258 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Killing the TCP server (pid=%i)&quot;,</span> -<span class="lineNum"> 259 </span> : : opts.tcp_server_pid); -<span class="lineNum"> 260 </span> : : -<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : kill(opts.tcp_server_pid, SIGTERM);</span> -<span class="lineNum"> 262 </span> : : -<span class="lineNum"> 263 </span> : : /* --DSS XXX: This seems to be necessary if the tcp server -<span class="lineNum"> 264 </span> : : * was restarted by this program. We need to -<span class="lineNum"> 265 </span> : : * investigate and fix this. For now, this works -<span class="lineNum"> 266 </span> : : * (it is kludgy, but does no harm afaik). -<span class="lineNum"> 267 </span> : : */ -<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : kill(opts.tcp_server_pid, SIGKILL);</span> -<span class="lineNum"> 269 </span> : : } -<span class="lineNum"> 270 </span> : : -<span class="lineNum"> 271 </span> :<span class="lineNoCov"> 0 : clean_exit(&amp;opts, FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 272 </span> : : -<span class="lineNum"> 273 </span> :<span class="lineNoCov"> 0 : return(EXIT_SUCCESS); /* This never gets called */</span> -<a name="274"><span class="lineNum"> 274 </span> : : }</a> -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> :<span class="lineCov"> 795 : static void set_locale(fko_srv_options_t *opts)</span> -<span class="lineNum"> 277 </span> : : { -<span class="lineNum"> 278 </span> : : char *locale; -<span class="lineNum"> 279 </span> : : -<span class="lineNum"> 280 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_LOCALE] != NULL</span> -<span class="lineNum"> 281 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncasecmp(opts-&gt;config[CONF_LOCALE], &quot;NONE&quot;, 4) != 0)</span> -<span class="lineNum"> 282 </span> : : { -<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : locale = setlocale(LC_ALL, opts-&gt;config[CONF_LOCALE]);</span> -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(locale == NULL)</span> -<span class="lineNum"> 286 </span> : : { -<span class="lineNum"> 287 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 288 </span> : : &quot;WARNING: Unable to set locale to '%s'.&quot;, -<span class="lineNum"> 289 </span> : : opts-&gt;config[CONF_LOCALE] -<span class="lineNum"> 290 </span> : : ); -<span class="lineNum"> 291 </span> : : } -<span class="lineNum"> 292 </span> : : else -<span class="lineNum"> 293 </span> : : { -<span class="lineNum"> 294 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 295 </span> : : &quot;Locale set to '%s'.&quot;, opts-&gt;config[CONF_LOCALE] -<span class="lineNum"> 296 </span> : : ); -<span class="lineNum"> 297 </span> : : } -<span class="lineNum"> 298 </span> : : } -<span class="lineNum"> 299 </span> :<span class="lineCov"> 795 : return;</span> -<span class="lineNum"> 300 </span> : : } -<span class="lineNum"> 301 </span> : : -<span class="lineNum"> 302 </span> : : #if AFL_FUZZING -<span class="lineNum"> 303 </span> : : static void afl_enc_pkt_from_file(fko_srv_options_t *opts) -<span class="lineNum"> 304 </span> : : { -<span class="lineNum"> 305 </span> : : FILE *fp = NULL; -<span class="lineNum"> 306 </span> : : fko_ctx_t decrypt_ctx = NULL; -<span class="lineNum"> 307 </span> : : unsigned char enc_spa_pkt[AFL_MAX_PKT_SIZE] = {0}, rc; -<span class="lineNum"> 308 </span> : : int res = 0, es = EXIT_SUCCESS, enc_msg_len; -<span class="lineNum"> 309 </span> : : char dump_buf[AFL_DUMP_CTX_SIZE]; -<span class="lineNum"> 310 </span> : : -<span class="lineNum"> 311 </span> : : fp = fopen(opts-&gt;config[CONF_AFL_PKT_FILE], &quot;rb&quot;); -<span class="lineNum"> 312 </span> : : if(fp != NULL) -<span class="lineNum"> 313 </span> : : { -<span class="lineNum"> 314 </span> : : enc_msg_len = 0; -<span class="lineNum"> 315 </span> : : while(fread(&amp;rc, 1, 1, fp)) -<span class="lineNum"> 316 </span> : : { -<span class="lineNum"> 317 </span> : : enc_spa_pkt[enc_msg_len] = rc; -<span class="lineNum"> 318 </span> : : enc_msg_len++; -<span class="lineNum"> 319 </span> : : if(enc_msg_len == AFL_MAX_PKT_SIZE-1) -<span class="lineNum"> 320 </span> : : break; -<span class="lineNum"> 321 </span> : : } -<span class="lineNum"> 322 </span> : : fclose(fp); -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> : : fko_new(&amp;decrypt_ctx); -<span class="lineNum"> 325 </span> : : -<span class="lineNum"> 326 </span> : : res = fko_afl_set_spa_data(decrypt_ctx, (const char *)enc_spa_pkt, -<span class="lineNum"> 327 </span> : : enc_msg_len); -<span class="lineNum"> 328 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 329 </span> : : res = fko_decrypt_spa_data(decrypt_ctx, &quot;fwknoptest&quot;, -<span class="lineNum"> 330 </span> : : strlen(&quot;fwknoptest&quot;)); -<span class="lineNum"> 331 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 332 </span> : : res = dump_ctx_to_buffer(decrypt_ctx, dump_buf, sizeof(dump_buf)); -<span class="lineNum"> 333 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 334 </span> : : log_msg(LOG_INFO, &quot;%s&quot;, dump_buf); -<span class="lineNum"> 335 </span> : : else -<span class="lineNum"> 336 </span> : : log_msg(LOG_ERR, &quot;Error (%d): %s&quot;, res, fko_errstr(res)); -<span class="lineNum"> 337 </span> : : -<span class="lineNum"> 338 </span> : : fko_destroy(decrypt_ctx); -<span class="lineNum"> 339 </span> : : -<span class="lineNum"> 340 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 341 </span> : : { -<span class="lineNum"> 342 </span> : : log_msg(LOG_INFO, &quot;SPA packet decode: %s&quot;, fko_errstr(res)); -<span class="lineNum"> 343 </span> : : es = EXIT_SUCCESS; -<span class="lineNum"> 344 </span> : : } -<span class="lineNum"> 345 </span> : : else -<span class="lineNum"> 346 </span> : : { -<span class="lineNum"> 347 </span> : : log_msg(LOG_ERR, &quot;Could not decode SPA packet: %s&quot;, fko_errstr(res)); -<span class="lineNum"> 348 </span> : : es = EXIT_FAILURE; -<span class="lineNum"> 349 </span> : : } -<span class="lineNum"> 350 </span> : : } -<span class="lineNum"> 351 </span> : : else -<span class="lineNum"> 352 </span> : : log_msg(LOG_ERR, &quot;Could not acquire SPA packet from file: %s.&quot;, -<span class="lineNum"> 353 </span> : : opts-&gt;config[CONF_AFL_PKT_FILE]); -<span class="lineNum"> 354 </span> : : -<span class="lineNum"> 355 </span> : : clean_exit(opts, NO_FW_CLEANUP, es); -<span class="lineNum"> 356 </span> : : } -<span class="lineNum"> 357 </span> : : -<span class="lineNum"> 358 </span> : : static void afl_pkt_from_stdin(fko_srv_options_t *opts) -<span class="lineNum"> 359 </span> : : { -<span class="lineNum"> 360 </span> : : FILE *fp = NULL; -<span class="lineNum"> 361 </span> : : fko_ctx_t decode_ctx = NULL; -<span class="lineNum"> 362 </span> : : unsigned char spa_pkt[AFL_MAX_PKT_SIZE] = {0}; -<span class="lineNum"> 363 </span> : : int res = 0, es = EXIT_SUCCESS; -<span class="lineNum"> 364 </span> : : char dump_buf[AFL_DUMP_CTX_SIZE]; -<span class="lineNum"> 365 </span> : : -<span class="lineNum"> 366 </span> : : fp = fdopen(STDIN_FILENO, &quot;r&quot;); -<span class="lineNum"> 367 </span> : : if(fp != NULL) -<span class="lineNum"> 368 </span> : : { -<span class="lineNum"> 369 </span> : : if(fgets((char *)spa_pkt, AFL_MAX_PKT_SIZE, fp) == NULL) -<span class="lineNum"> 370 </span> : : { -<span class="lineNum"> 371 </span> : : fclose(fp); -<span class="lineNum"> 372 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 373 </span> : : } -<span class="lineNum"> 374 </span> : : -<span class="lineNum"> 375 </span> : : fclose(fp); -<span class="lineNum"> 376 </span> : : -<span class="lineNum"> 377 </span> : : fko_new(&amp;decode_ctx); -<span class="lineNum"> 378 </span> : : -<span class="lineNum"> 379 </span> : : res = fko_set_encoded_data(decode_ctx, (char *) spa_pkt, -<span class="lineNum"> 380 </span> : : strlen((char *)spa_pkt), 0, FKO_DIGEST_SHA256); -<span class="lineNum"> 381 </span> : : -<span class="lineNum"> 382 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 383 </span> : : res = fko_set_spa_data(decode_ctx, (const char *) spa_pkt); -<span class="lineNum"> 384 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 385 </span> : : res = fko_decode_spa_data(decode_ctx); -<span class="lineNum"> 386 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 387 </span> : : res = dump_ctx_to_buffer(decode_ctx, dump_buf, sizeof(dump_buf)); -<span class="lineNum"> 388 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 389 </span> : : log_msg(LOG_INFO, &quot;%s&quot;, dump_buf); -<span class="lineNum"> 390 </span> : : -<span class="lineNum"> 391 </span> : : fko_destroy(decode_ctx); -<span class="lineNum"> 392 </span> : : -<span class="lineNum"> 393 </span> : : if(res == FKO_SUCCESS) -<span class="lineNum"> 394 </span> : : { -<span class="lineNum"> 395 </span> : : log_msg(LOG_INFO, &quot;SPA packet decode: %s&quot;, fko_errstr(res)); -<span class="lineNum"> 396 </span> : : es = EXIT_SUCCESS; -<span class="lineNum"> 397 </span> : : } -<span class="lineNum"> 398 </span> : : else -<span class="lineNum"> 399 </span> : : { -<span class="lineNum"> 400 </span> : : log_msg(LOG_ERR, &quot;Could not decode SPA packet: %s&quot;, fko_errstr(res)); -<span class="lineNum"> 401 </span> : : es = EXIT_FAILURE; -<span class="lineNum"> 402 </span> : : } -<span class="lineNum"> 403 </span> : : } -<span class="lineNum"> 404 </span> : : else -<span class="lineNum"> 405 </span> : : log_msg(LOG_ERR, &quot;Could not acquire SPA packet from stdin.&quot;); -<span class="lineNum"> 406 </span> : : -<span class="lineNum"> 407 </span> : : clean_exit(opts, NO_FW_CLEANUP, es); -<span class="lineNum"> 408 </span> : : } -<a name="409"><span class="lineNum"> 409 </span> : : #endif</a> -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> :<span class="lineCov"> 249 : static void init_digest_cache(fko_srv_options_t *opts)</span> -<span class="lineNum"> 412 </span> : : { -<span class="lineNum"> 413 </span> : : int rp_cache_count; -<span class="lineNum"> 414 </span> : : -<span class="lineNum"> 415 </span> : : #if AFL_FUZZING -<span class="lineNum"> 416 </span> : : if(opts-&gt;afl_fuzzing) -<span class="lineNum"> 417 </span> : : return; -<span class="lineNum"> 418 </span> : : #endif -<span class="lineNum"> 419 </span> : : -<span class="lineNum"> 420 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchCov" title="Branch 1 was taken 178 times"> + </span>]:<span class="lineCov"> 249 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 421 </span> : : { -<span class="lineNum"> 422 </span> :<span class="lineCov"> 71 : rp_cache_count = replay_cache_init(opts);</span> -<span class="lineNum"> 423 </span> : : -<span class="lineNum"> 424 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 71 : if(rp_cache_count &lt; 0)</span> -<span class="lineNum"> 425 </span> : : { -<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 427 </span> : : &quot;Error opening digest cache file. Incoming digests will not be remembered.&quot; -<span class="lineNum"> 428 </span> : : ); -<span class="lineNum"> 429 </span> : : /* Destination points to heap memory, and is guaranteed to be -<span class="lineNum"> 430 </span> : : * at least two bytes large via validate_options(), -<span class="lineNum"> 431 </span> : : * DEF_ENABLE_DIGEST_PERSISTENCE, and set_config_entry() -<span class="lineNum"> 432 </span> : : */ -<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : strlcpy(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;N&quot;, 2);</span> -<span class="lineNum"> 434 </span> : : } -<span class="lineNum"> 435 </span> : : -<span class="lineNum"> 436 </span> [<span class="branchCov" title="Branch 0 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 71 : if(opts-&gt;verbose)</span> -<span class="lineNum"> 437 </span> :<span class="lineCov"> 71 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 438 </span> : : &quot;Using Digest Cache: '%s' (entry count = %i)&quot;, -<span class="lineNum"> 439 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 440 </span> : : opts-&gt;config[CONF_DIGEST_FILE], rp_cache_count -<span class="lineNum"> 441 </span> : : #else -<span class="lineNum"> 442 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], rp_cache_count -<span class="lineNum"> 443 </span> : : #endif -<span class="lineNum"> 444 </span> : : ); -<span class="lineNum"> 445 </span> : : } -<span class="lineNum"> 446 </span> :<span class="lineCov"> 249 : return;</span> -<a name="447"><span class="lineNum"> 447 </span> : : }</a> -<span class="lineNum"> 448 </span> : : -<span class="lineNum"> 449 </span> :<span class="lineCov"> 249 : static void setup_pid(fko_srv_options_t *opts)</span> -<span class="lineNum"> 450 </span> : : { -<span class="lineNum"> 451 </span> : : pid_t old_pid; -<span class="lineNum"> 452 </span> : : -<span class="lineNum"> 453 </span> : : #if AFL_FUZZING -<span class="lineNum"> 454 </span> : : if(opts-&gt;afl_fuzzing) -<span class="lineNum"> 455 </span> : : return; -<span class="lineNum"> 456 </span> : : #endif -<span class="lineNum"> 457 </span> : : -<span class="lineNum"> 458 </span> : : /* If we are a new process (just being started), proceed with normal -<span class="lineNum"> 459 </span> : : * start-up. Otherwise, we are here as a result of a signal sent to an -<span class="lineNum"> 460 </span> : : * existing process and we want to restart. -<span class="lineNum"> 461 </span> : : */ -<span class="lineNum"> 462 </span> [<span class="branchCov" title="Branch 2 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 3 was not taken"> - </span>]:<span class="lineCov"> 249 : if(get_running_pid(opts) != getpid())</span> -<span class="lineNum"> 463 </span> : : { -<span class="lineNum"> 464 </span> : : /* If foreground mode is not set, then fork off and become a daemon. -<span class="lineNum"> 465 </span> : : * Otherwise, attempt to get the pid file lock and go on. -<span class="lineNum"> 466 </span> : : */ -<span class="lineNum"> 467 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(opts-&gt;foreground == 0)</span> -<span class="lineNum"> 468 </span> : : { -<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : daemonize_process(opts);</span> -<span class="lineNum"> 470 </span> : : } -<span class="lineNum"> 471 </span> : : else -<span class="lineNum"> 472 </span> : : { -<span class="lineNum"> 473 </span> :<span class="lineCov"> 249 : old_pid = write_pid_file(opts);</span> -<span class="lineNum"> 474 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(old_pid &gt; 0)</span> -<span class="lineNum"> 475 </span> : : { -<span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : fprintf(stderr,</span> -<span class="lineNum"> 477 </span> : : &quot;[*] An instance of fwknopd is already running: (PID=%i).\n&quot;, old_pid -<span class="lineNum"> 478 </span> : : ); -<span class="lineNum"> 479 </span> : : -<span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 481 </span> : : } -<span class="lineNum"> 482 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : else if(old_pid &lt; 0)</span> -<span class="lineNum"> 483 </span> : : { -<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;[*] PID file error. The lock may not be effective.\n&quot;);</span> -<span class="lineNum"> 485 </span> : : } -<span class="lineNum"> 486 </span> : : } -<span class="lineNum"> 487 </span> : : -<span class="lineNum"> 488 </span> :<span class="lineCov"> 249 : log_msg(LOG_INFO, &quot;Starting %s&quot;, MY_NAME);</span> -<span class="lineNum"> 489 </span> : : } -<span class="lineNum"> 490 </span> : : else -<span class="lineNum"> 491 </span> : : { -<span class="lineNum"> 492 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Re-starting %s&quot;, MY_NAME);</span> -<span class="lineNum"> 493 </span> : : } -<span class="lineNum"> 494 </span> : : -<span class="lineNum"> 495 </span> :<span class="lineCov"> 249 : return;</span> -<a name="496"><span class="lineNum"> 496 </span> : : }</a> -<span class="lineNum"> 497 </span> : : -<span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : static int restart_fwknopd(fko_srv_options_t * const opts)</span> -<span class="lineNum"> 499 </span> : : { -<span class="lineNum"> 500 </span> :<span class="lineNoCov"> 0 : int res = 0;</span> -<span class="lineNum"> 501 </span> : : pid_t old_pid; -<span class="lineNum"> 502 </span> : : -<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : old_pid = get_running_pid(opts);</span> -<span class="lineNum"> 504 </span> : : -<span class="lineNum"> 505 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> -<span class="lineNum"> 506 </span> : : { -<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : res = kill(old_pid, SIGHUP);</span> -<span class="lineNum"> 508 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 0)</span> -<span class="lineNum"> 509 </span> : : { -<span class="lineNum"> 510 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Sent restart signal to fwknopd (pid=%i)\n&quot;, old_pid);</span> -<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> -<span class="lineNum"> 512 </span> : : } -<span class="lineNum"> 513 </span> : : else -<span class="lineNum"> 514 </span> : : { -<span class="lineNum"> 515 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable to send signal to fwknop: &quot;);</span> -<span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> -<span class="lineNum"> 517 </span> : : } -<span class="lineNum"> 518 </span> : : } -<span class="lineNum"> 519 </span> : : -<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;No running fwknopd detected.\n&quot;);</span> -<span class="lineNum"> 521 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> -<a name="522"><span class="lineNum"> 522 </span> : : }</a> -<span class="lineNum"> 523 </span> : : -<span class="lineNum"> 524 </span> :<span class="lineNoCov"> 0 : static int status_fwknopd(fko_srv_options_t * const opts)</span> -<span class="lineNum"> 525 </span> : : { -<span class="lineNum"> 526 </span> : : pid_t old_pid; -<span class="lineNum"> 527 </span> : : -<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : old_pid = write_pid_file(opts);</span> -<span class="lineNum"> 529 </span> : : -<span class="lineNum"> 530 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> -<span class="lineNum"> 531 </span> : : { -<span class="lineNum"> 532 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Detected fwknopd is running (pid=%i).\n&quot;, old_pid);</span> -<span class="lineNum"> 533 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> -<span class="lineNum"> 534 </span> : : } -<span class="lineNum"> 535 </span> : : -<span class="lineNum"> 536 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;No running fwknopd detected.\n&quot;);</span> -<span class="lineNum"> 537 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> -<a name="538"><span class="lineNum"> 538 </span> : : }</a> -<span class="lineNum"> 539 </span> : : -<span class="lineNum"> 540 </span> :<span class="lineNoCov"> 0 : static int handle_signals(fko_srv_options_t *opts)</span> -<span class="lineNum"> 541 </span> : : { -<span class="lineNum"> 542 </span> :<span class="lineNoCov"> 0 : int last_sig = 0, rv = 1;</span> -<span class="lineNum"> 543 </span> : : -<span class="lineNum"> 544 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_signal) {</span> -<span class="lineNum"> 545 </span> :<span class="lineNoCov"> 0 : last_sig = got_signal;</span> -<span class="lineNum"> 546 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> -<span class="lineNum"> 547 </span> : : -<span class="lineNum"> 548 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_sighup)</span> -<span class="lineNum"> 549 </span> : : { -<span class="lineNum"> 550 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Got SIGHUP. Re-reading configs.&quot;);</span> -<span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : free_configs(opts);</span> -<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : kill(opts-&gt;tcp_server_pid, SIGTERM);</span> -<span class="lineNum"> 553 </span> :<span class="lineNoCov"> 0 : usleep(1000000);</span> -<span class="lineNum"> 554 </span> :<span class="lineNoCov"> 0 : got_sighup = 0;</span> -<span class="lineNum"> 555 </span> :<span class="lineNoCov"> 0 : rv = 0; /* this means fwknopd will not exit */</span> -<span class="lineNum"> 556 </span> : : } -<span class="lineNum"> 557 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(got_sigint)</span> -<span class="lineNum"> 558 </span> : : { -<span class="lineNum"> 559 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Got SIGINT. Exiting...&quot;);</span> -<span class="lineNum"> 560 </span> :<span class="lineNoCov"> 0 : got_sigint = 0;</span> -<span class="lineNum"> 561 </span> : : } -<span class="lineNum"> 562 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(got_sigterm)</span> -<span class="lineNum"> 563 </span> : : { -<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Got SIGTERM. Exiting...&quot;);</span> -<span class="lineNum"> 565 </span> :<span class="lineNoCov"> 0 : got_sigterm = 0;</span> -<span class="lineNum"> 566 </span> : : } -<span class="lineNum"> 567 </span> : : else -<span class="lineNum"> 568 </span> : : { -<span class="lineNum"> 569 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 570 </span> : : &quot;Got signal %i. No defined action but to exit.&quot;, last_sig); -<span class="lineNum"> 571 </span> : : } -<span class="lineNum"> 572 </span> : : } -<span class="lineNum"> 573 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (opts-&gt;packet_ctr_limit &gt; 0</span> -<span class="lineNum"> 574 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; opts-&gt;packet_ctr &gt;= opts-&gt;packet_ctr_limit)</span> -<span class="lineNum"> 575 </span> : : { -<span class="lineNum"> 576 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 577 </span> : : &quot;Packet count limit (%d) reached. Exiting...&quot;, -<span class="lineNum"> 578 </span> : : opts-&gt;packet_ctr_limit); -<span class="lineNum"> 579 </span> : : } -<span class="lineNum"> 580 </span> : : else /* got_signal was not set (should be if we are here) */ -<span class="lineNum"> 581 </span> : : { -<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 583 </span> : : &quot;Capture ended without signal. Exiting...&quot;); -<span class="lineNum"> 584 </span> : : } -<span class="lineNum"> 585 </span> :<span class="lineNoCov"> 0 : return rv;</span> -<a name="586"><span class="lineNum"> 586 </span> : : }</a> -<span class="lineNum"> 587 </span> : : -<span class="lineNum"> 588 </span> :<span class="lineNoCov"> 0 : static int stop_fwknopd(fko_srv_options_t * const opts)</span> -<span class="lineNum"> 589 </span> : : { -<span class="lineNum"> 590 </span> :<span class="lineNoCov"> 0 : int res = 0, is_err = 0;</span> -<span class="lineNum"> 591 </span> : : pid_t old_pid; -<span class="lineNum"> 592 </span> : : -<span class="lineNum"> 593 </span> :<span class="lineNoCov"> 0 : old_pid = get_running_pid(opts);</span> -<span class="lineNum"> 594 </span> : : -<span class="lineNum"> 595 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> -<span class="lineNum"> 596 </span> : : { -<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : res = kill(old_pid, SIGTERM);</span> -<span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> -<span class="lineNum"> 599 </span> : : -<span class="lineNum"> 600 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 0 &amp;&amp; is_err != 0)</span> -<span class="lineNum"> 601 </span> : : { -<span class="lineNum"> 602 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Killed fwknopd (pid=%i)\n&quot;, old_pid);</span> -<span class="lineNum"> 603 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> -<span class="lineNum"> 604 </span> : : } -<span class="lineNum"> 605 </span> : : else -<span class="lineNum"> 606 </span> : : { -<span class="lineNum"> 607 </span> : : /* give a bit of time for process shutdown and check again -<span class="lineNum"> 608 </span> : : */ -<span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : sleep(1);</span> -<span class="lineNum"> 610 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> -<span class="lineNum"> 611 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != 0)</span> -<span class="lineNum"> 612 </span> : : { -<span class="lineNum"> 613 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;Killed fwknopd (pid=%i) via SIGTERM\n&quot;,</span> -<span class="lineNum"> 614 </span> : : old_pid); -<span class="lineNum"> 615 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> -<span class="lineNum"> 616 </span> : : } -<span class="lineNum"> 617 </span> : : else -<span class="lineNum"> 618 </span> : : { -<span class="lineNum"> 619 </span> :<span class="lineNoCov"> 0 : res = kill(old_pid, SIGKILL);</span> -<span class="lineNum"> 620 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> -<span class="lineNum"> 621 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == 0 &amp;&amp; is_err != 0)</span> -<span class="lineNum"> 622 </span> : : { -<span class="lineNum"> 623 </span> :<span class="lineNoCov"> 0 : fprintf(stdout,</span> -<span class="lineNum"> 624 </span> : : &quot;Killed fwknopd (pid=%i) via SIGKILL\n&quot;, -<span class="lineNum"> 625 </span> : : old_pid); -<span class="lineNum"> 626 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> -<span class="lineNum"> 627 </span> : : } -<span class="lineNum"> 628 </span> : : else -<span class="lineNum"> 629 </span> : : { -<span class="lineNum"> 630 </span> :<span class="lineNoCov"> 0 : sleep(1);</span> -<span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : is_err = kill(old_pid, 0);</span> -<span class="lineNum"> 632 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != 0)</span> -<span class="lineNum"> 633 </span> : : { -<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : fprintf(stdout,</span> -<span class="lineNum"> 635 </span> : : &quot;Killed fwknopd (pid=%i) via SIGKILL\n&quot;, -<span class="lineNum"> 636 </span> : : old_pid); -<span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : return EXIT_SUCCESS;</span> -<span class="lineNum"> 638 </span> : : } -<span class="lineNum"> 639 </span> : : else -<span class="lineNum"> 640 </span> : : { -<span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable to kill fwknop: &quot;);</span> -<span class="lineNum"> 642 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> -<span class="lineNum"> 643 </span> : : } -<span class="lineNum"> 644 </span> : : } -<span class="lineNum"> 645 </span> : : } -<span class="lineNum"> 646 </span> : : } -<span class="lineNum"> 647 </span> : : } -<span class="lineNum"> 648 </span> : : -<span class="lineNum"> 649 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;No running fwknopd detected.\n&quot;);</span> -<span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : return EXIT_FAILURE;</span> -<span class="lineNum"> 651 </span> : : } -<span class="lineNum"> 652 </span> : : -<span class="lineNum"> 653 </span> : : /* Ensure the specified directory exists. If not, create it or die. -<a name="654"><span class="lineNum"> 654 </span> : : */</a> -<span class="lineNum"> 655 </span> : : static int -<span class="lineNum"> 656 </span> :<span class="lineCov"> 795 : check_dir_path(const char * const filepath, const char * const fp_desc, const unsigned char use_basename)</span> -<span class="lineNum"> 657 </span> : : { -<span class="lineNum"> 658 </span> : : struct stat st; -<span class="lineNum"> 659 </span> :<span class="lineCov"> 795 : int res = 0;</span> -<span class="lineNum"> 660 </span> : : char tmp_path[MAX_PATH_LEN]; -<span class="lineNum"> 661 </span> : : char *ndx; -<span class="lineNum"> 662 </span> : : -<span class="lineNum"> 663 </span> : : /* -<span class="lineNum"> 664 </span> : : * FIXME: We shouldn't use a hard-coded dir-separator here. -<span class="lineNum"> 665 </span> : : */ -<span class="lineNum"> 666 </span> : : /* But first make sure we are using an absolute path. -<span class="lineNum"> 667 </span> : : */ -<span class="lineNum"> 668 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(*filepath != PATH_SEP)</span> -<span class="lineNum"> 669 </span> : : { -<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 671 </span> : : &quot;Path '%s' is not absolute.&quot;, filepath -<span class="lineNum"> 672 </span> : : ); -<span class="lineNum"> 673 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 674 </span> : : } -<span class="lineNum"> 675 </span> : : -<span class="lineNum"> 676 </span> : : /* If this is a file path that we want to use only the basename, strip -<span class="lineNum"> 677 </span> : : * the trailing filename here. -<span class="lineNum"> 678 </span> : : */ -<span class="lineNum"> 679 </span>[<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineCov"> 795 : if(use_basename &amp;&amp; ((ndx = strrchr(filepath, PATH_SEP)) != NULL))</span> -<span class="lineNum"> 680 </span> :<span class="lineNoCov"> 0 : strlcpy(tmp_path, filepath, (ndx-filepath)+1);</span> -<span class="lineNum"> 681 </span> : : else -<span class="lineNum"> 682 </span> :<span class="lineCov"> 795 : strlcpy(tmp_path, filepath, sizeof(tmp_path));</span> -<span class="lineNum"> 683 </span> : : -<span class="lineNum"> 684 </span> : : /* At this point, we should make the path is more than just the -<span class="lineNum"> 685 </span> : : * PATH_SEP. If it is not, silently return. -<span class="lineNum"> 686 </span> : : */ -<span class="lineNum"> 687 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(strlen(tmp_path) &lt; 2)</span> -<span class="lineNum"> 688 </span> : : return 1; -<span class="lineNum"> 689 </span> : : -<span class="lineNum"> 690 </span> : : /* Make sure we have a valid directory. -<span class="lineNum"> 691 </span> : : */ -<span class="lineNum"> 692 </span> :<span class="lineCov"> 795 : res = stat(tmp_path, &amp;st);</span> -<span class="lineNum"> 693 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(res != 0)</span> -<span class="lineNum"> 694 </span> : : { -<span class="lineNum"> 695 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == ENOENT)</span> -<span class="lineNum"> 696 </span> : : { -<span class="lineNum"> 697 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 698 </span> : : &quot;%s directory: %s does not exist. Attempting to create it.&quot;, -<span class="lineNum"> 699 </span> : : fp_desc, tmp_path -<span class="lineNum"> 700 </span> : : ); -<span class="lineNum"> 701 </span> : : -<span class="lineNum"> 702 </span> : : /* Directory does not exist, so attempt to create it. -<span class="lineNum"> 703 </span> : : */ -<span class="lineNum"> 704 </span> :<span class="lineNoCov"> 0 : res = make_dir_path(tmp_path);</span> -<span class="lineNum"> 705 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != 0)</span> -<span class="lineNum"> 706 </span> : : { -<span class="lineNum"> 707 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 708 </span> : : &quot;Unable to create %s directory: %s (error: %i)&quot;, -<span class="lineNum"> 709 </span> : : fp_desc, tmp_path, errno -<span class="lineNum"> 710 </span> : : ); -<span class="lineNum"> 711 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 712 </span> : : } -<span class="lineNum"> 713 </span> : : -<span class="lineNum"> 714 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 715 </span> : : &quot;Successfully created %s directory: %s&quot;, fp_desc, tmp_path -<span class="lineNum"> 716 </span> : : ); -<span class="lineNum"> 717 </span> : : } -<span class="lineNum"> 718 </span> : : else -<span class="lineNum"> 719 </span> : : { -<span class="lineNum"> 720 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 721 </span> : : &quot;Stat of %s returned error %i&quot;, tmp_path, errno -<span class="lineNum"> 722 </span> : : ); -<span class="lineNum"> 723 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 724 </span> : : } -<span class="lineNum"> 725 </span> : : } -<span class="lineNum"> 726 </span> : : else -<span class="lineNum"> 727 </span> : : { -<span class="lineNum"> 728 </span> : : /* It is a file, but is it a directory? -<span class="lineNum"> 729 </span> : : */ -<span class="lineNum"> 730 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(! S_ISDIR(st.st_mode))</span> -<span class="lineNum"> 731 </span> : : { -<span class="lineNum"> 732 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 733 </span> : : &quot;Specified %s directory: %s is NOT a directory&quot;, fp_desc, tmp_path -<span class="lineNum"> 734 </span> : : ); -<span class="lineNum"> 735 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 736 </span> : : } -<span class="lineNum"> 737 </span> : : } -<span class="lineNum"> 738 </span> : : return 1; -<span class="lineNum"> 739 </span> : : } -<a name="740"><span class="lineNum"> 740 </span> : : </a> -<span class="lineNum"> 741 </span> : : static int -<span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : make_dir_path(const char * const run_dir)</span> -<span class="lineNum"> 743 </span> : : { -<span class="lineNum"> 744 </span> : : struct stat st; -<span class="lineNum"> 745 </span> :<span class="lineNoCov"> 0 : int res = 0, len = 0;</span> -<span class="lineNum"> 746 </span> : : char tmp_path[MAX_PATH_LEN]; -<span class="lineNum"> 747 </span> : : char *ndx; -<span class="lineNum"> 748 </span> : : -<span class="lineNum"> 749 </span> :<span class="lineNoCov"> 0 : strlcpy(tmp_path, run_dir, sizeof(tmp_path));</span> -<span class="lineNum"> 750 </span> : : -<span class="lineNum"> 751 </span> :<span class="lineNoCov"> 0 : len = strlen(tmp_path);</span> -<span class="lineNum"> 752 </span> : : -<span class="lineNum"> 753 </span> : : /* Strip any trailing dir sep char. -<span class="lineNum"> 754 </span> : : */ -<span class="lineNum"> 755 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(tmp_path[len-1] == PATH_SEP)</span> -<span class="lineNum"> 756 </span> :<span class="lineNoCov"> 0 : tmp_path[len-1] = '\0';</span> -<span class="lineNum"> 757 </span> : : -<span class="lineNum"> 758 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(ndx = tmp_path+1; *ndx; ndx++)</span> -<span class="lineNum"> 759 </span> : : { -<span class="lineNum"> 760 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*ndx == '/')</span> -<span class="lineNum"> 761 </span> : : { -<span class="lineNum"> 762 </span> :<span class="lineNoCov"> 0 : *ndx = '\0';</span> -<span class="lineNum"> 763 </span> : : -<span class="lineNum"> 764 </span> : : /* Stat this part of the path to see if it is a valid directory. -<span class="lineNum"> 765 </span> : : * If it does not exist, attempt to create it. If it does, and -<span class="lineNum"> 766 </span> : : * it is a directory, go on. Otherwise, any other error cause it -<span class="lineNum"> 767 </span> : : * to bail. -<span class="lineNum"> 768 </span> : : */ -<span class="lineNum"> 769 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(tmp_path, &amp;st) != 0)</span> -<span class="lineNum"> 770 </span> : : { -<span class="lineNum"> 771 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == ENOENT)</span> -<span class="lineNum"> 772 </span> : : { -<span class="lineNum"> 773 </span> :<span class="lineNoCov"> 0 : res = mkdir(tmp_path, S_IRWXU);</span> -<span class="lineNum"> 774 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != 0)</span> -<span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 776 </span> : : -<span class="lineNum"> 777 </span> : : /* run stat() against the component since we just -<span class="lineNum"> 778 </span> : : * created it -<span class="lineNum"> 779 </span> : : */ -<span class="lineNum"> 780 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(tmp_path, &amp;st) != 0)</span> -<span class="lineNum"> 781 </span> : : { -<span class="lineNum"> 782 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 783 </span> : : &quot;Could not create component: %s of %s&quot;, tmp_path, run_dir -<span class="lineNum"> 784 </span> : : ); -<span class="lineNum"> 785 </span> :<span class="lineNoCov"> 0 : return(ENOTDIR);</span> -<span class="lineNum"> 786 </span> : : } -<span class="lineNum"> 787 </span> : : } -<span class="lineNum"> 788 </span> : : } -<span class="lineNum"> 789 </span> : : -<span class="lineNum"> 790 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! S_ISDIR(st.st_mode))</span> -<span class="lineNum"> 791 </span> : : { -<span class="lineNum"> 792 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 793 </span> : : &quot;Component: %s of %s is NOT a directory&quot;, tmp_path, run_dir -<span class="lineNum"> 794 </span> : : ); -<span class="lineNum"> 795 </span> :<span class="lineNoCov"> 0 : return(ENOTDIR);</span> -<span class="lineNum"> 796 </span> : : } -<span class="lineNum"> 797 </span> : : -<span class="lineNum"> 798 </span> :<span class="lineNoCov"> 0 : *ndx = '/';</span> -<span class="lineNum"> 799 </span> : : } -<span class="lineNum"> 800 </span> : : } -<span class="lineNum"> 801 </span> : : -<span class="lineNum"> 802 </span> :<span class="lineNoCov"> 0 : res = mkdir(tmp_path, S_IRWXU);</span> -<span class="lineNum"> 803 </span> : : -<span class="lineNum"> 804 </span> :<span class="lineNoCov"> 0 : return(res);</span> -<span class="lineNum"> 805 </span> : : } -<span class="lineNum"> 806 </span> : : -<span class="lineNum"> 807 </span> : : /* Become a daemon: fork(), start a new session, chdir &quot;/&quot;, -<span class="lineNum"> 808 </span> : : * and close unneeded standard filehandles. -<a name="809"><span class="lineNum"> 809 </span> : : */</a> -<span class="lineNum"> 810 </span> : : static void -<span class="lineNum"> 811 </span> :<span class="lineNoCov"> 0 : daemonize_process(fko_srv_options_t * const opts)</span> -<span class="lineNum"> 812 </span> : : { -<span class="lineNum"> 813 </span> : : pid_t pid, old_pid; -<span class="lineNum"> 814 </span> : : -<span class="lineNum"> 815 </span> : : /* Reset the our umask -<span class="lineNum"> 816 </span> : : */ -<span class="lineNum"> 817 </span> :<span class="lineNoCov"> 0 : umask(0);</span> -<span class="lineNum"> 818 </span> : : -<span class="lineNum"> 819 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((pid = fork()) &lt; 0)</span> -<span class="lineNum"> 820 </span> : : { -<span class="lineNum"> 821 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable to fork: &quot;);</span> -<span class="lineNum"> 822 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 823 </span> : : } -<span class="lineNum"> 824 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (pid != 0) /* parent */</span> -<span class="lineNum"> 825 </span> : : { -<span class="lineNum"> 826 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS);</span> -<span class="lineNum"> 827 </span> : : } -<span class="lineNum"> 828 </span> : : -<span class="lineNum"> 829 </span> : : /* Child process from here on out */ -<span class="lineNum"> 830 </span> : : -<span class="lineNum"> 831 </span> : : /* Start a new session -<span class="lineNum"> 832 </span> : : */ -<span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : setsid();</span> -<span class="lineNum"> 834 </span> : : -<span class="lineNum"> 835 </span> : : /* Create the PID file (or be blocked by an existing one). -<span class="lineNum"> 836 </span> : : */ -<span class="lineNum"> 837 </span> :<span class="lineNoCov"> 0 : old_pid = write_pid_file(opts);</span> -<span class="lineNum"> 838 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid &gt; 0)</span> -<span class="lineNum"> 839 </span> : : { -<span class="lineNum"> 840 </span> :<span class="lineNoCov"> 0 : fprintf(stderr,</span> -<span class="lineNum"> 841 </span> : : &quot;[*] An instance of fwknopd is already running: (PID=%i).\n&quot;, old_pid -<span class="lineNum"> 842 </span> : : ); -<span class="lineNum"> 843 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 844 </span> : : } -<span class="lineNum"> 845 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(old_pid &lt; 0)</span> -<span class="lineNum"> 846 </span> : : { -<span class="lineNum"> 847 </span> :<span class="lineNoCov"> 0 : fprintf(stderr,</span> -<span class="lineNum"> 848 </span> : : &quot;[*] PID file error. The lock may not be effective.\n&quot;); -<span class="lineNum"> 849 </span> : : } -<span class="lineNum"> 850 </span> : : -<span class="lineNum"> 851 </span> : : /* Chdir to the root of the filesystem -<span class="lineNum"> 852 </span> : : */ -<span class="lineNum"> 853 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((chdir(&quot;/&quot;)) &lt; 0) {</span> -<span class="lineNum"> 854 </span> :<span class="lineNoCov"> 0 : perror(&quot;Could not chdir() to /: &quot;);</span> -<span class="lineNum"> 855 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 856 </span> : : } -<span class="lineNum"> 857 </span> : : -<span class="lineNum"> 858 </span> : : /* Close un-needed file handles -<span class="lineNum"> 859 </span> : : */ -<span class="lineNum"> 860 </span> :<span class="lineNoCov"> 0 : close(STDIN_FILENO);</span> -<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : close(STDOUT_FILENO);</span> -<span class="lineNum"> 862 </span> :<span class="lineNoCov"> 0 : close(STDERR_FILENO);</span> -<span class="lineNum"> 863 </span> : : -<span class="lineNum"> 864 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 865 </span> : : } -<a name="866"><span class="lineNum"> 866 </span> : : </a> -<span class="lineNum"> 867 </span> : : static int -<span class="lineNum"> 868 </span> :<span class="lineCov"> 249 : write_pid_file(fko_srv_options_t *opts)</span> -<span class="lineNum"> 869 </span> : : { -<span class="lineNum"> 870 </span> : : pid_t old_pid, my_pid; -<span class="lineNum"> 871 </span> : : int op_fd, lck_res, num_bytes; -<span class="lineNum"> 872 </span> :<span class="lineCov"> 249 : char buf[PID_BUFLEN] = {0};</span> -<span class="lineNum"> 873 </span> : : -<span class="lineNum"> 874 </span> : : /* Reset errno (just in case) -<span class="lineNum"> 875 </span> : : */ -<span class="lineNum"> 876 </span> :<span class="lineCov"> 249 : errno = 0;</span> -<span class="lineNum"> 877 </span> : : -<span class="lineNum"> 878 </span> : : /* Open the PID file -<span class="lineNum"> 879 </span> : : */ -<span class="lineNum"> 880 </span> :<span class="lineCov"> 249 : op_fd = open(</span> -<span class="lineNum"> 881 </span> :<span class="lineCov"> 249 : opts-&gt;config[CONF_FWKNOP_PID_FILE], O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR</span> -<span class="lineNum"> 882 </span> : : ); -<span class="lineNum"> 883 </span> : : -<span class="lineNum"> 884 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(op_fd == -1)</span> -<span class="lineNum"> 885 </span> : : { -<span class="lineNum"> 886 </span> :<span class="lineNoCov"> 0 : perror(&quot;Error trying to open PID file: &quot;);</span> -<span class="lineNum"> 887 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 888 </span> : : } -<span class="lineNum"> 889 </span> : : -<span class="lineNum"> 890 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(fcntl(op_fd, F_SETFD, FD_CLOEXEC) == -1)</span> -<span class="lineNum"> 891 </span> : : { -<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : close(op_fd);</span> -<span class="lineNum"> 893 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unexpected error from fcntl: &quot;);</span> -<span class="lineNum"> 894 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 895 </span> : : } -<span class="lineNum"> 896 </span> : : -<span class="lineNum"> 897 </span> : : /* Attempt to lock the PID file. If we get an EWOULDBLOCK -<span class="lineNum"> 898 </span> : : * error, another instance already has the lock. So we grab -<span class="lineNum"> 899 </span> : : * the pid from the existing lock file, complain and bail. -<span class="lineNum"> 900 </span> : : */ -<span class="lineNum"> 901 </span> :<span class="lineCov"> 249 : lck_res = lockf(op_fd, F_TLOCK, 0);</span> -<span class="lineNum"> 902 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(lck_res == -1)</span> -<span class="lineNum"> 903 </span> : : { -<span class="lineNum"> 904 </span> :<span class="lineNoCov"> 0 : close(op_fd);</span> -<span class="lineNum"> 905 </span> : : -<span class="lineNum"> 906 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno != EAGAIN)</span> -<span class="lineNum"> 907 </span> : : { -<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unexpected error from lockf: &quot;);</span> -<span class="lineNum"> 909 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 910 </span> : : } -<span class="lineNum"> 911 </span> : : -<span class="lineNum"> 912 </span> : : /* Look for an existing lock holder. If we get a pid return it. -<span class="lineNum"> 913 </span> : : */ -<span class="lineNum"> 914 </span> :<span class="lineNoCov"> 0 : old_pid = get_running_pid(opts);</span> -<span class="lineNum"> 915 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(old_pid)</span> -<span class="lineNum"> 916 </span> : : return old_pid; -<span class="lineNum"> 917 </span> : : -<span class="lineNum"> 918 </span> : : /* Otherwise, consider it an error. -<span class="lineNum"> 919 </span> : : */ -<span class="lineNum"> 920 </span> :<span class="lineNoCov"> 0 : perror(&quot;Unable read existing PID file: &quot;);</span> -<span class="lineNum"> 921 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 922 </span> : : } -<span class="lineNum"> 923 </span> : : -<span class="lineNum"> 924 </span> : : /* Write our PID to the file -<span class="lineNum"> 925 </span> : : */ -<span class="lineNum"> 926 </span> :<span class="lineCov"> 249 : my_pid = getpid();</span> -<span class="lineNum"> 927 </span> : : snprintf(buf, PID_BUFLEN, &quot;%i\n&quot;, my_pid); -<span class="lineNum"> 928 </span> : : -<span class="lineNum"> 929 </span> :<span class="lineCov"> 249 : log_msg(LOG_DEBUG, &quot;[+] Writing my PID (%i) to the lock file: %s&quot;,</span> -<span class="lineNum"> 930 </span> : : my_pid, opts-&gt;config[CONF_FWKNOP_PID_FILE]); -<span class="lineNum"> 931 </span> : : -<span class="lineNum"> 932 </span> :<span class="lineCov"> 249 : num_bytes = write(op_fd, buf, strlen(buf));</span> -<span class="lineNum"> 933 </span> : : -<span class="lineNum"> 934 </span>[<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(errno || num_bytes != strlen(buf))</span> -<span class="lineNum"> 935 </span> :<span class="lineNoCov"> 0 : perror(&quot;Lock may not be valid. PID file write error: &quot;);</span> -<span class="lineNum"> 936 </span> : : -<span class="lineNum"> 937 </span> : : /* Sync/flush regardless... -<span class="lineNum"> 938 </span> : : */ -<span class="lineNum"> 939 </span> :<span class="lineCov"> 249 : fsync(op_fd);</span> -<span class="lineNum"> 940 </span> : : -<span class="lineNum"> 941 </span> : : /* Put the lock file discriptor in out options struct so any -<span class="lineNum"> 942 </span> : : * child processes we my spawn can close and release it. -<span class="lineNum"> 943 </span> : : */ -<span class="lineNum"> 944 </span> :<span class="lineCov"> 249 : opts-&gt;lock_fd = op_fd;</span> -<span class="lineNum"> 945 </span> : : -<span class="lineNum"> 946 </span> :<span class="lineCov"> 249 : return 0;</span> -<span class="lineNum"> 947 </span> : : } -<a name="948"><span class="lineNum"> 948 </span> : : </a> -<span class="lineNum"> 949 </span> : : static pid_t -<span class="lineNum"> 950 </span> :<span class="lineCov"> 249 : get_running_pid(const fko_srv_options_t *opts)</span> -<span class="lineNum"> 951 </span> : : { -<span class="lineNum"> 952 </span> :<span class="lineCov"> 249 : int op_fd, is_err, bytes_read = 0;</span> -<span class="lineNum"> 953 </span> :<span class="lineCov"> 249 : char buf[PID_BUFLEN] = {0};</span> -<span class="lineNum"> 954 </span> :<span class="lineCov"> 249 : pid_t rpid = 0;</span> -<span class="lineNum"> 955 </span> : : -<span class="lineNum"> 956 </span> : : -<span class="lineNum"> 957 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(verify_file_perms_ownership(opts-&gt;config[CONF_FWKNOP_PID_FILE]) != 1)</span> -<span class="lineNum"> 958 </span> : : { -<span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;verify_file_perms_ownership() error\n&quot;);</span> -<span class="lineNum"> 960 </span> :<span class="lineNoCov"> 0 : return(rpid);</span> -<span class="lineNum"> 961 </span> : : } -<span class="lineNum"> 962 </span> : : -<span class="lineNum"> 963 </span> :<span class="lineCov"> 498 : op_fd = open(opts-&gt;config[CONF_FWKNOP_PID_FILE], O_RDONLY);</span> -<span class="lineNum"> 964 </span> : : -<span class="lineNum"> 965 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(op_fd == -1)</span> -<span class="lineNum"> 966 </span> : : { -<span class="lineNum"> 967 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((opts-&gt;foreground != 0) &amp;&amp; (opts-&gt;verbose != 0))</span> -<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : perror(&quot;Error trying to open PID file: &quot;);</span> -<span class="lineNum"> 969 </span> : : return(rpid); -<span class="lineNum"> 970 </span> : : } -<span class="lineNum"> 971 </span> : : -<span class="lineNum"> 972 </span> :<span class="lineCov"> 249 : bytes_read = read(op_fd, buf, PID_BUFLEN);</span> -<span class="lineNum"> 973 </span> [<span class="branchCov" title="Branch 0 was taken 249 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 249 : if (bytes_read &gt; 0)</span> -<span class="lineNum"> 974 </span> : : { -<span class="lineNum"> 975 </span> :<span class="lineCov"> 249 : buf[PID_BUFLEN-1] = '\0';</span> -<span class="lineNum"> 976 </span> : : /* max pid value is configurable on Linux -<span class="lineNum"> 977 </span> : : */ -<span class="lineNum"> 978 </span> :<span class="lineCov"> 249 : rpid = (pid_t) strtol_wrapper(buf, 0, (2 &lt;&lt; 30),</span> -<span class="lineNum"> 979 </span> : : NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 980 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 249 times"> + </span>]:<span class="lineCov"> 249 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 981 </span> :<span class="lineNoCov"> 0 : rpid = 0;</span> -<span class="lineNum"> 982 </span> : : } -<span class="lineNum"> 983 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (bytes_read &lt; 0)</span> -<span class="lineNum"> 984 </span> :<span class="lineNoCov"> 0 : perror(&quot;Error trying to read() PID file: &quot;);</span> -<span class="lineNum"> 985 </span> : : -<span class="lineNum"> 986 </span> :<span class="lineCov"> 249 : close(op_fd);</span> -<span class="lineNum"> 987 </span> : : -<span class="lineNum"> 988 </span> :<span class="lineCov"> 249 : return(rpid);</span> -<span class="lineNum"> 989 </span> : : } -<span class="lineNum"> 990 </span> : : -<span class="lineNum"> 991 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 992 </span> : : static void -<span class="lineNum"> 993 </span> : : enable_fault_injections(fko_srv_options_t * const opts) -<span class="lineNum"> 994 </span> : : { -<span class="lineNum"> 995 </span> : : if(opts-&gt;config[CONF_FAULT_INJECTION_TAG] != NULL) -<span class="lineNum"> 996 </span> : : { -<span class="lineNum"> 997 </span> : : if(opts-&gt;verbose) -<span class="lineNum"> 998 </span> : : log_msg(LOG_INFO, &quot;Enable fault injection tag: %s&quot;, -<span class="lineNum"> 999 </span> : : opts-&gt;config[CONF_FAULT_INJECTION_TAG]); -<span class="lineNum"> 1000 </span> : : if(fiu_init(0) != 0) -<span class="lineNum"> 1001 </span> : : { -<span class="lineNum"> 1002 </span> : : fprintf(stderr, &quot;[*] Could not enable fault injection tag: %s\n&quot;, -<span class="lineNum"> 1003 </span> : : opts-&gt;config[CONF_FAULT_INJECTION_TAG]); -<span class="lineNum"> 1004 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1005 </span> : : } -<span class="lineNum"> 1006 </span> : : if (fiu_enable(opts-&gt;config[CONF_FAULT_INJECTION_TAG], 1, NULL, 0) != 0) -<span class="lineNum"> 1007 </span> : : { -<span class="lineNum"> 1008 </span> : : fprintf(stderr, &quot;[*] Could not enable fault injection tag: %s\n&quot;, -<span class="lineNum"> 1009 </span> : : opts-&gt;config[CONF_FAULT_INJECTION_TAG]); -<span class="lineNum"> 1010 </span> : : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); -<span class="lineNum"> 1011 </span> : : } -<span class="lineNum"> 1012 </span> : : } -<span class="lineNum"> 1013 </span> : : return; -<span class="lineNum"> 1014 </span> : : } -<span class="lineNum"> 1015 </span> : : #endif -<span class="lineNum"> 1016 </span> : : -<span class="lineNum"> 1017 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html deleted file mode 100644 index a03d2dc6..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd_errors.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd_errors.c<span style="font-size: 80%;"> (<a href="fwknopd_errors.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="fwknopd_errors.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#110">dump_server_errors</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#99">get_errstr</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#35">fwknopd_errstr</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html deleted file mode 100644 index 86f733e6..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.func.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd_errors.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd_errors.c<span style="font-size: 80%;"> (<a href="fwknopd_errors.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="fwknopd_errors.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#110">dump_server_errors</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#35">fwknopd_errstr</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="fwknopd_errors.c.gcov.html#99">get_errstr</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html deleted file mode 100644 index a8aa2f2b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/fwknopd_errors.c.gcov.html +++ /dev/null @@ -1,217 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/fwknopd_errors.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - fwknopd_errors.c<span style="font-size: 80%;"> (source / <a href="fwknopd_errors.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">24</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: errors.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Error message functions for fwknopd -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_errors.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : /* Return a string describing the meaning of the given error code. -<a name="35"><span class="lineNum"> 35 </span> : : */</a> -<span class="lineNum"> 36 </span> : : static const char* -<span class="lineNum"> 37 </span> :<span class="lineNoCov"> 0 : fwknopd_errstr(const int err_code)</span> -<span class="lineNum"> 38 </span> : : { -<span class="lineNum"> 39 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span> :<span class="lineNoCov"> 0 : switch (err_code)</span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span><span class="branchNoExec" title="Branch 8 was not executed"> # </span> -<span class="lineNum"> </span><span class="branchNoExec" title="Branch 9 was not executed"> # </span><span class="branchNoExec" title="Branch 10 was not executed"> # </span><span class="branchNoExec" title="Branch 11 was not executed"> # </span><span class="branchNoExec" title="Branch 12 was not executed"> # </span><span class="branchNoExec" title="Branch 13 was not executed"> # </span> -<span class="lineNum"> </span> <span class="branchNoExec" title="Branch 14 was not executed"> # </span><span class="branchNoExec" title="Branch 15 was not executed"> # </span><span class="branchNoExec" title="Branch 16 was not executed"> # </span><span class="branchNoExec" title="Branch 17 was not executed"> # </span>] -<span class="lineNum"> 40 </span> : : { -<span class="lineNum"> 41 </span> : : case 0: -<span class="lineNum"> 42 </span> : : return(&quot;Success&quot;); -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : case SPA_MSG_BAD_DATA: -<span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : return(&quot;Data is not a valid SPA message format&quot;);</span> -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> : : case SPA_MSG_LEN_TOO_SMALL: -<span class="lineNum"> 48 </span> :<span class="lineNoCov"> 0 : return(&quot;Not enough data to be a valid SPA message&quot;);</span> -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : case SPA_MSG_NOT_SPA_DATA: -<span class="lineNum"> 51 </span> :<span class="lineNoCov"> 0 : return(&quot;Data is not an SPA message&quot;);</span> -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> : : case SPA_MSG_HTTP_NOT_ENABLED: -<span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : return(&quot;SPA via HTTP request, but ENABLE_SPA_OVER_HTTP is not set&quot;);</span> -<span class="lineNum"> 55 </span> : : -<span class="lineNum"> 56 </span> : : case SPA_MSG_FKO_CTX_ERROR: -<span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : return(&quot;Error creating FKO context for incoming data.&quot;);</span> -<span class="lineNum"> 58 </span> : : -<span class="lineNum"> 59 </span> : : case SPA_MSG_DIGEST_ERROR: -<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : return(&quot;Unable to retrieve digest from the SPA data.&quot;);</span> -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> : : case SPA_MSG_DIGEST_CACHE_ERROR: -<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : return(&quot;Error trying to access the digest.cache file&quot;);</span> -<span class="lineNum"> 64 </span> : : -<span class="lineNum"> 65 </span> : : case SPA_MSG_REPLAY: -<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : return(&quot;Detected SPA message replay&quot;);</span> -<span class="lineNum"> 67 </span> : : -<span class="lineNum"> 68 </span> : : case SPA_MSG_TOO_OLD: -<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : return(&quot;SPA message timestamp is outside the allowable window&quot;);</span> -<span class="lineNum"> 70 </span> : : -<span class="lineNum"> 71 </span> : : case SPA_MSG_ACCESS_DENIED: -<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : return(&quot;SPA message did not pass access checks&quot;);</span> -<span class="lineNum"> 73 </span> : : -<span class="lineNum"> 74 </span> : : case SPA_MSG_COMMAND_ERROR: -<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : return(&quot;An error occurred while executing an SPA command message&quot;);</span> -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : case SPA_MSG_NOT_SUPPORTED: -<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : return(&quot;Unsupported SPA message operation&quot;);</span> -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> : : case SPA_MSG_ERROR: -<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : return(&quot;General SPA message processing error&quot;);</span> -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> : : case FW_RULE_ADD_ERROR: -<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : return(&quot;An error occurred while tring to add a firewall rule&quot;);</span> -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> : : case FW_RULE_DELETE_ERROR: -<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : return(&quot;An error occurred while tring to delete a firewall rule&quot;);</span> -<span class="lineNum"> 88 </span> : : -<span class="lineNum"> 89 </span> : : case FW_RULE_UNKNOWN_ERROR: -<span class="lineNum"> 90 </span> :<span class="lineNoCov"> 0 : return(&quot;Unknown/unclassified firewall rule processing error&quot;);</span> -<span class="lineNum"> 91 </span> : : } -<span class="lineNum"> 92 </span> : : -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : return(&quot;Undefined/unknown fwknopd Error&quot;);</span> -<span class="lineNum"> 94 </span> : : } -<span class="lineNum"> 95 </span> : : -<span class="lineNum"> 96 </span> : : /* Attempt to determine the error code type and send the appropriate -<span class="lineNum"> 97 </span> : : * response. Basically assume it is a libfko error if it is not an fwknopd -<span class="lineNum"> 98 </span> : : * error code. -<a name="99"><span class="lineNum"> 99 </span> : : */</a> -<span class="lineNum"> 100 </span> : : const char* -<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : get_errstr(const int err_code)</span> -<span class="lineNum"> 102 </span> : : { -<span class="lineNum"> 103 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! IS_FWKNOPD_ERROR(err_code))</span> -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : return(fko_errstr(err_code));</span> -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : return(fwknopd_errstr(err_code));</span> -<span class="lineNum"> 107 </span> : : } -<span class="lineNum"> 108 </span> : : -<span class="lineNum"> 109 </span> : : /* print all server errors (from server/fwknopd_errors.c) to stdout -<a name="110"><span class="lineNum"> 110 </span> : : */</a> -<span class="lineNum"> 111 </span> : : void -<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : dump_server_errors(void)</span> -<span class="lineNum"> 113 </span> : : { -<span class="lineNum"> 114 </span> : : int i; -<span class="lineNum"> 115 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=SPA_MSG_BAD_DATA; i&lt;=SPA_MSG_ERROR; i++)</span> -<span class="lineNum"> 116 </span> : : { -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;err code: %d, err string: '%s'\n&quot;,</span> -<span class="lineNum"> 118 </span> : : i, fwknopd_errstr(i)); -<span class="lineNum"> 119 </span> : : } -<span class="lineNum"> 120 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=FW_RULE_ADD_ERROR; i&lt;=FW_RULE_UNKNOWN_ERROR; i++)</span> -<span class="lineNum"> 121 </span> : : { -<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : fprintf(stdout, &quot;err code: %d, err string: '%s'\n&quot;,</span> -<span class="lineNum"> 123 </span> : : i, fwknopd_errstr(i)); -<span class="lineNum"> 124 </span> : : } -<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : fflush(stdout);</span> -<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 127 </span> : : } -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html deleted file mode 100644 index b42a6b11..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func-sort-c.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/incoming_spa.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - incoming_spa.c<span style="font-size: 80%;"> (<a href="incoming_spa.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">344</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">230</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="incoming_spa.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#145">get_raw_digest</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#233">get_spa_data_fields</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#276">is_src_match</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#291">incoming_spa</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#51">preprocess_spa_data.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html deleted file mode 100644 index 2f83220d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.func.html +++ /dev/null @@ -1,101 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/incoming_spa.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - incoming_spa.c<span style="font-size: 80%;"> (<a href="incoming_spa.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">344</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">230</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="incoming_spa.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#145">get_raw_digest</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#233">get_spa_data_fields</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#291">incoming_spa</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#276">is_src_match</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="incoming_spa.c.gcov.html#51">preprocess_spa_data.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html deleted file mode 100644 index c8cdbbff..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/incoming_spa.c.gcov.html +++ /dev/null @@ -1,1063 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/incoming_spa.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - incoming_spa.c<span style="font-size: 80%;"> (source / <a href="incoming_spa.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">344</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">5</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">230</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: incoming_spa.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Process an incoming SPA data packet for fwknopd. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;netinet_common.h&quot; -<span class="lineNum"> 33 </span> : : -<span class="lineNum"> 34 </span> : : #if HAVE_SYS_WAIT_H -<span class="lineNum"> 35 </span> : : #include &lt;sys/wait.h&gt; -<span class="lineNum"> 36 </span> : : #endif -<span class="lineNum"> 37 </span> : : -<span class="lineNum"> 38 </span> : : #include &quot;incoming_spa.h&quot; -<span class="lineNum"> 39 </span> : : #include &quot;access.h&quot; -<span class="lineNum"> 40 </span> : : #include &quot;extcmd.h&quot; -<span class="lineNum"> 41 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 42 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 43 </span> : : #include &quot;fw_util.h&quot; -<span class="lineNum"> 44 </span> : : #include &quot;fwknopd_errors.h&quot; -<span class="lineNum"> 45 </span> : : #include &quot;replay_cache.h&quot; -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> : : #define CTX_DUMP_BUFSIZE 4096 /*!&lt; Maximum size allocated to a FKO context dump */ -<span class="lineNum"> 48 </span> : : -<span class="lineNum"> 49 </span> : : /* Validate and in some cases preprocess/reformat the SPA data. Return an -<span class="lineNum"> 50 </span> : : * error code value if there is any indication the data is not valid spa data. -<a name="51"><span class="lineNum"> 51 </span> : : */</a> -<span class="lineNum"> 52 </span> : : static int -<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : preprocess_spa_data(fko_srv_options_t *opts, const char *src_ip)</span> -<span class="lineNum"> 54 </span> : : { -<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : spa_pkt_info_t *spa_pkt = &amp;(opts-&gt;spa_pkt);</span> -<span class="lineNum"> 56 </span> : : -<span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : char *ndx = (char *)&amp;(spa_pkt-&gt;packet_data);</span> -<span class="lineNum"> 58 </span> :<span class="lineNoCov"> 0 : int pkt_data_len = spa_pkt-&gt;packet_data_len;</span> -<span class="lineNum"> 59 </span> : : int i; -<span class="lineNum"> 60 </span> : : -<span class="lineNum"> 61 </span> : : /* At this point, we can reset the packet data length to 0. This is our -<span class="lineNum"> 62 </span> : : * indicator to the rest of the program that we do not have a current -<span class="lineNum"> 63 </span> : : * spa packet to process (after this one that is). -<span class="lineNum"> 64 </span> : : */ -<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : spa_pkt-&gt;packet_data_len = 0;</span> -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> : : /* These two checks are already done in process_packet(), but this is a -<span class="lineNum"> 68 </span> : : * defensive measure to run them again here -<span class="lineNum"> 69 </span> : : */ -<span class="lineNum"> 70 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &lt; MIN_SPA_DATA_SIZE)</span> -<span class="lineNum"> 71 </span> : : return(SPA_MSG_BAD_DATA); -<span class="lineNum"> 72 </span> : : -<span class="lineNum"> 73 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &gt; MAX_SPA_PACKET_LEN)</span> -<span class="lineNum"> 74 </span> : : return(SPA_MSG_BAD_DATA); -<span class="lineNum"> 75 </span> : : -<span class="lineNum"> 76 </span> : : /* Ignore any SPA packets that contain the Rijndael or GnuPG prefixes -<span class="lineNum"> 77 </span> : : * since an attacker might have tacked them on to a previously seen -<span class="lineNum"> 78 </span> : : * SPA packet in an attempt to get past the replay check. And, we're -<span class="lineNum"> 79 </span> : : * no worse off since a legitimate SPA packet that happens to include -<span class="lineNum"> 80 </span> : : * a prefix after the outer one is stripped off won't decrypt properly -<span class="lineNum"> 81 </span> : : * anyway because libfko would not add a new one. -<span class="lineNum"> 82 </span> : : */ -<span class="lineNum"> 83 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(constant_runtime_cmp(ndx, B64_RIJNDAEL_SALT, B64_RIJNDAEL_SALT_STR_LEN) == 0)</span> -<span class="lineNum"> 84 </span> : : return(SPA_MSG_BAD_DATA); -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &gt; MIN_GNUPG_MSG_SIZE</span> -<span class="lineNum"> 87 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; constant_runtime_cmp(ndx, B64_GPG_PREFIX, B64_GPG_PREFIX_STR_LEN) == 0)</span> -<span class="lineNum"> 88 </span> : : return(SPA_MSG_BAD_DATA); -<span class="lineNum"> 89 </span> : : -<span class="lineNum"> 90 </span> : : /* Detect and parse out SPA data from an HTTP request. If the SPA data -<span class="lineNum"> 91 </span> : : * starts with &quot;GET /&quot; and the user agent starts with &quot;Fwknop&quot;, then -<span class="lineNum"> 92 </span> : : * assume it is a SPA over HTTP request. -<span class="lineNum"> 93 </span> : : */ -<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_SPA_OVER_HTTP], &quot;Y&quot;, 1) == 0</span> -<span class="lineNum"> 95 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncasecmp(ndx, &quot;GET /&quot;, 5) == 0</span> -<span class="lineNum"> 96 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strstr(ndx, &quot;User-Agent: Fwknop&quot;) != NULL)</span> -<span class="lineNum"> 97 </span> : : { -<span class="lineNum"> 98 </span> : : /* This looks like an HTTP request, so let's see if we are -<span class="lineNum"> 99 </span> : : * configured to accept such request and if so, find the SPA -<span class="lineNum"> 100 </span> : : * data. -<span class="lineNum"> 101 </span> : : */ -<span class="lineNum"> 102 </span> : : -<span class="lineNum"> 103 </span> : : /* Now extract, adjust (convert characters translated by the fwknop -<span class="lineNum"> 104 </span> : : * client), and reset the SPA message itself. -<span class="lineNum"> 105 </span> : : */ -<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : strlcpy((char *)spa_pkt-&gt;packet_data, ndx+5, pkt_data_len);</span> -<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : pkt_data_len -= 5;</span> -<span class="lineNum"> 108 </span> : : -<span class="lineNum"> 109 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;pkt_data_len; i++)</span> -<span class="lineNum"> 110 </span> : : { -<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(isspace(*ndx)) /* The first space marks the end of the req */</span> -<span class="lineNum"> 112 </span> : : { -<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : *ndx = '\0';</span> -<span class="lineNum"> 114 </span> : : break; -<span class="lineNum"> 115 </span> : : } -<span class="lineNum"> 116 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(*ndx == '-') /* Convert '-' to '+' */</span> -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : *ndx = '+';</span> -<span class="lineNum"> 118 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(*ndx == '_') /* Convert '_' to '/' */</span> -<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : *ndx = '/';</span> -<span class="lineNum"> 120 </span> : : -<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : ndx++;</span> -<span class="lineNum"> 122 </span> : : } -<span class="lineNum"> 123 </span> : : -<span class="lineNum"> 124 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(i &lt; MIN_SPA_DATA_SIZE)</span> -<span class="lineNum"> 125 </span> : : return(SPA_MSG_BAD_DATA); -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : spa_pkt-&gt;packet_data_len = pkt_data_len = i;</span> -<span class="lineNum"> 128 </span> : : } -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> : : /* Require base64-encoded data -<span class="lineNum"> 131 </span> : : */ -<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_base64(spa_pkt-&gt;packet_data, pkt_data_len))</span> -<span class="lineNum"> 133 </span> : : return(SPA_MSG_NOT_SPA_DATA); -<span class="lineNum"> 134 </span> : : -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> : : /* --DSS: Are there other checks we can do here ??? */ -<span class="lineNum"> 137 </span> : : -<span class="lineNum"> 138 </span> : : /* If we made it here, we have no reason to assume this is not SPA data -<span class="lineNum"> 139 </span> : : * (at least until we come up with more checks). -<span class="lineNum"> 140 </span> : : */ -<span class="lineNum"> 141 </span> : : return(FKO_SUCCESS); -<span class="lineNum"> 142 </span> : : } -<span class="lineNum"> 143 </span> : : -<span class="lineNum"> 144 </span> : : /* For replay attack detection -<a name="145"><span class="lineNum"> 145 </span> : : */</a> -<span class="lineNum"> 146 </span> : : static int -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : get_raw_digest(char **digest, char *pkt_data)</span> -<span class="lineNum"> 148 </span> : : { -<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : fko_ctx_t ctx = NULL;</span> -<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : char *tmp_digest = NULL;</span> -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : short raw_digest_type = -1;</span> -<span class="lineNum"> 153 </span> : : -<span class="lineNum"> 154 </span> : : /* initialize an FKO context with no decryption key just so -<span class="lineNum"> 155 </span> : : * we can get the outer message digest -<span class="lineNum"> 156 </span> : : */ -<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : res = fko_new_with_data(&amp;ctx, (char *)pkt_data, NULL, 0,</span> -<span class="lineNum"> 158 </span> : : FKO_DEFAULT_ENC_MODE, NULL, 0, 0); -<span class="lineNum"> 159 </span> : : -<span class="lineNum"> 160 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 161 </span> : : { -<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error initializing FKO context from SPA data: %s&quot;,</span> -<span class="lineNum"> 163 </span> : : fko_errstr(res)); -<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 165 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_FKO_CTX_ERROR);</span> -<span class="lineNum"> 167 </span> : : } -<span class="lineNum"> 168 </span> : : -<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : res = fko_set_raw_spa_digest_type(ctx, FKO_DEFAULT_DIGEST);</span> -<span class="lineNum"> 170 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 171 </span> : : { -<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error setting digest type for SPA data: %s&quot;,</span> -<span class="lineNum"> 173 </span> : : fko_errstr(res)); -<span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> -<span class="lineNum"> 177 </span> : : } -<span class="lineNum"> 178 </span> : : -<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : res = fko_get_raw_spa_digest_type(ctx, &amp;raw_digest_type);</span> -<span class="lineNum"> 180 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 181 </span> : : { -<span class="lineNum"> 182 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error getting digest type for SPA data: %s&quot;,</span> -<span class="lineNum"> 183 </span> : : fko_errstr(res)); -<span class="lineNum"> 184 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> -<span class="lineNum"> 187 </span> : : } -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> : : /* Make sure the digest type is what we expect -<span class="lineNum"> 190 </span> : : */ -<span class="lineNum"> 191 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(raw_digest_type != FKO_DEFAULT_DIGEST)</span> -<span class="lineNum"> 192 </span> : : { -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error setting digest type for SPA data: %s&quot;,</span> -<span class="lineNum"> 194 </span> : : fko_errstr(res)); -<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> -<span class="lineNum"> 198 </span> : : } -<span class="lineNum"> 199 </span> : : -<span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : res = fko_set_raw_spa_digest(ctx);</span> -<span class="lineNum"> 201 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 202 </span> : : { -<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error setting digest for SPA data: %s&quot;,</span> -<span class="lineNum"> 204 </span> : : fko_errstr(res)); -<span class="lineNum"> 205 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 206 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> -<span class="lineNum"> 208 </span> : : } -<span class="lineNum"> 209 </span> : : -<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : res = fko_get_raw_spa_digest(ctx, &amp;tmp_digest);</span> -<span class="lineNum"> 211 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 212 </span> : : { -<span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error getting digest from SPA data: %s&quot;,</span> -<span class="lineNum"> 214 </span> : : fko_errstr(res)); -<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_ERROR);</span> -<span class="lineNum"> 218 </span> : : } -<span class="lineNum"> 219 </span> : : -<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : *digest = strdup(tmp_digest);</span> -<span class="lineNum"> 221 </span> : : -<span class="lineNum"> 222 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (*digest == NULL)</span> -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : res = SPA_MSG_ERROR; /* really a strdup() memory allocation problem */</span> -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : fko_destroy(ctx);</span> -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 227 </span> : : -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : return res;</span> -<span class="lineNum"> 229 </span> : : } -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> : : -<span class="lineNum"> 232 </span> : : /* Popluate a spa_data struct from an initialized (and populated) FKO context. -<a name="233"><span class="lineNum"> 233 </span> : : */</a> -<span class="lineNum"> 234 </span> : : static int -<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : get_spa_data_fields(fko_ctx_t ctx, spa_data_t *spdat)</span> -<span class="lineNum"> 236 </span> : : { -<span class="lineNum"> 237 </span> :<span class="lineNoCov"> 0 : int res = FKO_SUCCESS;</span> -<span class="lineNum"> 238 </span> : : -<span class="lineNum"> 239 </span> :<span class="lineNoCov"> 0 : res = fko_get_username(ctx, &amp;(spdat-&gt;username));</span> -<span class="lineNum"> 240 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 241 </span> : : return(res); -<span class="lineNum"> 242 </span> : : -<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : res = fko_get_timestamp(ctx, &amp;(spdat-&gt;timestamp));</span> -<span class="lineNum"> 244 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 245 </span> : : return(res); -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : res = fko_get_version(ctx, &amp;(spdat-&gt;version));</span> -<span class="lineNum"> 248 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 249 </span> : : return(res); -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_message_type(ctx, &amp;(spdat-&gt;message_type));</span> -<span class="lineNum"> 252 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 253 </span> : : return(res); -<span class="lineNum"> 254 </span> : : -<span class="lineNum"> 255 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_message(ctx, &amp;(spdat-&gt;spa_message));</span> -<span class="lineNum"> 256 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 257 </span> : : return(res); -<span class="lineNum"> 258 </span> : : -<span class="lineNum"> 259 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_nat_access(ctx, &amp;(spdat-&gt;nat_access));</span> -<span class="lineNum"> 260 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 261 </span> : : return(res); -<span class="lineNum"> 262 </span> : : -<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_server_auth(ctx, &amp;(spdat-&gt;server_auth));</span> -<span class="lineNum"> 264 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 265 </span> : : return(res); -<span class="lineNum"> 266 </span> : : -<span class="lineNum"> 267 </span> :<span class="lineNoCov"> 0 : res = fko_get_spa_client_timeout(ctx, (int *)&amp;(spdat-&gt;client_timeout));</span> -<span class="lineNum"> 268 </span> : : if(res != FKO_SUCCESS) -<span class="lineNum"> 269 </span> : : return(res); -<span class="lineNum"> 270 </span> : : -<span class="lineNum"> 271 </span> : : return(res); -<span class="lineNum"> 272 </span> : : } -<span class="lineNum"> 273 </span> : : -<span class="lineNum"> 274 </span> : : /* Check for access.conf stanza SOURCE match based on SPA packet -<span class="lineNum"> 275 </span> : : * source IP -<a name="276"><span class="lineNum"> 276 </span> : : */</a> -<span class="lineNum"> 277 </span> : : static int -<span class="lineNum"> 278 </span> :<span class="lineNoCov"> 0 : is_src_match(acc_stanza_t *acc, const uint32_t ip)</span> -<span class="lineNum"> 279 </span> : : { -<span class="lineNum"> 280 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while (acc)</span> -<span class="lineNum"> 281 </span> : : { -<span class="lineNum"> 282 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(compare_addr_list(acc-&gt;source_list, ip))</span> -<span class="lineNum"> 283 </span> : : return 1; -<span class="lineNum"> 284 </span> : : -<span class="lineNum"> 285 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 286 </span> : : } -<span class="lineNum"> 287 </span> : : return 0; -<span class="lineNum"> 288 </span> : : } -<span class="lineNum"> 289 </span> : : -<span class="lineNum"> 290 </span> : : /* Process the SPA packet data -<a name="291"><span class="lineNum"> 291 </span> : : */</a> -<span class="lineNum"> 292 </span> : : void -<span class="lineNum"> 293 </span> :<span class="lineNoCov"> 0 : incoming_spa(fko_srv_options_t *opts)</span> -<span class="lineNum"> 294 </span> : : { -<span class="lineNum"> 295 </span> : : /* Always a good idea to initialize ctx to null if it will be used -<span class="lineNum"> 296 </span> : : * repeatedly (especially when using fko_new_with_data()). -<span class="lineNum"> 297 </span> : : */ -<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : fko_ctx_t ctx = NULL;</span> -<span class="lineNum"> 299 </span> : : -<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : char *spa_ip_demark, *gpg_id, *gpg_fpr, *raw_digest = NULL;</span> -<span class="lineNum"> 301 </span> : : time_t now_ts; -<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : int res, ts_diff, enc_type, stanza_num=0, pid_status=0;</span> -<span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : int added_replay_digest = 0, pkt_data_len=0;</span> -<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : int is_err, cmd_exec_success = 0, attempted_decrypt = 0;</span> -<span class="lineNum"> 305 </span> :<span class="lineNoCov"> 0 : int conf_pkt_age = 0;</span> -<span class="lineNum"> 306 </span> : : char dump_buf[CTX_DUMP_BUFSIZE]; -<span class="lineNum"> 307 </span> : : -<span class="lineNum"> 308 </span> :<span class="lineNoCov"> 0 : spa_pkt_info_t *spa_pkt = &amp;(opts-&gt;spa_pkt);</span> -<span class="lineNum"> 309 </span> : : -<span class="lineNum"> 310 </span> : : /* This will hold our pertinent SPA data. -<span class="lineNum"> 311 </span> : : */ -<span class="lineNum"> 312 </span> : : spa_data_t spadat; -<span class="lineNum"> 313 </span> : : -<span class="lineNum"> 314 </span> : : /* Loop through all access stanzas looking for a match -<span class="lineNum"> 315 </span> : : */ -<span class="lineNum"> 316 </span> :<span class="lineNoCov"> 0 : acc_stanza_t *acc = opts-&gt;acc_stanzas;</span> -<span class="lineNum"> 317 </span> : : acc_string_list_t *gpg_id_ndx; -<span class="lineNum"> 318 </span> : : acc_string_list_t *gpg_fpr_ndx; -<span class="lineNum"> 319 </span> :<span class="lineNoCov"> 0 : unsigned char is_gpg_match = 0;</span> -<span class="lineNum"> 320 </span> : : -<span class="lineNum"> 321 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(spa_pkt-&gt;packet_src_ip),</span> -<span class="lineNum"> 322 </span> : : spadat.pkt_source_ip, sizeof(spadat.pkt_source_ip)); -<span class="lineNum"> 323 </span> : : -<span class="lineNum"> 324 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(spa_pkt-&gt;packet_dst_ip),</span> -<span class="lineNum"> 325 </span> : : spadat.pkt_destination_ip, sizeof(spadat.pkt_destination_ip)); -<span class="lineNum"> 326 </span> : : -<span class="lineNum"> 327 </span> : : /* At this point, we want to validate and (if needed) preprocess the -<span class="lineNum"> 328 </span> : : * SPA data and/or to be reasonably sure we have a SPA packet (i.e -<span class="lineNum"> 329 </span> : : * try to eliminate obvious non-spa packets). -<span class="lineNum"> 330 </span> : : */ -<span class="lineNum"> 331 </span> :<span class="lineNoCov"> 0 : pkt_data_len = spa_pkt-&gt;packet_data_len;</span> -<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : res = preprocess_spa_data(opts, spadat.pkt_source_ip);</span> -<span class="lineNum"> 333 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 334 </span> : : { -<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;[%s] preprocess_spa_data() returned error %i: '%s' for incoming packet.&quot;,</span> -<span class="lineNum"> 336 </span> : : spadat.pkt_source_ip, res, get_errstr(res)); -<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 338 </span> : : } -<span class="lineNum"> 339 </span> : : -<span class="lineNum"> 340 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;foreground == 1 &amp;&amp; opts-&gt;verbose &gt; 2)</span> -<span class="lineNum"> 341 </span> : : { -<span class="lineNum"> 342 </span> : : printf(&quot;[+] candidate SPA packet payload:\n&quot;); -<span class="lineNum"> 343 </span> :<span class="lineNoCov"> 0 : hex_dump(spa_pkt-&gt;packet_data, pkt_data_len);</span> -<span class="lineNum"> 344 </span> : : } -<span class="lineNum"> 345 </span> : : -<span class="lineNum"> 346 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_SPA_PACKET_AGING], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 347 </span> : : { -<span class="lineNum"> 348 </span> :<span class="lineNoCov"> 0 : conf_pkt_age = strtol_wrapper(opts-&gt;config[CONF_MAX_SPA_PACKET_AGE],</span> -<span class="lineNum"> 349 </span> : : 0, RCHK_MAX_SPA_PACKET_AGE, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 350 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 351 </span> : : { -<span class="lineNum"> 352 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] [%s] invalid MAX_SPA_PACKET_AGE&quot;, spadat.pkt_source_ip);</span> -<span class="lineNum"> 353 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 354 </span> : : } -<span class="lineNum"> 355 </span> : : } -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_src_match(opts-&gt;acc_stanzas, ntohl(spa_pkt-&gt;packet_src_ip)))</span> -<span class="lineNum"> 358 </span> : : { -<span class="lineNum"> 359 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 360 </span> : : { -<span class="lineNum"> 361 </span> : : /* Check for a replay attack -<span class="lineNum"> 362 </span> : : */ -<span class="lineNum"> 363 </span> :<span class="lineNoCov"> 0 : res = get_raw_digest(&amp;raw_digest, (char *)spa_pkt-&gt;packet_data);</span> -<span class="lineNum"> 364 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 365 </span> : : { -<span class="lineNum"> 366 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (raw_digest != NULL)</span> -<span class="lineNum"> 367 </span> :<span class="lineNoCov"> 0 : free(raw_digest);</span> -<span class="lineNum"> 368 </span> : : return; -<span class="lineNum"> 369 </span> : : } -<span class="lineNum"> 370 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (raw_digest == NULL)</span> -<span class="lineNum"> 371 </span> : : return; -<span class="lineNum"> 372 </span> : : -<span class="lineNum"> 373 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (is_replay(opts, raw_digest) != SPA_MSG_SUCCESS)</span> -<span class="lineNum"> 374 </span> : : { -<span class="lineNum"> 375 </span> :<span class="lineNoCov"> 0 : free(raw_digest);</span> -<span class="lineNum"> 376 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 377 </span> : : } -<span class="lineNum"> 378 </span> : : } -<span class="lineNum"> 379 </span> : : } -<span class="lineNum"> 380 </span> : : else -<span class="lineNum"> 381 </span> : : { -<span class="lineNum"> 382 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 383 </span> : : &quot;No access data found for source IP: %s&quot;, spadat.pkt_source_ip -<span class="lineNum"> 384 </span> : : ); -<span class="lineNum"> 385 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 386 </span> : : } -<span class="lineNum"> 387 </span> : : -<span class="lineNum"> 388 </span> : : /* Now that we know there is a matching access.conf stanza and the -<span class="lineNum"> 389 </span> : : * incoming SPA packet is not a replay, see if we should grant any -<span class="lineNum"> 390 </span> : : * access -<span class="lineNum"> 391 </span> : : */ -<span class="lineNum"> 392 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : while(acc)</span> -<span class="lineNum"> 393 </span> : : { -<span class="lineNum"> 394 </span> :<span class="lineNoCov"> 0 : res = FKO_SUCCESS;</span> -<span class="lineNum"> 395 </span> :<span class="lineNoCov"> 0 : cmd_exec_success = 0;</span> -<span class="lineNum"> 396 </span> :<span class="lineNoCov"> 0 : attempted_decrypt = 0;</span> -<span class="lineNum"> 397 </span> :<span class="lineNoCov"> 0 : stanza_num++;</span> -<span class="lineNum"> 398 </span> : : -<span class="lineNum"> 399 </span> : : /* Start access loop with a clean FKO context -<span class="lineNum"> 400 </span> : : */ -<span class="lineNum"> 401 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx != NULL)</span> -<span class="lineNum"> 402 </span> : : { -<span class="lineNum"> 403 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 404 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 405 </span> : : &quot;[%s] (stanza #%d) fko_destroy() could not zero out sensitive data buffer.&quot;, -<span class="lineNum"> 406 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 407 </span> : : ); -<span class="lineNum"> 408 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 409 </span> : : } -<span class="lineNum"> 410 </span> : : -<span class="lineNum"> 411 </span> : : /* Check for a match for the SPA source and destination IP and the access stanza -<span class="lineNum"> 412 </span> : : */ -<span class="lineNum"> 413 </span>[<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>][<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! compare_addr_list(acc-&gt;source_list, ntohl(spa_pkt-&gt;packet_src_ip)) ||</span> -<span class="lineNum"> 414 </span> [<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : (acc-&gt;destination_list != NULL &amp;&amp; ! compare_addr_list(acc-&gt;destination_list, ntohl(spa_pkt-&gt;packet_dst_ip))))</span> -<span class="lineNum"> 415 </span> : : { -<span class="lineNum"> 416 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG,</span> -<span class="lineNum"> 417 </span> : : &quot;(stanza #%d) SPA packet (%s -&gt; %s) filtered by SOURCE and/or DESTINATION criteria&quot;, -<span class="lineNum"> 418 </span> : : stanza_num, spadat.pkt_source_ip, spadat.pkt_destination_ip); -<span class="lineNum"> 419 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 420 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 421 </span> : : } -<span class="lineNum"> 422 </span> : : -<span class="lineNum"> 423 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;(stanza #%d) SPA Packet from IP: %s received with access source match&quot;,</span> -<span class="lineNum"> 424 </span> : : stanza_num, spadat.pkt_source_ip); -<span class="lineNum"> 425 </span> : : -<span class="lineNum"> 426 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;SPA Packet: '%s'&quot;, spa_pkt-&gt;packet_data);</span> -<span class="lineNum"> 427 </span> : : -<span class="lineNum"> 428 </span> : : /* Make sure this access stanza has not expired -<span class="lineNum"> 429 </span> : : */ -<span class="lineNum"> 430 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;access_expire_time &gt; 0)</span> -<span class="lineNum"> 431 </span> : : { -<span class="lineNum"> 432 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;expired)</span> -<span class="lineNum"> 433 </span> : : { -<span class="lineNum"> 434 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 435 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 436 </span> : : } -<span class="lineNum"> 437 </span> : : else -<span class="lineNum"> 438 </span> : : { -<span class="lineNum"> 439 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(time(NULL) &gt; acc-&gt;access_expire_time)</span> -<span class="lineNum"> 440 </span> : : { -<span class="lineNum"> 441 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[%s] (stanza #%d) Access stanza has expired&quot;,</span> -<span class="lineNum"> 442 </span> : : spadat.pkt_source_ip, stanza_num); -<span class="lineNum"> 443 </span> :<span class="lineNoCov"> 0 : acc-&gt;expired = 1;</span> -<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 445 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 446 </span> : : } -<span class="lineNum"> 447 </span> : : } -<span class="lineNum"> 448 </span> : : } -<span class="lineNum"> 449 </span> : : -<span class="lineNum"> 450 </span> : : /* Get encryption type and try its decoding routine first (if the key -<span class="lineNum"> 451 </span> : : * for that type is set) -<span class="lineNum"> 452 </span> : : */ -<span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : enc_type = fko_encryption_type((char *)spa_pkt-&gt;packet_data);</span> -<span class="lineNum"> 454 </span> : : -<span class="lineNum"> 455 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;use_rijndael)</span> -<span class="lineNum"> 456 </span> : : { -<span class="lineNum"> 457 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (acc-&gt;key == NULL)</span> -<span class="lineNum"> 458 </span> : : { -<span class="lineNum"> 459 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 460 </span> : : &quot;[%s] (stanza #%d) No KEY for RIJNDAEL encrypted messages&quot;, -<span class="lineNum"> 461 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 462 </span> : : ); -<span class="lineNum"> 463 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 464 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 465 </span> : : } -<span class="lineNum"> 466 </span> : : -<span class="lineNum"> 467 </span> : : /* Command mode messages may be quite long -<span class="lineNum"> 468 </span> : : */ -<span class="lineNum"> 469 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;enable_cmd_exec || enc_type == FKO_ENCRYPTION_RIJNDAEL)</span> -<span class="lineNum"> 470 </span> : : { -<span class="lineNum"> 471 </span> :<span class="lineNoCov"> 0 : res = fko_new_with_data(&amp;ctx, (char *)spa_pkt-&gt;packet_data,</span> -<span class="lineNum"> 472 </span> :<span class="lineNoCov"> 0 : acc-&gt;key, acc-&gt;key_len, acc-&gt;encryption_mode, acc-&gt;hmac_key,</span> -<span class="lineNum"> 473 </span> : : acc-&gt;hmac_key_len, acc-&gt;hmac_type); -<span class="lineNum"> 474 </span> :<span class="lineNoCov"> 0 : attempted_decrypt = 1;</span> -<span class="lineNum"> 475 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res == FKO_SUCCESS)</span> -<span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : cmd_exec_success = 1;</span> -<span class="lineNum"> 477 </span> : : } -<span class="lineNum"> 478 </span> : : } -<span class="lineNum"> 479 </span> : : -<span class="lineNum"> 480 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;use_gpg &amp;&amp; enc_type == FKO_ENCRYPTION_GPG &amp;&amp; cmd_exec_success == 0)</span> -<span class="lineNum"> 481 </span> : : { -<span class="lineNum"> 482 </span> : : /* For GPG we create the new context without decrypting on the fly -<span class="lineNum"> 483 </span> : : * so we can set some GPG parameters first. -<span class="lineNum"> 484 </span> : : */ -<span class="lineNum"> 485 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_decrypt_pw != NULL || acc-&gt;gpg_allow_no_pw)</span> -<span class="lineNum"> 486 </span> : : { -<span class="lineNum"> 487 </span> :<span class="lineNoCov"> 0 : res = fko_new_with_data(&amp;ctx, (char *)spa_pkt-&gt;packet_data, NULL,</span> -<span class="lineNum"> 488 </span> :<span class="lineNoCov"> 0 : 0, FKO_ENC_MODE_ASYMMETRIC, acc-&gt;hmac_key,</span> -<span class="lineNum"> 489 </span> : : acc-&gt;hmac_key_len, acc-&gt;hmac_type); -<span class="lineNum"> 490 </span> : : -<span class="lineNum"> 491 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 492 </span> : : { -<span class="lineNum"> 493 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 494 </span> : : &quot;[%s] (stanza #%d) Error creating fko context (before decryption): %s&quot;, -<span class="lineNum"> 495 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res) -<span class="lineNum"> 496 </span> : : ); -<span class="lineNum"> 497 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 499 </span> : : } -<span class="lineNum"> 500 </span> : : -<span class="lineNum"> 501 </span> : : /* Set whatever GPG parameters we have. -<span class="lineNum"> 502 </span> : : */ -<span class="lineNum"> 503 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_exe != NULL)</span> -<span class="lineNum"> 504 </span> : : { -<span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_exe(ctx, acc-&gt;gpg_exe);</span> -<span class="lineNum"> 506 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 507 </span> : : { -<span class="lineNum"> 508 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 509 </span> : : &quot;[%s] (stanza #%d) Error setting GPG path %s: %s&quot;, -<span class="lineNum"> 510 </span> : : spadat.pkt_source_ip, stanza_num, acc-&gt;gpg_exe, -<span class="lineNum"> 511 </span> : : fko_errstr(res) -<span class="lineNum"> 512 </span> : : ); -<span class="lineNum"> 513 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 515 </span> : : } -<span class="lineNum"> 516 </span> : : } -<span class="lineNum"> 517 </span> : : -<span class="lineNum"> 518 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_home_dir != NULL)</span> -<span class="lineNum"> 519 </span> : : { -<span class="lineNum"> 520 </span> :<span class="lineNoCov"> 0 : res = fko_set_gpg_home_dir(ctx, acc-&gt;gpg_home_dir);</span> -<span class="lineNum"> 521 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 522 </span> : : { -<span class="lineNum"> 523 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 524 </span> : : &quot;[%s] (stanza #%d) Error setting GPG keyring path to %s: %s&quot;, -<span class="lineNum"> 525 </span> : : spadat.pkt_source_ip, stanza_num, acc-&gt;gpg_home_dir, -<span class="lineNum"> 526 </span> : : fko_errstr(res) -<span class="lineNum"> 527 </span> : : ); -<span class="lineNum"> 528 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 529 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 530 </span> : : } -<span class="lineNum"> 531 </span> : : } -<span class="lineNum"> 532 </span> : : -<span class="lineNum"> 533 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_decrypt_id != NULL)</span> -<span class="lineNum"> 534 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_recipient(ctx, acc-&gt;gpg_decrypt_id);</span> -<span class="lineNum"> 535 </span> : : -<span class="lineNum"> 536 </span> : : /* If GPG_REQUIRE_SIG is set for this acc stanza, then set -<span class="lineNum"> 537 </span> : : * the FKO context accordingly and check the other GPG Sig- -<span class="lineNum"> 538 </span> : : * related parameters. This also applies when REMOTE_ID is -<span class="lineNum"> 539 </span> : : * set. -<span class="lineNum"> 540 </span> : : */ -<span class="lineNum"> 541 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_require_sig)</span> -<span class="lineNum"> 542 </span> : : { -<span class="lineNum"> 543 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signature_verify(ctx, 1);</span> -<span class="lineNum"> 544 </span> : : -<span class="lineNum"> 545 </span> : : /* Set whether or not to ignore signature verification errors. -<span class="lineNum"> 546 </span> : : */ -<span class="lineNum"> 547 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_ignore_verify_error(ctx, acc-&gt;gpg_ignore_sig_error);</span> -<span class="lineNum"> 548 </span> : : } -<span class="lineNum"> 549 </span> : : else -<span class="lineNum"> 550 </span> : : { -<span class="lineNum"> 551 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_signature_verify(ctx, 0);</span> -<span class="lineNum"> 552 </span> :<span class="lineNoCov"> 0 : fko_set_gpg_ignore_verify_error(ctx, 1);</span> -<span class="lineNum"> 553 </span> : : } -<span class="lineNum"> 554 </span> : : -<span class="lineNum"> 555 </span> : : /* Now decrypt the data. -<span class="lineNum"> 556 </span> : : */ -<span class="lineNum"> 557 </span> :<span class="lineNoCov"> 0 : res = fko_decrypt_spa_data(ctx, acc-&gt;gpg_decrypt_pw, 0);</span> -<span class="lineNum"> 558 </span> :<span class="lineNoCov"> 0 : attempted_decrypt = 1;</span> -<span class="lineNum"> 559 </span> : : } -<span class="lineNum"> 560 </span> : : } -<span class="lineNum"> 561 </span> : : -<span class="lineNum"> 562 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(attempted_decrypt == 0)</span> -<span class="lineNum"> 563 </span> : : { -<span class="lineNum"> 564 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR,</span> -<span class="lineNum"> 565 </span> : : &quot;[%s] (stanza #%d) No stanza encryption mode match for encryption type: %i.&quot;, -<span class="lineNum"> 566 </span> : : spadat.pkt_source_ip, stanza_num, enc_type); -<span class="lineNum"> 567 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 568 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 569 </span> : : } -<span class="lineNum"> 570 </span> : : -<span class="lineNum"> 571 </span> : : /* Do we have a valid FKO context? Did the SPA decrypt properly? -<span class="lineNum"> 572 </span> : : */ -<span class="lineNum"> 573 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 574 </span> : : { -<span class="lineNum"> 575 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Error creating fko context: %s&quot;,</span> -<span class="lineNum"> 576 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); -<span class="lineNum"> 577 </span> : : -<span class="lineNum"> 578 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(IS_GPG_ERROR(res))</span> -<span class="lineNum"> 579 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) - GPG ERROR: %s&quot;,</span> -<span class="lineNum"> 580 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); -<span class="lineNum"> 581 </span> : : -<span class="lineNum"> 582 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 583 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 584 </span> : : } -<span class="lineNum"> 585 </span> : : -<span class="lineNum"> 586 </span> : : /* Add this SPA packet into the replay detection cache -<span class="lineNum"> 587 </span> : : */ -<span class="lineNum"> 588 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!opts-&gt;test &amp;&amp; added_replay_digest == 0</span> -<span class="lineNum"> 589 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; strncasecmp(opts-&gt;config[CONF_ENABLE_DIGEST_PERSISTENCE], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 590 </span> : : { -<span class="lineNum"> 591 </span> : : -<span class="lineNum"> 592 </span> :<span class="lineNoCov"> 0 : res = add_replay(opts, raw_digest);</span> -<span class="lineNum"> 593 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (res != SPA_MSG_SUCCESS)</span> -<span class="lineNum"> 594 </span> : : { -<span class="lineNum"> 595 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Could not add digest to replay cache&quot;,</span> -<span class="lineNum"> 596 </span> : : spadat.pkt_source_ip, stanza_num); -<span class="lineNum"> 597 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 598 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 599 </span> : : } -<span class="lineNum"> 600 </span> : : added_replay_digest = 1; -<span class="lineNum"> 601 </span> : : } -<span class="lineNum"> 602 </span> : : -<span class="lineNum"> 603 </span> : : /* At this point, we assume the SPA data is valid. Now we need to see -<span class="lineNum"> 604 </span> : : * if it meets our access criteria. -<span class="lineNum"> 605 </span> : : */ -<span class="lineNum"> 606 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;[%s] (stanza #%d) SPA Decode (res=%i):&quot;,</span> -<span class="lineNum"> 607 </span> : : spadat.pkt_source_ip, stanza_num, res); -<span class="lineNum"> 608 </span> : : -<span class="lineNum"> 609 </span> :<span class="lineNoCov"> 0 : res = dump_ctx_to_buffer(ctx, dump_buf, sizeof(dump_buf));</span> -<span class="lineNum"> 610 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (res == FKO_SUCCESS)</span> -<span class="lineNum"> 611 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;%s&quot;, dump_buf);</span> -<span class="lineNum"> 612 </span> : : else -<span class="lineNum"> 613 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Unable to dump FKO context: %s&quot;, fko_errstr(res));</span> -<span class="lineNum"> 614 </span> : : -<span class="lineNum"> 615 </span> : : /* First, if this is a GPG message, and GPG_REMOTE_ID list is not empty, -<span class="lineNum"> 616 </span> : : * then we need to make sure this incoming message is signer ID matches -<span class="lineNum"> 617 </span> : : * an entry in the list. -<span class="lineNum"> 618 </span> : : */ -<span class="lineNum"> 619 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(enc_type == FKO_ENCRYPTION_GPG &amp;&amp; acc-&gt;gpg_require_sig)</span> -<span class="lineNum"> 620 </span> : : { -<span class="lineNum"> 621 </span> :<span class="lineNoCov"> 0 : res = fko_get_gpg_signature_id(ctx, &amp;gpg_id);</span> -<span class="lineNum"> 622 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 623 </span> : : { -<span class="lineNum"> 624 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 625 </span> : : &quot;[%s] (stanza #%d) Error pulling the GPG signature ID from the context: %s&quot;, -<span class="lineNum"> 626 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); -<span class="lineNum"> 627 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 628 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 629 </span> : : } -<span class="lineNum"> 630 </span> : : -<span class="lineNum"> 631 </span> :<span class="lineNoCov"> 0 : res = fko_get_gpg_signature_fpr(ctx, &amp;gpg_fpr);</span> -<span class="lineNum"> 632 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 633 </span> : : { -<span class="lineNum"> 634 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 635 </span> : : &quot;[%s] (stanza #%d) Error pulling the GPG fingerprint from the context: %s&quot;, -<span class="lineNum"> 636 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); -<span class="lineNum"> 637 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 638 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 639 </span> : : } -<span class="lineNum"> 640 </span> : : -<span class="lineNum"> 641 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[%s] (stanza #%d) Incoming SPA data signed by '%s' (fingerprint '%s').&quot;,</span> -<span class="lineNum"> 642 </span> : : spadat.pkt_source_ip, stanza_num, gpg_id, gpg_fpr); -<span class="lineNum"> 643 </span> : : -<span class="lineNum"> 644 </span> : : /* prefer GnuPG fingerprint match if so configured -<span class="lineNum"> 645 </span> : : */ -<span class="lineNum"> 646 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_remote_fpr != NULL)</span> -<span class="lineNum"> 647 </span> : : { -<span class="lineNum"> 648 </span> :<span class="lineNoCov"> 0 : is_gpg_match = 0;</span> -<span class="lineNum"> 649 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(gpg_fpr_ndx = acc-&gt;gpg_remote_fpr_list;</span> -<span class="lineNum"> 650 </span> :<span class="lineNoCov"> 0 : gpg_fpr_ndx != NULL; gpg_fpr_ndx=gpg_fpr_ndx-&gt;next)</span> -<span class="lineNum"> 651 </span> : : { -<span class="lineNum"> 652 </span> :<span class="lineNoCov"> 0 : res = fko_gpg_signature_fpr_match(ctx,</span> -<span class="lineNum"> 653 </span> :<span class="lineNoCov"> 0 : gpg_fpr_ndx-&gt;str, &amp;is_gpg_match);</span> -<span class="lineNum"> 654 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 655 </span> : : { -<span class="lineNum"> 656 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 657 </span> : : &quot;[%s] (stanza #%d) Error in GPG signature comparision: %s&quot;, -<span class="lineNum"> 658 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); -<span class="lineNum"> 659 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 660 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 661 </span> : : } -<span class="lineNum"> 662 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_gpg_match)</span> -<span class="lineNum"> 663 </span> : : break; -<span class="lineNum"> 664 </span> : : } -<span class="lineNum"> 665 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_gpg_match)</span> -<span class="lineNum"> 666 </span> : : { -<span class="lineNum"> 667 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 668 </span> : : &quot;[%s] (stanza #%d) Incoming SPA packet signed by: %s, but that fingerprint is not in the GPG_FINGERPRINT_ID list.&quot;, -<span class="lineNum"> 669 </span> : : spadat.pkt_source_ip, stanza_num, gpg_fpr); -<span class="lineNum"> 670 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 671 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 672 </span> : : } -<span class="lineNum"> 673 </span> : : } -<span class="lineNum"> 674 </span> : : -<span class="lineNum"> 675 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;gpg_remote_id != NULL)</span> -<span class="lineNum"> 676 </span> : : { -<span class="lineNum"> 677 </span> :<span class="lineNoCov"> 0 : is_gpg_match = 0;</span> -<span class="lineNum"> 678 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(gpg_id_ndx = acc-&gt;gpg_remote_id_list;</span> -<span class="lineNum"> 679 </span> :<span class="lineNoCov"> 0 : gpg_id_ndx != NULL; gpg_id_ndx=gpg_id_ndx-&gt;next)</span> -<span class="lineNum"> 680 </span> : : { -<span class="lineNum"> 681 </span> :<span class="lineNoCov"> 0 : res = fko_gpg_signature_id_match(ctx,</span> -<span class="lineNum"> 682 </span> :<span class="lineNoCov"> 0 : gpg_id_ndx-&gt;str, &amp;is_gpg_match);</span> -<span class="lineNum"> 683 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 684 </span> : : { -<span class="lineNum"> 685 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 686 </span> : : &quot;[%s] (stanza #%d) Error in GPG signature comparision: %s&quot;, -<span class="lineNum"> 687 </span> : : spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); -<span class="lineNum"> 688 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 689 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 690 </span> : : } -<span class="lineNum"> 691 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_gpg_match)</span> -<span class="lineNum"> 692 </span> : : break; -<span class="lineNum"> 693 </span> : : } -<span class="lineNum"> 694 </span> : : -<span class="lineNum"> 695 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_gpg_match)</span> -<span class="lineNum"> 696 </span> : : { -<span class="lineNum"> 697 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 698 </span> : : &quot;[%s] (stanza #%d) Incoming SPA packet signed by ID: %s, but that ID is not in the GPG_REMOTE_ID list.&quot;, -<span class="lineNum"> 699 </span> : : spadat.pkt_source_ip, stanza_num, gpg_id); -<span class="lineNum"> 700 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 701 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 702 </span> : : } -<span class="lineNum"> 703 </span> : : } -<span class="lineNum"> 704 </span> : : } -<span class="lineNum"> 705 </span> : : -<span class="lineNum"> 706 </span> : : /* Populate our spa data struct for future reference. -<span class="lineNum"> 707 </span> : : */ -<span class="lineNum"> 708 </span> :<span class="lineNoCov"> 0 : res = get_spa_data_fields(ctx, &amp;spadat);</span> -<span class="lineNum"> 709 </span> : : -<span class="lineNum"> 710 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res != FKO_SUCCESS)</span> -<span class="lineNum"> 711 </span> : : { -<span class="lineNum"> 712 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[%s] (stanza #%d) Unexpected error pulling SPA data from the context: %s&quot;,</span> -<span class="lineNum"> 713 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); -<span class="lineNum"> 714 </span> : : -<span class="lineNum"> 715 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 716 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 717 </span> : : } -<span class="lineNum"> 718 </span> : : -<span class="lineNum"> 719 </span> : : /* Figure out what our timeout will be. If it is specified in the SPA -<span class="lineNum"> 720 </span> : : * data, then use that. If not, try the FW_ACCESS_TIMEOUT from the -<span class="lineNum"> 721 </span> : : * access.conf file (if there is one). Otherwise use the default. -<span class="lineNum"> 722 </span> : : */ -<span class="lineNum"> 723 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat.client_timeout &gt; 0)</span> -<span class="lineNum"> 724 </span> :<span class="lineNoCov"> 0 : spadat.fw_access_timeout = spadat.client_timeout;</span> -<span class="lineNum"> 725 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(acc-&gt;fw_access_timeout &gt; 0)</span> -<span class="lineNum"> 726 </span> :<span class="lineNoCov"> 0 : spadat.fw_access_timeout = acc-&gt;fw_access_timeout;</span> -<span class="lineNum"> 727 </span> : : else -<span class="lineNum"> 728 </span> :<span class="lineNoCov"> 0 : spadat.fw_access_timeout = DEF_FW_ACCESS_TIMEOUT;</span> -<span class="lineNum"> 729 </span> : : -<span class="lineNum"> 730 </span> : : /* Check packet age if so configured. -<span class="lineNum"> 731 </span> : : */ -<span class="lineNum"> 732 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_SPA_PACKET_AGING], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 733 </span> : : { -<span class="lineNum"> 734 </span> :<span class="lineNoCov"> 0 : time(&amp;now_ts);</span> -<span class="lineNum"> 735 </span> : : -<span class="lineNum"> 736 </span> :<span class="lineNoCov"> 0 : ts_diff = labs(now_ts - spadat.timestamp);</span> -<span class="lineNum"> 737 </span> : : -<span class="lineNum"> 738 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ts_diff &gt; conf_pkt_age)</span> -<span class="lineNum"> 739 </span> : : { -<span class="lineNum"> 740 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) SPA data time difference is too great (%i seconds).&quot;,</span> -<span class="lineNum"> 741 </span> : : spadat.pkt_source_ip, stanza_num, ts_diff); -<span class="lineNum"> 742 </span> : : -<span class="lineNum"> 743 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 744 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 745 </span> : : } -<span class="lineNum"> 746 </span> : : } -<span class="lineNum"> 747 </span> : : -<span class="lineNum"> 748 </span> : : /* At this point, we have enough to check the embedded (or packet source) -<span class="lineNum"> 749 </span> : : * IP address against the defined access rights. We start by splitting -<span class="lineNum"> 750 </span> : : * the spa msg source IP from the remainder of the message. -<span class="lineNum"> 751 </span> : : */ -<span class="lineNum"> 752 </span> :<span class="lineNoCov"> 0 : spa_ip_demark = strchr(spadat.spa_message, ',');</span> -<span class="lineNum"> 753 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spa_ip_demark == NULL)</span> -<span class="lineNum"> 754 </span> : : { -<span class="lineNum"> 755 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Error parsing SPA message string: %s&quot;,</span> -<span class="lineNum"> 756 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); -<span class="lineNum"> 757 </span> : : -<span class="lineNum"> 758 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 759 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 760 </span> : : } -<span class="lineNum"> 761 </span> : : -<span class="lineNum"> 762 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((spa_ip_demark-spadat.spa_message) &lt; MIN_IPV4_STR_LEN-1</span> -<span class="lineNum"> 763 </span> :<span class="lineNoCov"> 0 : || (spa_ip_demark-spadat.spa_message) &gt; MAX_IPV4_STR_LEN)</span> -<span class="lineNum"> 764 </span> : : { -<span class="lineNum"> 765 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Invalid source IP in SPA message, ignoring SPA packet&quot;,</span> -<span class="lineNum"> 766 </span> : : spadat.pkt_source_ip, stanza_num); -<span class="lineNum"> 767 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 768 </span> : : } -<span class="lineNum"> 769 </span> : : -<span class="lineNum"> 770 </span> :<span class="lineNoCov"> 0 : strlcpy(spadat.spa_message_src_ip,</span> -<span class="lineNum"> 771 </span> :<span class="lineNoCov"> 0 : spadat.spa_message, (spa_ip_demark-spadat.spa_message)+1);</span> -<span class="lineNum"> 772 </span> : : -<span class="lineNum"> 773 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! is_valid_ipv4_addr(spadat.spa_message_src_ip))</span> -<span class="lineNum"> 774 </span> : : { -<span class="lineNum"> 775 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[%s] (stanza #%d) Invalid source IP in SPA message, ignoring SPA packet&quot;,</span> -<span class="lineNum"> 776 </span> : : spadat.pkt_source_ip, stanza_num, fko_errstr(res)); -<span class="lineNum"> 777 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 778 </span> : : } -<span class="lineNum"> 779 </span> : : -<span class="lineNum"> 780 </span> :<span class="lineNoCov"> 0 : strlcpy(spadat.spa_message_remain, spa_ip_demark+1, MAX_DECRYPTED_SPA_LEN);</span> -<span class="lineNum"> 781 </span> : : -<span class="lineNum"> 782 </span> : : /* If use source IP was requested (embedded IP of 0.0.0.0), make sure it -<span class="lineNum"> 783 </span> : : * is allowed. -<span class="lineNum"> 784 </span> : : */ -<span class="lineNum"> 785 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcmp(spadat.spa_message_src_ip, &quot;0.0.0.0&quot;) == 0)</span> -<span class="lineNum"> 786 </span> : : { -<span class="lineNum"> 787 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;require_source_address)</span> -<span class="lineNum"> 788 </span> : : { -<span class="lineNum"> 789 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 790 </span> : : &quot;[%s] (stanza #%d) Got 0.0.0.0 when valid source IP was required.&quot;, -<span class="lineNum"> 791 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 792 </span> : : ); -<span class="lineNum"> 793 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 794 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 795 </span> : : } -<span class="lineNum"> 796 </span> : : -<span class="lineNum"> 797 </span> :<span class="lineNoCov"> 0 : spadat.use_src_ip = spadat.pkt_source_ip;</span> -<span class="lineNum"> 798 </span> : : } -<span class="lineNum"> 799 </span> : : else -<span class="lineNum"> 800 </span> :<span class="lineNoCov"> 0 : spadat.use_src_ip = spadat.spa_message_src_ip;</span> -<span class="lineNum"> 801 </span> : : -<span class="lineNum"> 802 </span> : : /* If REQUIRE_USERNAME is set, make sure the username in this SPA data -<span class="lineNum"> 803 </span> : : * matches. -<span class="lineNum"> 804 </span> : : */ -<span class="lineNum"> 805 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;require_username != NULL)</span> -<span class="lineNum"> 806 </span> : : { -<span class="lineNum"> 807 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strcmp(spadat.username, acc-&gt;require_username) != 0)</span> -<span class="lineNum"> 808 </span> : : { -<span class="lineNum"> 809 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 810 </span> : : &quot;[%s] (stanza #%d) Username in SPA data (%s) does not match required username: %s&quot;, -<span class="lineNum"> 811 </span> : : spadat.pkt_source_ip, stanza_num, spadat.username, acc-&gt;require_username -<span class="lineNum"> 812 </span> : : ); -<span class="lineNum"> 813 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 814 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 815 </span> : : } -<span class="lineNum"> 816 </span> : : } -<span class="lineNum"> 817 </span> : : -<span class="lineNum"> 818 </span> : : /* Take action based on SPA message type. -<span class="lineNum"> 819 </span> : : */ -<span class="lineNum"> 820 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat.message_type == FKO_LOCAL_NAT_ACCESS_MSG</span> -<span class="lineNum"> 821 </span> : : || spadat.message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG -<span class="lineNum"> 822 </span> :<span class="lineNoCov"> 0 : || spadat.message_type == FKO_NAT_ACCESS_MSG</span> -<span class="lineNum"> 823 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || spadat.message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG)</span> -<span class="lineNum"> 824 </span> : : { -<span class="lineNum"> 825 </span> : : #if FIREWALL_FIREWALLD -<span class="lineNum"> 826 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_FIREWD_FORWARDING], &quot;Y&quot;, 1)!=0)</span> -<span class="lineNum"> 827 </span> : : { -<span class="lineNum"> 828 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 829 </span> : : &quot;(stanza #%d) SPA packet from %s requested NAT access, but is not enabled&quot;, -<span class="lineNum"> 830 </span> : : stanza_num, spadat.pkt_source_ip -<span class="lineNum"> 831 </span> : : ); -<span class="lineNum"> 832 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 833 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 834 </span> : : } -<span class="lineNum"> 835 </span> : : #elif FIREWALL_IPTABLES -<span class="lineNum"> 836 </span> : : if(strncasecmp(opts-&gt;config[CONF_ENABLE_IPT_FORWARDING], &quot;Y&quot;, 1)!=0) -<span class="lineNum"> 837 </span> : : { -<span class="lineNum"> 838 </span> : : log_msg(LOG_WARNING, -<span class="lineNum"> 839 </span> : : &quot;(stanza #%d) SPA packet from %s requested NAT access, but is not enabled&quot;, -<span class="lineNum"> 840 </span> : : stanza_num, spadat.pkt_source_ip -<span class="lineNum"> 841 </span> : : ); -<span class="lineNum"> 842 </span> : : acc = acc-&gt;next; -<span class="lineNum"> 843 </span> : : continue; -<span class="lineNum"> 844 </span> : : } -<span class="lineNum"> 845 </span> : : #else -<span class="lineNum"> 846 </span> : : log_msg(LOG_WARNING, -<span class="lineNum"> 847 </span> : : &quot;(stanza #%d) SPA packet from %s requested unsupported NAT access&quot;, -<span class="lineNum"> 848 </span> : : stanza_num, spadat.pkt_source_ip -<span class="lineNum"> 849 </span> : : ); -<span class="lineNum"> 850 </span> : : acc = acc-&gt;next; -<span class="lineNum"> 851 </span> : : continue; -<span class="lineNum"> 852 </span> : : #endif -<span class="lineNum"> 853 </span> : : } -<span class="lineNum"> 854 </span> : : -<span class="lineNum"> 855 </span> : : /* Command messages. -<span class="lineNum"> 856 </span> : : */ -<span class="lineNum"> 857 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(spadat.message_type == FKO_COMMAND_MSG)</span> -<span class="lineNum"> 858 </span> : : { -<span class="lineNum"> 859 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!acc-&gt;enable_cmd_exec)</span> -<span class="lineNum"> 860 </span> : : { -<span class="lineNum"> 861 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 862 </span> : : &quot;[%s] (stanza #%d) SPA Command messages are not allowed in the current configuration.&quot;, -<span class="lineNum"> 863 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 864 </span> : : ); -<span class="lineNum"> 865 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 866 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 867 </span> : : } -<span class="lineNum"> 868 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(opts-&gt;test)</span> -<span class="lineNum"> 869 </span> : : { -<span class="lineNum"> 870 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 871 </span> : : &quot;[%s] (stanza #%d) --test mode enabled, skipping command execution.&quot;, -<span class="lineNum"> 872 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 873 </span> : : ); -<span class="lineNum"> 874 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 875 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 876 </span> : : } -<span class="lineNum"> 877 </span> : : else -<span class="lineNum"> 878 </span> : : { -<span class="lineNum"> 879 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 880 </span> : : &quot;[%s] (stanza #%d) Processing SPA Command message: command='%s'.&quot;, -<span class="lineNum"> 881 </span> : : spadat.pkt_source_ip, stanza_num, spadat.spa_message_remain -<span class="lineNum"> 882 </span> : : ); -<span class="lineNum"> 883 </span> : : -<span class="lineNum"> 884 </span> : : /* Do we need to become another user? If so, we call -<span class="lineNum"> 885 </span> : : * run_extcmd_as and pass the cmd_exec_uid. -<span class="lineNum"> 886 </span> : : */ -<span class="lineNum"> 887 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(acc-&gt;cmd_exec_user != NULL &amp;&amp; strncasecmp(acc-&gt;cmd_exec_user, &quot;root&quot;, 4) != 0)</span> -<span class="lineNum"> 888 </span> : : { -<span class="lineNum"> 889 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 890 </span> : : &quot;[%s] (stanza #%d) setuid/setgid user/group to %s/%s (UID=%i,GID=%i) before running command.&quot;, -<span class="lineNum"> 891 </span> : : spadat.pkt_source_ip, stanza_num, acc-&gt;cmd_exec_user, -<span class="lineNum"> 892 </span> :<span class="lineNoCov"> 0 : acc-&gt;cmd_exec_group == NULL ? acc-&gt;cmd_exec_user : acc-&gt;cmd_exec_group,</span> -<span class="lineNum"> 893 </span> : : acc-&gt;cmd_exec_uid, acc-&gt;cmd_exec_gid); -<span class="lineNum"> 894 </span> : : -<span class="lineNum"> 895 </span> :<span class="lineNoCov"> 0 : res = run_extcmd_as(acc-&gt;cmd_exec_uid, acc-&gt;cmd_exec_gid,</span> -<span class="lineNum"> 896 </span> : : spadat.spa_message_remain, NULL, 0, -<span class="lineNum"> 897 </span> : : WANT_STDERR, NO_TIMEOUT, &amp;pid_status, opts); -<span class="lineNum"> 898 </span> : : } -<span class="lineNum"> 899 </span> : : else /* Just run it as we are (root that is). */ -<span class="lineNum"> 900 </span> :<span class="lineNoCov"> 0 : res = run_extcmd(spadat.spa_message_remain, NULL, 0,</span> -<span class="lineNum"> 901 </span> : : WANT_STDERR, 5, &amp;pid_status, opts); -<span class="lineNum"> 902 </span> : : -<span class="lineNum"> 903 </span> : : /* should only call WEXITSTATUS() if WIFEXITED() is true -<span class="lineNum"> 904 </span> : : */ -<span class="lineNum"> 905 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 906 </span> : : &quot;[%s] (stanza #%d) CMD_EXEC: command returned %i, pid_status: %d&quot;, -<span class="lineNum"> 907 </span> : : spadat.pkt_source_ip, stanza_num, res, -<span class="lineNum"> 908 </span> :<span class="lineNoCov"> 0 : WIFEXITED(pid_status) ? WEXITSTATUS(pid_status) : pid_status);</span> -<span class="lineNum"> 909 </span> : : -<span class="lineNum"> 910 </span> :<span class="lineNoCov"> 0 : if(WIFEXITED(pid_status))</span> -<span class="lineNum"> 911 </span> : : { -<span class="lineNum"> 912 </span> : : if(WEXITSTATUS(pid_status) != 0) -<span class="lineNum"> 913 </span> : : res = SPA_MSG_COMMAND_ERROR; -<span class="lineNum"> 914 </span> : : } -<span class="lineNum"> 915 </span> : : else -<span class="lineNum"> 916 </span> : : res = SPA_MSG_COMMAND_ERROR; -<span class="lineNum"> 917 </span> : : -<span class="lineNum"> 918 </span> : : /* we processed the command on a matching access stanza, so we -<span class="lineNum"> 919 </span> : : * don't look for anything else to do with this SPA packet -<span class="lineNum"> 920 </span> : : */ -<span class="lineNum"> 921 </span> : : break; -<span class="lineNum"> 922 </span> : : } -<span class="lineNum"> 923 </span> : : } -<span class="lineNum"> 924 </span> : : -<span class="lineNum"> 925 </span> : : /* From this point forward, we have some kind of access message. So -<span class="lineNum"> 926 </span> : : * we first see if access is allowed by checking access against -<span class="lineNum"> 927 </span> : : * restrict_ports and open_ports. -<span class="lineNum"> 928 </span> : : * -<span class="lineNum"> 929 </span> : : * --DSS TODO: We should add BLACKLIST support here as well. -<span class="lineNum"> 930 </span> : : */ -<span class="lineNum"> 931 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! acc_check_port_access(acc, spadat.spa_message_remain))</span> -<span class="lineNum"> 932 </span> : : { -<span class="lineNum"> 933 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 934 </span> : : &quot;[%s] (stanza #%d) One or more requested protocol/ports was denied per access.conf.&quot;, -<span class="lineNum"> 935 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 936 </span> : : ); -<span class="lineNum"> 937 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 938 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 939 </span> : : } -<span class="lineNum"> 940 </span> : : -<span class="lineNum"> 941 </span> : : /* At this point, we process the SPA request and break out of the -<span class="lineNum"> 942 </span> : : * access stanza loop (first valid access stanza stops us looking -<span class="lineNum"> 943 </span> : : * for others). -<span class="lineNum"> 944 </span> : : */ -<span class="lineNum"> 945 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;test) /* no firewall changes in --test mode */</span> -<span class="lineNum"> 946 </span> : : { -<span class="lineNum"> 947 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 948 </span> : : &quot;[%s] (stanza #%d) --test mode enabled, skipping firewall manipulation.&quot;, -<span class="lineNum"> 949 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 950 </span> : : ); -<span class="lineNum"> 951 </span> :<span class="lineNoCov"> 0 : acc = acc-&gt;next;</span> -<span class="lineNum"> 952 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 953 </span> : : } -<span class="lineNum"> 954 </span> : : else -<span class="lineNum"> 955 </span> : : { -<span class="lineNum"> 956 </span> :<span class="lineNoCov"> 0 : process_spa_request(opts, acc, &amp;spadat);</span> -<span class="lineNum"> 957 </span> : : } -<span class="lineNum"> 958 </span> : : -<span class="lineNum"> 959 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 960 </span> : : } -<span class="lineNum"> 961 </span> : : -<span class="lineNum"> 962 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (raw_digest != NULL)</span> -<span class="lineNum"> 963 </span> :<span class="lineNoCov"> 0 : free(raw_digest);</span> -<span class="lineNum"> 964 </span> : : -<span class="lineNum"> 965 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ctx != NULL)</span> -<span class="lineNum"> 966 </span> : : { -<span class="lineNum"> 967 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fko_destroy(ctx) == FKO_ERROR_ZERO_OUT_DATA)</span> -<span class="lineNum"> 968 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 969 </span> : : &quot;[%s] (stanza #%d) fko_destroy() could not zero out sensitive data buffer.&quot;, -<span class="lineNum"> 970 </span> : : spadat.pkt_source_ip, stanza_num -<span class="lineNum"> 971 </span> : : ); -<span class="lineNum"> 972 </span> :<span class="lineNoCov"> 0 : ctx = NULL;</span> -<span class="lineNum"> 973 </span> : : } -<span class="lineNum"> 974 </span> : : -<span class="lineNum"> 975 </span> : : return; -<span class="lineNum"> 976 </span> : : } -<span class="lineNum"> 977 </span> : : -<span class="lineNum"> 978 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html deleted file mode 100644 index 3b87ee36..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-b.html +++ /dev/null @@ -1,275 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">876</td> - <td class="headerCovTableEntry">3080</td> - <td class="headerCovTableEntryLo">28.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">49</td> - <td class="headerCovTableEntry">124</td> - <td class="headerCovTableEntryLo">39.5 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">541</td> - <td class="headerCovTableEntry">2007</td> - <td class="headerCovTableEntryLo">27.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></span></td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 63</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 61</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 31</td> - </tr> - <tr> - <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 57</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 40</td> - </tr> - <tr> - <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 81</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 54</td> - </tr> - <tr> - <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 103</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 70</td> - </tr> - <tr> - <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 100</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 6</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 72</td> - </tr> - <tr> - <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 344</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 5</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 230</td> - </tr> - <tr> - <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> - </td> - <td class="coverPerLo">9.2&nbsp;%</td> - <td class="coverNumLo">53 / 575</td> - <td class="coverPerLo">10.3&nbsp;%</td> - <td class="coverNumLo">3 / 29</td> - <td class="coverPerLo">11.3&nbsp;%</td> - <td class="coverNumLo">34 / 302</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> - </td> - <td class="coverPerLo">16.0&nbsp;%</td> - <td class="coverNumLo">12 / 75</td> - <td class="coverPerLo">28.6&nbsp;%</td> - <td class="coverNumLo">2 / 7</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">8 / 58</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">80 / 275</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">7 / 13</td> - <td class="coverPerLo">22.0&nbsp;%</td> - <td class="coverNumLo">36 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> - </td> - <td class="coverPerLo">59.7&nbsp;%</td> - <td class="coverNumLo">43 / 72</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">30.4&nbsp;%</td> - <td class="coverNumLo">14 / 46</td> - </tr> - <tr> - <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">409 / 755</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">20 / 30</td> - <td class="coverPerLo">49.0&nbsp;%</td> - <td class="coverNumLo">295 / 602</td> - </tr> - <tr> - <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> - </td> - <td class="coverPerLo">35.7&nbsp;%</td> - <td class="coverNumLo">56 / 157</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">3 / 9</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">30 / 60</td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> - </td> - <td class="coverPerLo">67.2&nbsp;%</td> - <td class="coverNumLo">223 / 332</td> - <td class="coverPerHi">90.9&nbsp;%</td> - <td class="coverNumHi">10 / 11</td> - <td class="coverPerLo">55.4&nbsp;%</td> - <td class="coverNumLo">124 / 224</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html deleted file mode 100644 index 9d47466c..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-f.html +++ /dev/null @@ -1,275 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">876</td> - <td class="headerCovTableEntry">3080</td> - <td class="headerCovTableEntryLo">28.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">49</td> - <td class="headerCovTableEntry">124</td> - <td class="headerCovTableEntryLo">39.5 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">541</td> - <td class="headerCovTableEntry">2007</td> - <td class="headerCovTableEntryLo">27.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 57</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 40</td> - </tr> - <tr> - <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 103</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 70</td> - </tr> - <tr> - <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 63</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 81</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 54</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 61</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 31</td> - </tr> - <tr> - <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 344</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 5</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 230</td> - </tr> - <tr> - <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 100</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 6</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 72</td> - </tr> - <tr> - <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> - </td> - <td class="coverPerLo">9.2&nbsp;%</td> - <td class="coverNumLo">53 / 575</td> - <td class="coverPerLo">10.3&nbsp;%</td> - <td class="coverNumLo">3 / 29</td> - <td class="coverPerLo">11.3&nbsp;%</td> - <td class="coverNumLo">34 / 302</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> - </td> - <td class="coverPerLo">16.0&nbsp;%</td> - <td class="coverNumLo">12 / 75</td> - <td class="coverPerLo">28.6&nbsp;%</td> - <td class="coverNumLo">2 / 7</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">8 / 58</td> - </tr> - <tr> - <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> - </td> - <td class="coverPerLo">35.7&nbsp;%</td> - <td class="coverNumLo">56 / 157</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">3 / 9</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">30 / 60</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">80 / 275</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">7 / 13</td> - <td class="coverPerLo">22.0&nbsp;%</td> - <td class="coverNumLo">36 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">409 / 755</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">20 / 30</td> - <td class="coverPerLo">49.0&nbsp;%</td> - <td class="coverNumLo">295 / 602</td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> - </td> - <td class="coverPerLo">67.2&nbsp;%</td> - <td class="coverNumLo">223 / 332</td> - <td class="coverPerHi">90.9&nbsp;%</td> - <td class="coverNumHi">10 / 11</td> - <td class="coverPerLo">55.4&nbsp;%</td> - <td class="coverNumLo">124 / 224</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> - </td> - <td class="coverPerLo">59.7&nbsp;%</td> - <td class="coverNumLo">43 / 72</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">30.4&nbsp;%</td> - <td class="coverNumLo">14 / 46</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html deleted file mode 100644 index ba55c381..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index-sort-l.html +++ /dev/null @@ -1,275 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">876</td> - <td class="headerCovTableEntry">3080</td> - <td class="headerCovTableEntryLo">28.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">49</td> - <td class="headerCovTableEntry">124</td> - <td class="headerCovTableEntryLo">39.5 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">541</td> - <td class="headerCovTableEntry">2007</td> - <td class="headerCovTableEntryLo">27.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><a href="index.html"><img src="../updown.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></a></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 57</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 40</td> - </tr> - <tr> - <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 61</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 31</td> - </tr> - <tr> - <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 63</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 81</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 54</td> - </tr> - <tr> - <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 100</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 6</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 72</td> - </tr> - <tr> - <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 103</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 70</td> - </tr> - <tr> - <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 344</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 5</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 230</td> - </tr> - <tr> - <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> - </td> - <td class="coverPerLo">9.2&nbsp;%</td> - <td class="coverNumLo">53 / 575</td> - <td class="coverPerLo">10.3&nbsp;%</td> - <td class="coverNumLo">3 / 29</td> - <td class="coverPerLo">11.3&nbsp;%</td> - <td class="coverNumLo">34 / 302</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> - </td> - <td class="coverPerLo">16.0&nbsp;%</td> - <td class="coverNumLo">12 / 75</td> - <td class="coverPerLo">28.6&nbsp;%</td> - <td class="coverNumLo">2 / 7</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">8 / 58</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">80 / 275</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">7 / 13</td> - <td class="coverPerLo">22.0&nbsp;%</td> - <td class="coverNumLo">36 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> - </td> - <td class="coverPerLo">35.7&nbsp;%</td> - <td class="coverNumLo">56 / 157</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">3 / 9</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">30 / 60</td> - </tr> - <tr> - <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">409 / 755</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">20 / 30</td> - <td class="coverPerLo">49.0&nbsp;%</td> - <td class="coverNumLo">295 / 602</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> - </td> - <td class="coverPerLo">59.7&nbsp;%</td> - <td class="coverNumLo">43 / 72</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">30.4&nbsp;%</td> - <td class="coverNumLo">14 / 46</td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> - </td> - <td class="coverPerLo">67.2&nbsp;%</td> - <td class="coverNumLo">223 / 332</td> - <td class="coverPerHi">90.9&nbsp;%</td> - <td class="coverNumHi">10 / 11</td> - <td class="coverPerLo">55.4&nbsp;%</td> - <td class="coverNumLo">124 / 224</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html deleted file mode 100644 index 99f62562..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/index.html +++ /dev/null @@ -1,275 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - server</td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">876</td> - <td class="headerCovTableEntry">3080</td> - <td class="headerCovTableEntryLo">28.4 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">49</td> - <td class="headerCovTableEntry">124</td> - <td class="headerCovTableEntryLo">39.5 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">541</td> - <td class="headerCovTableEntry">2007</td> - <td class="headerCovTableEntryLo">27.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="80%" cellpadding=1 cellspacing=1 border=0> - - <tr> - <td width="44%"><br></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - <td width="8%"></td> - </tr> - - <tr> - <td class="tableHead">Filename <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by name" title="Sort by name" border=0></span></td> - <td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><a href="index-sort-f.html"><img src="../updown.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></a></span></td> - <td class="tableHead" colspan=2>Branches <span class="tableHeadSort"><a href="index-sort-b.html"><img src="../updown.png" width=10 height=14 alt="Sort by branch coverage" title="Sort by branch coverage" border=0></a></span></td> - </tr> - <tr> - <td class="coverFile"><a href="access.c.gcov.html">access.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=54 height=10 alt="54.2%"><img src="../snow.png" width=46 height=10 alt="54.2%"></td></tr></table> - </td> - <td class="coverPerLo">54.2&nbsp;%</td> - <td class="coverNumLo">409 / 755</td> - <td class="coverPerLo">66.7&nbsp;%</td> - <td class="coverNumLo">20 / 30</td> - <td class="coverPerLo">49.0&nbsp;%</td> - <td class="coverNumLo">295 / 602</td> - </tr> - <tr> - <td class="coverFile"><a href="config_init.c.gcov.html">config_init.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=67 height=10 alt="67.2%"><img src="../snow.png" width=33 height=10 alt="67.2%"></td></tr></table> - </td> - <td class="coverPerLo">67.2&nbsp;%</td> - <td class="coverNumLo">223 / 332</td> - <td class="coverPerHi">90.9&nbsp;%</td> - <td class="coverNumHi">10 / 11</td> - <td class="coverPerLo">55.4&nbsp;%</td> - <td class="coverNumLo">124 / 224</td> - </tr> - <tr> - <td class="coverFile"><a href="extcmd.c.gcov.html">extcmd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 100</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 6</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 72</td> - </tr> - <tr> - <td class="coverFile"><a href="fw_util_firewalld.c.gcov.html">fw_util_firewalld.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=9 height=10 alt="9.2%"><img src="../snow.png" width=91 height=10 alt="9.2%"></td></tr></table> - </td> - <td class="coverPerLo">9.2&nbsp;%</td> - <td class="coverNumLo">53 / 575</td> - <td class="coverPerLo">10.3&nbsp;%</td> - <td class="coverNumLo">3 / 29</td> - <td class="coverPerLo">11.3&nbsp;%</td> - <td class="coverNumLo">34 / 302</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd.c.gcov.html">fwknopd.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=29 height=10 alt="29.1%"><img src="../snow.png" width=71 height=10 alt="29.1%"></td></tr></table> - </td> - <td class="coverPerLo">29.1&nbsp;%</td> - <td class="coverNumLo">80 / 275</td> - <td class="coverPerLo">53.8&nbsp;%</td> - <td class="coverNumLo">7 / 13</td> - <td class="coverPerLo">22.0&nbsp;%</td> - <td class="coverNumLo">36 / 164</td> - </tr> - <tr> - <td class="coverFile"><a href="fwknopd_errors.c.gcov.html">fwknopd_errors.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 24</td> - </tr> - <tr> - <td class="coverFile"><a href="incoming_spa.c.gcov.html">incoming_spa.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 344</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 5</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 230</td> - </tr> - <tr> - <td class="coverFile"><a href="log_msg.c.gcov.html">log_msg.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=60 height=10 alt="59.7%"><img src="../snow.png" width=40 height=10 alt="59.7%"></td></tr></table> - </td> - <td class="coverPerLo">59.7&nbsp;%</td> - <td class="coverNumLo">43 / 72</td> - <td class="coverPerHi">100.0&nbsp;%</td> - <td class="coverNumHi">4 / 4</td> - <td class="coverPerLo">30.4&nbsp;%</td> - <td class="coverNumLo">14 / 46</td> - </tr> - <tr> - <td class="coverFile"><a href="pcap_capture.c.gcov.html">pcap_capture.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 103</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 70</td> - </tr> - <tr> - <td class="coverFile"><a href="process_packet.c.gcov.html">process_packet.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 57</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 40</td> - </tr> - <tr> - <td class="coverFile"><a href="replay_cache.c.gcov.html">replay_cache.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=36 height=10 alt="35.7%"><img src="../snow.png" width=64 height=10 alt="35.7%"></td></tr></table> - </td> - <td class="coverPerLo">35.7&nbsp;%</td> - <td class="coverNumLo">56 / 157</td> - <td class="coverPerLo">33.3&nbsp;%</td> - <td class="coverNumLo">3 / 9</td> - <td class="coverPerLo">50.0&nbsp;%</td> - <td class="coverNumLo">30 / 60</td> - </tr> - <tr> - <td class="coverFile"><a href="sig_handler.c.gcov.html">sig_handler.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 61</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 3</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 31</td> - </tr> - <tr> - <td class="coverFile"><a href="tcp_server.c.gcov.html">tcp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 63</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 30</td> - </tr> - <tr> - <td class="coverFile"><a href="udp_server.c.gcov.html">udp_server.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../snow.png" width=100 height=10 alt="0.0%"></td></tr></table> - </td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 81</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 1</td> - <td class="coverPerLo">0.0&nbsp;%</td> - <td class="coverNumLo">0 / 54</td> - </tr> - <tr> - <td class="coverFile"><a href="utils.c.gcov.html">utils.c</a></td> - <td class="coverBar" align="center"> - <table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=16 height=10 alt="16.0%"><img src="../snow.png" width=84 height=10 alt="16.0%"></td></tr></table> - </td> - <td class="coverPerLo">16.0&nbsp;%</td> - <td class="coverNumLo">12 / 75</td> - <td class="coverPerLo">28.6&nbsp;%</td> - <td class="coverNumLo">2 / 7</td> - <td class="coverPerLo">13.8&nbsp;%</td> - <td class="coverNumLo">8 / 58</td> - </tr> - </table> - </center> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html deleted file mode 100644 index 11f19905..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func-sort-c.html +++ /dev/null @@ -1,97 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/log_msg.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">43</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">59.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntryLo">30.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="log_msg.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#156">log_msg</a></td> - <td class="coverFnHi">136881</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#54">free_logging</a></td> - <td class="coverFnHi">2609</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#211">log_set_verbosity</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#63">init_logging</a></td> - <td class="coverFnHi">795</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html deleted file mode 100644 index a6a141f7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.func.html +++ /dev/null @@ -1,97 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/log_msg.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - log_msg.c<span style="font-size: 80%;"> (<a href="log_msg.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">43</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">59.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntryLo">30.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="log_msg.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#54">free_logging</a></td> - <td class="coverFnHi">2609</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#63">init_logging</a></td> - <td class="coverFnHi">795</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#156">log_msg</a></td> - <td class="coverFnHi">136881</td> - </tr> - <tr> - <td class="coverFn"><a href="log_msg.c.gcov.html#211">log_set_verbosity</a></td> - <td class="coverFnHi">795</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html deleted file mode 100644 index 5a78a9b8..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/log_msg.c.gcov.html +++ /dev/null @@ -1,303 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/log_msg.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - log_msg.c<span style="font-size: 80%;"> (source / <a href="log_msg.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">43</td> - <td class="headerCovTableEntry">72</td> - <td class="headerCovTableEntryLo">59.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntry">4</td> - <td class="headerCovTableEntryHi">100.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">14</td> - <td class="headerCovTableEntry">46</td> - <td class="headerCovTableEntryLo">30.4 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: log_msg.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: General logging routine that can write to syslog and/or stderr -<span class="lineNum"> 7 </span> : : * and can take varibale number of args. -<span class="lineNum"> 8 </span> : : * -<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 12 </span> : : * -<span class="lineNum"> 13 </span> : : * License (GNU General Public License): -<span class="lineNum"> 14 </span> : : * -<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 19 </span> : : * -<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 24 </span> : : * -<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 28 </span> : : * USA -<span class="lineNum"> 29 </span> : : * -<span class="lineNum"> 30 </span> : : ***************************************************************************** -<span class="lineNum"> 31 </span> : : */ -<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 35 </span> : : -<span class="lineNum"> 36 </span> : : /* The default log facility (can be overridden via config file directive). -<span class="lineNum"> 37 </span> : : */ -<span class="lineNum"> 38 </span> : : static int syslog_fac = LOG_DAEMON; -<span class="lineNum"> 39 </span> : : -<span class="lineNum"> 40 </span> : : /* This value is or'ed with the log level on all logging calls. This allows -<span class="lineNum"> 41 </span> : : * for force log to stderr instead of syslog simply be setting this to the -<span class="lineNum"> 42 </span> : : * appropriate value (which is done at init_logging(). -<span class="lineNum"> 43 </span> : : */ -<span class="lineNum"> 44 </span> : : static int static_log_flag = LOG_STDERR_ONLY; -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : /* The name to use for ID in log messages. This defaults to fwknopd. -<span class="lineNum"> 47 </span> : : */ -<span class="lineNum"> 48 </span> : : static char *log_name = NULL; -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : /* The value of the default verbosity used by the log module */ -<span class="lineNum"> 51 </span> : : static int verbosity = LOG_DEFAULT_VERBOSITY; -<span class="lineNum"> 52 </span> : : -<span class="lineNum"> 53 </span> : : /* Free resources allocated for logging. -<a name="54"><span class="lineNum"> 54 </span> : : */</a> -<span class="lineNum"> 55 </span> : : void -<span class="lineNum"> 56 </span> :<span class="lineCov"> 2609 : free_logging(void)</span> -<span class="lineNum"> 57 </span> : : { -<span class="lineNum"> 58 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchCov" title="Branch 1 was taken 1814 times"> + </span>]:<span class="lineCov"> 2609 : if(log_name != NULL)</span> -<span class="lineNum"> 59 </span> :<span class="lineCov"> 795 : free(log_name);</span> -<span class="lineNum"> 60 </span> :<span class="lineCov"> 2609 : }</span> -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> : : /* Initialize logging sets the name used for syslog. -<a name="63"><span class="lineNum"> 63 </span> : : */</a> -<span class="lineNum"> 64 </span> : : void -<span class="lineNum"> 65 </span> :<span class="lineCov"> 795 : init_logging(fko_srv_options_t *opts) {</span> -<span class="lineNum"> 66 </span> :<span class="lineCov"> 795 : char *my_name = NULL;</span> -<span class="lineNum"> 67 </span> :<span class="lineCov"> 795 : int is_syslog = 0;</span> -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> : : /* In case this is a re-init. -<span class="lineNum"> 70 </span> : : */ -<span class="lineNum"> 71 </span> :<span class="lineCov"> 795 : free_logging();</span> -<span class="lineNum"> 72 </span> : : -<span class="lineNum"> 73 </span> : : /* Allocate memory for the log_name and set the my_name to point to the -<span class="lineNum"> 74 </span> : : * appropriate name. The name should already be set in the config struct -<span class="lineNum"> 75 </span> : : * but if it is not, fallback to the default as defined by 'MY_NAME'. -<span class="lineNum"> 76 </span> : : */ -<span class="lineNum"> 77 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_IDENTITY] != NULL</span> -<span class="lineNum"> 78 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : &amp;&amp; opts-&gt;config[CONF_SYSLOG_IDENTITY][0] != '\0')</span> -<span class="lineNum"> 79 </span> : : { -<span class="lineNum"> 80 </span> :<span class="lineCov"> 795 : my_name = opts-&gt;config[CONF_SYSLOG_IDENTITY];</span> -<span class="lineNum"> 81 </span> :<span class="lineCov"> 795 : log_name = calloc(1, strlen(opts-&gt;config[CONF_SYSLOG_IDENTITY])+1);</span> -<span class="lineNum"> 82 </span> :<span class="lineCov"> 795 : is_syslog = 1;</span> -<span class="lineNum"> 83 </span> : : } -<span class="lineNum"> 84 </span> : : else -<span class="lineNum"> 85 </span> : : { -<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : my_name = (char*)&amp;MY_NAME;</span> -<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : log_name = calloc(1, strlen(MY_NAME)+1);</span> -<span class="lineNum"> 88 </span> : : } -<span class="lineNum"> 89 </span> : : -<span class="lineNum"> 90 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(log_name == NULL)</span> -<span class="lineNum"> 91 </span> : : { -<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Memory allocation error setting log_name!\n&quot;);</span> -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 94 </span> : : } -<span class="lineNum"> 95 </span> : : -<span class="lineNum"> 96 </span> : : /* Set our name. -<span class="lineNum"> 97 </span> : : */ -<span class="lineNum"> 98 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if (is_syslog)</span> -<span class="lineNum"> 99 </span> :<span class="lineCov"> 795 : strlcpy(log_name, my_name, strlen(opts-&gt;config[CONF_SYSLOG_IDENTITY])+1);</span> -<span class="lineNum"> 100 </span> : : else -<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : strlcpy(log_name, my_name, strlen(MY_NAME)+1);</span> -<span class="lineNum"> 102 </span> : : -<span class="lineNum"> 103 </span> :<span class="lineCov"> 795 : static_log_flag = LOG_SYSLOG_ONLY;</span> -<span class="lineNum"> 104 </span> : : -<span class="lineNum"> 105 </span> : : /* If we are running in the foreground or performing firewall operations, -<span class="lineNum"> 106 </span> : : * all logging will go to stderr. -<span class="lineNum"> 107 </span> : : */ -<span class="lineNum"> 108 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if(opts-&gt;foreground != 0</span> -<span class="lineNum"> 109 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || opts-&gt;fw_flush != 0</span> -<span class="lineNum"> 110 </span> : : || opts-&gt;fw_list != 0 -<span class="lineNum"> 111 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : || opts-&gt;fw_list_all != 0)</span> -<span class="lineNum"> 112 </span> :<span class="lineCov"> 795 : static_log_flag = LOG_STDERR_ONLY;</span> -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> : : /* If the user forces syslog using --syslog-enable, we remove the -<span class="lineNum"> 115 </span> : : * LOG_WITHOUT_SYSLOG flag. It means all messages will go through syslog */ -<span class="lineNum"> 116 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>]:<span class="lineCov"> 795 : if (opts-&gt;syslog_enable != 0)</span> -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : static_log_flag &amp;= ~LOG_WITHOUT_SYSLOG;</span> -<span class="lineNum"> 118 </span> : : -<span class="lineNum"> 119 </span> : : /* Parse the log facility as specified in the config struct. If, for some -<span class="lineNum"> 120 </span> : : * reason, it is not, fac will already be set to LOG_DAEMON. -<span class="lineNum"> 121 </span> : : */ -<span class="lineNum"> 122 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(opts-&gt;config[CONF_SYSLOG_FACILITY] != NULL</span> -<span class="lineNum"> 123 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : &amp;&amp; opts-&gt;config[CONF_SYSLOG_FACILITY][0] != '\0')</span> -<span class="lineNum"> 124 </span> : : { -<span class="lineNum"> 125 </span> [<span class="branchCov" title="Branch 0 was taken 795 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 795 : if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_DAEMON&quot;))</span> -<span class="lineNum"> 126 </span> :<span class="lineCov"> 795 : syslog_fac = LOG_DAEMON;</span> -<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL0&quot;))</span> -<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL0;</span> -<span class="lineNum"> 129 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL1&quot;))</span> -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL1;</span> -<span class="lineNum"> 131 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL2&quot;))</span> -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL2;</span> -<span class="lineNum"> 133 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL3&quot;))</span> -<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL3;</span> -<span class="lineNum"> 135 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL4&quot;))</span> -<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL4;</span> -<span class="lineNum"> 137 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL5&quot;))</span> -<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL5;</span> -<span class="lineNum"> 139 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL6&quot;))</span> -<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL6;</span> -<span class="lineNum"> 141 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(!strcasecmp(opts-&gt;config[CONF_SYSLOG_FACILITY], &quot;LOG_LOCAL7&quot;))</span> -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : syslog_fac = LOG_LOCAL7;</span> -<span class="lineNum"> 143 </span> : : else -<span class="lineNum"> 144 </span> : : { -<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : fprintf(stderr, &quot;Invalid SYSLOG_FACILITY setting '%s'\n&quot;,</span> -<span class="lineNum"> 146 </span> : : opts-&gt;config[CONF_SYSLOG_FACILITY]); -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 148 </span> : : } -<span class="lineNum"> 149 </span> : : } -<span class="lineNum"> 150 </span> : : -<span class="lineNum"> 151 </span> :<span class="lineCov"> 795 : verbosity = LOG_DEFAULT_VERBOSITY + opts-&gt;verbose;</span> -<span class="lineNum"> 152 </span> :<span class="lineCov"> 795 : }</span> -<span class="lineNum"> 153 </span> : : -<span class="lineNum"> 154 </span> : : /* Syslog message function. It uses default set at intialization, and also -<span class="lineNum"> 155 </span> : : * takes variable args to accomodate printf-like formatting and expansion. -<a name="156"><span class="lineNum"> 156 </span> : : */</a> -<span class="lineNum"> 157 </span> : : void -<span class="lineNum"> 158 </span> :<span class="lineCov"> 136881 : log_msg(int level, char* msg, ...)</span> -<span class="lineNum"> 159 </span> : : { -<span class="lineNum"> 160 </span> : : va_list ap, apse; -<span class="lineNum"> 161 </span> : : -<span class="lineNum"> 162 </span> : : /* Make sure the level is in the right range */ -<span class="lineNum"> 163 </span> [<span class="branchCov" title="Branch 0 was taken 136881 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 136881 : if ((level &amp; LOG_VERBOSITY_MASK) &gt; verbosity)</span> -<span class="lineNum"> 164 </span> :<span class="lineCov"> 136881 : return;</span> -<span class="lineNum"> 165 </span> : : -<span class="lineNum"> 166 </span> :<span class="lineCov"> 136881 : va_start(ap, msg);</span> -<span class="lineNum"> 167 </span> : : -<span class="lineNum"> 168 </span> :<span class="lineCov"> 136881 : level |= static_log_flag;</span> -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> : : /* Print msg to stderr if the level was or'ed with LOG_STDERR -<span class="lineNum"> 171 </span> : : */ -<span class="lineNum"> 172 </span> [<span class="branchCov" title="Branch 0 was taken 136881 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 136881 : if(LOG_STDERR &amp; level)</span> -<span class="lineNum"> 173 </span> : : { -<span class="lineNum"> 174 </span> : : /* Need to make a copy of our va_list so we don't screw -<span class="lineNum"> 175 </span> : : * up the message going to syslog after we print it to stderr. -<span class="lineNum"> 176 </span> : : */ -<span class="lineNum"> 177 </span> :<span class="lineCov"> 136881 : va_copy(apse, ap);</span> -<span class="lineNum"> 178 </span> : : -<span class="lineNum"> 179 </span> :<span class="lineCov"> 136881 : vfprintf(stderr, msg, apse);</span> -<span class="lineNum"> 180 </span> :<span class="lineCov"> 136881 : fprintf(stderr, &quot;\n&quot;);</span> -<span class="lineNum"> 181 </span> :<span class="lineCov"> 136881 : fflush(stderr);</span> -<span class="lineNum"> 182 </span> : : -<span class="lineNum"> 183 </span> :<span class="lineCov"> 136881 : va_end(apse);</span> -<span class="lineNum"> 184 </span> : : } -<span class="lineNum"> 185 </span> : : -<span class="lineNum"> 186 </span> : : /* If the message has not to be printed to the syslog, we return */ -<span class="lineNum"> 187 </span> [<span class="branchCov" title="Branch 0 was taken 136881 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 136881 : if (LOG_WITHOUT_SYSLOG &amp; level)</span> -<span class="lineNum"> 188 </span> : : { -<span class="lineNum"> 189 </span> :<span class="lineCov"> 136881 : va_end(ap);</span> -<span class="lineNum"> 190 </span> :<span class="lineCov"> 136881 : return;</span> -<span class="lineNum"> 191 </span> : : } -<span class="lineNum"> 192 </span> : : -<span class="lineNum"> 193 </span> : : /* Remove the static log flags from the level */ -<span class="lineNum"> 194 </span> :<span class="lineNoCov"> 0 : level &amp;= LOG_VERBOSITY_MASK;</span> -<span class="lineNum"> 195 </span> : : -<span class="lineNum"> 196 </span> : : /* Send the message to syslog. -<span class="lineNum"> 197 </span> : : */ -<span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : openlog(log_name, LOG_PID, syslog_fac);</span> -<span class="lineNum"> 199 </span> : : -<span class="lineNum"> 200 </span> : : vsyslog(level, msg, ap); -<span class="lineNum"> 201 </span> : : -<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : va_end(ap);</span> -<span class="lineNum"> 203 </span> : : } -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> : : /** -<span class="lineNum"> 206 </span> : : * Set the verbosity level for the current context of the log module. -<span class="lineNum"> 207 </span> : : * -<span class="lineNum"> 208 </span> : : * The verbosity levels used by the module are defined by the syslog module. -<span class="lineNum"> 209 </span> : : * -<span class="lineNum"> 210 </span> : : * @param level verbosity level to set (LOG_INFO, LOG_NOTICE ...) -<a name="211"><span class="lineNum"> 211 </span> : : */</a> -<span class="lineNum"> 212 </span> : : void -<span class="lineNum"> 213 </span> :<span class="lineCov"> 795 : log_set_verbosity(int level)</span> -<span class="lineNum"> 214 </span> : : { -<span class="lineNum"> 215 </span> :<span class="lineCov"> 795 : verbosity = level;</span> -<span class="lineNum"> 216 </span> :<span class="lineCov"> 795 : }</span> -<span class="lineNum"> 217 </span> : : -<span class="lineNum"> 218 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html deleted file mode 100644 index 429736dc..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/pcap_capture.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - pcap_capture.c<span style="font-size: 80%;"> (<a href="pcap_capture.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">103</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">70</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="pcap_capture.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="pcap_capture.c.gcov.html#52">pcap_capture</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html deleted file mode 100644 index c1859b1c..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.func.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/pcap_capture.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - pcap_capture.c<span style="font-size: 80%;"> (<a href="pcap_capture.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">103</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">70</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="pcap_capture.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="pcap_capture.c.gcov.html#52">pcap_capture</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html deleted file mode 100644 index f31b369b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/pcap_capture.c.gcov.html +++ /dev/null @@ -1,427 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/pcap_capture.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - pcap_capture.c<span style="font-size: 80%;"> (source / <a href="pcap_capture.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">103</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">70</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: pcap_capture.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: The pcap capture routines for fwknopd. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : -<span class="lineNum"> 32 </span> : : #if USE_LIBPCAP -<span class="lineNum"> 33 </span> : : #include &lt;pcap.h&gt; -<span class="lineNum"> 34 </span> : : #endif -<span class="lineNum"> 35 </span> : : -<span class="lineNum"> 36 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 37 </span> : : #include &quot;pcap_capture.h&quot; -<span class="lineNum"> 38 </span> : : #include &quot;process_packet.h&quot; -<span class="lineNum"> 39 </span> : : #include &quot;fw_util.h&quot; -<span class="lineNum"> 40 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 41 </span> : : #include &quot;fwknopd_errors.h&quot; -<span class="lineNum"> 42 </span> : : #include &quot;sig_handler.h&quot; -<span class="lineNum"> 43 </span> : : #include &quot;tcp_server.h&quot; -<span class="lineNum"> 44 </span> : : -<span class="lineNum"> 45 </span> : : #if HAVE_SYS_WAIT_H -<span class="lineNum"> 46 </span> : : #include &lt;sys/wait.h&gt; -<span class="lineNum"> 47 </span> : : #endif -<span class="lineNum"> 48 </span> : : -<span class="lineNum"> 49 </span> : : #if USE_LIBPCAP -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> : : /* The pcap capture routine. -<a name="52"><span class="lineNum"> 52 </span> : : */</a> -<span class="lineNum"> 53 </span> : : int -<span class="lineNum"> 54 </span> :<span class="lineNoCov"> 0 : pcap_capture(fko_srv_options_t *opts)</span> -<span class="lineNum"> 55 </span> : : { -<span class="lineNum"> 56 </span> : : pcap_t *pcap; -<span class="lineNum"> 57 </span> :<span class="lineNoCov"> 0 : char errstr[PCAP_ERRBUF_SIZE] = {0};</span> -<span class="lineNum"> 58 </span> : : struct bpf_program fp; -<span class="lineNum"> 59 </span> : : int res; -<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : int pcap_errcnt = 0;</span> -<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : int pending_break = 0;</span> -<span class="lineNum"> 62 </span> :<span class="lineNoCov"> 0 : int promisc = 0;</span> -<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : int set_direction = 1;</span> -<span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : int pcap_file_mode = 0;</span> -<span class="lineNum"> 65 </span> : : int status; -<span class="lineNum"> 66 </span> : : int useconds; -<span class="lineNum"> 67 </span> : : int pcap_dispatch_count; -<span class="lineNum"> 68 </span> : : int max_sniff_bytes; -<span class="lineNum"> 69 </span> : : int is_err; -<span class="lineNum"> 70 </span> : : pid_t child_pid; -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : #if FIREWALL_IPFW -<span class="lineNum"> 73 </span> : : time_t now; -<span class="lineNum"> 74 </span> : : #endif -<span class="lineNum"> 75 </span> : : -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : useconds = strtol_wrapper(opts-&gt;config[CONF_PCAP_LOOP_SLEEP],</span> -<span class="lineNum"> 77 </span> : : 0, RCHK_MAX_PCAP_LOOP_SLEEP, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 78 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 79 </span> : : { -<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid PCAP_LOOP_SLEEP_value&quot;);</span> -<span class="lineNum"> 81 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 82 </span> : : } -<span class="lineNum"> 83 </span> : : -<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : max_sniff_bytes = strtol_wrapper(opts-&gt;config[CONF_MAX_SNIFF_BYTES],</span> -<span class="lineNum"> 85 </span> : : 0, RCHK_MAX_SNIFF_BYTES, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 86 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 87 </span> : : { -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid MAX_SNIFF_BYTES&quot;);</span> -<span class="lineNum"> 89 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 90 </span> : : } -<span class="lineNum"> 91 </span> : : -<span class="lineNum"> 92 </span> : : /* Set promiscuous mode if ENABLE_PCAP_PROMISC is set to 'Y'. -<span class="lineNum"> 93 </span> : : */ -<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(strncasecmp(opts-&gt;config[CONF_ENABLE_PCAP_PROMISC], &quot;Y&quot;, 1) == 0)</span> -<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : promisc = 1;</span> -<span class="lineNum"> 96 </span> : : -<span class="lineNum"> 97 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;config[CONF_PCAP_FILE] != NULL</span> -<span class="lineNum"> 98 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; opts-&gt;config[CONF_PCAP_FILE][0] != '\0')</span> -<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : pcap_file_mode = 1;</span> -<span class="lineNum"> 100 </span> : : -<span class="lineNum"> 101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_file_mode == 1) {</span> -<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Reading pcap file: %s&quot;,</span> -<span class="lineNum"> 103 </span> : : opts-&gt;config[CONF_PCAP_FILE]); -<span class="lineNum"> 104 </span> : : -<span class="lineNum"> 105 </span> :<span class="lineNoCov"> 0 : pcap = pcap_open_offline(opts-&gt;config[CONF_PCAP_FILE], errstr);</span> -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap == NULL)</span> -<span class="lineNum"> 108 </span> : : { -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] pcap_open_offline() error: %s&quot;,</span> -<span class="lineNum"> 110 </span> : : errstr); -<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 112 </span> : : } -<span class="lineNum"> 113 </span> : : } -<span class="lineNum"> 114 </span> : : else -<span class="lineNum"> 115 </span> : : { -<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Sniffing interface: %s&quot;,</span> -<span class="lineNum"> 117 </span> : : opts-&gt;config[CONF_PCAP_INTF]); -<span class="lineNum"> 118 </span> : : -<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : pcap = pcap_open_live(opts-&gt;config[CONF_PCAP_INTF],</span> -<span class="lineNum"> 120 </span> : : max_sniff_bytes, promisc, 100, errstr -<span class="lineNum"> 121 </span> : : ); -<span class="lineNum"> 122 </span> : : -<span class="lineNum"> 123 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap == NULL)</span> -<span class="lineNum"> 124 </span> : : { -<span class="lineNum"> 125 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] pcap_open_live() error: %s&quot;, errstr);</span> -<span class="lineNum"> 126 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 127 </span> : : } -<span class="lineNum"> 128 </span> : : } -<span class="lineNum"> 129 </span> : : -<span class="lineNum"> 130 </span> : : /* Set pcap filters, if any. -<span class="lineNum"> 131 </span> : : */ -<span class="lineNum"> 132 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;config[CONF_PCAP_FILTER][0] != '\0')</span> -<span class="lineNum"> 133 </span> : : { -<span class="lineNum"> 134 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_compile(pcap, &amp;fp, opts-&gt;config[CONF_PCAP_FILTER], 1, 0) == -1)</span> -<span class="lineNum"> 135 </span> : : { -<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error compiling pcap filter: %s&quot;,</span> -<span class="lineNum"> 137 </span> : : pcap_geterr(pcap) -<span class="lineNum"> 138 </span> : : ); -<span class="lineNum"> 139 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 140 </span> : : } -<span class="lineNum"> 141 </span> : : -<span class="lineNum"> 142 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_setfilter(pcap, &amp;fp) == -1)</span> -<span class="lineNum"> 143 </span> : : { -<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error setting pcap filter: %s&quot;,</span> -<span class="lineNum"> 145 </span> : : pcap_geterr(pcap) -<span class="lineNum"> 146 </span> : : ); -<span class="lineNum"> 147 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 148 </span> : : } -<span class="lineNum"> 149 </span> : : -<span class="lineNum"> 150 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;PCAP filter is: '%s'&quot;, opts-&gt;config[CONF_PCAP_FILTER]);</span> -<span class="lineNum"> 151 </span> : : -<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : pcap_freecode(&amp;fp);</span> -<span class="lineNum"> 153 </span> : : } -<span class="lineNum"> 154 </span> : : -<span class="lineNum"> 155 </span> : : /* Determine and set the data link encapsulation offset. -<span class="lineNum"> 156 </span> : : */ -<span class="lineNum"> 157 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span><span class="branchNoExec" title="Branch 4 was not executed"> # </span>]:<span class="lineNoCov"> 0 : switch(pcap_datalink(pcap)) {</span> -<span class="lineNum"> 158 </span> : : case DLT_EN10MB: -<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 14;</span> -<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 161 </span> : : #if defined(__linux__) -<span class="lineNum"> 162 </span> : : case DLT_LINUX_SLL: -<span class="lineNum"> 163 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 16;</span> -<span class="lineNum"> 164 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 165 </span> : : #elif defined(__OpenBSD__) -<span class="lineNum"> 166 </span> : : case DLT_LOOP: -<span class="lineNum"> 167 </span> : : set_direction = 0; -<span class="lineNum"> 168 </span> : : opts-&gt;data_link_offset = 4; -<span class="lineNum"> 169 </span> : : break; -<span class="lineNum"> 170 </span> : : #endif -<span class="lineNum"> 171 </span> : : case DLT_NULL: -<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : set_direction = 0;</span> -<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 4;</span> -<span class="lineNum"> 174 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 175 </span> : : default: -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : opts-&gt;data_link_offset = 0;</span> -<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 178 </span> : : } -<span class="lineNum"> 179 </span> : : -<span class="lineNum"> 180 </span> : : /* We are only interested on seeing packets coming into the interface. -<span class="lineNum"> 181 </span> : : */ -<span class="lineNum"> 182 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((opts-&gt;pcap_any_direction == 0)</span> -<span class="lineNum"> 183 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (set_direction == 1) &amp;&amp; (pcap_file_mode == 0)</span> -<span class="lineNum"> 184 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (pcap_setdirection(pcap, PCAP_D_IN) &lt; 0))</span> -<span class="lineNum"> 185 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> -<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[*] Warning: pcap error on setdirection: %s.&quot;,</span> -<span class="lineNum"> 187 </span> : : pcap_geterr(pcap)); -<span class="lineNum"> 188 </span> : : -<span class="lineNum"> 189 </span> : : /* Set our pcap handle nonblocking mode. -<span class="lineNum"> 190 </span> : : * -<span class="lineNum"> 191 </span> : : * NOTE: This is simply set to 0 for now until we find a need -<span class="lineNum"> 192 </span> : : * to actually use this mode (which when set on a FreeBSD -<span class="lineNum"> 193 </span> : : * system, it silently breaks the packet capture). -<span class="lineNum"> 194 </span> : : */ -<span class="lineNum"> 195 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((pcap_file_mode == 0)</span> -<span class="lineNum"> 196 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : &amp;&amp; (pcap_setnonblock(pcap, DEF_PCAP_NONBLOCK, errstr)) == -1)</span> -<span class="lineNum"> 197 </span> : : { -<span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error setting pcap nonblocking to %i: %s&quot;,</span> -<span class="lineNum"> 199 </span> : : 0, errstr -<span class="lineNum"> 200 </span> : : ); -<span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 202 </span> : : } -<span class="lineNum"> 203 </span> : : -<span class="lineNum"> 204 </span> :<span class="lineNoCov"> 0 : pcap_dispatch_count = strtol_wrapper(opts-&gt;config[CONF_PCAP_DISPATCH_COUNT],</span> -<span class="lineNum"> 205 </span> : : 0, RCHK_MAX_PCAP_DISPATCH_COUNT, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 206 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 207 </span> : : { -<span class="lineNum"> 208 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] invalid PCAP_DISPATCH_COUNT&quot;);</span> -<span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 210 </span> : : } -<span class="lineNum"> 211 </span> : : -<span class="lineNum"> 212 </span> : : /* Initialize our signal handlers. You can check the return value for -<span class="lineNum"> 213 </span> : : * the number of signals that were *not* set. Those that were not set -<span class="lineNum"> 214 </span> : : * will be listed in the log/stderr output. -<span class="lineNum"> 215 </span> : : */ -<span class="lineNum"> 216 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_sig_handlers() &gt; 0)</span> -<span class="lineNum"> 217 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Errors encountered when setting signal handlers.&quot;);</span> -<span class="lineNum"> 218 </span> : : -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Starting fwknopd main event loop.&quot;);</span> -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> : : /* Jump into our home-grown packet cature loop. -<span class="lineNum"> 222 </span> : : */ -<span class="lineNum"> 223 </span> : : while(1) -<span class="lineNum"> 224 </span> : : { -<span class="lineNum"> 225 </span> : : /* If we got a SIGCHLD and it was the tcp server, then handle it here. -<span class="lineNum"> 226 </span> : : */ -<span class="lineNum"> 227 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_sigchld)</span> -<span class="lineNum"> 228 </span> : : { -<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;tcp_server_pid &gt; 0)</span> -<span class="lineNum"> 230 </span> : : { -<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : child_pid = waitpid(0, &amp;status, WNOHANG);</span> -<span class="lineNum"> 232 </span> : : -<span class="lineNum"> 233 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(child_pid == opts-&gt;tcp_server_pid)</span> -<span class="lineNum"> 234 </span> : : { -<span class="lineNum"> 235 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(WIFSIGNALED(status))</span> -<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;TCP server got signal: %i&quot;, WTERMSIG(status));</span> -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 239 </span> : : &quot;TCP server exited with status of %i. Attempting restart.&quot;, -<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : WEXITSTATUS(status)</span> -<span class="lineNum"> 241 </span> : : ); -<span class="lineNum"> 242 </span> : : -<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : opts-&gt;tcp_server_pid = 0;</span> -<span class="lineNum"> 244 </span> : : -<span class="lineNum"> 245 </span> : : /* Attempt to restart tcp server ? */ -<span class="lineNum"> 246 </span> :<span class="lineNoCov"> 0 : usleep(1000000);</span> -<span class="lineNum"> 247 </span> :<span class="lineNoCov"> 0 : run_tcp_server(opts);</span> -<span class="lineNum"> 248 </span> : : } -<span class="lineNum"> 249 </span> : : } -<span class="lineNum"> 250 </span> : : -<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : got_sigchld = 0;</span> -<span class="lineNum"> 252 </span> : : } -<span class="lineNum"> 253 </span> : : -<span class="lineNum"> 254 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig_do_stop())</span> -<span class="lineNum"> 255 </span> : : { -<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : pcap_breakloop(pcap);</span> -<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : pending_break = 1;</span> -<span class="lineNum"> 258 </span> : : } -<span class="lineNum"> 259 </span> : : -<span class="lineNum"> 260 </span> :<span class="lineNoCov"> 0 : res = pcap_dispatch(pcap, pcap_dispatch_count,</span> -<span class="lineNum"> 261 </span> : : (pcap_handler)&amp;process_packet, (unsigned char *)opts); -<span class="lineNum"> 262 </span> : : -<span class="lineNum"> 263 </span> : : /* Count processed packets -<span class="lineNum"> 264 </span> : : */ -<span class="lineNum"> 265 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &gt; 0)</span> -<span class="lineNum"> 266 </span> : : { -<span class="lineNum"> 267 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;foreground == 1 &amp;&amp; opts-&gt;verbose &gt; 2)</span> -<span class="lineNum"> 268 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;pcap_dispatch() processed: %d packets&quot;, res);</span> -<span class="lineNum"> 269 </span> : : -<span class="lineNum"> 270 </span> : : /* Count the set of processed packets (pcap_dispatch() return -<span class="lineNum"> 271 </span> : : * value) - we use this as a comparison for --packet-limit regardless -<span class="lineNum"> 272 </span> : : * of SPA packet validity at this point. -<span class="lineNum"> 273 </span> : : */ -<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : opts-&gt;packet_ctr += res;</span> -<span class="lineNum"> 275 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;packet_ctr_limit &amp;&amp; opts-&gt;packet_ctr &gt;= opts-&gt;packet_ctr_limit)</span> -<span class="lineNum"> 276 </span> : : { -<span class="lineNum"> 277 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 278 </span> : : &quot;* Incoming packet count limit of %i reached&quot;, -<span class="lineNum"> 279 </span> : : opts-&gt;packet_ctr_limit -<span class="lineNum"> 280 </span> : : ); -<span class="lineNum"> 281 </span> : : -<span class="lineNum"> 282 </span> :<span class="lineNoCov"> 0 : pcap_breakloop(pcap);</span> -<span class="lineNum"> 283 </span> :<span class="lineNoCov"> 0 : pending_break = 1;</span> -<span class="lineNum"> 284 </span> : : } -<span class="lineNum"> 285 </span> : : } -<span class="lineNum"> 286 </span> : : /* If there was an error, complain and go on (to an extent before -<span class="lineNum"> 287 </span> : : * giving up). -<span class="lineNum"> 288 </span> : : */ -<span class="lineNum"> 289 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(res == -1)</span> -<span class="lineNum"> 290 </span> : : { -<span class="lineNum"> 291 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Error from pcap_dispatch: %s&quot;,</span> -<span class="lineNum"> 292 </span> : : pcap_geterr(pcap) -<span class="lineNum"> 293 </span> : : ); -<span class="lineNum"> 294 </span> : : -<span class="lineNum"> 295 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pcap_errcnt++ &gt; MAX_PCAP_ERRORS_BEFORE_BAIL)</span> -<span class="lineNum"> 296 </span> : : { -<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] %i consecutive pcap errors. Giving up&quot;,</span> -<span class="lineNum"> 298 </span> : : pcap_errcnt -<span class="lineNum"> 299 </span> : : ); -<span class="lineNum"> 300 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 301 </span> : : } -<span class="lineNum"> 302 </span> : : } -<span class="lineNum"> 303 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(pending_break == 1 || res == -2)</span> -<span class="lineNum"> 304 </span> : : { -<span class="lineNum"> 305 </span> : : /* pcap_breakloop was called, so we bail. */ -<span class="lineNum"> 306 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Gracefully leaving the fwknopd event loop.&quot;);</span> -<span class="lineNum"> 307 </span> : : break; -<span class="lineNum"> 308 </span> : : } -<span class="lineNum"> 309 </span> : : else -<span class="lineNum"> 310 </span> : : pcap_errcnt = 0; -<span class="lineNum"> 311 </span> : : -<span class="lineNum"> 312 </span> : : /* Check for any expired firewall rules and deal with them. -<span class="lineNum"> 313 </span> : : */ -<span class="lineNum"> 314 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!opts-&gt;test)</span> -<span class="lineNum"> 315 </span> :<span class="lineNoCov"> 0 : check_firewall_rules(opts);</span> -<span class="lineNum"> 316 </span> : : -<span class="lineNum"> 317 </span> : : #if FIREWALL_IPFW -<span class="lineNum"> 318 </span> : : /* Purge expired rules that no longer have any corresponding -<span class="lineNum"> 319 </span> : : * dynamic rules. -<span class="lineNum"> 320 </span> : : */ -<span class="lineNum"> 321 </span> : : if(opts-&gt;fw_config-&gt;total_rules &gt; 0) -<span class="lineNum"> 322 </span> : : { -<span class="lineNum"> 323 </span> : : time(&amp;now); -<span class="lineNum"> 324 </span> : : if(opts-&gt;fw_config-&gt;last_purge &lt; (now - opts-&gt;fw_config-&gt;purge_interval)) -<span class="lineNum"> 325 </span> : : { -<span class="lineNum"> 326 </span> : : ipfw_purge_expired_rules(opts); -<span class="lineNum"> 327 </span> : : opts-&gt;fw_config-&gt;last_purge = now; -<span class="lineNum"> 328 </span> : : } -<span class="lineNum"> 329 </span> : : } -<span class="lineNum"> 330 </span> : : #endif -<span class="lineNum"> 331 </span> : : -<span class="lineNum"> 332 </span> :<span class="lineNoCov"> 0 : usleep(useconds);</span> -<span class="lineNum"> 333 </span> :<span class="lineNoCov"> 0 : }</span> -<span class="lineNum"> 334 </span> : : -<span class="lineNum"> 335 </span> :<span class="lineNoCov"> 0 : pcap_close(pcap);</span> -<span class="lineNum"> 336 </span> : : -<span class="lineNum"> 337 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 338 </span> : : } -<span class="lineNum"> 339 </span> : : -<span class="lineNum"> 340 </span> : : #endif /* USE_LIBPCAP */ -<span class="lineNum"> 341 </span> : : -<span class="lineNum"> 342 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html deleted file mode 100644 index 90894255..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/process_packet.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - process_packet.c<span style="font-size: 80%;"> (<a href="process_packet.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">57</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">40</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="process_packet.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="process_packet.c.gcov.html#47">process_packet</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html deleted file mode 100644 index 11d8d63a..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.func.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/process_packet.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - process_packet.c<span style="font-size: 80%;"> (<a href="process_packet.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">57</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">40</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="process_packet.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="process_packet.c.gcov.html#47">process_packet</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html deleted file mode 100644 index 2d3ff5e8..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/process_packet.c.gcov.html +++ /dev/null @@ -1,323 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/process_packet.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - process_packet.c<span style="font-size: 80%;"> (source / <a href="process_packet.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">57</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">40</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: process_packet.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Packet parser/decoder for fwknopd server. Takes the raw packet -<span class="lineNum"> 7 </span> : : * data from libpcap and parses/extracts the packet data payload, -<span class="lineNum"> 8 </span> : : * then creates an FKO context with that data. If the context -<span class="lineNum"> 9 </span> : : * creation is successful, it is queued for processing. -<span class="lineNum"> 10 </span> : : * -<span class="lineNum"> 11 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 12 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 13 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 14 </span> : : * -<span class="lineNum"> 15 </span> : : * License (GNU General Public License): -<span class="lineNum"> 16 </span> : : * -<span class="lineNum"> 17 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 18 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 19 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 20 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 21 </span> : : * -<span class="lineNum"> 22 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 23 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 24 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 25 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 26 </span> : : * -<span class="lineNum"> 27 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 28 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 29 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 30 </span> : : * USA -<span class="lineNum"> 31 </span> : : * -<span class="lineNum"> 32 </span> : : ***************************************************************************** -<span class="lineNum"> 33 </span> : : */ -<span class="lineNum"> 34 </span> : : -<span class="lineNum"> 35 </span> : : #if USE_LIBPCAP -<span class="lineNum"> 36 </span> : : #include &lt;pcap.h&gt; -<span class="lineNum"> 37 </span> : : #endif -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 40 </span> : : #include &quot;netinet_common.h&quot; -<span class="lineNum"> 41 </span> : : #include &quot;process_packet.h&quot; -<span class="lineNum"> 42 </span> : : #include &quot;incoming_spa.h&quot; -<span class="lineNum"> 43 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 44 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 45 </span> : : -<span class="lineNum"> 46 </span> : : #if USE_LIBPCAP -<a name="47"><span class="lineNum"> 47 </span> : : </a> -<span class="lineNum"> 48 </span> : : void -<span class="lineNum"> 49 </span> :<span class="lineNoCov"> 0 : process_packet(unsigned char *args, const struct pcap_pkthdr *packet_header,</span> -<span class="lineNum"> 50 </span> : : const unsigned char *packet) -<span class="lineNum"> 51 </span> : : { -<span class="lineNum"> 52 </span> : : struct ether_header *eth_p; -<span class="lineNum"> 53 </span> : : struct iphdr *iph_p; -<span class="lineNum"> 54 </span> : : struct tcphdr *tcph_p; -<span class="lineNum"> 55 </span> : : struct udphdr *udph_p; -<span class="lineNum"> 56 </span> : : struct icmphdr *icmph_p; -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> : : unsigned char *pkt_data; -<span class="lineNum"> 59 </span> : : unsigned short pkt_data_len; -<span class="lineNum"> 60 </span> : : unsigned char *pkt_end; -<span class="lineNum"> 61 </span> : : -<span class="lineNum"> 62 </span> : : unsigned int ip_hdr_words; -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> : : unsigned char proto; -<span class="lineNum"> 65 </span> : : unsigned int src_ip; -<span class="lineNum"> 66 </span> : : unsigned int dst_ip; -<span class="lineNum"> 67 </span> : : -<span class="lineNum"> 68 </span> :<span class="lineNoCov"> 0 : unsigned short src_port = 0;</span> -<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : unsigned short dst_port = 0;</span> -<span class="lineNum"> 70 </span> : : -<span class="lineNum"> 71 </span> : : unsigned short eth_type; -<span class="lineNum"> 72 </span> : : -<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : fko_srv_options_t *opts = (fko_srv_options_t *)args;</span> -<span class="lineNum"> 74 </span> : : -<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : int offset = opts-&gt;data_link_offset;</span> -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : unsigned short pkt_len = packet_header-&gt;len;</span> -<span class="lineNum"> 78 </span> : : -<span class="lineNum"> 79 </span> : : /* This is a hack to determine if we are using the linux cooked -<span class="lineNum"> 80 </span> : : * interface. We base it on the offset being 16 which is the -<span class="lineNum"> 81 </span> : : * value it would be if the datalink is DLT_LINUX_SLL. I don't -<span class="lineNum"> 82 </span> : : * know if this is the correct way to do this, but it seems to work. -<span class="lineNum"> 83 </span> : : */ -<span class="lineNum"> 84 </span> :<span class="lineNoCov"> 0 : unsigned char assume_cooked = (offset == 16 ? 1 : 0);</span> -<span class="lineNum"> 85 </span> : : -<span class="lineNum"> 86 </span> : : /* Determine packet end. -<span class="lineNum"> 87 </span> : : */ -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : pkt_end = (unsigned char *) packet + packet_header-&gt;caplen;</span> -<span class="lineNum"> 89 </span> : : -<span class="lineNum"> 90 </span> : : /* The ethernet header. -<span class="lineNum"> 91 </span> : : */ -<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : eth_p = (struct ether_header*) packet;</span> -<span class="lineNum"> 93 </span> : : -<span class="lineNum"> 94 </span> : : /* Gotta have a complete ethernet header. -<span class="lineNum"> 95 </span> : : */ -<span class="lineNum"> 96 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (packet_header-&gt;caplen &lt; ETHER_HDR_LEN)</span> -<span class="lineNum"> 97 </span> : : return; -<span class="lineNum"> 98 </span> : : -<span class="lineNum"> 99 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : eth_type = ntohs(*((unsigned short*)&amp;eth_p-&gt;ether_type));</span> -<span class="lineNum"> 100 </span> : : -<span class="lineNum"> 101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(eth_type == 0x8100) /* 802.1q encapsulated */</span> -<span class="lineNum"> 102 </span> : : { -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : offset += 4;</span> -<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : eth_type = ntohs(*(((unsigned short*)&amp;eth_p-&gt;ether_type)+2));</span> -<span class="lineNum"> 105 </span> : : } -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> : : /* When using libpcap, pkthdr-&gt;len for 802.3 frames include CRC_LEN, -<span class="lineNum"> 108 </span> : : * but Ethenet_II frames do not. -<span class="lineNum"> 109 </span> : : */ -<span class="lineNum"> 110 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (eth_type &gt; 1500 || assume_cooked == 1)</span> -<span class="lineNum"> 111 </span> : : { -<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : pkt_len += ETHER_CRC_LEN;</span> -<span class="lineNum"> 113 </span> : : -<span class="lineNum"> 114 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(eth_type == 0xAAAA) /* 802.2 SNAP */</span> -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : offset += 5;</span> -<span class="lineNum"> 116 </span> : : } -<span class="lineNum"> 117 </span> : : else /* 802.3 Frame */ -<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : offset += 3;</span> -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> : : /* Make sure the packet length is still valid. -<span class="lineNum"> 121 </span> : : */ -<span class="lineNum"> 122 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (! ETHER_IS_VALID_LEN(pkt_len) )</span> -<span class="lineNum"> 123 </span> : : return; -<span class="lineNum"> 124 </span> : : -<span class="lineNum"> 125 </span> : : /* Pull the IP header. -<span class="lineNum"> 126 </span> : : */ -<span class="lineNum"> 127 </span> :<span class="lineNoCov"> 0 : iph_p = (struct iphdr*)(packet + offset);</span> -<span class="lineNum"> 128 </span> : : -<span class="lineNum"> 129 </span> : : /* If IP header is past calculated packet end, bail. -<span class="lineNum"> 130 </span> : : */ -<span class="lineNum"> 131 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((unsigned char*)(iph_p + 1) &gt; pkt_end)</span> -<span class="lineNum"> 132 </span> : : return; -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> : : /* ip_hdr_words is the number of 32 bit words in the IP header. After -<span class="lineNum"> 135 </span> : : * masking of the IPV4 version bits, the number *must* be at least -<span class="lineNum"> 136 </span> : : * 5, even without options. -<span class="lineNum"> 137 </span> : : */ -<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : ip_hdr_words = iph_p-&gt;ihl &amp; IPV4_VER_MASK;</span> -<span class="lineNum"> 139 </span> : : -<span class="lineNum"> 140 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (ip_hdr_words &lt; MIN_IPV4_WORDS)</span> -<span class="lineNum"> 141 </span> : : return; -<span class="lineNum"> 142 </span> : : -<span class="lineNum"> 143 </span> : : /* Support for the cases where libpcap returns the Ethernet Frame Check -<span class="lineNum"> 144 </span> : : * Sequence (4 bytes at the end of the Ethernet frame) as part of the -<span class="lineNum"> 145 </span> : : * capture. libpcap returning the FCS is fairly rare. Default settings on -<span class="lineNum"> 146 </span> : : * the following system included an Ethernet FCS in the libpcap capture: -<span class="lineNum"> 147 </span> : : * BeagleBone Black rev C running 3.8.13-bone50 #1 SMP Tue May 13 -<span class="lineNum"> 148 </span> : : * 13:24:52 UTC 2014 armv7l GNU/Linux -<span class="lineNum"> 149 </span> : : * -<span class="lineNum"> 150 </span> : : * Calculate the new pkt_end from the length in the ip header. -<span class="lineNum"> 151 </span> : : */ -<span class="lineNum"> 152 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(((unsigned char*)iph_p)+ntohs(iph_p-&gt;tot_len) == pkt_end-FCS_HEADER_LEN) {</span> -<span class="lineNum"> 153 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;Adjusting packet end to account for FCS header on Ethernet frame&quot;);</span> -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : pkt_end -= FCS_HEADER_LEN;</span> -<span class="lineNum"> 155 </span> : : } -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> : : /* Now, find the packet data payload (depending on IPPROTO). -<span class="lineNum"> 158 </span> : : */ -<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : src_ip = iph_p-&gt;saddr;</span> -<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : dst_ip = iph_p-&gt;daddr;</span> -<span class="lineNum"> 161 </span> : : -<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : proto = iph_p-&gt;protocol;</span> -<span class="lineNum"> 163 </span> : : -<span class="lineNum"> 164 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (proto == IPPROTO_TCP)</span> -<span class="lineNum"> 165 </span> : : { -<span class="lineNum"> 166 </span> : : /* Process TCP packet -<span class="lineNum"> 167 </span> : : */ -<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : tcph_p = (struct tcphdr*)((unsigned char*)iph_p + (ip_hdr_words &lt;&lt; 2));</span> -<span class="lineNum"> 169 </span> : : -<span class="lineNum"> 170 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : src_port = ntohs(tcph_p-&gt;source);</span> -<span class="lineNum"> 171 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : dst_port = ntohs(tcph_p-&gt;dest);</span> -<span class="lineNum"> 172 </span> : : -<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : pkt_data = ((unsigned char*)(tcph_p+1))+((tcph_p-&gt;doff)&lt;&lt;2)-sizeof(struct tcphdr);</span> -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : pkt_data_len = (pkt_end-(unsigned char*)iph_p)-(pkt_data-(unsigned char*)iph_p);</span> -<span class="lineNum"> 176 </span> : : } -<span class="lineNum"> 177 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (proto == IPPROTO_UDP)</span> -<span class="lineNum"> 178 </span> : : { -<span class="lineNum"> 179 </span> : : /* Process UDP packet -<span class="lineNum"> 180 </span> : : */ -<span class="lineNum"> 181 </span> :<span class="lineNoCov"> 0 : udph_p = (struct udphdr*)((unsigned char*)iph_p + (ip_hdr_words &lt;&lt; 2));</span> -<span class="lineNum"> 182 </span> : : -<span class="lineNum"> 183 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : src_port = ntohs(udph_p-&gt;source);</span> -<span class="lineNum"> 184 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : dst_port = ntohs(udph_p-&gt;dest);</span> -<span class="lineNum"> 185 </span> : : -<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : pkt_data = ((unsigned char*)(udph_p + 1));</span> -<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : pkt_data_len = (pkt_end-(unsigned char*)iph_p)-(pkt_data-(unsigned char*)iph_p);</span> -<span class="lineNum"> 188 </span> : : } -<span class="lineNum"> 189 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if (proto == IPPROTO_ICMP)</span> -<span class="lineNum"> 190 </span> : : { -<span class="lineNum"> 191 </span> : : /* Process ICMP packet -<span class="lineNum"> 192 </span> : : */ -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : icmph_p = (struct icmphdr*)((unsigned char*)iph_p + (ip_hdr_words &lt;&lt; 2));</span> -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : pkt_data = ((unsigned char*)(icmph_p + 1));</span> -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : pkt_data_len = (pkt_end-(unsigned char*)iph_p)-(pkt_data-(unsigned char*)iph_p);</span> -<span class="lineNum"> 197 </span> : : } -<span class="lineNum"> 198 </span> : : -<span class="lineNum"> 199 </span> : : else -<span class="lineNum"> 200 </span> : : return; -<span class="lineNum"> 201 </span> : : -<span class="lineNum"> 202 </span> : : /* -<span class="lineNum"> 203 </span> : : * Now we have data. For now, we are not checking IP or port values. We -<span class="lineNum"> 204 </span> : : * are relying on the pcap filter. This may change so we do retain the IP -<span class="lineNum"> 205 </span> : : * addresses and ports just in case. We just go ahead and queue the -<span class="lineNum"> 206 </span> : : * data. -<span class="lineNum"> 207 </span> : : */ -<span class="lineNum"> 208 </span> : : -<span class="lineNum"> 209 </span> : : /* Expect the data to be at least the minimum required size. This check -<span class="lineNum"> 210 </span> : : * will weed out a lot of things like small TCP ACK's if the user has a -<span class="lineNum"> 211 </span> : : * permissive pcap filter -<span class="lineNum"> 212 </span> : : */ -<span class="lineNum"> 213 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &lt; MIN_SPA_DATA_SIZE)</span> -<span class="lineNum"> 214 </span> : : return; -<span class="lineNum"> 215 </span> : : -<span class="lineNum"> 216 </span> : : /* Expect the data to not be too large -<span class="lineNum"> 217 </span> : : */ -<span class="lineNum"> 218 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_data_len &gt; MAX_SPA_PACKET_LEN)</span> -<span class="lineNum"> 219 </span> : : return; -<span class="lineNum"> 220 </span> : : -<span class="lineNum"> 221 </span> : : /* Copy the packet for SPA processing -<span class="lineNum"> 222 </span> : : */ -<span class="lineNum"> 223 </span> :<span class="lineNoCov"> 0 : strlcpy((char *)opts-&gt;spa_pkt.packet_data, (char *)pkt_data, pkt_data_len+1);</span> -<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_data_len = pkt_data_len;</span> -<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_proto = proto;</span> -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_ip = src_ip;</span> -<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_ip = dst_ip;</span> -<span class="lineNum"> 228 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_port = src_port;</span> -<span class="lineNum"> 229 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_port = dst_port;</span> -<span class="lineNum"> 230 </span> : : -<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : incoming_spa(opts);</span> -<span class="lineNum"> 232 </span> : : -<span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 234 </span> : : } -<span class="lineNum"> 235 </span> : : -<span class="lineNum"> 236 </span> : : #endif /* USE_LIBPCAP */ -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html deleted file mode 100644 index d2a466a1..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func-sort-c.html +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/replay_cache.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - replay_cache.c<span style="font-size: 80%;"> (<a href="replay_cache.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntry">157</td> - <td class="headerCovTableEntryLo">35.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntry">60</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="replay_cache.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#676">free_replay_list</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#210">replay_file_cache_init</a></td> - <td class="coverFnHi">71</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#710">replay_cache_init</a></td> - <td class="coverFnHi">71</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#83">rotate_digest_cache_file</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#755">is_replay</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#731">add_replay</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#451">add_replay_file_cache</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#140">replay_warning</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#425">is_replay_file_cache</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html deleted file mode 100644 index 3b1b3114..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.func.html +++ /dev/null @@ -1,117 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/replay_cache.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - replay_cache.c<span style="font-size: 80%;"> (<a href="replay_cache.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntry">157</td> - <td class="headerCovTableEntryLo">35.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntry">60</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="replay_cache.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#731">add_replay</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#451">add_replay_file_cache</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#676">free_replay_list</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#755">is_replay</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#425">is_replay_file_cache</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#710">replay_cache_init</a></td> - <td class="coverFnHi">71</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#210">replay_file_cache_init</a></td> - <td class="coverFnHi">71</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#140">replay_warning</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="replay_cache.c.gcov.html#83">rotate_digest_cache_file</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html deleted file mode 100644 index ac221adc..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/replay_cache.c.gcov.html +++ /dev/null @@ -1,857 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/replay_cache.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - replay_cache.c<span style="font-size: 80%;"> (source / <a href="replay_cache.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">56</td> - <td class="headerCovTableEntry">157</td> - <td class="headerCovTableEntryLo">35.7 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntry">9</td> - <td class="headerCovTableEntryLo">33.3 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntry">60</td> - <td class="headerCovTableEntryLo">50.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: replay_cache.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Provides the functions to check for possible replay attacks -<span class="lineNum"> 7 </span> : : * by using a cache of previously seen digests. This cache is a -<span class="lineNum"> 8 </span> : : * simple file by default, but can be made to use a dbm solution -<span class="lineNum"> 9 </span> : : * (ndbm or gdbm in ndbm compatibility mode) file to store the digest -<span class="lineNum"> 10 </span> : : * of a previously received SPA packets. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 13 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 14 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 15 </span> : : * -<span class="lineNum"> 16 </span> : : * License (GNU General Public License): -<span class="lineNum"> 17 </span> : : * -<span class="lineNum"> 18 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 19 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 20 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 21 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 22 </span> : : * -<span class="lineNum"> 23 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 24 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 25 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 26 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 27 </span> : : * -<span class="lineNum"> 28 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 29 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 30 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 31 </span> : : * USA -<span class="lineNum"> 32 </span> : : * -<span class="lineNum"> 33 </span> : : ***************************************************************************** -<span class="lineNum"> 34 </span> : : */ -<span class="lineNum"> 35 </span> : : #include &quot;replay_cache.h&quot; -<span class="lineNum"> 36 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 37 </span> : : #include &quot;fwknopd_errors.h&quot; -<span class="lineNum"> 38 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 39 </span> : : -<span class="lineNum"> 40 </span> : : #include &lt;sys/stat.h&gt; -<span class="lineNum"> 41 </span> : : #include &lt;fcntl.h&gt; -<span class="lineNum"> 42 </span> : : #include &lt;time.h&gt; -<span class="lineNum"> 43 </span> : : -<span class="lineNum"> 44 </span> : : #if HAVE_LIBGDBM -<span class="lineNum"> 45 </span> : : #include &lt;gdbm.h&gt; -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> : : #define MY_DBM_FETCH(d, k) gdbm_fetch(d, k) -<span class="lineNum"> 48 </span> : : #define MY_DBM_STORE(d, k, v, m) gdbm_store(d, k, v, m) -<span class="lineNum"> 49 </span> : : #define MY_DBM_STRERROR(x) gdbm_strerror(x) -<span class="lineNum"> 50 </span> : : #define MY_DBM_CLOSE(d) gdbm_close(d) -<span class="lineNum"> 51 </span> : : -<span class="lineNum"> 52 </span> : : #define MY_DBM_REPLACE GDBM_REPLACE -<span class="lineNum"> 53 </span> : : #define MY_DBM_INSERT GDBM_INSERT -<span class="lineNum"> 54 </span> : : -<span class="lineNum"> 55 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 56 </span> : : #include &lt;ndbm.h&gt; -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> : : #define MY_DBM_FETCH(d, k) dbm_fetch(d, k) -<span class="lineNum"> 59 </span> : : #define MY_DBM_STORE(d, k, v, m) dbm_store(d, k, v, m) -<span class="lineNum"> 60 </span> : : #define MY_DBM_STRERROR(x) strerror(x) -<span class="lineNum"> 61 </span> : : #define MY_DBM_CLOSE(d) dbm_close(d) -<span class="lineNum"> 62 </span> : : -<span class="lineNum"> 63 </span> : : #define MY_DBM_REPLACE DBM_REPLACE -<span class="lineNum"> 64 </span> : : #define MY_DBM_INSERT DBM_INSERT -<span class="lineNum"> 65 </span> : : -<span class="lineNum"> 66 </span> : : #else -<span class="lineNum"> 67 </span> : : #if ! USE_FILE_CACHE -<span class="lineNum"> 68 </span> : : #error &quot;File cache method disabled, and No GDBM or NDBM header file found. WTF?&quot; -<span class="lineNum"> 69 </span> : : #endif -<span class="lineNum"> 70 </span> : : #endif -<span class="lineNum"> 71 </span> : : -<span class="lineNum"> 72 </span> : : #if HAVE_SYS_SOCKET_H -<span class="lineNum"> 73 </span> : : #include &lt;sys/socket.h&gt; -<span class="lineNum"> 74 </span> : : #endif -<span class="lineNum"> 75 </span> : : #include &lt;arpa/inet.h&gt; -<span class="lineNum"> 76 </span> : : -<span class="lineNum"> 77 </span> : : #include &lt;fcntl.h&gt; -<span class="lineNum"> 78 </span> : : -<span class="lineNum"> 79 </span> : : #define DATE_LEN 18 -<span class="lineNum"> 80 </span> : : #define MAX_DIGEST_SIZE 64 -<span class="lineNum"> 81 </span> : : -<span class="lineNum"> 82 </span> : : /* Rotate the digest file by simply renaming it. -<a name="83"><span class="lineNum"> 83 </span> : : */</a> -<span class="lineNum"> 84 </span> : : static void -<span class="lineNum"> 85 </span> :<span class="lineNoCov"> 0 : rotate_digest_cache_file(fko_srv_options_t *opts)</span> -<span class="lineNum"> 86 </span> : : { -<span class="lineNum"> 87 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 88 </span> : : log_msg(LOG_WARNING, &quot;Digest cache not supported. Nothing to rotate.&quot;); -<span class="lineNum"> 89 </span> : : #else -<span class="lineNum"> 90 </span> : : int res; -<span class="lineNum"> 91 </span> :<span class="lineNoCov"> 0 : char *new_file = NULL;</span> -<span class="lineNum"> 92 </span> : : -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Rotating digest cache file.&quot;);</span> -<span class="lineNum"> 94 </span> : : -<span class="lineNum"> 95 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : new_file = calloc(1, strlen(opts-&gt;config[CONF_DIGEST_FILE])+5);</span> -<span class="lineNum"> 97 </span> : : #else -<span class="lineNum"> 98 </span> : : new_file = calloc(1, strlen(opts-&gt;config[CONF_DIGEST_DB_FILE])+5); -<span class="lineNum"> 99 </span> : : #endif -<span class="lineNum"> 100 </span> : : -<span class="lineNum"> 101 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(new_file == NULL)</span> -<span class="lineNum"> 102 </span> : : { -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;rotate_digest_cache_file: Memory allocation error.&quot;);</span> -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE);</span> -<span class="lineNum"> 105 </span> : : } -<span class="lineNum"> 106 </span> : : -<span class="lineNum"> 107 </span> : : /* The new filename is just the original with a trailing '-old'. -<span class="lineNum"> 108 </span> : : */ -<span class="lineNum"> 109 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : strlcpy(new_file, opts-&gt;config[CONF_DIGEST_FILE],</span> -<span class="lineNum"> 111 </span> :<span class="lineNoCov"> 0 : strlen(opts-&gt;config[CONF_DIGEST_FILE])+5);</span> -<span class="lineNum"> 112 </span> :<span class="lineNoCov"> 0 : strlcat(new_file, &quot;-old&quot;,</span> -<span class="lineNum"> 113 </span> :<span class="lineNoCov"> 0 : strlen(opts-&gt;config[CONF_DIGEST_FILE])+5);</span> -<span class="lineNum"> 114 </span> : : #else -<span class="lineNum"> 115 </span> : : strlcpy(new_file, opts-&gt;config[CONF_DIGEST_DB_FILE], -<span class="lineNum"> 116 </span> : : strlen(opts-&gt;config[CONF_DIGEST_DB_FILE])+5); -<span class="lineNum"> 117 </span> : : strlcat(new_file, &quot;-old&quot;, -<span class="lineNum"> 118 </span> : : strlen(opts-&gt;config[CONF_DIGEST_DB_FILE])+5); -<span class="lineNum"> 119 </span> : : #endif -<span class="lineNum"> 120 </span> : : -<span class="lineNum"> 121 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : res = rename(opts-&gt;config[CONF_DIGEST_FILE], new_file);</span> -<span class="lineNum"> 123 </span> : : #else -<span class="lineNum"> 124 </span> : : res = rename(opts-&gt;config[CONF_DIGEST_DB_FILE], new_file); -<span class="lineNum"> 125 </span> : : #endif -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(res &lt; 0)</span> -<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Unable to rename digest file: %s to %s: %s&quot;,</span> -<span class="lineNum"> 129 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_DIGEST_FILE], new_file, strerror(errno)</span> -<span class="lineNum"> 131 </span> : : #else -<span class="lineNum"> 132 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], new_file, strerror(errno) -<span class="lineNum"> 133 </span> : : #endif -<span class="lineNum"> 134 </span> : : ); -<span class="lineNum"> 135 </span> : : #endif /* NO_DIGEST_CACHE */ -<span class="lineNum"> 136 </span> : : -<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : free(new_file);</span> -<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 139 </span> : : } -<a name="140"><span class="lineNum"> 140 </span> : : </a> -<span class="lineNum"> 141 </span> : : static void -<span class="lineNum"> 142 </span> :<span class="lineNoCov"> 0 : replay_warning(fko_srv_options_t *opts, digest_cache_info_t *digest_info)</span> -<span class="lineNum"> 143 </span> : : { -<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : char src_ip[INET_ADDRSTRLEN+1] = {0};</span> -<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : char orig_src_ip[INET_ADDRSTRLEN+1] = {0};</span> -<span class="lineNum"> 146 </span> :<span class="lineNoCov"> 0 : char created[DATE_LEN] = {0};</span> -<span class="lineNum"> 147 </span> : : -<span class="lineNum"> 148 </span> : : #if ! USE_FILE_CACHE -<span class="lineNum"> 149 </span> : : char first[DATE_LEN] = {0}, last[DATE_LEN] = {0}; -<span class="lineNum"> 150 </span> : : #endif -<span class="lineNum"> 151 </span> : : -<span class="lineNum"> 152 </span> : : /* Convert the IPs to a human readable form -<span class="lineNum"> 153 </span> : : */ -<span class="lineNum"> 154 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(opts-&gt;spa_pkt.packet_src_ip),</span> -<span class="lineNum"> 155 </span> : : src_ip, INET_ADDRSTRLEN); -<span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(digest_info-&gt;src_ip), orig_src_ip, INET_ADDRSTRLEN);</span> -<span class="lineNum"> 157 </span> : : -<span class="lineNum"> 158 </span> : : #if ! USE_FILE_CACHE -<span class="lineNum"> 159 </span> : : /* Mark the last_replay time. -<span class="lineNum"> 160 </span> : : */ -<span class="lineNum"> 161 </span> : : digest_info-&gt;last_replay = time(NULL); -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> : : /* Increment the replay count and check to see if it is the first one. -<span class="lineNum"> 164 </span> : : */ -<span class="lineNum"> 165 </span> : : if(++(digest_info-&gt;replay_count) == 1) -<span class="lineNum"> 166 </span> : : { -<span class="lineNum"> 167 </span> : : /* This is the first replay so make it the same as last_replay -<span class="lineNum"> 168 </span> : : */ -<span class="lineNum"> 169 </span> : : digest_info-&gt;first_replay = digest_info-&gt;last_replay; -<span class="lineNum"> 170 </span> : : } -<span class="lineNum"> 171 </span> : : -<span class="lineNum"> 172 </span> : : strftime(first, DATE_LEN, &quot;%D %H:%M:%S&quot;, localtime(&amp;(digest_info-&gt;first_replay))); -<span class="lineNum"> 173 </span> : : strftime(last, DATE_LEN, &quot;%D %H:%M:%S&quot;, localtime(&amp;(digest_info-&gt;last_replay))); -<span class="lineNum"> 174 </span> : : #endif -<span class="lineNum"> 175 </span> : : -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : strftime(created, DATE_LEN, &quot;%D %H:%M:%S&quot;, localtime(&amp;(digest_info-&gt;created)));</span> -<span class="lineNum"> 177 </span> : : -<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 179 </span> : : &quot;Replay detected from source IP: %s, &quot; -<span class="lineNum"> 180 </span> : : &quot;Destination proto/port: %d/%d, &quot; -<span class="lineNum"> 181 </span> : : &quot;Original source IP: %s, &quot; -<span class="lineNum"> 182 </span> : : &quot;Original dst proto/port: %d/%d, &quot; -<span class="lineNum"> 183 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 184 </span> : : &quot;Entry created: %s&quot;, -<span class="lineNum"> 185 </span> : : #else -<span class="lineNum"> 186 </span> : : &quot;Entry created: %s, &quot; -<span class="lineNum"> 187 </span> : : &quot;First replay: %s, &quot; -<span class="lineNum"> 188 </span> : : &quot;Last replay: %s, &quot; -<span class="lineNum"> 189 </span> : : &quot;Replay count: %i&quot;, -<span class="lineNum"> 190 </span> : : #endif -<span class="lineNum"> 191 </span> : : src_ip, -<span class="lineNum"> 192 </span> : : opts-&gt;spa_pkt.packet_proto, -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_port,</span> -<span class="lineNum"> 194 </span> : : orig_src_ip, -<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : digest_info-&gt;proto,</span> -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : digest_info-&gt;dst_port,</span> -<span class="lineNum"> 197 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 198 </span> : : created -<span class="lineNum"> 199 </span> : : #else -<span class="lineNum"> 200 </span> : : created, -<span class="lineNum"> 201 </span> : : first, -<span class="lineNum"> 202 </span> : : last, -<span class="lineNum"> 203 </span> : : digest_info-&gt;replay_count -<span class="lineNum"> 204 </span> : : #endif -<span class="lineNum"> 205 </span> : : ); -<span class="lineNum"> 206 </span> : : -<span class="lineNum"> 207 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 208 </span> : : } -<span class="lineNum"> 209 </span> : : -<a name="210"><span class="lineNum"> 210 </span> : : #if USE_FILE_CACHE</a> -<span class="lineNum"> 211 </span> : : static int -<span class="lineNum"> 212 </span> :<span class="lineCov"> 71 : replay_file_cache_init(fko_srv_options_t *opts)</span> -<span class="lineNum"> 213 </span> : : { -<span class="lineNum"> 214 </span> :<span class="lineCov"> 71 : FILE *digest_file_ptr = NULL;</span> -<span class="lineNum"> 215 </span> :<span class="lineCov"> 71 : unsigned int num_lines = 0, digest_ctr = 0;</span> -<span class="lineNum"> 216 </span> :<span class="lineCov"> 71 : char line_buf[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 217 </span> :<span class="lineCov"> 71 : char src_ip[INET_ADDRSTRLEN+1] = {0};</span> -<span class="lineNum"> 218 </span> :<span class="lineCov"> 71 : char dst_ip[INET_ADDRSTRLEN+1] = {0};</span> -<span class="lineNum"> 219 </span> : : long int time_tmp; -<span class="lineNum"> 220 </span> :<span class="lineCov"> 71 : int digest_file_fd = -1;</span> -<span class="lineNum"> 221 </span> :<span class="lineCov"> 71 : char digest_header[] = &quot;# &lt;digest&gt; &lt;proto&gt; &lt;src_ip&gt; &lt;src_port&gt; &lt;dst_ip&gt; &lt;dst_port&gt; &lt;time&gt;\n&quot;;</span> -<span class="lineNum"> 222 </span> : : -<span class="lineNum"> 223 </span> :<span class="lineCov"> 71 : struct digest_cache_list *digest_elm = NULL;</span> -<span class="lineNum"> 224 </span> : : -<span class="lineNum"> 225 </span> : : /* if the file exists, import the previous SPA digests into -<span class="lineNum"> 226 </span> : : * the cache list -<span class="lineNum"> 227 </span> : : */ -<span class="lineNum"> 228 </span> [<span class="branchCov" title="Branch 1 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 71 : if (access(opts-&gt;config[CONF_DIGEST_FILE], F_OK) == 0)</span> -<span class="lineNum"> 229 </span> : : { -<span class="lineNum"> 230 </span> : : /* Check permissions -<span class="lineNum"> 231 </span> : : */ -<span class="lineNum"> 232 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 71 times"> + </span>]:<span class="lineCov"> 71 : if (access(opts-&gt;config[CONF_DIGEST_FILE], R_OK|W_OK) != 0)</span> -<span class="lineNum"> 233 </span> : : { -<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Digest file '%s' exists but: '%s'&quot;,</span> -<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_DIGEST_FILE], strerror(errno));</span> -<span class="lineNum"> 236 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 237 </span> : : } -<span class="lineNum"> 238 </span> : : } -<span class="lineNum"> 239 </span> : : else -<span class="lineNum"> 240 </span> : : { -<span class="lineNum"> 241 </span> : : /* the file does not exist yet, so it will be created when the first -<span class="lineNum"> 242 </span> : : * successful SPA packet digest is written to disk -<span class="lineNum"> 243 </span> : : */ -<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : digest_file_fd = open(opts-&gt;config[CONF_DIGEST_FILE],</span> -<span class="lineNum"> 245 </span> : : O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR); -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (digest_file_fd == -1)</span> -<span class="lineNum"> 248 </span> : : { -<span class="lineNum"> 249 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Could not create digest cache: %s: %s&quot;,</span> -<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : opts-&gt;config[CONF_DIGEST_FILE], strerror(errno));</span> -<span class="lineNum"> 251 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 252 </span> : : } -<span class="lineNum"> 253 </span> : : else -<span class="lineNum"> 254 </span> : : { -<span class="lineNum"> 255 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(write(digest_file_fd, digest_header, strlen(digest_header))</span> -<span class="lineNum"> 256 </span> :<span class="lineNoCov"> 0 : != strlen(digest_header)) {</span> -<span class="lineNum"> 257 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 258 </span> : : &quot;Did not write expected number of bytes to digest cache: %s&quot;, -<span class="lineNum"> 259 </span> : : opts-&gt;config[CONF_DIGEST_FILE]); -<span class="lineNum"> 260 </span> : : } -<span class="lineNum"> 261 </span> :<span class="lineNoCov"> 0 : close(digest_file_fd);</span> -<span class="lineNum"> 262 </span> : : -<span class="lineNum"> 263 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 264 </span> : : } -<span class="lineNum"> 265 </span> : : } -<span class="lineNum"> 266 </span> : : -<span class="lineNum"> 267 </span> [<span class="branchCov" title="Branch 1 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 71 : if(verify_file_perms_ownership(opts-&gt;config[CONF_DIGEST_FILE]) != 1)</span> -<span class="lineNum"> 268 </span> : : return(-1); -<span class="lineNum"> 269 </span> : : -<span class="lineNum"> 270 </span> : : /* File exists, and we have access - create in-memory digest cache -<span class="lineNum"> 271 </span> : : */ -<span class="lineNum"> 272 </span> [<span class="branchCov" title="Branch 1 was taken 71 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 71 : if ((digest_file_ptr = fopen(opts-&gt;config[CONF_DIGEST_FILE], &quot;r&quot;)) == NULL)</span> -<span class="lineNum"> 273 </span> : : { -<span class="lineNum"> 274 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Could not open digest cache: %s&quot;,</span> -<span class="lineNum"> 275 </span> : : opts-&gt;config[CONF_DIGEST_FILE]); -<span class="lineNum"> 276 </span> :<span class="lineNoCov"> 0 : return(-1);</span> -<span class="lineNum"> 277 </span> : : } -<span class="lineNum"> 278 </span> : : -<span class="lineNum"> 279 </span> : : /* Line format: -<span class="lineNum"> 280 </span> : : * &lt;digest&gt; &lt;proto&gt; &lt;src_ip&gt; &lt;src_port&gt; &lt;dst_ip&gt; &lt;dst_port&gt; &lt;time&gt; -<span class="lineNum"> 281 </span> : : * Example: -<span class="lineNum"> 282 </span> : : * 7XgadOyqv0tF5xG8uhg2iIrheeNKglCWKmxQDgYP1dY 17 127.0.0.1 40305 127.0.0.1 62201 1313283481 -<span class="lineNum"> 283 </span> : : */ -<span class="lineNum"> 284 </span> [<span class="branchCov" title="Branch 0 was taken 8167 times"> + </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 8238 : while ((fgets(line_buf, MAX_LINE_LEN, digest_file_ptr)) != NULL)</span> -<span class="lineNum"> 285 </span> : : { -<span class="lineNum"> 286 </span> :<span class="lineCov"> 8167 : num_lines++;</span> -<span class="lineNum"> 287 </span> :<span class="lineCov"> 8167 : line_buf[MAX_LINE_LEN-1] = '\0';</span> -<span class="lineNum"> 288 </span> : : -<span class="lineNum"> 289 </span>[<span class="branchCov" title="Branch 0 was taken 7859 times"> + </span><span class="branchCov" title="Branch 1 was taken 308 times"> + </span>][<span class="branchCov" title="Branch 2 was taken 7855 times"> + </span><span class="branchCov" title="Branch 3 was taken 4 times"> + </span>]:<span class="lineCov"> 8167 : if(IS_EMPTY_LINE(line_buf[0]))</span> -<span class="lineNum"> </span>[<span class="branchCov" title="Branch 4 was taken 7851 times"> + </span><span class="branchCov" title="Branch 5 was taken 4 times"> + </span>][<span class="branchCov" title="Branch 6 was taken 965 times"> + </span><span class="branchCov" title="Branch 7 was taken 6886 times"> + </span>] -<span class="lineNum"> 290 </span> :<span class="lineCov"> 1281 : continue;</span> -<span class="lineNum"> 291 </span> : : -<span class="lineNum"> 292 </span> : : /* Initialize a digest cache list element, and add it into the list if -<span class="lineNum"> 293 </span> : : * valid. -<span class="lineNum"> 294 </span> : : */ -<span class="lineNum"> 295 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 6886 times"> + </span>]:<span class="lineCov"> 6886 : if ((digest_elm = calloc(1, sizeof(struct digest_cache_list))) == NULL)</span> -<span class="lineNum"> 296 </span> : : { -<span class="lineNum"> 297 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not allocate digest list element&quot;);</span> -<span class="lineNum"> 298 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 299 </span> : : } -<span class="lineNum"> 300 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 6886 times"> + </span>]:<span class="lineCov"> 6886 : if ((digest_elm-&gt;cache_info.digest = calloc(1, MAX_DIGEST_SIZE+1)) == NULL)</span> -<span class="lineNum"> 301 </span> : : { -<span class="lineNum"> 302 </span> :<span class="lineNoCov"> 0 : free(digest_elm);</span> -<span class="lineNum"> 303 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Could not allocate digest string&quot;);</span> -<span class="lineNum"> 304 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 305 </span> : : } -<span class="lineNum"> 306 </span> :<span class="lineCov"> 6886 : src_ip[0] = '\0';</span> -<span class="lineNum"> 307 </span> :<span class="lineCov"> 6886 : dst_ip[0] = '\0';</span> -<span class="lineNum"> 308 </span> : : -<span class="lineNum"> 309 </span> [<span class="branchCov" title="Branch 0 was taken 5388 times"> + </span><span class="branchCov" title="Branch 1 was taken 1498 times"> + </span>]:<span class="lineCov"> 6886 : if(sscanf(line_buf, &quot;%64s %hhu %16s %hu %16s %hu %ld&quot;,</span> -<span class="lineNum"> 310 </span> : : digest_elm-&gt;cache_info.digest, /* %64s, buffer size is MAX_DIGEST_SIZE+1 */ -<span class="lineNum"> 311 </span> : : &amp;(digest_elm-&gt;cache_info.proto), -<span class="lineNum"> 312 </span> : : src_ip, /* %16s, buffer size is INET_ADDRSTRLEN+1 */ -<span class="lineNum"> 313 </span> : : &amp;(digest_elm-&gt;cache_info.src_port), -<span class="lineNum"> 314 </span> : : dst_ip, /* %16s, buffer size is INET_ADDRSTRLEN+1 */ -<span class="lineNum"> 315 </span> : : &amp;(digest_elm-&gt;cache_info.dst_port), -<span class="lineNum"> 316 </span> : : &amp;time_tmp) != 7) -<span class="lineNum"> 317 </span> : : { -<span class="lineNum"> 318 </span> :<span class="lineCov"> 5388 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 319 </span> : : &quot;*Skipping invalid digest file entry in %s at line %i.\n - %s&quot;, -<span class="lineNum"> 320 </span> : : opts-&gt;config[CONF_DIGEST_FILE], num_lines, line_buf -<span class="lineNum"> 321 </span> : : ); -<span class="lineNum"> 322 </span> :<span class="lineCov"> 5388 : free(digest_elm-&gt;cache_info.digest);</span> -<span class="lineNum"> 323 </span> :<span class="lineCov"> 5388 : free(digest_elm);</span> -<span class="lineNum"> 324 </span> :<span class="lineCov"> 5388 : continue;</span> -<span class="lineNum"> 325 </span> : : } -<span class="lineNum"> 326 </span> :<span class="lineCov"> 1498 : digest_elm-&gt;cache_info.created = time_tmp;</span> -<span class="lineNum"> 327 </span> : : -<span class="lineNum"> 328 </span> : : -<span class="lineNum"> 329 </span> [<span class="branchCov" title="Branch 1 was taken 521 times"> + </span><span class="branchCov" title="Branch 2 was taken 977 times"> + </span>]:<span class="lineCov"> 1498 : if (inet_pton(AF_INET, src_ip, &amp;(digest_elm-&gt;cache_info.src_ip)) != 1)</span> -<span class="lineNum"> 330 </span> : : { -<span class="lineNum"> 331 </span> :<span class="lineCov"> 521 : free(digest_elm-&gt;cache_info.digest);</span> -<span class="lineNum"> 332 </span> :<span class="lineCov"> 521 : free(digest_elm);</span> -<span class="lineNum"> 333 </span> :<span class="lineCov"> 521 : continue;</span> -<span class="lineNum"> 334 </span> : : } -<span class="lineNum"> 335 </span> : : -<span class="lineNum"> 336 </span> [<span class="branchCov" title="Branch 1 was taken 469 times"> + </span><span class="branchCov" title="Branch 2 was taken 508 times"> + </span>]:<span class="lineCov"> 977 : if (inet_pton(AF_INET, dst_ip, &amp;(digest_elm-&gt;cache_info.dst_ip)) != 1)</span> -<span class="lineNum"> 337 </span> : : { -<span class="lineNum"> 338 </span> :<span class="lineCov"> 469 : free(digest_elm-&gt;cache_info.digest);</span> -<span class="lineNum"> 339 </span> :<span class="lineCov"> 469 : free(digest_elm);</span> -<span class="lineNum"> 340 </span> :<span class="lineCov"> 469 : continue;</span> -<span class="lineNum"> 341 </span> : : } -<span class="lineNum"> 342 </span> : : -<span class="lineNum"> 343 </span> :<span class="lineCov"> 508 : digest_elm-&gt;next = opts-&gt;digest_cache;</span> -<span class="lineNum"> 344 </span> :<span class="lineCov"> 508 : opts-&gt;digest_cache = digest_elm;</span> -<span class="lineNum"> 345 </span> :<span class="lineCov"> 508 : digest_ctr++;</span> -<span class="lineNum"> 346 </span> : : -<span class="lineNum"> 347 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 508 times"> + </span>]:<span class="lineCov"> 508 : if(opts-&gt;verbose &gt; 3)</span> -<span class="lineNum"> 348 </span> :<span class="lineCov"> 8167 : log_msg(LOG_DEBUG,</span> -<span class="lineNum"> 349 </span> : : &quot;DIGEST FILE: %s, VALID LINE: %s&quot;, -<span class="lineNum"> 350 </span> : : opts-&gt;config[CONF_DIGEST_FILE], line_buf -<span class="lineNum"> 351 </span> : : ); -<span class="lineNum"> 352 </span> : : -<span class="lineNum"> 353 </span> : : } -<span class="lineNum"> 354 </span> : : -<span class="lineNum"> 355 </span> :<span class="lineCov"> 71 : fclose(digest_file_ptr);</span> -<span class="lineNum"> 356 </span> : : -<span class="lineNum"> 357 </span> :<span class="lineCov"> 71 : return(digest_ctr);</span> -<span class="lineNum"> 358 </span> : : } -<span class="lineNum"> 359 </span> : : -<span class="lineNum"> 360 </span> : : #else /* USE_FILE_CACHE */ -<span class="lineNum"> 361 </span> : : -<span class="lineNum"> 362 </span> : : /* Check for the existence of the replay dbm file, and create it if it does -<span class="lineNum"> 363 </span> : : * not exist. Returns the number of db entries or -1 on error. -<span class="lineNum"> 364 </span> : : */ -<span class="lineNum"> 365 </span> : : static int -<span class="lineNum"> 366 </span> : : replay_db_cache_init(fko_srv_options_t *opts) -<span class="lineNum"> 367 </span> : : { -<span class="lineNum"> 368 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 369 </span> : : return(-1); -<span class="lineNum"> 370 </span> : : #else -<span class="lineNum"> 371 </span> : : -<span class="lineNum"> 372 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 373 </span> : : GDBM_FILE rpdb; -<span class="lineNum"> 374 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 375 </span> : : DBM *rpdb; -<span class="lineNum"> 376 </span> : : datum db_ent; -<span class="lineNum"> 377 </span> : : #endif -<span class="lineNum"> 378 </span> : : -<span class="lineNum"> 379 </span> : : datum db_key, db_next_key; -<span class="lineNum"> 380 </span> : : int db_count = 0; -<span class="lineNum"> 381 </span> : : -<span class="lineNum"> 382 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 383 </span> : : rpdb = gdbm_open( -<span class="lineNum"> 384 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], 512, GDBM_WRCREAT, S_IRUSR|S_IWUSR, 0 -<span class="lineNum"> 385 </span> : : ); -<span class="lineNum"> 386 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 387 </span> : : rpdb = dbm_open( -<span class="lineNum"> 388 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], O_RDWR|O_CREAT, S_IRUSR|S_IWUSR -<span class="lineNum"> 389 </span> : : ); -<span class="lineNum"> 390 </span> : : #endif -<span class="lineNum"> 391 </span> : : -<span class="lineNum"> 392 </span> : : if(!rpdb) -<span class="lineNum"> 393 </span> : : { -<span class="lineNum"> 394 </span> : : log_msg(LOG_ERR, -<span class="lineNum"> 395 </span> : : &quot;Unable to open digest cache file: '%s': %s&quot;, -<span class="lineNum"> 396 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], -<span class="lineNum"> 397 </span> : : MY_DBM_STRERROR(errno) -<span class="lineNum"> 398 </span> : : ); -<span class="lineNum"> 399 </span> : : -<span class="lineNum"> 400 </span> : : return(-1); -<span class="lineNum"> 401 </span> : : } -<span class="lineNum"> 402 </span> : : -<span class="lineNum"> 403 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 404 </span> : : db_key = gdbm_firstkey(rpdb); -<span class="lineNum"> 405 </span> : : -<span class="lineNum"> 406 </span> : : while (db_key.dptr != NULL) -<span class="lineNum"> 407 </span> : : { -<span class="lineNum"> 408 </span> : : db_count++; -<span class="lineNum"> 409 </span> : : db_next_key = gdbm_nextkey(rpdb, db_key); -<span class="lineNum"> 410 </span> : : free(db_key.dptr); -<span class="lineNum"> 411 </span> : : db_key = db_next_key; -<span class="lineNum"> 412 </span> : : } -<span class="lineNum"> 413 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 414 </span> : : for (db_key = dbm_firstkey(rpdb); db_ent.dptr != NULL; db_key = dbm_nextkey(rpdb)) -<span class="lineNum"> 415 </span> : : db_count++; -<span class="lineNum"> 416 </span> : : #endif -<span class="lineNum"> 417 </span> : : -<span class="lineNum"> 418 </span> : : MY_DBM_CLOSE(rpdb); -<span class="lineNum"> 419 </span> : : -<span class="lineNum"> 420 </span> : : return(db_count); -<span class="lineNum"> 421 </span> : : #endif /* NO_DIGEST_CACHE */ -<span class="lineNum"> 422 </span> : : } -<span class="lineNum"> 423 </span> : : #endif /* USE_FILE_CACHE */ -<span class="lineNum"> 424 </span> : : -<a name="425"><span class="lineNum"> 425 </span> : : #if USE_FILE_CACHE</a> -<span class="lineNum"> 426 </span> : : static int -<span class="lineNum"> 427 </span> :<span class="lineNoCov"> 0 : is_replay_file_cache(fko_srv_options_t *opts, char *digest)</span> -<span class="lineNum"> 428 </span> : : { -<span class="lineNum"> 429 </span> :<span class="lineNoCov"> 0 : int digest_len = 0;</span> -<span class="lineNum"> 430 </span> : : -<span class="lineNum"> 431 </span> :<span class="lineNoCov"> 0 : struct digest_cache_list *digest_list_ptr = NULL;</span> -<span class="lineNum"> 432 </span> : : -<span class="lineNum"> 433 </span> :<span class="lineNoCov"> 0 : digest_len = strlen(digest);</span> -<span class="lineNum"> 434 </span> : : -<span class="lineNum"> 435 </span> : : /* Check the cache for the SPA packet digest -<span class="lineNum"> 436 </span> : : */ -<span class="lineNum"> 437 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (digest_list_ptr = opts-&gt;digest_cache;</span> -<span class="lineNum"> 438 </span> : : digest_list_ptr != NULL; -<span class="lineNum"> 439 </span> :<span class="lineNoCov"> 0 : digest_list_ptr = digest_list_ptr-&gt;next) {</span> -<span class="lineNum"> 440 </span> : : -<span class="lineNum"> 441 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (constant_runtime_cmp(digest_list_ptr-&gt;cache_info.digest,</span> -<span class="lineNum"> 442 </span> : : digest, digest_len) == 0) { -<span class="lineNum"> 443 </span> : : -<span class="lineNum"> 444 </span> :<span class="lineNoCov"> 0 : replay_warning(opts, &amp;(digest_list_ptr-&gt;cache_info));</span> -<span class="lineNum"> 445 </span> : : -<span class="lineNum"> 446 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_REPLAY);</span> -<span class="lineNum"> 447 </span> : : } -<span class="lineNum"> 448 </span> : : } -<span class="lineNum"> 449 </span> : : return(SPA_MSG_SUCCESS); -<span class="lineNum"> 450 </span> : : } -<a name="451"><span class="lineNum"> 451 </span> : : </a> -<span class="lineNum"> 452 </span> : : static int -<span class="lineNum"> 453 </span> :<span class="lineNoCov"> 0 : add_replay_file_cache(fko_srv_options_t *opts, char *digest)</span> -<span class="lineNum"> 454 </span> : : { -<span class="lineNum"> 455 </span> :<span class="lineNoCov"> 0 : FILE *digest_file_ptr = NULL;</span> -<span class="lineNum"> 456 </span> :<span class="lineNoCov"> 0 : int digest_len = 0;</span> -<span class="lineNum"> 457 </span> :<span class="lineNoCov"> 0 : char src_ip[INET_ADDRSTRLEN+1] = {0};</span> -<span class="lineNum"> 458 </span> :<span class="lineNoCov"> 0 : char dst_ip[INET_ADDRSTRLEN+1] = {0};</span> -<span class="lineNum"> 459 </span> : : -<span class="lineNum"> 460 </span> :<span class="lineNoCov"> 0 : struct digest_cache_list *digest_elm = NULL;</span> -<span class="lineNum"> 461 </span> : : -<span class="lineNum"> 462 </span> :<span class="lineNoCov"> 0 : digest_len = strlen(digest);</span> -<span class="lineNum"> 463 </span> : : -<span class="lineNum"> 464 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((digest_elm = calloc(1, sizeof(struct digest_cache_list))) == NULL)</span> -<span class="lineNum"> 465 </span> : : { -<span class="lineNum"> 466 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error calloc() returned NULL for digest cache element&quot;,</span> -<span class="lineNum"> 467 </span> : : fko_errstr(SPA_MSG_ERROR)); -<span class="lineNum"> 468 </span> : : -<span class="lineNum"> 469 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_ERROR);</span> -<span class="lineNum"> 470 </span> : : } -<span class="lineNum"> 471 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((digest_elm-&gt;cache_info.digest = calloc(1, digest_len+1)) == NULL)</span> -<span class="lineNum"> 472 </span> : : { -<span class="lineNum"> 473 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Error calloc() returned NULL for digest cache string&quot;,</span> -<span class="lineNum"> 474 </span> : : fko_errstr(SPA_MSG_ERROR)); -<span class="lineNum"> 475 </span> :<span class="lineNoCov"> 0 : free(digest_elm);</span> -<span class="lineNum"> 476 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_ERROR);</span> -<span class="lineNum"> 477 </span> : : } -<span class="lineNum"> 478 </span> : : -<span class="lineNum"> 479 </span> :<span class="lineNoCov"> 0 : strlcpy(digest_elm-&gt;cache_info.digest, digest, digest_len+1);</span> -<span class="lineNum"> 480 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.proto = opts-&gt;spa_pkt.packet_proto;</span> -<span class="lineNum"> 481 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.src_ip = opts-&gt;spa_pkt.packet_src_ip;</span> -<span class="lineNum"> 482 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.dst_ip = opts-&gt;spa_pkt.packet_dst_ip;</span> -<span class="lineNum"> 483 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.src_port = opts-&gt;spa_pkt.packet_src_port;</span> -<span class="lineNum"> 484 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.dst_port = opts-&gt;spa_pkt.packet_dst_port;</span> -<span class="lineNum"> 485 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.created = time(NULL);</span> -<span class="lineNum"> 486 </span> : : -<span class="lineNum"> 487 </span> : : /* First, add the digest at the head of the in-memory list -<span class="lineNum"> 488 </span> : : */ -<span class="lineNum"> 489 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;next = opts-&gt;digest_cache;</span> -<span class="lineNum"> 490 </span> :<span class="lineNoCov"> 0 : opts-&gt;digest_cache = digest_elm;</span> -<span class="lineNum"> 491 </span> : : -<span class="lineNum"> 492 </span> : : /* Now, write the digest to disk -<span class="lineNum"> 493 </span> : : */ -<span class="lineNum"> 494 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((digest_file_ptr = fopen(opts-&gt;config[CONF_DIGEST_FILE], &quot;a&quot;)) == NULL)</span> -<span class="lineNum"> 495 </span> : : { -<span class="lineNum"> 496 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;Could not open digest cache: %s&quot;,</span> -<span class="lineNum"> 497 </span> : : opts-&gt;config[CONF_DIGEST_FILE]); -<span class="lineNum"> 498 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_CACHE_ERROR);</span> -<span class="lineNum"> 499 </span> : : } -<span class="lineNum"> 500 </span> : : -<span class="lineNum"> 501 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(digest_elm-&gt;cache_info.src_ip),</span> -<span class="lineNum"> 502 </span> : : src_ip, INET_ADDRSTRLEN); -<span class="lineNum"> 503 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(digest_elm-&gt;cache_info.dst_ip),</span> -<span class="lineNum"> 504 </span> : : dst_ip, INET_ADDRSTRLEN); -<span class="lineNum"> 505 </span> :<span class="lineNoCov"> 0 : fprintf(digest_file_ptr, &quot;%s %d %s %d %s %d %d\n&quot;,</span> -<span class="lineNum"> 506 </span> : : digest, -<span class="lineNum"> 507 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.proto,</span> -<span class="lineNum"> 508 </span> : : src_ip, -<span class="lineNum"> 509 </span> :<span class="lineNoCov"> 0 : (int) digest_elm-&gt;cache_info.src_port,</span> -<span class="lineNum"> 510 </span> : : dst_ip, -<span class="lineNum"> 511 </span> :<span class="lineNoCov"> 0 : digest_elm-&gt;cache_info.dst_port,</span> -<span class="lineNum"> 512 </span> :<span class="lineNoCov"> 0 : (int) digest_elm-&gt;cache_info.created);</span> -<span class="lineNum"> 513 </span> : : -<span class="lineNum"> 514 </span> :<span class="lineNoCov"> 0 : fclose(digest_file_ptr);</span> -<span class="lineNum"> 515 </span> : : -<span class="lineNum"> 516 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_SUCCESS);</span> -<span class="lineNum"> 517 </span> : : } -<span class="lineNum"> 518 </span> : : #endif /* USE_FILE_CACHE */ -<span class="lineNum"> 519 </span> : : -<span class="lineNum"> 520 </span> : : #if !USE_FILE_CACHE -<span class="lineNum"> 521 </span> : : static int -<span class="lineNum"> 522 </span> : : is_replay_dbm_cache(fko_srv_options_t *opts, char *digest) -<span class="lineNum"> 523 </span> : : { -<span class="lineNum"> 524 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 525 </span> : : return 0; -<span class="lineNum"> 526 </span> : : #else -<span class="lineNum"> 527 </span> : : -<span class="lineNum"> 528 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 529 </span> : : GDBM_FILE rpdb; -<span class="lineNum"> 530 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 531 </span> : : DBM *rpdb; -<span class="lineNum"> 532 </span> : : #endif -<span class="lineNum"> 533 </span> : : datum db_key, db_ent; -<span class="lineNum"> 534 </span> : : -<span class="lineNum"> 535 </span> : : int digest_len, res = SPA_MSG_SUCCESS; -<span class="lineNum"> 536 </span> : : -<span class="lineNum"> 537 </span> : : digest_len = strlen(digest); -<span class="lineNum"> 538 </span> : : -<span class="lineNum"> 539 </span> : : db_key.dptr = digest; -<span class="lineNum"> 540 </span> : : db_key.dsize = digest_len; -<span class="lineNum"> 541 </span> : : -<span class="lineNum"> 542 </span> : : /* Check the db for the key -<span class="lineNum"> 543 </span> : : */ -<span class="lineNum"> 544 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 545 </span> : : rpdb = gdbm_open( -<span class="lineNum"> 546 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], 512, GDBM_WRCREAT, S_IRUSR|S_IWUSR, 0 -<span class="lineNum"> 547 </span> : : ); -<span class="lineNum"> 548 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 549 </span> : : rpdb = dbm_open(opts-&gt;config[CONF_DIGEST_DB_FILE], O_RDWR, 0); -<span class="lineNum"> 550 </span> : : #endif -<span class="lineNum"> 551 </span> : : -<span class="lineNum"> 552 </span> : : if(!rpdb) -<span class="lineNum"> 553 </span> : : { -<span class="lineNum"> 554 </span> : : log_msg(LOG_WARNING, &quot;Error opening digest_cache: '%s': %s&quot;, -<span class="lineNum"> 555 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], -<span class="lineNum"> 556 </span> : : MY_DBM_STRERROR(errno) -<span class="lineNum"> 557 </span> : : ); -<span class="lineNum"> 558 </span> : : -<span class="lineNum"> 559 </span> : : return(SPA_MSG_DIGEST_CACHE_ERROR); -<span class="lineNum"> 560 </span> : : } -<span class="lineNum"> 561 </span> : : -<span class="lineNum"> 562 </span> : : db_ent = MY_DBM_FETCH(rpdb, db_key); -<span class="lineNum"> 563 </span> : : -<span class="lineNum"> 564 </span> : : /* If the datum is not null, we have a match. Otherwise, we add -<span class="lineNum"> 565 </span> : : * this entry to the cache. -<span class="lineNum"> 566 </span> : : */ -<span class="lineNum"> 567 </span> : : if(db_ent.dptr != NULL) -<span class="lineNum"> 568 </span> : : { -<span class="lineNum"> 569 </span> : : replay_warning(opts, (digest_cache_info_t *)db_ent.dptr); -<span class="lineNum"> 570 </span> : : -<span class="lineNum"> 571 </span> : : /* Save it back to the digest cache -<span class="lineNum"> 572 </span> : : */ -<span class="lineNum"> 573 </span> : : if(MY_DBM_STORE(rpdb, db_key, db_ent, MY_DBM_REPLACE) != 0) -<span class="lineNum"> 574 </span> : : log_msg(LOG_WARNING, &quot;Error updating entry in digest_cache: '%s': %s&quot;, -<span class="lineNum"> 575 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], -<span class="lineNum"> 576 </span> : : MY_DBM_STRERROR(errno) -<span class="lineNum"> 577 </span> : : ); -<span class="lineNum"> 578 </span> : : -<span class="lineNum"> 579 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 580 </span> : : free(db_ent.dptr); -<span class="lineNum"> 581 </span> : : #endif -<span class="lineNum"> 582 </span> : : res = SPA_MSG_REPLAY; -<span class="lineNum"> 583 </span> : : } -<span class="lineNum"> 584 </span> : : -<span class="lineNum"> 585 </span> : : MY_DBM_CLOSE(rpdb); -<span class="lineNum"> 586 </span> : : -<span class="lineNum"> 587 </span> : : return(res); -<span class="lineNum"> 588 </span> : : #endif /* NO_DIGEST_CACHE */ -<span class="lineNum"> 589 </span> : : } -<span class="lineNum"> 590 </span> : : -<span class="lineNum"> 591 </span> : : static int -<span class="lineNum"> 592 </span> : : add_replay_dbm_cache(fko_srv_options_t *opts, char *digest) -<span class="lineNum"> 593 </span> : : { -<span class="lineNum"> 594 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 595 </span> : : return 0; -<span class="lineNum"> 596 </span> : : #else -<span class="lineNum"> 597 </span> : : -<span class="lineNum"> 598 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 599 </span> : : GDBM_FILE rpdb; -<span class="lineNum"> 600 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 601 </span> : : DBM *rpdb; -<span class="lineNum"> 602 </span> : : #endif -<span class="lineNum"> 603 </span> : : datum db_key, db_ent; -<span class="lineNum"> 604 </span> : : -<span class="lineNum"> 605 </span> : : int digest_len, res = SPA_MSG_SUCCESS; -<span class="lineNum"> 606 </span> : : -<span class="lineNum"> 607 </span> : : digest_cache_info_t dc_info; -<span class="lineNum"> 608 </span> : : -<span class="lineNum"> 609 </span> : : digest_len = strlen(digest); -<span class="lineNum"> 610 </span> : : -<span class="lineNum"> 611 </span> : : db_key.dptr = digest; -<span class="lineNum"> 612 </span> : : db_key.dsize = digest_len; -<span class="lineNum"> 613 </span> : : -<span class="lineNum"> 614 </span> : : /* Check the db for the key -<span class="lineNum"> 615 </span> : : */ -<span class="lineNum"> 616 </span> : : #ifdef HAVE_LIBGDBM -<span class="lineNum"> 617 </span> : : rpdb = gdbm_open( -<span class="lineNum"> 618 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], 512, GDBM_WRCREAT, S_IRUSR|S_IWUSR, 0 -<span class="lineNum"> 619 </span> : : ); -<span class="lineNum"> 620 </span> : : #elif HAVE_LIBNDBM -<span class="lineNum"> 621 </span> : : rpdb = dbm_open(opts-&gt;config[CONF_DIGEST_DB_FILE], O_RDWR, 0); -<span class="lineNum"> 622 </span> : : #endif -<span class="lineNum"> 623 </span> : : -<span class="lineNum"> 624 </span> : : if(!rpdb) -<span class="lineNum"> 625 </span> : : { -<span class="lineNum"> 626 </span> : : log_msg(LOG_WARNING, &quot;Error opening digest_cache: '%s': %s&quot;, -<span class="lineNum"> 627 </span> : : opts-&gt;config[CONF_DIGEST_DB_FILE], -<span class="lineNum"> 628 </span> : : MY_DBM_STRERROR(errno) -<span class="lineNum"> 629 </span> : : ); -<span class="lineNum"> 630 </span> : : -<span class="lineNum"> 631 </span> : : return(SPA_MSG_DIGEST_CACHE_ERROR); -<span class="lineNum"> 632 </span> : : } -<span class="lineNum"> 633 </span> : : -<span class="lineNum"> 634 </span> : : db_ent = MY_DBM_FETCH(rpdb, db_key); -<span class="lineNum"> 635 </span> : : -<span class="lineNum"> 636 </span> : : /* If the datum is null, we have a new entry. -<span class="lineNum"> 637 </span> : : */ -<span class="lineNum"> 638 </span> : : if(db_ent.dptr == NULL) -<span class="lineNum"> 639 </span> : : { -<span class="lineNum"> 640 </span> : : /* This is a new SPA packet that needs to be added to the cache. -<span class="lineNum"> 641 </span> : : */ -<span class="lineNum"> 642 </span> : : dc_info.src_ip = opts-&gt;spa_pkt.packet_src_ip; -<span class="lineNum"> 643 </span> : : dc_info.dst_ip = opts-&gt;spa_pkt.packet_dst_ip; -<span class="lineNum"> 644 </span> : : dc_info.src_port = opts-&gt;spa_pkt.packet_src_port; -<span class="lineNum"> 645 </span> : : dc_info.dst_port = opts-&gt;spa_pkt.packet_dst_port; -<span class="lineNum"> 646 </span> : : dc_info.proto = opts-&gt;spa_pkt.packet_proto; -<span class="lineNum"> 647 </span> : : dc_info.created = time(NULL); -<span class="lineNum"> 648 </span> : : dc_info.first_replay = dc_info.last_replay = dc_info.replay_count = 0; -<span class="lineNum"> 649 </span> : : -<span class="lineNum"> 650 </span> : : db_ent.dsize = sizeof(digest_cache_info_t); -<span class="lineNum"> 651 </span> : : db_ent.dptr = (char*)&amp;(dc_info); -<span class="lineNum"> 652 </span> : : -<span class="lineNum"> 653 </span> : : if(MY_DBM_STORE(rpdb, db_key, db_ent, MY_DBM_INSERT) != 0) -<span class="lineNum"> 654 </span> : : { -<span class="lineNum"> 655 </span> : : log_msg(LOG_WARNING, &quot;Error adding entry digest_cache: %s&quot;, -<span class="lineNum"> 656 </span> : : MY_DBM_STRERROR(errno) -<span class="lineNum"> 657 </span> : : ); -<span class="lineNum"> 658 </span> : : -<span class="lineNum"> 659 </span> : : res = SPA_MSG_DIGEST_CACHE_ERROR; -<span class="lineNum"> 660 </span> : : } -<span class="lineNum"> 661 </span> : : -<span class="lineNum"> 662 </span> : : res = SPA_MSG_SUCCESS; -<span class="lineNum"> 663 </span> : : } -<span class="lineNum"> 664 </span> : : else -<span class="lineNum"> 665 </span> : : res = SPA_MSG_DIGEST_CACHE_ERROR; -<span class="lineNum"> 666 </span> : : -<span class="lineNum"> 667 </span> : : MY_DBM_CLOSE(rpdb); -<span class="lineNum"> 668 </span> : : -<span class="lineNum"> 669 </span> : : return(res); -<span class="lineNum"> 670 </span> : : #endif /* NO_DIGEST_CACHE */ -<span class="lineNum"> 671 </span> : : } -<span class="lineNum"> 672 </span> : : #endif /* USE_FILE_CACHE */ -<span class="lineNum"> 673 </span> : : -<span class="lineNum"> 674 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 675 </span> : : /* Free replay list memory -<a name="676"><span class="lineNum"> 676 </span> : : */</a> -<span class="lineNum"> 677 </span> : : void -<span class="lineNum"> 678 </span> :<span class="lineCov"> 1814 : free_replay_list(fko_srv_options_t *opts)</span> -<span class="lineNum"> 679 </span> : : { -<span class="lineNum"> 680 </span> :<span class="lineCov"> 1814 : struct digest_cache_list *digest_list_ptr = NULL, *digest_tmp = NULL;</span> -<span class="lineNum"> 681 </span> : : -<span class="lineNum"> 682 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 683 </span> : : return; -<span class="lineNum"> 684 </span> : : #endif -<span class="lineNum"> 685 </span> : : -<span class="lineNum"> 686 </span> : : #if AFL_FUZZING -<span class="lineNum"> 687 </span> : : if(opts-&gt;afl_fuzzing) -<span class="lineNum"> 688 </span> : : return; -<span class="lineNum"> 689 </span> : : #endif -<span class="lineNum"> 690 </span> : : -<span class="lineNum"> 691 </span> [<span class="branchCov" title="Branch 0 was taken 34 times"> + </span><span class="branchCov" title="Branch 1 was taken 1780 times"> + </span>]:<span class="lineCov"> 1814 : if (opts-&gt;digest_cache == NULL)</span> -<span class="lineNum"> 692 </span> : : return; -<span class="lineNum"> 693 </span> : : -<span class="lineNum"> 694 </span> : : digest_list_ptr = opts-&gt;digest_cache; -<span class="lineNum"> 695 </span> [<span class="branchCov" title="Branch 0 was taken 508 times"> + </span><span class="branchCov" title="Branch 1 was taken 34 times"> + </span>]:<span class="lineCov"> 542 : while (digest_list_ptr != NULL)</span> -<span class="lineNum"> 696 </span> : : { -<span class="lineNum"> 697 </span> :<span class="lineCov"> 508 : digest_tmp = digest_list_ptr-&gt;next;</span> -<span class="lineNum"> 698 </span> [<span class="branchCov" title="Branch 0 was taken 508 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 508 : if (digest_list_ptr-&gt;cache_info.digest != NULL</span> -<span class="lineNum"> 699 </span> [<span class="branchCov" title="Branch 0 was taken 508 times"> + </span><span class="branchNoCov" title="Branch 1 was not taken"> - </span>]:<span class="lineCov"> 508 : &amp;&amp; digest_list_ptr-&gt;cache_info.digest[0] != '\0')</span> -<span class="lineNum"> 700 </span> : : { -<span class="lineNum"> 701 </span> :<span class="lineCov"> 508 : free(digest_list_ptr-&gt;cache_info.digest);</span> -<span class="lineNum"> 702 </span> : : } -<span class="lineNum"> 703 </span> :<span class="lineCov"> 508 : free(digest_list_ptr);</span> -<span class="lineNum"> 704 </span> :<span class="lineCov"> 508 : digest_list_ptr = digest_tmp;</span> -<span class="lineNum"> 705 </span> : : } -<span class="lineNum"> 706 </span> : : -<span class="lineNum"> 707 </span> : : return; -<span class="lineNum"> 708 </span> : : } -<span class="lineNum"> 709 </span> : : #endif -<a name="710"><span class="lineNum"> 710 </span> : : </a> -<span class="lineNum"> 711 </span> : : int -<span class="lineNum"> 712 </span> :<span class="lineCov"> 71 : replay_cache_init(fko_srv_options_t *opts)</span> -<span class="lineNum"> 713 </span> : : { -<span class="lineNum"> 714 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 715 </span> : : return(-1); -<span class="lineNum"> 716 </span> : : #else -<span class="lineNum"> 717 </span> : : -<span class="lineNum"> 718 </span> : : /* If rotation was specified, do it. -<span class="lineNum"> 719 </span> : : */ -<span class="lineNum"> 720 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 71 times"> + </span>]:<span class="lineCov"> 71 : if(opts-&gt;rotate_digest_cache)</span> -<span class="lineNum"> 721 </span> :<span class="lineNoCov"> 0 : rotate_digest_cache_file(opts);</span> -<span class="lineNum"> 722 </span> : : -<span class="lineNum"> 723 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 724 </span> :<span class="lineCov"> 71 : return replay_file_cache_init(opts);</span> -<span class="lineNum"> 725 </span> : : #else -<span class="lineNum"> 726 </span> : : return replay_db_cache_init(opts); -<span class="lineNum"> 727 </span> : : #endif -<span class="lineNum"> 728 </span> : : -<span class="lineNum"> 729 </span> : : #endif /* NO_DIGEST_CACHE */ -<span class="lineNum"> 730 </span> : : } -<a name="731"><span class="lineNum"> 731 </span> : : </a> -<span class="lineNum"> 732 </span> : : int -<span class="lineNum"> 733 </span> :<span class="lineNoCov"> 0 : add_replay(fko_srv_options_t *opts, char *digest)</span> -<span class="lineNum"> 734 </span> : : { -<span class="lineNum"> 735 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 736 </span> : : return(-1); -<span class="lineNum"> 737 </span> : : #else -<span class="lineNum"> 738 </span> : : -<span class="lineNum"> 739 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(digest == NULL)</span> -<span class="lineNum"> 740 </span> : : { -<span class="lineNum"> 741 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;NULL digest passed into add_replay()&quot;);</span> -<span class="lineNum"> 742 </span> :<span class="lineNoCov"> 0 : return(SPA_MSG_DIGEST_CACHE_ERROR);</span> -<span class="lineNum"> 743 </span> : : } -<span class="lineNum"> 744 </span> : : -<span class="lineNum"> 745 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 746 </span> :<span class="lineNoCov"> 0 : return add_replay_file_cache(opts, digest);</span> -<span class="lineNum"> 747 </span> : : #else -<span class="lineNum"> 748 </span> : : return add_replay_dbm_cache(opts, digest); -<span class="lineNum"> 749 </span> : : #endif -<span class="lineNum"> 750 </span> : : #endif /* NO_DIGEST_CACHE */ -<span class="lineNum"> 751 </span> : : } -<span class="lineNum"> 752 </span> : : -<span class="lineNum"> 753 </span> : : /* Take an fko context, pull the digest and use it as the key to check the -<span class="lineNum"> 754 </span> : : * replay db (digest cache). -<a name="755"><span class="lineNum"> 755 </span> : : */</a> -<span class="lineNum"> 756 </span> : : int -<span class="lineNum"> 757 </span> :<span class="lineNoCov"> 0 : is_replay(fko_srv_options_t *opts, char *digest)</span> -<span class="lineNum"> 758 </span> : : { -<span class="lineNum"> 759 </span> : : #ifdef NO_DIGEST_CACHE -<span class="lineNum"> 760 </span> : : return(-1); -<span class="lineNum"> 761 </span> : : #else -<span class="lineNum"> 762 </span> : : -<span class="lineNum"> 763 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 764 </span> :<span class="lineNoCov"> 0 : return is_replay_file_cache(opts, digest);</span> -<span class="lineNum"> 765 </span> : : #else -<span class="lineNum"> 766 </span> : : return is_replay_dbm_cache(opts, digest); -<span class="lineNum"> 767 </span> : : #endif -<span class="lineNum"> 768 </span> : : #endif /* NO_DIGEST_CACHE */ -<span class="lineNum"> 769 </span> : : } -<span class="lineNum"> 770 </span> : : -<span class="lineNum"> 771 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html deleted file mode 100644 index ae4288a7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func-sort-c.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/sig_handler.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - sig_handler.c<span style="font-size: 80%;"> (<a href="sig_handler.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">61</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">31</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="sig_handler.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="sig_handler.c.gcov.html#51">sig_handler</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sig_handler.c.gcov.html#84">set_sig_handlers</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sig_handler.c.gcov.html#150">sig_do_stop</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html deleted file mode 100644 index 3b95ff54..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.func.html +++ /dev/null @@ -1,93 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/sig_handler.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - sig_handler.c<span style="font-size: 80%;"> (<a href="sig_handler.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">61</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">31</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="sig_handler.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="sig_handler.c.gcov.html#84">set_sig_handlers</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sig_handler.c.gcov.html#150">sig_do_stop</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="sig_handler.c.gcov.html#51">sig_handler</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html deleted file mode 100644 index ae1fb952..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/sig_handler.c.gcov.html +++ /dev/null @@ -1,262 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/sig_handler.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - sig_handler.c<span style="font-size: 80%;"> (source / <a href="sig_handler.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">61</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">3</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">31</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: sig_handler.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Signal handling dta and routines for fwknopd. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;sig_handler.h&quot; -<span class="lineNum"> 34 </span> : : -<span class="lineNum"> 35 </span> : : #if HAVE_SYS_WAIT_H -<span class="lineNum"> 36 </span> : : #include &lt;sys/wait.h&gt; -<span class="lineNum"> 37 </span> : : #endif -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : sig_atomic_t got_signal = 0; /* General signal flag (break capture) */ -<span class="lineNum"> 40 </span> : : -<span class="lineNum"> 41 </span> : : sig_atomic_t got_sighup = 0; /* SIGHUP flag */ -<span class="lineNum"> 42 </span> : : sig_atomic_t got_sigint = 0; /* SIGINT flag */ -<span class="lineNum"> 43 </span> : : sig_atomic_t got_sigterm = 0; /* SIGTERM flag */ -<span class="lineNum"> 44 </span> : : sig_atomic_t got_sigusr1 = 0; /* SIGUSR1 flag */ -<span class="lineNum"> 45 </span> : : sig_atomic_t got_sigusr2 = 0; /* SIGUSR2 flag */ -<span class="lineNum"> 46 </span> : : sig_atomic_t got_sigchld = 0; /* SIGCHLD flag */ -<span class="lineNum"> 47 </span> : : -<span class="lineNum"> 48 </span> : : sigset_t *csmask; -<span class="lineNum"> 49 </span> : : -<span class="lineNum"> 50 </span> : : /* SIGHUP Handler -<a name="51"><span class="lineNum"> 51 </span> : : */</a> -<span class="lineNum"> 52 </span> : : void -<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : sig_handler(int sig)</span> -<span class="lineNum"> 54 </span> : : { -<span class="lineNum"> 55 </span> : : int o_errno; -<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : got_signal = sig;</span> -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span> :<span class="lineNoCov"> 0 : switch(sig) {</span> -<span class="lineNum"> </span> <span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span><span class="branchNoExec" title="Branch 6 was not executed"> # </span>] -<span class="lineNum"> 59 </span> : : case SIGHUP: -<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : got_sighup = 1;</span> -<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 62 </span> : : case SIGINT: -<span class="lineNum"> 63 </span> :<span class="lineNoCov"> 0 : got_sigint = 1;</span> -<span class="lineNum"> 64 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 65 </span> : : case SIGTERM: -<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : got_sigterm = 1;</span> -<span class="lineNum"> 67 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 68 </span> : : case SIGUSR1: -<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : got_sigusr1 = 1;</span> -<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 71 </span> : : case SIGUSR2: -<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : got_sigusr2 = 1;</span> -<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 74 </span> : : case SIGCHLD: -<span class="lineNum"> 75 </span> :<span class="lineNoCov"> 0 : o_errno = errno; /* Save errno */</span> -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : got_sigchld = 1;</span> -<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : waitpid(-1, NULL, WNOHANG);</span> -<span class="lineNum"> 78 </span> :<span class="lineNoCov"> 0 : errno = o_errno; /* restore errno (in case reset by waitpid) */</span> -<span class="lineNum"> 79 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 80 </span> : : } -<span class="lineNum"> 81 </span> : : } -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> : : /* Setup signal handlers -<a name="84"><span class="lineNum"> 84 </span> : : */</a> -<span class="lineNum"> 85 </span> : : int -<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : set_sig_handlers(void)</span> -<span class="lineNum"> 87 </span> : : { -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : int err = 0;</span> -<span class="lineNum"> 89 </span> : : struct sigaction act; -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> : : /* Clear the signal flags. -<span class="lineNum"> 92 </span> : : */ -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> -<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : got_sighup = 0;</span> -<span class="lineNum"> 95 </span> :<span class="lineNoCov"> 0 : got_sigint = 0;</span> -<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : got_sigterm = 0;</span> -<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : got_sigusr1 = 0;</span> -<span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : got_sigusr2 = 0;</span> -<span class="lineNum"> 99 </span> : : -<span class="lineNum"> 100 </span> : : /* Setup the handlers -<span class="lineNum"> 101 </span> : : */ -<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : act.sa_handler = sig_handler;</span> -<span class="lineNum"> 103 </span> :<span class="lineNoCov"> 0 : sigemptyset(&amp;act.sa_mask);</span> -<span class="lineNum"> 104 </span> :<span class="lineNoCov"> 0 : act.sa_flags = SA_RESTART;</span> -<span class="lineNum"> 105 </span> : : -<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGHUP, &amp;act, NULL) &lt; 0)</span> -<span class="lineNum"> 107 </span> : : { -<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGHUP handler: %s&quot;,</span> -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 111 </span> : : } -<span class="lineNum"> 112 </span> : : -<span class="lineNum"> 113 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGINT, &amp;act, NULL) &lt; 0)</span> -<span class="lineNum"> 114 </span> : : { -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGINT handler: %s&quot;,</span> -<span class="lineNum"> 116 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 118 </span> : : } -<span class="lineNum"> 119 </span> : : -<span class="lineNum"> 120 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGTERM, &amp;act, NULL) &lt; 0)</span> -<span class="lineNum"> 121 </span> : : { -<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGTERM handler: %s&quot;,</span> -<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 125 </span> : : } -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGUSR1, &amp;act, NULL) &lt; 0)</span> -<span class="lineNum"> 128 </span> : : { -<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGUSR1 handler: %s&quot;,</span> -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 132 </span> : : } -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGUSR2, &amp;act, NULL) &lt; 0)</span> -<span class="lineNum"> 135 </span> : : { -<span class="lineNum"> 136 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGUSR2 handler: %s&quot;,</span> -<span class="lineNum"> 137 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 138 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 139 </span> : : } -<span class="lineNum"> 140 </span> : : -<span class="lineNum"> 141 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sigaction(SIGCHLD, &amp;act, NULL) &lt; 0)</span> -<span class="lineNum"> 142 </span> : : { -<span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;* Error setting SIGCHLD handler: %s&quot;,</span> -<span class="lineNum"> 144 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 145 </span> :<span class="lineNoCov"> 0 : err++;</span> -<span class="lineNum"> 146 </span> : : } -<span class="lineNum"> 147 </span> : : -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : return(err);</span> -<span class="lineNum"> 149 </span> : : } -<a name="150"><span class="lineNum"> 150 </span> : : </a> -<span class="lineNum"> 151 </span> : : int -<span class="lineNum"> 152 </span> :<span class="lineNoCov"> 0 : sig_do_stop(void)</span> -<span class="lineNum"> 153 </span> : : { -<span class="lineNum"> 154 </span> : : /* Any signal except USR1, USR2, and SIGCHLD mean break the loop. -<span class="lineNum"> 155 </span> : : */ -<span class="lineNum"> 156 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_signal != 0)</span> -<span class="lineNum"> 157 </span> : : { -<span class="lineNum"> 158 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(got_sigint || got_sigterm || got_sighup)</span> -<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 4 was not executed"> # </span><span class="branchNoExec" title="Branch 5 was not executed"> # </span>] -<span class="lineNum"> 159 </span> : : { -<span class="lineNum"> 160 </span> : : return 1; -<span class="lineNum"> 161 </span> : : } -<span class="lineNum"> 162 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : else if(got_sigusr1 || got_sigusr2)</span> -<span class="lineNum"> 163 </span> : : { -<span class="lineNum"> 164 </span> : : /* Not doing anything with these yet. -<span class="lineNum"> 165 </span> : : */ -<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : got_sigusr1 = got_sigusr2 = 0;</span> -<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> -<span class="lineNum"> 168 </span> : : } -<span class="lineNum"> 169 </span> : : else -<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : got_signal = 0;</span> -<span class="lineNum"> 171 </span> : : } -<span class="lineNum"> 172 </span> : : return 0; -<span class="lineNum"> 173 </span> : : } -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html deleted file mode 100644 index aaddfae7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/tcp_server.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - tcp_server.c<span style="font-size: 80%;"> (<a href="tcp_server.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">63</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="tcp_server.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="tcp_server.c.gcov.html#53">run_tcp_server</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html deleted file mode 100644 index 9a27c919..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.func.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/tcp_server.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - tcp_server.c<span style="font-size: 80%;"> (<a href="tcp_server.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">63</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="tcp_server.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="tcp_server.c.gcov.html#53">run_tcp_server</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html deleted file mode 100644 index 931f08e8..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/tcp_server.c.gcov.html +++ /dev/null @@ -1,342 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/tcp_server.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - tcp_server.c<span style="font-size: 80%;"> (source / <a href="tcp_server.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">63</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">30</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: tcp_server.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Spawns off a dummy tcp server for fwknopd. Its purpose is -<span class="lineNum"> 7 </span> : : * to accept a tcp connection, then drop it after the first packet. -<span class="lineNum"> 8 </span> : : * -<span class="lineNum"> 9 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 10 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 11 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 12 </span> : : * -<span class="lineNum"> 13 </span> : : * License (GNU General Public License): -<span class="lineNum"> 14 </span> : : * -<span class="lineNum"> 15 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 16 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 17 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 18 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 19 </span> : : * -<span class="lineNum"> 20 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 21 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 22 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 23 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 24 </span> : : * -<span class="lineNum"> 25 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 26 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 27 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 28 </span> : : * USA -<span class="lineNum"> 29 </span> : : * -<span class="lineNum"> 30 </span> : : ***************************************************************************** -<span class="lineNum"> 31 </span> : : */ -<span class="lineNum"> 32 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;tcp_server.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 36 </span> : : #include &lt;errno.h&gt; -<span class="lineNum"> 37 </span> : : -<span class="lineNum"> 38 </span> : : #if HAVE_SYS_SOCKET_H -<span class="lineNum"> 39 </span> : : #include &lt;sys/socket.h&gt; -<span class="lineNum"> 40 </span> : : #endif -<span class="lineNum"> 41 </span> : : #if HAVE_ARPA_INET_H -<span class="lineNum"> 42 </span> : : #include &lt;arpa/inet.h&gt; -<span class="lineNum"> 43 </span> : : #endif -<span class="lineNum"> 44 </span> : : #if HAVE_NETDB -<span class="lineNum"> 45 </span> : : #include &lt;netdb.h&gt; -<span class="lineNum"> 46 </span> : : #endif -<span class="lineNum"> 47 </span> : : -<span class="lineNum"> 48 </span> : : #include &lt;fcntl.h&gt; -<span class="lineNum"> 49 </span> : : #include &lt;sys/select.h&gt; -<span class="lineNum"> 50 </span> : : -<span class="lineNum"> 51 </span> : : /* Fork off and run a &quot;dummy&quot; TCP server. The return value is the PID of -<span class="lineNum"> 52 </span> : : * the child process or -1 if there is a fork error. -<a name="53"><span class="lineNum"> 53 </span> : : */</a> -<span class="lineNum"> 54 </span> : : int -<span class="lineNum"> 55 </span> :<span class="lineNoCov"> 0 : run_tcp_server(fko_srv_options_t *opts)</span> -<span class="lineNum"> 56 </span> : : { -<span class="lineNum"> 57 </span> : : #if !CODE_COVERAGE -<span class="lineNum"> 58 </span> : : pid_t pid, ppid; -<span class="lineNum"> 59 </span> : : #endif -<span class="lineNum"> 60 </span> : : int s_sock, c_sock, sfd_flags, clen, selval; -<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : int reuse_addr = 1, is_err, rv=1;</span> -<span class="lineNum"> 62 </span> : : fd_set sfd_set; -<span class="lineNum"> 63 </span> : : struct sockaddr_in saddr, caddr; -<span class="lineNum"> 64 </span> : : struct timeval tv; -<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : char sipbuf[MAX_IPV4_STR_LEN] = {0};</span> -<span class="lineNum"> 66 </span> : : -<span class="lineNum"> 67 </span> : : unsigned short port; -<span class="lineNum"> 68 </span> : : -<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : port = strtol_wrapper(opts-&gt;config[CONF_TCPSERV_PORT],</span> -<span class="lineNum"> 70 </span> : : 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 71 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 72 </span> : : { -<span class="lineNum"> 73 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid max TCPSERV_PORT value.&quot;);</span> -<span class="lineNum"> 74 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 75 </span> : : } -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Kicking off TCP server to listen on port %i.&quot;, port);</span> -<span class="lineNum"> 77 </span> : : -<span class="lineNum"> 78 </span> : : #if !CODE_COVERAGE -<span class="lineNum"> 79 </span> : : /* Fork off a child process to run the command and provide its outputs. -<span class="lineNum"> 80 </span> : : */ -<span class="lineNum"> 81 </span> : : pid = fork(); -<span class="lineNum"> 82 </span> : : -<span class="lineNum"> 83 </span> : : /* Non-zero pid means we are the parent or there was a fork error. -<span class="lineNum"> 84 </span> : : * in either case we simply return that value to the caller. -<span class="lineNum"> 85 </span> : : */ -<span class="lineNum"> 86 </span> : : if (pid != 0) -<span class="lineNum"> 87 </span> : : { -<span class="lineNum"> 88 </span> : : opts-&gt;tcp_server_pid = pid; -<span class="lineNum"> 89 </span> : : return(pid); -<span class="lineNum"> 90 </span> : : } -<span class="lineNum"> 91 </span> : : -<span class="lineNum"> 92 </span> : : /* Get our parent PID so we can periodically check for it. We want to -<span class="lineNum"> 93 </span> : : * know when it goes away so we can too. -<span class="lineNum"> 94 </span> : : */ -<span class="lineNum"> 95 </span> : : ppid = getppid(); -<span class="lineNum"> 96 </span> : : -<span class="lineNum"> 97 </span> : : /* We are the child. The first thing to do is close our copy of the -<span class="lineNum"> 98 </span> : : * parent PID file so we don't end up holding the lock if the parent -<span class="lineNum"> 99 </span> : : * suffers a sudden death that doesn't take us out too. -<span class="lineNum"> 100 </span> : : */ -<span class="lineNum"> 101 </span> : : close(opts-&gt;lock_fd); -<span class="lineNum"> 102 </span> : : #endif -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> : : /* Now, let's make a TCP server -<span class="lineNum"> 105 </span> : : */ -<span class="lineNum"> 106 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((s_sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) &lt; 0)</span> -<span class="lineNum"> 107 </span> : : { -<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: socket() failed: %s&quot;,</span> -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 110 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 111 </span> : : } -<span class="lineNum"> 112 </span> : : -<span class="lineNum"> 113 </span> : : /* So that we can re-bind to it without TIME_WAIT problems -<span class="lineNum"> 114 </span> : : */ -<span class="lineNum"> 115 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(setsockopt(s_sock, SOL_SOCKET, SO_REUSEADDR, &amp;reuse_addr, sizeof(reuse_addr)) == -1)</span> -<span class="lineNum"> 116 </span> : : { -<span class="lineNum"> 117 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: setsockopt error: %s&quot;,</span> -<span class="lineNum"> 118 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 120 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 121 </span> : : } -<span class="lineNum"> 122 </span> : : -<span class="lineNum"> 123 </span> : : /* Make our main socket non-blocking so we don't have to be stuck on -<span class="lineNum"> 124 </span> : : * listening for incoming connections. -<span class="lineNum"> 125 </span> : : */ -<span class="lineNum"> 126 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sfd_flags = fcntl(s_sock, F_GETFL, 0)) &lt; 0)</span> -<span class="lineNum"> 127 </span> : : { -<span class="lineNum"> 128 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: fcntl F_GETFL error: %s&quot;,</span> -<span class="lineNum"> 129 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 130 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 131 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 132 </span> : : } -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> : : #if !CODE_COVERAGE -<span class="lineNum"> 135 </span> : : sfd_flags |= O_NONBLOCK; -<span class="lineNum"> 136 </span> : : -<span class="lineNum"> 137 </span> : : if(fcntl(s_sock, F_SETFL, sfd_flags) &lt; 0) -<span class="lineNum"> 138 </span> : : { -<span class="lineNum"> 139 </span> : : log_msg(LOG_ERR, &quot;run_tcp_server: fcntl F_SETFL error setting O_NONBLOCK: %s&quot;, -<span class="lineNum"> 140 </span> : : strerror(errno)); -<span class="lineNum"> 141 </span> : : close(s_sock); -<span class="lineNum"> 142 </span> : : return -1; -<span class="lineNum"> 143 </span> : : } -<span class="lineNum"> 144 </span> : : #endif -<span class="lineNum"> 145 </span> : : -<span class="lineNum"> 146 </span> : : /* Construct local address structure */ -<span class="lineNum"> 147 </span> : : memset(&amp;saddr, 0, sizeof(saddr)); -<span class="lineNum"> 148 </span> :<span class="lineNoCov"> 0 : saddr.sin_family = AF_INET; /* Internet address family */</span> -<span class="lineNum"> 149 </span> :<span class="lineNoCov"> 0 : saddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */</span> -<span class="lineNum"> 150 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : saddr.sin_port = htons(port); /* Local port */</span> -<span class="lineNum"> 151 </span> : : -<span class="lineNum"> 152 </span> : : /* Bind to the local address */ -<span class="lineNum"> 153 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bind(s_sock, (struct sockaddr *) &amp;saddr, sizeof(saddr)) &lt; 0)</span> -<span class="lineNum"> 154 </span> : : { -<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: bind() failed: %s&quot;,</span> -<span class="lineNum"> 156 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 158 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 159 </span> : : } -<span class="lineNum"> 160 </span> : : -<span class="lineNum"> 161 </span> : : /* Mark the socket so it will listen for incoming connections -<span class="lineNum"> 162 </span> : : * (but only one at a time) -<span class="lineNum"> 163 </span> : : */ -<span class="lineNum"> 164 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (listen(s_sock, 1) &lt; 0)</span> -<span class="lineNum"> 165 </span> : : { -<span class="lineNum"> 166 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: listen() failed: %s&quot;,</span> -<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 168 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 169 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 170 </span> : : } -<span class="lineNum"> 171 </span> : : -<span class="lineNum"> 172 </span> :<span class="lineNoCov"> 0 : FD_ZERO(&amp;sfd_set);</span> -<span class="lineNum"> 173 </span> : : -<span class="lineNum"> 174 </span> : : /* Now loop and accept and drop connections after the first packet or a -<span class="lineNum"> 175 </span> : : * short timeout. -<span class="lineNum"> 176 </span> : : */ -<span class="lineNum"> 177 </span> : : while(1) -<span class="lineNum"> 178 </span> : : { -<span class="lineNum"> 179 </span> :<span class="lineNoCov"> 0 : clen = sizeof(caddr);</span> -<span class="lineNum"> 180 </span> : : -<span class="lineNum"> 181 </span> : : /* Initialize and setup the socket for select. -<span class="lineNum"> 182 </span> : : */ -<span class="lineNum"> 183 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : FD_SET(s_sock, &amp;sfd_set);</span> -<span class="lineNum"> 184 </span> : : -<span class="lineNum"> 185 </span> : : /* Set our select timeout to 200 ms. -<span class="lineNum"> 186 </span> : : */ -<span class="lineNum"> 187 </span> :<span class="lineNoCov"> 0 : tv.tv_sec = 0;</span> -<span class="lineNum"> 188 </span> :<span class="lineNoCov"> 0 : tv.tv_usec = 200000;</span> -<span class="lineNum"> 189 </span> : : -<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : selval = select(s_sock+1, &amp;sfd_set, NULL, NULL, &amp;tv);</span> -<span class="lineNum"> 191 </span> : : -<span class="lineNum"> 192 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(selval == -1)</span> -<span class="lineNum"> 193 </span> : : { -<span class="lineNum"> 194 </span> : : /* Select error - so kill the child and bail. -<span class="lineNum"> 195 </span> : : */ -<span class="lineNum"> 196 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: select error socket: %s&quot;,</span> -<span class="lineNum"> 197 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 198 </span> :<span class="lineNoCov"> 0 : rv = -1;</span> -<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 200 </span> : : } -<span class="lineNum"> 201 </span> : : -<span class="lineNum"> 202 </span> : : #if !CODE_COVERAGE -<span class="lineNum"> 203 </span> : : if(selval == 0) -<span class="lineNum"> 204 </span> : : { -<span class="lineNum"> 205 </span> : : /* Timeout - So we check to make sure our parent is still there by simply -<span class="lineNum"> 206 </span> : : * using kill(ppid, 0) and checking the return value. -<span class="lineNum"> 207 </span> : : */ -<span class="lineNum"> 208 </span> : : if(kill(ppid, 0) != 0 &amp;&amp; errno == ESRCH) -<span class="lineNum"> 209 </span> : : { -<span class="lineNum"> 210 </span> : : rv = -1; -<span class="lineNum"> 211 </span> : : break; -<span class="lineNum"> 212 </span> : : } -<span class="lineNum"> 213 </span> : : continue; -<span class="lineNum"> 214 </span> : : } -<span class="lineNum"> 215 </span> : : #endif -<span class="lineNum"> 216 </span> : : -<span class="lineNum"> 217 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! FD_ISSET(s_sock, &amp;sfd_set))</span> -<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] -<span class="lineNum"> 218 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 219 </span> : : -<span class="lineNum"> 220 </span> : : /* Wait for a client to connect -<span class="lineNum"> 221 </span> : : */ -<span class="lineNum"> 222 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((c_sock = accept(s_sock, (struct sockaddr *) &amp;caddr, (socklen_t *)&amp;clen)) &lt; 0)</span> -<span class="lineNum"> 223 </span> : : { -<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_tcp_server: accept() failed: %s&quot;,</span> -<span class="lineNum"> 225 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : rv = -1;</span> -<span class="lineNum"> 227 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 228 </span> : : } -<span class="lineNum"> 229 </span> : : -<span class="lineNum"> 230 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> -<span class="lineNum"> 231 </span> : : { -<span class="lineNum"> 232 </span> : : memset(sipbuf, 0x0, MAX_IPV4_STR_LEN); -<span class="lineNum"> 233 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(caddr.sin_addr.s_addr), sipbuf, MAX_IPV4_STR_LEN);</span> -<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;tcp_server: Got TCP connection from %s.&quot;, sipbuf);</span> -<span class="lineNum"> 235 </span> : : } -<span class="lineNum"> 236 </span> : : -<span class="lineNum"> 237 </span> : : /* Though hacky and clunky, we just sleep for a second then -<span class="lineNum"> 238 </span> : : * close the socket. No need to read or write anything. This -<span class="lineNum"> 239 </span> : : * just gives the client a sufficient window to send their -<span class="lineNum"> 240 </span> : : * request on this socket. In any case the socket is closed -<span class="lineNum"> 241 </span> : : * after that time. -<span class="lineNum"> 242 </span> : : */ -<span class="lineNum"> 243 </span> :<span class="lineNoCov"> 0 : usleep(1000000);</span> -<span class="lineNum"> 244 </span> :<span class="lineNoCov"> 0 : shutdown(c_sock, SHUT_RDWR);</span> -<span class="lineNum"> 245 </span> :<span class="lineNoCov"> 0 : close(c_sock);</span> -<span class="lineNum"> 246 </span> : : -<span class="lineNum"> 247 </span> : : #if CODE_COVERAGE -<span class="lineNum"> 248 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 249 </span> : : #endif -<span class="lineNum"> 250 </span> :<span class="lineNoCov"> 0 : } /* infinite while loop */</span> -<span class="lineNum"> 251 </span> : : -<span class="lineNum"> 252 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 253 </span> :<span class="lineNoCov"> 0 : return rv;</span> -<span class="lineNum"> 254 </span> : : } -<span class="lineNum"> 255 </span> : : -<span class="lineNum"> 256 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html deleted file mode 100644 index e781a71b..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func-sort-c.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/udp_server.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - udp_server.c<span style="font-size: 80%;"> (<a href="udp_server.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">81</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">54</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="udp_server.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="udp_server.c.gcov.html#51">run_udp_server</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html deleted file mode 100644 index 807d0225..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.func.html +++ /dev/null @@ -1,85 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/udp_server.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - udp_server.c<span style="font-size: 80%;"> (<a href="udp_server.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">81</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">54</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="udp_server.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="udp_server.c.gcov.html#51">run_udp_server</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html deleted file mode 100644 index 4dd58d89..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/udp_server.c.gcov.html +++ /dev/null @@ -1,330 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/udp_server.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - udp_server.c<span style="font-size: 80%;"> (source / <a href="udp_server.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">81</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">1</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">0</td> - <td class="headerCovTableEntry">54</td> - <td class="headerCovTableEntryLo">0.0 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /*</a> -<span class="lineNum"> 2 </span> : : ***************************************************************************** -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * File: udp_server.c -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Purpose: Collect SPA packets via a UDP server. -<span class="lineNum"> 7 </span> : : * -<span class="lineNum"> 8 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 9 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 10 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * License (GNU General Public License): -<span class="lineNum"> 13 </span> : : * -<span class="lineNum"> 14 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 15 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 16 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 17 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 18 </span> : : * -<span class="lineNum"> 19 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 20 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 21 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 22 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 23 </span> : : * -<span class="lineNum"> 24 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 25 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 26 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 27 </span> : : * USA -<span class="lineNum"> 28 </span> : : * -<span class="lineNum"> 29 </span> : : ***************************************************************************** -<span class="lineNum"> 30 </span> : : */ -<span class="lineNum"> 31 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;sig_handler.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;incoming_spa.h&quot; -<span class="lineNum"> 34 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 35 </span> : : #include &quot;fw_util.h&quot; -<span class="lineNum"> 36 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 37 </span> : : #include &lt;errno.h&gt; -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : #if HAVE_SYS_SOCKET_H -<span class="lineNum"> 40 </span> : : #include &lt;sys/socket.h&gt; -<span class="lineNum"> 41 </span> : : #endif -<span class="lineNum"> 42 </span> : : #if HAVE_ARPA_INET_H -<span class="lineNum"> 43 </span> : : #include &lt;arpa/inet.h&gt; -<span class="lineNum"> 44 </span> : : #endif -<span class="lineNum"> 45 </span> : : #if HAVE_NETDB -<span class="lineNum"> 46 </span> : : #include &lt;netdb.h&gt; -<span class="lineNum"> 47 </span> : : #endif -<span class="lineNum"> 48 </span> : : -<span class="lineNum"> 49 </span> : : #include &lt;fcntl.h&gt; -<span class="lineNum"> 50 </span> : : #include &lt;sys/select.h&gt; -<a name="51"><span class="lineNum"> 51 </span> : : </a> -<span class="lineNum"> 52 </span> : : int -<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : run_udp_server(fko_srv_options_t *opts)</span> -<span class="lineNum"> 54 </span> : : { -<span class="lineNum"> 55 </span> : : int s_sock, sfd_flags, selval, pkt_len; -<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : int is_err, s_timeout, rv=1;</span> -<span class="lineNum"> 57 </span> : : fd_set sfd_set; -<span class="lineNum"> 58 </span> : : struct sockaddr_in saddr, caddr; -<span class="lineNum"> 59 </span> : : struct timeval tv; -<span class="lineNum"> 60 </span> :<span class="lineNoCov"> 0 : char sipbuf[MAX_IPV4_STR_LEN] = {0};</span> -<span class="lineNum"> 61 </span> :<span class="lineNoCov"> 0 : char dgram_msg[MAX_SPA_PACKET_LEN+1] = {0};</span> -<span class="lineNum"> 62 </span> : : unsigned short port; -<span class="lineNum"> 63 </span> : : socklen_t clen; -<span class="lineNum"> 64 </span> : : -<span class="lineNum"> 65 </span> :<span class="lineNoCov"> 0 : port = strtol_wrapper(opts-&gt;config[CONF_UDPSERV_PORT],</span> -<span class="lineNum"> 66 </span> : : 1, MAX_PORT, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 67 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 68 </span> : : { -<span class="lineNum"> 69 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid max UDPSERV_PORT value.&quot;);</span> -<span class="lineNum"> 70 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 71 </span> : : } -<span class="lineNum"> 72 </span> :<span class="lineNoCov"> 0 : s_timeout = strtol_wrapper(opts-&gt;config[CONF_UDPSERV_SELECT_TIMEOUT],</span> -<span class="lineNum"> 73 </span> : : 1, RCHK_MAX_UDPSERV_SELECT_TIMEOUT, NO_EXIT_UPON_ERR, &amp;is_err); -<span class="lineNum"> 74 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(is_err != FKO_SUCCESS)</span> -<span class="lineNum"> 75 </span> : : { -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] Invalid max UDPSERV_SELECT_TIMEOUT value.&quot;);</span> -<span class="lineNum"> 77 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 78 </span> : : } -<span class="lineNum"> 79 </span> : : -<span class="lineNum"> 80 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;Kicking off UDP server to listen on port %i.&quot;, port);</span> -<span class="lineNum"> 81 </span> : : -<span class="lineNum"> 82 </span> : : /* Now, let's make a UDP server -<span class="lineNum"> 83 </span> : : */ -<span class="lineNum"> 84 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if ((s_sock = socket(AF_INET, SOCK_DGRAM, 0)) &lt; 0)</span> -<span class="lineNum"> 85 </span> : : { -<span class="lineNum"> 86 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: socket() failed: %s&quot;,</span> -<span class="lineNum"> 87 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 88 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 89 </span> : : } -<span class="lineNum"> 90 </span> : : -<span class="lineNum"> 91 </span> : : /* Make our main socket non-blocking so we don't have to be stuck on -<span class="lineNum"> 92 </span> : : * listening for incoming datagrams. -<span class="lineNum"> 93 </span> : : */ -<span class="lineNum"> 94 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((sfd_flags = fcntl(s_sock, F_GETFL, 0)) &lt; 0)</span> -<span class="lineNum"> 95 </span> : : { -<span class="lineNum"> 96 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: fcntl F_GETFL error: %s&quot;,</span> -<span class="lineNum"> 97 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 98 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 99 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 100 </span> : : } -<span class="lineNum"> 101 </span> : : -<span class="lineNum"> 102 </span> :<span class="lineNoCov"> 0 : sfd_flags |= O_NONBLOCK;</span> -<span class="lineNum"> 103 </span> : : -<span class="lineNum"> 104 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(fcntl(s_sock, F_SETFL, sfd_flags) &lt; 0)</span> -<span class="lineNum"> 105 </span> : : { -<span class="lineNum"> 106 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: fcntl F_SETFL error setting O_NONBLOCK: %s&quot;,</span> -<span class="lineNum"> 107 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 108 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 109 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 110 </span> : : } -<span class="lineNum"> 111 </span> : : -<span class="lineNum"> 112 </span> : : /* Construct local address structure */ -<span class="lineNum"> 113 </span> : : memset(&amp;saddr, 0x0, sizeof(saddr)); -<span class="lineNum"> 114 </span> :<span class="lineNoCov"> 0 : saddr.sin_family = AF_INET; /* Internet address family */</span> -<span class="lineNum"> 115 </span> :<span class="lineNoCov"> 0 : saddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */</span> -<span class="lineNum"> 116 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : saddr.sin_port = htons(port); /* Local port */</span> -<span class="lineNum"> 117 </span> : : -<span class="lineNum"> 118 </span> : : /* Bind to the local address */ -<span class="lineNum"> 119 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (bind(s_sock, (struct sockaddr *) &amp;saddr, sizeof(saddr)) &lt; 0)</span> -<span class="lineNum"> 120 </span> : : { -<span class="lineNum"> 121 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: bind() failed: %s&quot;,</span> -<span class="lineNum"> 122 </span> :<span class="lineNoCov"> 0 : strerror(errno));</span> -<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 124 </span> :<span class="lineNoCov"> 0 : return -1;</span> -<span class="lineNum"> 125 </span> : : } -<span class="lineNum"> 126 </span> : : -<span class="lineNum"> 127 </span> : : /* Initialize our signal handlers. You can check the return value for -<span class="lineNum"> 128 </span> : : * the number of signals that were *not* set. Those that were not set -<span class="lineNum"> 129 </span> : : * will be listed in the log/stderr output. -<span class="lineNum"> 130 </span> : : */ -<span class="lineNum"> 131 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(set_sig_handlers() &gt; 0)</span> -<span class="lineNum"> 132 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;Errors encountered when setting signal handlers.&quot;);</span> -<span class="lineNum"> 133 </span> : : -<span class="lineNum"> 134 </span> :<span class="lineNoCov"> 0 : FD_ZERO(&amp;sfd_set);</span> -<span class="lineNum"> 135 </span> : : -<span class="lineNum"> 136 </span> : : /* Now loop and receive SPA packets -<span class="lineNum"> 137 </span> : : */ -<span class="lineNum"> 138 </span> : : while(1) -<span class="lineNum"> 139 </span> : : { -<span class="lineNum"> 140 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(sig_do_stop())</span> -<span class="lineNum"> 141 </span> : : { -<span class="lineNum"> 142 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> -<span class="lineNum"> 143 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO,</span> -<span class="lineNum"> 144 </span> : : &quot;udp_server: terminating signal received, will stop.&quot;); -<span class="lineNum"> 145 </span> : : break; -<span class="lineNum"> 146 </span> : : } -<span class="lineNum"> 147 </span> : : -<span class="lineNum"> 148 </span> : : /* Check for any expired firewall rules and deal with them. -<span class="lineNum"> 149 </span> : : */ -<span class="lineNum"> 150 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!opts-&gt;test)</span> -<span class="lineNum"> 151 </span> :<span class="lineNoCov"> 0 : check_firewall_rules(opts);</span> -<span class="lineNum"> 152 </span> : : -<span class="lineNum"> 153 </span> : : /* Initialize and setup the socket for select. -<span class="lineNum"> 154 </span> : : */ -<span class="lineNum"> 155 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : FD_SET(s_sock, &amp;sfd_set);</span> -<span class="lineNum"> 156 </span> : : -<span class="lineNum"> 157 </span> : : /* Set our select timeout to (500ms by default). -<span class="lineNum"> 158 </span> : : */ -<span class="lineNum"> 159 </span> :<span class="lineNoCov"> 0 : tv.tv_sec = 0;</span> -<span class="lineNum"> 160 </span> :<span class="lineNoCov"> 0 : tv.tv_usec = s_timeout;</span> -<span class="lineNum"> 161 </span> : : -<span class="lineNum"> 162 </span> :<span class="lineNoCov"> 0 : selval = select(s_sock+1, &amp;sfd_set, NULL, NULL, &amp;tv);</span> -<span class="lineNum"> 163 </span> : : -<span class="lineNum"> 164 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(selval == -1)</span> -<span class="lineNum"> 165 </span> : : { -<span class="lineNum"> 166 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno == EINTR)</span> -<span class="lineNum"> 167 </span> : : { -<span class="lineNum"> 168 </span> : : /* restart loop but only after we check for a terminating -<span class="lineNum"> 169 </span> : : * signal above in sig_do_stop() -<span class="lineNum"> 170 </span> : : */ -<span class="lineNum"> 171 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 172 </span> : : } -<span class="lineNum"> 173 </span> : : else -<span class="lineNum"> 174 </span> : : { -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;run_udp_server: select error socket: %s&quot;,</span> -<span class="lineNum"> 176 </span> : : strerror(errno)); -<span class="lineNum"> 177 </span> :<span class="lineNoCov"> 0 : rv = -1;</span> -<span class="lineNum"> 178 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 179 </span> : : } -<span class="lineNum"> 180 </span> : : } -<span class="lineNum"> 181 </span> : : -<span class="lineNum"> 182 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(selval == 0)</span> -<span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 184 </span> : : -<span class="lineNum"> 185 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(! FD_ISSET(s_sock, &amp;sfd_set))</span> -<span class="lineNum"> </span> [<span class="branchNoExec" title="Branch 6 was not executed"> # </span><span class="branchNoExec" title="Branch 7 was not executed"> # </span>] -<span class="lineNum"> 186 </span> :<span class="lineNoCov"> 0 : continue;</span> -<span class="lineNum"> 187 </span> : : -<span class="lineNum"> 188 </span> : : /* If we make it here then there is a datagram to process -<span class="lineNum"> 189 </span> : : */ -<span class="lineNum"> 190 </span> :<span class="lineNoCov"> 0 : clen = sizeof(caddr);</span> -<span class="lineNum"> 191 </span> : : -<span class="lineNum"> 192 </span> :<span class="lineNoCov"> 0 : pkt_len = recvfrom(s_sock, dgram_msg, MAX_SPA_PACKET_LEN,</span> -<span class="lineNum"> 193 </span> : : 0, (struct sockaddr *)&amp;caddr, &amp;clen); -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> :<span class="lineNoCov"> 0 : dgram_msg[pkt_len] = 0x0;</span> -<span class="lineNum"> 196 </span> : : -<span class="lineNum"> 197 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose)</span> -<span class="lineNum"> 198 </span> : : { -<span class="lineNum"> 199 </span> : : memset(sipbuf, 0x0, MAX_IPV4_STR_LEN); -<span class="lineNum"> 200 </span> :<span class="lineNoCov"> 0 : inet_ntop(AF_INET, &amp;(caddr.sin_addr.s_addr), sipbuf, MAX_IPV4_STR_LEN);</span> -<span class="lineNum"> 201 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;udp_server: Got UDP datagram (%d bytes) from: %s&quot;,</span> -<span class="lineNum"> 202 </span> : : pkt_len, sipbuf); -<span class="lineNum"> 203 </span> : : } -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> : : /* Expect the data to not be too large -<span class="lineNum"> 206 </span> : : */ -<span class="lineNum"> 207 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(pkt_len &lt;= MAX_SPA_PACKET_LEN)</span> -<span class="lineNum"> 208 </span> : : { -<span class="lineNum"> 209 </span> : : /* Copy the packet for SPA processing -<span class="lineNum"> 210 </span> : : */ -<span class="lineNum"> 211 </span> :<span class="lineNoCov"> 0 : strlcpy((char *)opts-&gt;spa_pkt.packet_data, dgram_msg, pkt_len+1);</span> -<span class="lineNum"> 212 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_data_len = pkt_len;</span> -<span class="lineNum"> 213 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_proto = IPPROTO_UDP;</span> -<span class="lineNum"> 214 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_ip = caddr.sin_addr.s_addr;</span> -<span class="lineNum"> 215 </span> :<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_ip = saddr.sin_addr.s_addr;</span> -<span class="lineNum"> 216 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_src_port = ntohs(caddr.sin_port);</span> -<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : opts-&gt;spa_pkt.packet_dst_port = ntohs(saddr.sin_port);</span> -<span class="lineNum"> 218 </span> : : -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : incoming_spa(opts);</span> -<span class="lineNum"> 220 </span> : : } -<span class="lineNum"> 221 </span> : : -<span class="lineNum"> 222 </span> : : memset(dgram_msg, 0x0, sizeof(dgram_msg)); -<span class="lineNum"> 223 </span> : : -<span class="lineNum"> 224 </span> :<span class="lineNoCov"> 0 : opts-&gt;packet_ctr += 1;</span> -<span class="lineNum"> 225 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;foreground == 1 &amp;&amp; opts-&gt;verbose &gt; 2)</span> -<span class="lineNum"> 226 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_DEBUG, &quot;run_udp_server() processed: %d packets&quot;,</span> -<span class="lineNum"> 227 </span> : : opts-&gt;packet_ctr); -<span class="lineNum"> 228 </span> : : -<span class="lineNum"> 229 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (opts-&gt;packet_ctr_limit &amp;&amp; opts-&gt;packet_ctr &gt;= opts-&gt;packet_ctr_limit)</span> -<span class="lineNum"> 230 </span> : : { -<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 232 </span> : : &quot;* Incoming packet count limit of %i reached&quot;, -<span class="lineNum"> 233 </span> : : opts-&gt;packet_ctr_limit -<span class="lineNum"> 234 </span> : : ); -<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : break;</span> -<span class="lineNum"> 236 </span> : : } -<span class="lineNum"> 237 </span> : : -<span class="lineNum"> 238 </span> : : } /* infinite while loop */ -<span class="lineNum"> 239 </span> : : -<span class="lineNum"> 240 </span> :<span class="lineNoCov"> 0 : close(s_sock);</span> -<span class="lineNum"> 241 </span> :<span class="lineNoCov"> 0 : return rv;</span> -<span class="lineNum"> 242 </span> : : } -<span class="lineNum"> 243 </span> : : -<span class="lineNum"> 244 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html deleted file mode 100644 index 10d8ab9d..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func-sort-c.html +++ /dev/null @@ -1,109 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/utils.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">75</td> - <td class="headerCovTableEntryLo">16.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntryLo">28.6 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">58</td> - <td class="headerCovTableEntryLo">13.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="utils.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#103">verify_file_perms_ownership</a></td> - <td class="coverFnHi">4743</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#258">clean_exit</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#165">add_argv.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#81">is_valid_dir</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#240">free_argv</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#40">hex_dump</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#197">strtoargv</a></td> - <td class="coverFnLo">0</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html deleted file mode 100644 index 21242af7..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.func.html +++ /dev/null @@ -1,109 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/utils.c - functions</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - utils.c<span style="font-size: 80%;"> (<a href="utils.c.gcov.html">source</a> / functions)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">75</td> - <td class="headerCovTableEntryLo">16.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntryLo">28.6 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">58</td> - <td class="headerCovTableEntryLo">13.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <center> - <table width="60%" cellpadding=1 cellspacing=1 border=0> - <tr><td><br></td></tr> - <tr> - <td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></span></td> - <td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="utils.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#165">add_argv.isra.0</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#258">clean_exit</a></td> - <td class="coverFnHi">1814</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#240">free_argv</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#40">hex_dump</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#81">is_valid_dir</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#197">strtoargv</a></td> - <td class="coverFnLo">0</td> - </tr> - <tr> - <td class="coverFn"><a href="utils.c.gcov.html#103">verify_file_perms_ownership</a></td> - <td class="coverFnHi">4743</td> - </tr> - </table> - <br> - </center> - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html deleted file mode 100644 index fd54a049..00000000 --- a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/server/utils.c.gcov.html +++ /dev/null @@ -1,366 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> - -<html lang="en"> - -<head> - <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <title>LCOV - id:002084,src:002034,op:havoc,rep:2.lcov_info_final - server/utils.c</title> - <link rel="stylesheet" type="text/css" href="../gcov.css"> -</head> - -<body> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="title">LCOV - code coverage report</td></tr> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - - <tr> - <td width="100%"> - <table cellpadding=1 border=0 width="100%"> - <tr> - <td width="10%" class="headerItem">Current view:</td> - <td width="35%" class="headerValue"><a href="../index.html">top level</a> - <a href="index.html">server</a> - utils.c<span style="font-size: 80%;"> (source / <a href="utils.c.func.html">functions</a>)</span></td> - <td width="5%"></td> - <td width="15%"></td> - <td width="10%" class="headerCovTableHead">Hit</td> - <td width="10%" class="headerCovTableHead">Total</td> - <td width="15%" class="headerCovTableHead">Coverage</td> - </tr> - <tr> - <td class="headerItem">Test:</td> - <td class="headerValue">id:002084,src:002034,op:havoc,rep:2.lcov_info_final</td> - <td></td> - <td class="headerItem">Lines:</td> - <td class="headerCovTableEntry">12</td> - <td class="headerCovTableEntry">75</td> - <td class="headerCovTableEntryLo">16.0 %</td> - </tr> - <tr> - <td class="headerItem">Date:</td> - <td class="headerValue">2015-05-25</td> - <td></td> - <td class="headerItem">Functions:</td> - <td class="headerCovTableEntry">2</td> - <td class="headerCovTableEntry">7</td> - <td class="headerCovTableEntryLo">28.6 %</td> - </tr> - <tr> - <td></td> - <td></td> - <td></td> - <td class="headerItem">Branches:</td> - <td class="headerCovTableEntry">8</td> - <td class="headerCovTableEntry">58</td> - <td class="headerCovTableEntryLo">13.8 %</td> - </tr> - <tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - </td> - </tr> - - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - </table> - - <table cellpadding=0 cellspacing=0 border=0> - <tr> - <td><br></td> - </tr> - <tr> - <td> -<pre class="sourceHeading"> Branch data Line data Source code</pre> -<pre class="source"> -<a name="1"><span class="lineNum"> 1 </span> : : /**</a> -<span class="lineNum"> 2 </span> : : * @file utils.c -<span class="lineNum"> 3 </span> : : * -<span class="lineNum"> 4 </span> : : * @brief General/Generic functions for the fwknop server. -<span class="lineNum"> 5 </span> : : * -<span class="lineNum"> 6 </span> : : * Fwknop is developed primarily by the people listed in the file 'AUTHORS'. -<span class="lineNum"> 7 </span> : : * Copyright (C) 2009-2014 fwknop developers and contributors. For a full -<span class="lineNum"> 8 </span> : : * list of contributors, see the file 'CREDITS'. -<span class="lineNum"> 9 </span> : : * -<span class="lineNum"> 10 </span> : : * License (GNU General Public License): -<span class="lineNum"> 11 </span> : : * -<span class="lineNum"> 12 </span> : : * This program is free software; you can redistribute it and/or -<span class="lineNum"> 13 </span> : : * modify it under the terms of the GNU General Public License -<span class="lineNum"> 14 </span> : : * as published by the Free Software Foundation; either version 2 -<span class="lineNum"> 15 </span> : : * of the License, or (at your option) any later version. -<span class="lineNum"> 16 </span> : : * -<span class="lineNum"> 17 </span> : : * This program is distributed in the hope that it will be useful, -<span class="lineNum"> 18 </span> : : * but WITHOUT ANY WARRANTY; without even the implied warranty of -<span class="lineNum"> 19 </span> : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -<span class="lineNum"> 20 </span> : : * GNU General Public License for more details. -<span class="lineNum"> 21 </span> : : * -<span class="lineNum"> 22 </span> : : * You should have received a copy of the GNU General Public License -<span class="lineNum"> 23 </span> : : * along with this program; if not, write to the Free Software -<span class="lineNum"> 24 </span> : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 -<span class="lineNum"> 25 </span> : : * USA -<span class="lineNum"> 26 </span> : : */ -<span class="lineNum"> 27 </span> : : -<span class="lineNum"> 28 </span> : : #include &quot;fwknopd_common.h&quot; -<span class="lineNum"> 29 </span> : : #include &quot;utils.h&quot; -<span class="lineNum"> 30 </span> : : #include &quot;log_msg.h&quot; -<span class="lineNum"> 31 </span> : : #include &quot;replay_cache.h&quot; -<span class="lineNum"> 32 </span> : : #include &quot;config_init.h&quot; -<span class="lineNum"> 33 </span> : : #include &quot;fw_util.h&quot; -<span class="lineNum"> 34 </span> : : -<span class="lineNum"> 35 </span> : : #include &lt;stdarg.h&gt; -<span class="lineNum"> 36 </span> : : -<span class="lineNum"> 37 </span> : : #define ASCII_LEN 16 -<span class="lineNum"> 38 </span> : : -<span class="lineNum"> 39 </span> : : /* Generic hex dump function. -<a name="40"><span class="lineNum"> 40 </span> : : */</a> -<span class="lineNum"> 41 </span> : : void -<span class="lineNum"> 42 </span> :<span class="lineNoCov"> 0 : hex_dump(const unsigned char *data, const int size)</span> -<span class="lineNum"> 43 </span> : : { -<span class="lineNum"> 44 </span> :<span class="lineNoCov"> 0 : int ln=0, i=0, j=0;</span> -<span class="lineNum"> 45 </span> :<span class="lineNoCov"> 0 : char ascii_str[ASCII_LEN+1] = {0};</span> -<span class="lineNum"> 46 </span> : : -<span class="lineNum"> 47 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i&lt;size; i++)</span> -<span class="lineNum"> 48 </span> : : { -<span class="lineNum"> 49 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if((i % ASCII_LEN) == 0)</span> -<span class="lineNum"> 50 </span> : : { -<span class="lineNum"> 51 </span> : : printf(&quot; %s\n 0x%.4x: &quot;, ascii_str, i); -<span class="lineNum"> 52 </span> : : memset(ascii_str, 0x0, ASCII_LEN-1); -<span class="lineNum"> 53 </span> :<span class="lineNoCov"> 0 : j = 0;</span> -<span class="lineNum"> 54 </span> : : } -<span class="lineNum"> 55 </span> : : -<span class="lineNum"> 56 </span> :<span class="lineNoCov"> 0 : printf(&quot;%.2x &quot;, data[i]);</span> -<span class="lineNum"> 57 </span> : : -<span class="lineNum"> 58 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : ascii_str[j++] = (data[i] &lt; 0x20 || data[i] &gt; 0x7e) ? '.' : data[i];</span> -<span class="lineNum"> 59 </span> : : -<span class="lineNum"> 60 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(j == 8)</span> -<span class="lineNum"> 61 </span> : : printf(&quot; &quot;); -<span class="lineNum"> 62 </span> : : } -<span class="lineNum"> 63 </span> : : -<span class="lineNum"> 64 </span> : : /* Remainder... -<span class="lineNum"> 65 </span> : : */ -<span class="lineNum"> 66 </span> :<span class="lineNoCov"> 0 : ln = strlen(ascii_str);</span> -<span class="lineNum"> 67 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ln &gt; 0)</span> -<span class="lineNum"> 68 </span> : : { -<span class="lineNum"> 69 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for(i=0; i &lt; ASCII_LEN-ln; i++)</span> -<span class="lineNum"> 70 </span> : : printf(&quot; &quot;); -<span class="lineNum"> 71 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(ln &lt; 8)</span> -<span class="lineNum"> 72 </span> : : printf(&quot; &quot;); -<span class="lineNum"> 73 </span> : : -<span class="lineNum"> 74 </span> : : printf(&quot; %s\n\n&quot;, ascii_str); -<span class="lineNum"> 75 </span> : : } -<span class="lineNum"> 76 </span> :<span class="lineNoCov"> 0 : return;</span> -<span class="lineNum"> 77 </span> : : } -<span class="lineNum"> 78 </span> : : -<span class="lineNum"> 79 </span> : : /* Basic directory checks (stat() and whether the path is actually -<span class="lineNum"> 80 </span> : : * a directory). -<a name="81"><span class="lineNum"> 81 </span> : : */</a> -<span class="lineNum"> 82 </span> : : int -<span class="lineNum"> 83 </span> :<span class="lineNoCov"> 0 : is_valid_dir(const char *path)</span> -<span class="lineNum"> 84 </span> : : { -<span class="lineNum"> 85 </span> : : #if HAVE_STAT -<span class="lineNum"> 86 </span> : : struct stat st; -<span class="lineNum"> 87 </span> : : -<span class="lineNum"> 88 </span> : : /* If we are unable to stat the given dir, then return with error. -<span class="lineNum"> 89 </span> : : */ -<span class="lineNum"> 90 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(stat(path, &amp;st) != 0)</span> -<span class="lineNum"> 91 </span> : : { -<span class="lineNum"> 92 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[-] unable to stat() directory: %s: %s&quot;,</span> -<span class="lineNum"> 93 </span> :<span class="lineNoCov"> 0 : path, strerror(errno));</span> -<span class="lineNum"> 94 </span> :<span class="lineNoCov"> 0 : return(0);</span> -<span class="lineNum"> 95 </span> : : } -<span class="lineNum"> 96 </span> : : -<span class="lineNum"> 97 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(!S_ISDIR(st.st_mode))</span> -<span class="lineNum"> 98 </span> : : return(0); -<span class="lineNum"> 99 </span> : : #endif /* HAVE_STAT */ -<span class="lineNum"> 100 </span> : : -<span class="lineNum"> 101 </span> :<span class="lineNoCov"> 0 : return(1);</span> -<span class="lineNum"> 102 </span> : : } -<a name="103"><span class="lineNum"> 103 </span> : : </a> -<span class="lineNum"> 104 </span> : : int -<span class="lineNum"> 105 </span> :<span class="lineCov"> 4743 : verify_file_perms_ownership(const char *file)</span> -<span class="lineNum"> 106 </span> : : { -<span class="lineNum"> 107 </span> : : #if HAVE_STAT -<span class="lineNum"> 108 </span> : : struct stat st; -<span class="lineNum"> 109 </span> : : -<span class="lineNum"> 110 </span> : : /* Every file that fwknopd deals with should be owned -<span class="lineNum"> 111 </span> : : * by the user and permissions set to 600 (user read/write) -<span class="lineNum"> 112 </span> : : */ -<span class="lineNum"> 113 </span> [<span class="branchCov" title="Branch 1 was taken 4743 times"> + </span><span class="branchNoCov" title="Branch 2 was not taken"> - </span>]:<span class="lineCov"> 4743 : if((stat(file, &amp;st)) == 0)</span> -<span class="lineNum"> 114 </span> : : { -<span class="lineNum"> 115 </span> : : /* Make sure it is a regular file -<span class="lineNum"> 116 </span> : : */ -<span class="lineNum"> 117 </span> [<span class="branchNoCov" title="Branch 0 was not taken"> - </span><span class="branchCov" title="Branch 1 was taken 4743 times"> + </span>]:<span class="lineCov"> 4743 : if(S_ISREG(st.st_mode) != 1 &amp;&amp; S_ISLNK(st.st_mode) != 1)</span> -<span class="lineNum"> 118 </span> : : { -<span class="lineNum"> 119 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 120 </span> : : &quot;[-] file: %s is not a regular file or symbolic link.&quot;, -<span class="lineNum"> 121 </span> : : file -<span class="lineNum"> 122 </span> : : ); -<span class="lineNum"> 123 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 124 </span> : : } -<span class="lineNum"> 125 </span> : : -<span class="lineNum"> 126 </span> [<span class="branchCov" title="Branch 0 was taken 2161 times"> + </span><span class="branchCov" title="Branch 1 was taken 2582 times"> + </span>]:<span class="lineCov"> 4743 : if((st.st_mode &amp; (S_IRWXU|S_IRWXG|S_IRWXO)) != (S_IRUSR|S_IWUSR))</span> -<span class="lineNum"> 127 </span> : : { -<span class="lineNum"> 128 </span> :<span class="lineCov"> 2161 : log_msg(LOG_WARNING,</span> -<span class="lineNum"> 129 </span> : : &quot;[-] file: %s permissions should only be user read/write (0600, -rw-------)&quot;, -<span class="lineNum"> 130 </span> : : file -<span class="lineNum"> 131 </span> : : ); -<span class="lineNum"> 132 </span> : : /* when we start in enforcing this instead of just warning -<span class="lineNum"> 133 </span> : : * the user -<span class="lineNum"> 134 </span> : : res = 0; -<span class="lineNum"> 135 </span> : : */ -<span class="lineNum"> 136 </span> : : } -<span class="lineNum"> 137 </span> : : -<span class="lineNum"> 138 </span> [<span class="branchNoCov" title="Branch 1 was not taken"> - </span><span class="branchCov" title="Branch 2 was taken 4743 times"> + </span>]:<span class="lineCov"> 4743 : if(st.st_uid != getuid())</span> -<span class="lineNum"> 139 </span> : : { -<span class="lineNum"> 140 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_WARNING, &quot;[-] file: %s not owned by current effective user id&quot;,</span> -<span class="lineNum"> 141 </span> : : file); -<span class="lineNum"> 142 </span> : : /* when we start in enforcing this instead of just warning -<span class="lineNum"> 143 </span> : : * the user -<span class="lineNum"> 144 </span> : : res = 0; -<span class="lineNum"> 145 </span> : : */ -<span class="lineNum"> 146 </span> : : } -<span class="lineNum"> 147 </span> : : } -<span class="lineNum"> 148 </span> : : else -<span class="lineNum"> 149 </span> : : { -<span class="lineNum"> 150 </span> : : /* if the path doesn't exist, just return, but otherwise something -<span class="lineNum"> 151 </span> : : * went wrong -<span class="lineNum"> 152 </span> : : */ -<span class="lineNum"> 153 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(errno != ENOENT)</span> -<span class="lineNum"> 154 </span> : : { -<span class="lineNum"> 155 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[-] stat() against file: %s returned: %s&quot;,</span> -<span class="lineNum"> 156 </span> : : file, strerror(errno)); -<span class="lineNum"> 157 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 158 </span> : : } -<span class="lineNum"> 159 </span> : : } -<span class="lineNum"> 160 </span> : : -<span class="lineNum"> 161 </span> : : #endif -<span class="lineNum"> 162 </span> : : -<span class="lineNum"> 163 </span> : : return 1; -<span class="lineNum"> 164 </span> : : } -<a name="165"><span class="lineNum"> 165 </span> : : </a> -<span class="lineNum"> 166 </span> : : static int -<span class="lineNum"> 167 </span> :<span class="lineNoCov"> 0 : add_argv(char **argv_new, int *argc_new,</span> -<span class="lineNum"> 168 </span> : : const char *new_arg, const fko_srv_options_t * const opts) -<span class="lineNum"> 169 </span> : : { -<span class="lineNum"> 170 </span> :<span class="lineNoCov"> 0 : int buf_size = 0;</span> -<span class="lineNum"> 171 </span> : : -<span class="lineNum"> 172 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(opts-&gt;verbose &gt; 3)</span> -<span class="lineNum"> 173 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[+] add_argv() + arg: %s&quot;, new_arg);</span> -<span class="lineNum"> 174 </span> : : -<span class="lineNum"> 175 </span> :<span class="lineNoCov"> 0 : buf_size = strlen(new_arg) + 1;</span> -<span class="lineNum"> 176 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = calloc(1, buf_size);</span> -<span class="lineNum"> 177 </span> : : -<span class="lineNum"> 178 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[*argc_new] == NULL)</span> -<span class="lineNum"> 179 </span> : : { -<span class="lineNum"> 180 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_INFO, &quot;[*] Memory allocation error.&quot;);</span> -<span class="lineNum"> 181 </span> : : return 0; -<span class="lineNum"> 182 </span> : : } -<span class="lineNum"> 183 </span> :<span class="lineNoCov"> 0 : strlcpy(argv_new[*argc_new], new_arg, buf_size);</span> -<span class="lineNum"> 184 </span> : : -<span class="lineNum"> 185 </span> :<span class="lineNoCov"> 0 : *argc_new += 1;</span> -<span class="lineNum"> 186 </span> : : -<span class="lineNum"> 187 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(*argc_new &gt;= MAX_CMDLINE_ARGS-1)</span> -<span class="lineNum"> 188 </span> : : { -<span class="lineNum"> 189 </span> :<span class="lineNoCov"> 0 : log_msg(LOG_ERR, &quot;[*] max command line args exceeded.&quot;);</span> -<span class="lineNum"> 190 </span> : : return 0; -<span class="lineNum"> 191 </span> : : } -<span class="lineNum"> 192 </span> : : -<span class="lineNum"> 193 </span> :<span class="lineNoCov"> 0 : argv_new[*argc_new] = NULL;</span> -<span class="lineNum"> 194 </span> : : -<span class="lineNum"> 195 </span> : : return 1; -<span class="lineNum"> 196 </span> : : } -<a name="197"><span class="lineNum"> 197 </span> : : </a> -<span class="lineNum"> 198 </span> : : int -<span class="lineNum"> 199 </span> :<span class="lineNoCov"> 0 : strtoargv(const char * const args_str, char **argv_new, int *argc_new,</span> -<span class="lineNum"> 200 </span> : : const fko_srv_options_t * const opts) -<span class="lineNum"> 201 </span> : : { -<span class="lineNum"> 202 </span> :<span class="lineNoCov"> 0 : int current_arg_ctr = 0, i;</span> -<span class="lineNum"> 203 </span> :<span class="lineNoCov"> 0 : char arg_tmp[MAX_LINE_LEN] = {0};</span> -<span class="lineNum"> 204 </span> : : -<span class="lineNum"> 205 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; (int)strlen(args_str); i++)</span> -<span class="lineNum"> 206 </span> : : { -<span class="lineNum"> 207 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (!isspace(args_str[i]))</span> -<span class="lineNum"> 208 </span> : : { -<span class="lineNum"> 209 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = args_str[i];</span> -<span class="lineNum"> 210 </span> :<span class="lineNoCov"> 0 : current_arg_ctr++;</span> -<span class="lineNum"> 211 </span> : : } -<span class="lineNum"> 212 </span> : : else -<span class="lineNum"> 213 </span> : : { -<span class="lineNum"> 214 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> -<span class="lineNum"> 215 </span> : : { -<span class="lineNum"> 216 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> -<span class="lineNum"> 217 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> -<span class="lineNum"> 218 </span> : : { -<span class="lineNum"> 219 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> -<span class="lineNum"> 220 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 221 </span> : : } -<span class="lineNum"> 222 </span> : : current_arg_ctr = 0; -<span class="lineNum"> 223 </span> : : } -<span class="lineNum"> 224 </span> : : } -<span class="lineNum"> 225 </span> : : } -<span class="lineNum"> 226 </span> : : -<span class="lineNum"> 227 </span> : : /* pick up the last argument in the string -<span class="lineNum"> 228 </span> : : */ -<span class="lineNum"> 229 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(current_arg_ctr &gt; 0)</span> -<span class="lineNum"> 230 </span> : : { -<span class="lineNum"> 231 </span> :<span class="lineNoCov"> 0 : arg_tmp[current_arg_ctr] = '\0';</span> -<span class="lineNum"> 232 </span> [<span class="branchNoExec" title="Branch 1 was not executed"> # </span><span class="branchNoExec" title="Branch 2 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if (add_argv(argv_new, argc_new, arg_tmp, opts) != 1)</span> -<span class="lineNum"> 233 </span> : : { -<span class="lineNum"> 234 </span> :<span class="lineNoCov"> 0 : free_argv(argv_new, argc_new);</span> -<span class="lineNum"> 235 </span> :<span class="lineNoCov"> 0 : return 0;</span> -<span class="lineNum"> 236 </span> : : } -<span class="lineNum"> 237 </span> : : } -<span class="lineNum"> 238 </span> : : return 1; -<span class="lineNum"> 239 </span> : : } -<a name="240"><span class="lineNum"> 240 </span> : : </a> -<span class="lineNum"> 241 </span> : : void -<span class="lineNum"> 242 </span> :<span class="lineNoCov"> 0 : free_argv(char **argv_new, int *argc_new)</span> -<span class="lineNum"> 243 </span> : : { -<span class="lineNum"> 244 </span> : : int i; -<span class="lineNum"> 245 </span> : : -<span class="lineNum"> 246 </span>[<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>][<span class="branchNoExec" title="Branch 2 was not executed"> # </span><span class="branchNoExec" title="Branch 3 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new == NULL || *argv_new == NULL)</span> -<span class="lineNum"> 247 </span> : : return; -<span class="lineNum"> 248 </span> : : -<span class="lineNum"> 249 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : for (i=0; i &lt; *argc_new; i++)</span> -<span class="lineNum"> 250 </span> : : { -<span class="lineNum"> 251 </span> [<span class="branchNoExec" title="Branch 0 was not executed"> # </span><span class="branchNoExec" title="Branch 1 was not executed"> # </span>]:<span class="lineNoCov"> 0 : if(argv_new[i] == NULL)</span> -<span class="lineNum"> 252 </span> : : break; -<span class="lineNum"> 253 </span> : : else -<span class="lineNum"> 254 </span> :<span class="lineNoCov"> 0 : free(argv_new[i]);</span> -<span class="lineNum"> 255 </span> : : } -<span class="lineNum"> 256 </span> : : return; -<span class="lineNum"> 257 </span> : : } -<a name="258"><span class="lineNum"> 258 </span> : : </a> -<span class="lineNum"> 259 </span> : : void -<span class="lineNum"> 260 </span> :<span class="lineCov"> 1814 : clean_exit(fko_srv_options_t *opts, unsigned int fw_cleanup_flag, unsigned int exit_status)</span> -<span class="lineNum"> 261 </span> : : { -<span class="lineNum"> 262 </span> : : #if HAVE_LIBFIU -<span class="lineNum"> 263 </span> : : if(opts-&gt;config[CONF_FAULT_INJECTION_TAG] != NULL) -<span class="lineNum"> 264 </span> : : { -<span class="lineNum"> 265 </span> : : fiu_disable(opts-&gt;config[CONF_FAULT_INJECTION_TAG]); -<span class="lineNum"> 266 </span> : : } -<span class="lineNum"> 267 </span> : : #endif -<span class="lineNum"> 268 </span> : : -<span class="lineNum"> 269 </span>[<span class="branchCov" title="Branch 0 was taken 1019 times"> + </span><span class="branchCov" title="Branch 1 was taken 795 times"> + </span>][<span class="branchNoCov" title="Branch 2 was not taken"> - </span><span class="branchCov" title="Branch 3 was taken 1019 times"> + </span>]:<span class="lineCov"> 1814 : if(!opts-&gt;test &amp;&amp; (fw_cleanup_flag == FW_CLEANUP))</span> -<span class="lineNum"> 270 </span> :<span class="lineNoCov"> 0 : fw_cleanup(opts);</span> -<span class="lineNum"> 271 </span> : : -<span class="lineNum"> 272 </span> : : #if USE_FILE_CACHE -<span class="lineNum"> 273 </span> :<span class="lineCov"> 1814 : free_replay_list(opts);</span> -<span class="lineNum"> 274 </span> : : #endif -<span class="lineNum"> 275 </span> : : -<span class="lineNum"> 276 </span> :<span class="lineCov"> 1814 : free_logging();</span> -<span class="lineNum"> 277 </span> :<span class="lineCov"> 1814 : free_configs(opts);</span> -<span class="lineNum"> 278 </span> :<span class="lineCov"> 1814 : exit(exit_status);</span> -<span class="lineNum"> 279 </span> : : } -<span class="lineNum"> 280 </span> : : -<span class="lineNum"> 281 </span> : : /***EOF***/ -</pre> - </td> - </tr> - </table> - <br> - - <table width="100%" border=0 cellspacing=0 cellpadding=0> - <tr><td class="ruler"><img src="../glass.png" width=3 height=3 alt=""></td></tr> - <tr><td class="versionInfo">Generated by: <a href="http://ltp.sourceforge.net/coverage/lcov.php" target="_parent">LCOV version 1.10</a></td></tr> - </table> - <br> - -</body> -</html> diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/snow.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/snow.png deleted file mode 100644 index 2cdae107fceec6e7f02ac7acb4a34a82a540caa5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^j3CU&3?x-=hn)ga>?NMQuI!iC1^MM<OZU7F1qyK% zctjR6FmMZjFyp1Wb$@_@Ea{HEjtmSN`?>!lvI6;R0X`wF|Ns97GD8ntt^-nBo-U3d c6}OTTfNUlP#;5A{K>8RwUHx3vIVCg!071?oo&W#< diff --git a/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/updown.png b/test/afl/results/2.6.7/136d017/cumulative-afl-cov-web/updown.png deleted file mode 100644 index aa56a238b3e6c435265250f9266cd1b8caba0f20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^AT}Qd8;}%R+`Ae`*?77*hG?8mPH<rUzmOqzj$o`{ zmx{8oa+_1mG6n6lBg;7=4V4vL4GtVJNND(#r(##(!Bvp7XhP!+7e<DcG5TL0&E@|I PG>5^{)z4*}Q$iB}huR`+ diff --git a/test/afl/results/2.6.7/136d017/web-results b/test/afl/results/2.6.7/136d017/web-results new file mode 100644 index 00000000..f59730bf --- /dev/null +++ b/test/afl/results/2.6.7/136d017/web-results @@ -0,0 +1 @@ +https://www.cipherdyne.org/fwknop/2.6.7-afl-lcov-results/ From eed3dc8ad220d7430f57dbf35a89ae9cabcbf31c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 30 May 2015 18:35:10 -0700 Subject: [PATCH 115/219] [test suite] minor comment update to mention afl-cov --- test/afl/compile/afl-compile-code-coverage.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/afl/compile/afl-compile-code-coverage.sh b/test/afl/compile/afl-compile-code-coverage.sh index 17bb9a92..812d329c 100755 --- a/test/afl/compile/afl-compile-code-coverage.sh +++ b/test/afl/compile/afl-compile-code-coverage.sh @@ -4,7 +4,9 @@ # purpose of this is to allow the generated fuzzing corpus under an AFL # fuzzing run to be sent back through the fwknop code to see which # functions/lines were executed by AFL. This can be used to help tune the -# original test case inputs. +# original test case inputs. A main consumer of fwknop compiled in this way +# is the afl-cov project (https://github.com/mrash/afl-cov/) which shows code +# coverage achieved by test inputs. # cd ../../ From 9b189fe76289ded69ddfcb4aa69857a6cfa2638b Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 30 May 2015 19:01:34 -0700 Subject: [PATCH 116/219] [client] ensure that encryption and HMAC keys are not read from stdin in AFL fuzzing mode --- client/fwknop.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/client/fwknop.c b/client/fwknop.c index 3751d5ae..9cf5f5d8 100644 --- a/client/fwknop.c +++ b/client/fwknop.c @@ -64,6 +64,14 @@ static int is_hostname_str_with_port(const char *str, static int enable_fault_injections(fko_cli_options_t * const opts); #endif +#if AFL_FUZZING + /* These are used in AFL fuzzing mode so the fuzzing cycle is not + * interrupted by trying to read from stdin + */ + #define AFL_ENC_KEY "aflenckey" + #define AFL_HMAC_KEY "aflhmackey" +#endif + #define NAT_ACCESS_STR_TEMPLATE "%s,%d" /*!< Template for a nat access string ip,port with sscanf*/ #define HOSTNAME_BUFSIZE 64 /*!< Maximum size of a hostname string */ #define CTX_DUMP_BUFSIZE 4096 /*!< Maximum size allocated to a FKO context dump */ @@ -1126,7 +1134,9 @@ static int get_keys(fko_ctx_t ctx, fko_cli_options_t *options, char *key, int *key_len, char *hmac_key, int *hmac_key_len) { +#if !AFL_FUZZING char *key_tmp = NULL, *hmac_key_tmp = NULL; +#endif int use_hmac = 0, res = 0; memset(key, 0x0, MAX_KEY_LEN+1); @@ -1173,6 +1183,9 @@ get_keys(fko_ctx_t ctx, fko_cli_options_t *options, "[+] GPG mode set, signing passphrase not required"); else if(strlen(options->gpg_signer_key)) { +#if AFL_FUZZING + strlcpy(key, AFL_ENC_KEY, MAX_KEY_LEN+1); +#else key_tmp = getpasswd("Enter passphrase for signing: ", options->input_fd); if(key_tmp == NULL) { @@ -1180,19 +1193,23 @@ get_keys(fko_ctx_t ctx, fko_cli_options_t *options, return 0; } strlcpy(key, key_tmp, MAX_KEY_LEN+1); +#endif *key_len = strlen(key); } } else { +#if AFL_FUZZING + strlcpy(key, AFL_ENC_KEY, MAX_KEY_LEN+1); +#else key_tmp = getpasswd("Enter encryption key: ", options->input_fd); - if(key_tmp == NULL) { log_msg(LOG_VERBOSITY_ERROR, "[*] getpasswd() key error."); return 0; } strlcpy(key, key_tmp, MAX_KEY_LEN+1); +#endif *key_len = strlen(key); } } @@ -1232,15 +1249,17 @@ get_keys(fko_ctx_t ctx, fko_cli_options_t *options, } else { +#if AFL_FUZZING + strlcpy(hmac_key, AFL_HMAC_KEY, MAX_KEY_LEN+1); +#else hmac_key_tmp = getpasswd("Enter HMAC key: ", options->input_fd); - if(hmac_key_tmp == NULL) { log_msg(LOG_VERBOSITY_ERROR, "[*] getpasswd() key error."); return 0; } - strlcpy(hmac_key, hmac_key_tmp, MAX_KEY_LEN+1); +#endif *hmac_key_len = strlen(hmac_key); use_hmac = 1; } From 7bbc30f34cfbea25349727a36958a93611e65a01 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 30 May 2015 19:20:23 -0700 Subject: [PATCH 117/219] [server] bug fix for --key-gen being called inappropriately, add fw compiled string to -V --- server/config_init.c | 70 +++++++++++++++++++++++++++----------------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/server/config_init.c b/server/config_init.c index 2f1d2930..2c05efcf 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -989,33 +989,19 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) */ optind = 0; - /* First, scan the command-line args for -h/--help or an alternate - * configuration file. If we find an alternate config file, use it, - * otherwise use the default. We also grab any override config files - * as well. In addition, we handle key generation here since this is - * independent of configuration parsing. + /* First, scan the command-line args to see if we are in key-generation + * mode. This is independent of config parsing and other operations, so + * it is done as the very first thing. Also handle printing of the fwknop + * version string since we don't need to parse a config for this. */ while ((cmd_arg = getopt_long(argc, argv, GETOPTS_OPTION_STRING, cmd_opts, &index)) != -1) { - /* If help is wanted, give it and exit. - */ switch(cmd_arg) { - case 'h': - usage(); + case 'V': + fprintf(stdout, "fwknopd server %s, compiled for firewall bin: %s\n", + MY_VERSION, FIREWALL_EXE); clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS); - - /* Look for configuration file arg. - */ - case 'c': - set_config_entry(opts, CONF_CONFIG_FILE, optarg); - got_conf_file++; - - /* If we already have the config_override option, we are done. - */ - if(got_override_config > 0) - break; - case 'k': opts->key_gen = 1; break; @@ -1054,6 +1040,42 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } break; + } + } + + if(opts->key_gen) + generate_keys(opts); /* this function exits */ + + /* Reset the options index so we can run through them again. + */ + optind = 0; + + /* Now, scan the command-line args for -h/--help or an alternate + * configuration file. If we find an alternate config file, use it, + * otherwise use the default. We also grab any override config files + * as well. In addition, we handle key generation here since this is + * independent of configuration parsing. + */ + while ((cmd_arg = getopt_long(argc, argv, + GETOPTS_OPTION_STRING, cmd_opts, &index)) != -1) { + + /* If help is wanted, give it and exit. + */ + switch(cmd_arg) { + case 'h': + usage(); + clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS); + + /* Look for configuration file arg. + */ + case 'c': + set_config_entry(opts, CONF_CONFIG_FILE, optarg); + got_conf_file++; + + /* If we already have the config_override option, we are done. + */ + if(got_override_config > 0) + break; /* Look for override configuration file arg. */ @@ -1068,9 +1090,6 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) } } - if(opts->key_gen) - generate_keys(opts); - /* If no alternate configuration file was specified, we use the * default. */ @@ -1282,9 +1301,6 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) case SYSLOG_ENABLE: opts->syslog_enable = 1; break; - case 'V': - fprintf(stdout, "fwknopd server %s\n", MY_VERSION); - clean_exit(opts, NO_FW_CLEANUP, EXIT_SUCCESS); default: usage(); clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); From 7c23cb72f17059d2247543434523608334a075c5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 1 Jun 2015 19:36:25 -0700 Subject: [PATCH 118/219] [test suite] differentiate firewalld vs. iptables for fwknopd.conf file fuzzing --- test/afl/fuzzing-wrappers/fcns | 11 +++++ .../helpers/fwknopd-parse-conf.sh | 9 +++- test/afl/fuzzing-wrappers/server-conf.sh | 6 ++- .../server-conf/firewalld/fwknopd.conf | 47 +++++++++++++++++++ .../server-conf/{ => iptables}/fwknopd.conf | 0 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 test/afl/test-cases/server-conf/firewalld/fwknopd.conf rename test/afl/test-cases/server-conf/{ => iptables}/fwknopd.conf (100%) diff --git a/test/afl/fuzzing-wrappers/fcns b/test/afl/fuzzing-wrappers/fcns index 63d548c9..f6d8b559 100755 --- a/test/afl/fuzzing-wrappers/fcns +++ b/test/afl/fuzzing-wrappers/fcns @@ -5,6 +5,17 @@ SERVER="../../server/.libs/fwknopd" CLIENT="../../client/.libs/fwknop" LIB_DIR="../../lib/.libs" +fw_type() { + ### default to iptables + FW="/iptables" + LD_LIBRARY_PATH=$LIB_DIR $SERVER --version | grep "firewall-cmd" + if [ "$?" = "0" ] + then + FW="/firewalld" + fi + eval "$2=$1$FW" +} + git_banner() { if [ -d '../../.git' ] && [ `which git` ] then diff --git a/test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh b/test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh index a463a6c1..fb030d76 100755 --- a/test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh +++ b/test/afl/fuzzing-wrappers/helpers/fwknopd-parse-conf.sh @@ -1,6 +1,13 @@ #!/bin/sh -x -FWKNOPD_CONF_FILE="test-cases/server-conf/fwknopd.conf" +. ./fuzzing-wrappers/fcns + +IN_DIR_BASE="test-cases/server-conf" +IN_DIR='' +CONF_FILE="/fwknopd.conf" +fw_type $IN_DIR_BASE IN_DIR + +FWKNOPD_CONF_FILE="$IN_DIR$CONF_FILE" if [ $@ ] then diff --git a/test/afl/fuzzing-wrappers/server-conf.sh b/test/afl/fuzzing-wrappers/server-conf.sh index 7c11c198..972a8dce 100755 --- a/test/afl/fuzzing-wrappers/server-conf.sh +++ b/test/afl/fuzzing-wrappers/server-conf.sh @@ -9,7 +9,8 @@ FDIR="server-conf.out" OUT_DIR="$TOP_DIR/$FDIR" PREV_OUT_DIR='' -IN_DIR="test-cases/server-conf" +IN_DIR_BASE="test-cases/server-conf" +IN_DIR='' FUZZ_FILE=$OUT_DIR/afl_fwknopd.conf ### build up our afl-fuzz text banner @@ -18,6 +19,9 @@ GIT_STR='' git_banner GIT_STR BANNER="$TSTR$GIT_STR" +### point to the appropriate test cases (iptables vs. firewalld) +fw_type $IN_DIR_BASE IN_DIR + ### set up directories dir_init $ARCHIVE_DIR $FDIR $OUT_DIR PREV_OUT_DIR diff --git a/test/afl/test-cases/server-conf/firewalld/fwknopd.conf b/test/afl/test-cases/server-conf/firewalld/fwknopd.conf new file mode 100644 index 00000000..7feb78ed --- /dev/null +++ b/test/afl/test-cases/server-conf/firewalld/fwknopd.conf @@ -0,0 +1,47 @@ +#CONFIG_FILE ../conf/default_fwknopd.conf +#OVERRIDE_CONFIG ../conf/default_fwknopd.conf +PCAP_INTF eth0 +#PCAP_FILE <not set> +ENABLE_PCAP_PROMISC Y +PCAP_FILTER udp port 62201 +PCAP_DISPATCH_COUNT 100 +PCAP_LOOP_SLEEP 100000 +ENABLE_PCAP_ANY_DIRECTION Y +MAX_SNIFF_BYTES 1500 +ENABLE_SPA_PACKET_AGING Y +MAX_SPA_PACKET_AGE 120 +ENABLE_DIGEST_PERSISTENCE Y +CMD_EXEC_TIMEOUT 1 +ENABLE_SPA_OVER_HTTP N +ENABLE_TCP_SERVER N +TCPSERV_PORT 62201 +ENABLE_UDP_SERVER N +UDPSERV_PORT 62201 +UDPSERV_SELECT_TIMEOUT 500000 +LOCALE C +SYSLOG_IDENTITY fwknopd +SYSLOG_FACILITY LOG_DAEMON +ENABLE_FIREWD_FORWARDING N +ENABLE_FIREWD_LOCAL_NAT Y +ENABLE_FIREWD_SNAT N +SNAT_TRANSLATE_IP 1.2.3.4 +ENABLE_FIREWD_OUTPUT N +FLUSH_FIREWD_AT_INIT Y +FLUSH_FIREWD_AT_EXIT Y +FIREWD_INPUT_ACCESS ACCEPT, filter, INPUT, 1, FWKNOP_INPUT, 1 +FIREWD_OUTPUT_ACCESS ACCEPT, filter, OUTPUT, 1, FWKNOP_OUTPUT, 1 +FIREWD_FORWARD_ACCESS ACCEPT, filter, FORWARD, 1, FWKNOP_FORWARD, 1 +FIREWD_DNAT_ACCESS DNAT, nat, PREROUTING, 1, FWKNOP_PREROUTING, 1 +FIREWD_SNAT_ACCESS SNAT, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1 +FIREWD_MASQUERADE_ACCESS MASQUERADE, nat, POSTROUTING, 1, FWKNOP_POSTROUTING, 1 +ENABLE_FIREWD_COMMENT_CHECK Y +FWKNOP_RUN_DIR /var/run/fwknop +FWKNOP_CONF_DIR /etc/fwknop +#ACCESS_FILE ../conf/default_access.conf +FWKNOP_PID_FILE /var/run/fwknop/fwknopd.pid +DIGEST_FILE /var/run/fwknop/digest.cache +GPG_HOME_DIR /root/.gnupg +GPG_EXE /usr/bin/gpg +FIREWALL_EXE /sbin/iptables +VERBOSE Y +#FAULT_INJECTION_TAG <not set> diff --git a/test/afl/test-cases/server-conf/fwknopd.conf b/test/afl/test-cases/server-conf/iptables/fwknopd.conf similarity index 100% rename from test/afl/test-cases/server-conf/fwknopd.conf rename to test/afl/test-cases/server-conf/iptables/fwknopd.conf From ff052bf74fa5fabdb95393633c138855872b20fa Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 1 Jun 2015 19:57:49 -0700 Subject: [PATCH 119/219] [server] disable external command execution in AFL fuzzing mode --- server/extcmd.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server/extcmd.c b/server/extcmd.c index 67a27979..ace7f842 100644 --- a/server/extcmd.c +++ b/server/extcmd.c @@ -99,6 +99,10 @@ _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, int pipe_fd[2]; #endif +#if AFL_FUZZING + return 0; +#endif + *pid_status = 0; /* Even without execvpe() we examine the command for basic validity @@ -565,6 +569,10 @@ int _run_extcmd_write(const char *cmd, const char *cmd_write, int *pid_status, FILE *fd = NULL; #endif +#if AFL_FUZZING + return 0; +#endif + *pid_status = 0; /* Even without execvpe() we examine the command for basic validity From cff4dcc1e7fa4575e10b83e90a85223c9fbe4beb Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 4 Jun 2015 23:02:21 -0400 Subject: [PATCH 120/219] [test suite] Added Rijndael+HMAC test for Jonathan Bennett's Fwknop2 Android app --- test/tests/os_compatibility.pl | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/test/tests/os_compatibility.pl b/test/tests/os_compatibility.pl index 4b2caca7..18d43f13 100644 --- a/test/tests/os_compatibility.pl +++ b/test/tests/os_compatibility.pl @@ -285,4 +285,35 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, + + ### tests for Jonathan Bennett's Fwknop2 Android app + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'Android compatibility', + 'detail' => 'Fwknop2 (commit 81d4b2f6)', + 'function' => \&os_compatibility, + 'no_ip_check' => 1, + 'pkt' => + '/Tq4' . + '6RmmFdCNJOFkesif' . + 'TKvHZQ2tuSjsPq5f' . + 'MZqGZVRnd3SFOIeI' . + 'nw/AId6lRxbhvO1v' . + 'jNNgJt492yR4gmVZ' . + '1LwMKx8zmLVeqV0J' . + '+wCWU4ZjNf2FKOlE' . + 'jvEDFmLIPCqZqli3' . + 'P4hwUjC+jn0Pkh23' . + 'GV0uZMm8+Q2k8xVb' . + 'oZXaWie2hJOUK+oa' . + 'QxtFZWOUOCTG05oS' . + 'ZWDQgJrc', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'disable_aging'} -a $cf{'hmac_android_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/with expire time/], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, + + ); From 1fb9747b2b2cd14e83f02e88de24ea541073dfe0 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 7 Jun 2015 13:44:00 -0400 Subject: [PATCH 121/219] [test suite] added Rijndael+HMAC test for Fwknop2 Beta1 --- test/tests/os_compatibility.pl | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/test/tests/os_compatibility.pl b/test/tests/os_compatibility.pl index 18d43f13..64e66f16 100644 --- a/test/tests/os_compatibility.pl +++ b/test/tests/os_compatibility.pl @@ -286,7 +286,8 @@ 'fw_rule_removed' => $NEW_RULE_REMOVED, }, - ### tests for Jonathan Bennett's Fwknop2 Android app + ### tests for Jonathan Bennett's Fwknop2 Android app. All commit hashes + ### are from: https://github.com/oneru/Fwknop2 { 'category' => 'Rijndael+HMAC', 'subcategory' => 'Android compatibility', @@ -314,6 +315,33 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'Android compatibility', + 'detail' => 'Fwknop2 (Beta1)', + 'function' => \&os_compatibility, + 'no_ip_check' => 1, + 'pkt' => + '8QlE' . + 'OMGvx+FgQZ1Ipdrp' . + '9G++fRv/ljKwAduX' . + 'Lj8d3rtPEHXlR+F/' . + '2rVTUgumPMVU8NYf' . + 'VR0wJBHO6/9wbvbB' . + 'ePlmwoSeVBXYT3N0' . + 'jsuaH6YUG/9udyfc' . + 'hQTYVXbtEnAxtScu' . + 'dZP5eWXPthoL1Jl8' . + 'HrEF78mVjjINU7pO' . + 'B4jEP5Hd+1RWzgv+' . + 'NH9sm2aUVzeB3Iux' . + 'QnaMhunU', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'disable_aging'} -a $cf{'hmac_android_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/with expire time/], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, ); From 0d83c967c0a17ce8bf15e3da87a40ace9b02dc06 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 6 Jun 2015 20:45:01 -0400 Subject: [PATCH 122/219] [client] minor typo fixes --- client/spa_comm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/client/spa_comm.c b/client/spa_comm.c index 3b27f918..6dd4808d 100644 --- a/client/spa_comm.c +++ b/client/spa_comm.c @@ -269,7 +269,7 @@ send_spa_packet_tcp_raw(const char *spa_data, const int sd_len, tcph->check = 0; tcph->urg_ptr = 0; - /* No we can compute our checksum. + /* Now we can compute our checksum. */ iph->check = chksum((unsigned short *)pkt_data, iph->tot_len); @@ -368,7 +368,7 @@ send_spa_packet_udp_raw(const char *spa_data, const int sd_len, udph->check = 0; udph->len = htons(sd_len + sizeof(struct udphdr)); - /* No we can compute our checksum. + /* Now we can compute our checksum. */ iph->check = chksum((unsigned short *)pkt_data, iph->tot_len); @@ -472,7 +472,7 @@ send_spa_packet_icmp(const char *spa_data, const int sd_len, icmph->un.echo.sequence = htons(1); } - /* No we can compute our checksum. + /* Now we can compute our checksum. */ iph->check = chksum((unsigned short *)pkt_data, iph->tot_len); icmph->checksum = chksum((unsigned short *)icmph, sizeof(struct icmphdr) + sd_len); From f99e7831d89e9cfa9ed8062b5cba7ab602925973 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 6 Jun 2015 21:30:57 -0400 Subject: [PATCH 123/219] update README.md to include use cases and features --- README.md | 96 ++++++++++++++++++++++++++- doc/images/SPA_AWS_network_setup.png | Bin 0 -> 77719 bytes doc/images/SPA_basic.png | Bin 0 -> 20691 bytes 3 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 doc/images/SPA_AWS_network_setup.png create mode 100644 doc/images/SPA_basic.png diff --git a/README.md b/README.md index 0637881e..71db6843 100644 --- a/README.md +++ b/README.md @@ -57,13 +57,107 @@ for Rijndael encryption is generated via the standard PBKDF1 key derivation algorithm, and CBC mode is set. If the GnuPG method is chosen, then the encryption keys are derived from GnuPG key rings. -## Tutorial +## Use Cases +People who use Single Packet Authorization (SPA) or its security-challenged cousin +Port Knocking (PK) usually access SSHD running on the same system where the SPA/PK +software is deployed. That is, a firewall running on a host has a default-drop +policy against all incoming SSH connections so that SSHD cannot be scanned, but a +SPA daemon reconfigures the firewall to temporarily grant access to a passively +authenticated SPA client: +![alt text][SPA-basic-access-SSHD] +[SPA-basic-access-SSHD]: /doc/images/SPA_basic.png "Basic SPA usage to access SSHD" + +fwknop supports the above, but also goes much further and makes robust usage of NAT +(for iptables/firewalld firewalls). After all, *important* firewalls are usually gateways +between networks as opposed to just being deployed on standalone hosts. NAT is commonly +used on such firewalls (at least for IPv4 communications) to provide Internet access to +internal networks that are on RFC 1918 address space, and also to allow external +hosts access to services hosted on internal systems. + +Because fwknop integrates with NAT, SPA can be leveraged to access internal services +*through* the firewall by users on the external Internet. Although this has plenty of +applications on modern traditional networks, it also allows fwknop to support cloud +computing environments such as Amazon's AWS: + +![alt text][SPA-Amazon-AWS-cloud] +[SPA-Amazon-AWS-cloud]: /doc/images/SPA_AWS_network_setup.png "SPA usage on Amazon AWS cloud environments" + +## Tutorial A comprehensive tutorial on fwknop can be found here: [http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html](http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html) +## Features +The following is a complete list of features supported by the fwknop project: + + * Implements Single Packet Authorization around iptables and firewalld firewalls + on Linux, ipfw firewalls on *BSD and Mac OS X, and PF on OpenBSD. + * The fwknop client runs on Linux, Mac OS X, *BSD, and Windows under Cygwin. + In addition, there is an [Android app](https://github.com/oneru/Fwknop2/releases) + to generate SPA packets. + * Supports both Rijndael and GnuPG methods for the encryption/decryption of + SPA packets. + * Supports HMAC authenticated encryption for both Rijndael and GnuPG. The order + of operation is encrypt-then-authenticate to avoid various cryptanalytic problems. + * Replay attacks are detected and thwarted by SHA-256 digest comparison of valid + incoming SPA packets. Other digest algorithms are also supported, but SHA-256 is + the default. + * SPA packets are passively sniffed from the wire via libpcap. The fwknopd server + can also acquire packet data from a file that is written to by a separate Ethernet + sniffer (such as with `tcpdump -w <file>`), from the iptables ULOG pcap writer, or + directly via a UDP socket in `--udp-server` mode. + * For iptables firewalls, ACCEPT rules added by fwknop are added and deleted (after + a configurable timeout) from custom iptables chains so that fwknop does not + interfere with any existing iptables policy that may already be loaded on the + system. + * Supports inbound NAT connections for authenticated SPA communications (iptables + firewalls only for now).This means that fwknop can be configured to create DNAT + rules so that you can reach a service (such as SSH) running on an internal system + on an RFC 1918 IP address from the open Internet. SNAT rules are also supported + which essentially turns fwknopd into a [SPA-authenticating gateway](https://www.cipherdyne.org/blog/2015/04/nat-and-single-packet-authorization.html) + to access the Internet from an internal network. + * Multiple users are supported by the fwknop server, and each user can be assigned + their own symmetric or asymmetric encryption key via the /etc/fwknop/access.conf + file. + * Automatic resolution of external IP address via + [https://www.cipherdyne.org/cgi-bin/myip](https://www.cipherdyne.org/cgi-bin/myip) + (this is useful when the fwknop client is run from behind a NAT device). Because + the external IP address is encrypted within each SPA packet in this mode, + Man-in-the-Middle (MITM) attacks where an inline device intercepts an SPA packet + and only forwards it from a different IP in an effort to gain access are thwarted. + * [Port randomization](https://www.cipherdyne.org/blog/2008/06/single-packet-authorization-with-port-randomization.html) + is supported for the destination port of SPA packets as well + as the port over which the follow-on connection is made via the iptables NAT + capabilities. The later applies to forwarded connections to internal services and + to access granted to local sockets on the system running fwknopd. + * Integration with Tor (see my DefCon 14 presentation). Note that because Tor uses + TCP for transport, sending SPA packets through the Tor network requires that each + SPA packet is sent over an established TCP connection, so technically this breaks + the "single" aspect of "Single Packet Authorization". However, Tor provides + anonymity benefits that can outweigh this consideration in some deployments. + * Implements a versioned protocol for SPA communications, so it is easy to extend + the protocol to offer new SPA message types and maintain backwards compatibility + with older fwknop clients at the same time. + * Supports the execution of shell commands on behalf of valid SPA packets. + * The fwknop server can be configured to place multiple restrictions on inbound SPA + packets beyond those enforced by encryption keys and replay attack detection. + Namely, packet age, source IP address, remote user, access to requested ports, + and more. + * Bundled with fwknop is a comprehensive test suite that issues a series of tests + designed to verify that both the client and server pieces of fwknop work properly. + These tests involve sniffing SPA packets over the local loopback interface, + building temporary firewall rules that are checked for the appropriate access based + on the testing config, and parsing output from both the fwknop client and fwknopd + server for expected markers for each test. Test suite output can easily be + anonymized for communication to third parties for analysis. + * fwknop was the first program to integrate port knocking with passive OS + fingerprinting. However, Single Packet Authorization offers many security benefits + beyond port knocking, so the port knocking mode of operation is generally + deprecated. + + ## License The fwknop project is released as open source software under the terms of the **GNU General Public License (GPL v2)**. The latest release can be found diff --git a/doc/images/SPA_AWS_network_setup.png b/doc/images/SPA_AWS_network_setup.png new file mode 100644 index 0000000000000000000000000000000000000000..7739e3e2fca70fe16eb1eb9ea781ae129e2d3fba GIT binary patch literal 77719 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 P;&tlBwN*-#tS|o`EmJaY literal 0 HcmV?d00001 diff --git a/doc/images/SPA_basic.png b/doc/images/SPA_basic.png new file mode 100644 index 0000000000000000000000000000000000000000..e22686808e91adc10f1169c6eda15df67f0f75c5 GIT binary patch literal 20691 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 literal 0 HcmV?d00001 From 090bda3326bd17857a8132e0fcf465caa4448266 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 9 Jun 2015 09:29:05 -0700 Subject: [PATCH 124/219] [test suite] proper path for AFL server-conf test case config files (iptables vs. firewalld) --- Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index ec772134..d94cd29a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -408,7 +408,8 @@ EXTRA_DIST = \ test/afl/test-cases/spa-pkts/spa2_sha512.start \ test/afl/test-cases/spa-pkts/spa2_sha384.start \ test/afl/test-cases/spa-pkts/spa2_md5.start \ - test/afl/test-cases/server-conf/fwknopd.conf \ + test/afl/test-cases/server-conf/firewalld/fwknopd.conf \ + test/afl/test-cases/server-conf/iptables/fwknopd.conf \ test/tests/build_security.pl \ test/tests/preliminaries.pl \ test/tests/code_structure.pl \ From e3bf862238a9ca6a8a13b6ecec50c0078fde9301 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 9 Jun 2015 16:59:20 -0700 Subject: [PATCH 125/219] [test suite] removed deprecated AFL compile script --- test/afl/compile/afl-compile-no-enable-arg.sh | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100755 test/afl/compile/afl-compile-no-enable-arg.sh diff --git a/test/afl/compile/afl-compile-no-enable-arg.sh b/test/afl/compile/afl-compile-no-enable-arg.sh deleted file mode 100755 index aad12571..00000000 --- a/test/afl/compile/afl-compile-no-enable-arg.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -x - -# this is for the fuzzing-wrappers/client-rc.sh script - -cd ../../ -CC=afl-gcc ./extras/apparmor/configure_args.sh $@ -make clean -AFL_HARDEN=1 make -cd test/afl -exit $? From e4106d1ee5e844b36068b5cd45ed0e0864f732a7 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 9 Jun 2015 16:59:47 -0700 Subject: [PATCH 126/219] [test suite] removed deprecated AFL compile script --- Makefile.am | 1 - 1 file changed, 1 deletion(-) diff --git a/Makefile.am b/Makefile.am index d94cd29a..73d2a6cf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -362,7 +362,6 @@ EXTRA_DIST = \ test/misc/pf.rules \ test/misc/pf.sh \ test/afl/compile/afl-compile-code-coverage.sh \ - test/afl/compile/afl-compile-no-enable-arg.sh \ test/afl/compile/afl-compile.sh \ test/afl/doc/AFL_status_screen.png \ test/afl/README.md \ From 5616c7ba6d067f9628af1082e91eddaa0631000f Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 9 Jun 2015 17:01:16 -0700 Subject: [PATCH 127/219] [test suite] removed deprecated AFL compile script --- test/afl/README.md | 7 ------- test/afl/fuzzing-wrappers/client-rc.sh | 4 ---- 2 files changed, 11 deletions(-) diff --git a/test/afl/README.md b/test/afl/README.md index 8e841c56..beafff3d 100644 --- a/test/afl/README.md +++ b/test/afl/README.md @@ -26,13 +26,6 @@ to the *libpng-nocrc.patch* patch included in the AFL sources. The corresponding commit that enables this functionality in fwknop is aaa44656bcfcb705d80768a7b9aa0d45a0e55e21 (see: [https://github.com/mrash/fwknop/commit/aaa44656bcfcb705d80768a7b9aa0d45a0e55e21]) -One exception to the need for compiling fwknop wtih *--enable-afl-fuzzing* is -when using AFL to fuzz the fwknoprc file that is leveraged by the fwknop client. -In this case, fwknop should not be compiled with -*--enable-afl-fuzzing* (use the *compile/afl-compile-no-enable-arg.sh* script) -since the fwknoprc file parsing routines are fuzzed instead of the SPA packet -encoding/decoding cycles. - ## AFL Wrappers The top level directory contains enabling scripts in order to make it easy to diff --git a/test/afl/fuzzing-wrappers/client-rc.sh b/test/afl/fuzzing-wrappers/client-rc.sh index 1b4c7b23..84ea72c3 100755 --- a/test/afl/fuzzing-wrappers/client-rc.sh +++ b/test/afl/fuzzing-wrappers/client-rc.sh @@ -26,10 +26,6 @@ then IN_DIR=$PREV_OUT_DIR fi -### make sure the client can handle the rc file -./fuzzing-wrappers/helpers/fwknop-rc-test.sh || \ - { echo "[*] Client rc file fuzzing requires compilation with ./compile/afl-compile-no-enable-args.sh"; exit 1; } - LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ -T $BANNER -t 1000 -i $IN_DIR -o $OUT_DIR -f $OUT_DIR/fwknoprc \ $CLIENT --rc-file $OUT_DIR/fwknoprc -T -a 1.1.1.1 -n testhost.com From 674242388922d33f9e549be7f4d2eab98a3e906e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 10 Jun 2015 20:22:11 -0400 Subject: [PATCH 128/219] this Android client has been deprecated in favor of Jonathan Bennett's new client: https://github.com/oneru/Fwknop2/releases --- android/README | 8 ++++++++ android/README.DEPRECATED | 5 +++++ 2 files changed, 13 insertions(+) create mode 100644 android/README.DEPRECATED diff --git a/android/README b/android/README index 4380fabc..2520bb0b 100644 --- a/android/README +++ b/android/README @@ -1,3 +1,11 @@ + +*** +Please note that this Android client has been deprecated in favor of Jonathan +Bennett's new Android client that is available here: + +https://github.com/oneru/Fwknop2/releases/ +**** + =============================================================================== FWKNOP for Android diff --git a/android/README.DEPRECATED b/android/README.DEPRECATED new file mode 100644 index 00000000..84607356 --- /dev/null +++ b/android/README.DEPRECATED @@ -0,0 +1,5 @@ + +Please note that this Android client has been deprecated in favor of Jonathan +Bennett's new Android client that is available here: + +https://github.com/oneru/Fwknop2/releases/ From b11217dc0789a36689e4f5e52710f182a9777bfb Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 11 Jun 2015 18:28:41 -0700 Subject: [PATCH 129/219] [test suite] better integration with Google's Address Sanitizer and AFL --- test/afl/compile/afl-asan-compile.sh | 16 ++++++++++++++++ test/afl/fuzzing-wrappers/client-rc.sh | 10 ++++++++-- test/afl/fuzzing-wrappers/fcns | 3 +++ .../fuzzing-wrappers/helpers/fwknop-rc-test.sh | 4 ++-- test/afl/fuzzing-wrappers/server-access.sh | 6 +++--- test/afl/fuzzing-wrappers/server-conf.sh | 3 ++- test/afl/fuzzing-wrappers/server-digest-cache.sh | 2 +- test/afl/fuzzing-wrappers/server-enc-pkts.sh | 2 +- test/afl/fuzzing-wrappers/spa-pkts.sh | 3 ++- 9 files changed, 38 insertions(+), 11 deletions(-) create mode 100755 test/afl/compile/afl-asan-compile.sh diff --git a/test/afl/compile/afl-asan-compile.sh b/test/afl/compile/afl-asan-compile.sh new file mode 100755 index 00000000..bac8971e --- /dev/null +++ b/test/afl/compile/afl-asan-compile.sh @@ -0,0 +1,16 @@ +#!/bin/sh -x + +cd ../../ + +AFL_USE_ASAN=1 CC=afl-gcc ./extras/apparmor/configure_args.sh --enable-afl-fuzzing --without-gpgme --enable-32bit-mode --enable-asan-support $@ + +if [ $? -ne 0 ] +then + echo "[*] autogen configure script failure, exiting" + exit 1 +fi + +make clean +AFL_HARDEN=1 make +cd test/afl +exit $? diff --git a/test/afl/fuzzing-wrappers/client-rc.sh b/test/afl/fuzzing-wrappers/client-rc.sh index 84ea72c3..d7fd6db5 100755 --- a/test/afl/fuzzing-wrappers/client-rc.sh +++ b/test/afl/fuzzing-wrappers/client-rc.sh @@ -20,6 +20,10 @@ BANNER="$TSTR$GIT_STR" ### set up directories dir_init $ARCHIVE_DIR $FDIR $OUT_DIR PREV_OUT_DIR +### make sure the client rc file can be parsed (a failure +### exit status is expected though) +./fuzzing-wrappers/helpers/fwknop-rc-test.sh && exit $? + ### support resuming from a previous run if [ $@ ] && [ "$1" = "resume" ] then @@ -27,7 +31,9 @@ then fi LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ - -T $BANNER -t 1000 -i $IN_DIR -o $OUT_DIR -f $OUT_DIR/fwknoprc \ - $CLIENT --rc-file $OUT_DIR/fwknoprc -T -a 1.1.1.1 -n testhost.com + -m $MEM_LIMIT -T $BANNER -t $TIMEOUT \ + -i $IN_DIR -o $OUT_DIR -f $OUT_DIR/fwknoprc \ + $CLIENT --rc-file $OUT_DIR/fwknoprc -T \ + -a 1.1.1.1 -n testhost2.com exit $? diff --git a/test/afl/fuzzing-wrappers/fcns b/test/afl/fuzzing-wrappers/fcns index f6d8b559..5844cbe1 100755 --- a/test/afl/fuzzing-wrappers/fcns +++ b/test/afl/fuzzing-wrappers/fcns @@ -5,6 +5,9 @@ SERVER="../../server/.libs/fwknopd" CLIENT="../../client/.libs/fwknop" LIB_DIR="../../lib/.libs" +MEM_LIMIT=800 +TIMEOUT=1000 + fw_type() { ### default to iptables FW="/iptables" diff --git a/test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh b/test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh index af42ae46..3bfb35c1 100755 --- a/test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh +++ b/test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh @@ -1,12 +1,12 @@ #!/bin/sh -x -RC_FILE="test-cases/client-rc/fwknoprc" +RC_FILE="test-cases/client-rc/fwknoprc2" if [ $@ ] then RC_FILE=$@ fi -LD_LIBRARY_PATH=../../lib/.libs ../../client/.libs/fwknop --rc-file $RC_FILE -T -a 1.1.1.1 -n testhost.com +LD_LIBRARY_PATH=../../lib/.libs ../../client/.libs/fwknop -v -v --rc-file $RC_FILE -T -a 1.1.1.1 -n testhost2.com exit $? diff --git a/test/afl/fuzzing-wrappers/server-access.sh b/test/afl/fuzzing-wrappers/server-access.sh index c8b08cbb..4536bff3 100755 --- a/test/afl/fuzzing-wrappers/server-access.sh +++ b/test/afl/fuzzing-wrappers/server-access.sh @@ -32,9 +32,9 @@ fi ### run afl-fuzz LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ - -T $BANNER -t 1000 -i $IN_DIR \ - -o $OUT_DIR -f $FUZZ_FILE $SERVER \ - -c ../conf/ipt_snat_fwknopd.conf \ + -m $MEM_LIMIT -T $BANNER -t $TIMEOUT \ + -i $IN_DIR -o $OUT_DIR -f $FUZZ_FILE \ + $SERVER -c ../conf/ipt_snat_fwknopd.conf \ -a $FUZZ_FILE \ -O ../conf/override_no_digest_tracking_fwknopd.conf \ -A -f -t --exit-parse-config -v -v -v -r `pwd`/run diff --git a/test/afl/fuzzing-wrappers/server-conf.sh b/test/afl/fuzzing-wrappers/server-conf.sh index 972a8dce..be3bebe7 100755 --- a/test/afl/fuzzing-wrappers/server-conf.sh +++ b/test/afl/fuzzing-wrappers/server-conf.sh @@ -34,7 +34,8 @@ fi ### make sure that parsing the fwknopd.conf file works ./fuzzing-wrappers/helpers/fwknopd-parse-conf.sh || exit $? -LD_LIBRARY_PATH=$LIB_DIR afl-fuzz -T $BANNER -t 1000 -i $IN_DIR \ +LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ + -m $MEM_LIMIT -T $BANNER -t $TIMEOUT -i $IN_DIR \ -o $OUT_DIR -f $FUZZ_FILE $SERVER \ -O ../conf/override_no_digest_tracking_fwknopd.conf \ -a ../conf/default_access.conf \ diff --git a/test/afl/fuzzing-wrappers/server-digest-cache.sh b/test/afl/fuzzing-wrappers/server-digest-cache.sh index 60c114f5..2b2b15d5 100755 --- a/test/afl/fuzzing-wrappers/server-digest-cache.sh +++ b/test/afl/fuzzing-wrappers/server-digest-cache.sh @@ -31,7 +31,7 @@ fi ### run afl-fuzz LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ - -T $BANNER -t 1000 -i $IN_DIR \ + -m $MEM_LIMIT -T $BANNER -t $TIMEOUT -i $IN_DIR \ -o $OUT_DIR -f $OUT_DIR/afl_digest_cache.conf $SERVER \ -c ../conf/ipt_snat_fwknopd.conf \ -a ../conf/default_access.conf \ diff --git a/test/afl/fuzzing-wrappers/server-enc-pkts.sh b/test/afl/fuzzing-wrappers/server-enc-pkts.sh index 6de58aaa..beb8caf9 100755 --- a/test/afl/fuzzing-wrappers/server-enc-pkts.sh +++ b/test/afl/fuzzing-wrappers/server-enc-pkts.sh @@ -32,7 +32,7 @@ fi ./fuzzing-wrappers/helpers/fwknopd-enc-pkt-file.sh LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ - -T $BANNER -t 1000 -i $IN_DIR \ + -m $MEM_LIMIT -T $BANNER -t $TIMEOUT -i $IN_DIR \ -o $OUT_DIR -f $OUT_DIR/afl_enc_pkt.data $SERVER \ -c ../conf/default_fwknopd.conf \ -a ../conf/default_access.conf \ diff --git a/test/afl/fuzzing-wrappers/spa-pkts.sh b/test/afl/fuzzing-wrappers/spa-pkts.sh index 6d701a6b..5698cbcb 100755 --- a/test/afl/fuzzing-wrappers/spa-pkts.sh +++ b/test/afl/fuzzing-wrappers/spa-pkts.sh @@ -29,7 +29,8 @@ fi ### make sure that a basic SPA packet to stdin in fwknopd -A mode works ./fuzzing-wrappers/helpers/fwknopd-stdin-test.sh || exit $? -LD_LIBRARY_PATH=$LIB_DIR afl-fuzz -T $BANNER -t 1000 \ +LD_LIBRARY_PATH=$LIB_DIR afl-fuzz \ + -m $MEM_LIMIT -T $BANNER -t $TIMEOUT \ -i $IN_DIR -o $OUT_DIR $SERVER \ -c ../conf/default_fwknopd.conf \ -a ../conf/default_access.conf -A -f -t From 404c34a0db97b3b8476365c4ecc65c2348629c1a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 11 Jun 2015 19:03:01 -0700 Subject: [PATCH 130/219] [test suite] allow for missing makeinfo binary in recompliation tests --- test/test-fwknop.pl | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index b92995c1..b6eb3ceb 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1653,6 +1653,8 @@ sub look_for_crashes() { sub config_recompile() { my $config_cmd = shift; + my $rv = 1; + if ($enable_profile_coverage_check) { chdir 'test' or die $!; ### we're recompiling, so remove any existing profile coverage @@ -1670,14 +1672,23 @@ sub config_recompile() { if ($sudo_path) { unless (&run_cmd("$sudo_path -u $username make", $cmd_out_tmp, "test/$curr_test_file")) { - return 0 unless &run_cmd('make', $cmd_out_tmp, + $rv = 0 unless &run_cmd('make', $cmd_out_tmp, "test/$curr_test_file"); } } else { - return 0 unless &run_cmd('make', $cmd_out_tmp, + $rv = 0 unless &run_cmd('make', $cmd_out_tmp, "test/$curr_test_file"); } + unless ($rv) { + ### override the failure if makeinfo is missing since this + ### this doesn't affect run time operations + if (&file_find_regex([qr/makeinfo.*is\smissing/], $MATCH_ALL, + $NO_APPEND_RESULTS, $cmd_out_tmp)) { + $rv = 1; + } + } + return 1; } @@ -1729,7 +1740,6 @@ sub configure_args_udp_server_no_libpcap() { unless (&config_recompile('./extras/apparmor/configure_args.sh --enable-udp-server')) { &write_test_file("[-] configure/recompile failure.\n", "test/$curr_test_file"); - chdir $curr_pwd or die $!; $rv = 0; } From c8cdc91974f44b8807d09bbb004e40c762d34980 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 12 Jun 2015 17:46:22 -0700 Subject: [PATCH 131/219] [test suite] added test for Rijndael-only SPA packet from the Android Fwknop2-v1.0-RC.2 binary --- test/tests/os_compatibility.pl | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/tests/os_compatibility.pl b/test/tests/os_compatibility.pl index 64e66f16..e20f68a7 100644 --- a/test/tests/os_compatibility.pl +++ b/test/tests/os_compatibility.pl @@ -342,6 +342,32 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, + { + 'category' => 'Rijndael', + 'subcategory' => 'Android compatibility', + 'detail' => 'Fwknop2-v1.0-RC.2', + 'function' => \&os_compatibility, + 'no_ip_check' => 1, + 'pkt' => + '8noA' . + 'VjCwHjmqXgqngHY/' . + 'JzHi3Bd9LB4E6eeC' . + '5dyVG7PmsOjmLITh' . + 'LLNAj3JPbzBodUYS' . + 'h/g5/rY88m/EtFhy' . + 'eSACzRuRC+LVYuI2' . + 'M/2LmCFKNpsq0jAm' . + 'BuUv3K9j9j4czpwG' . + 'FJZNseZpOc4oS8ch' . + 'VKumQJF6b1AQ1w7H' . + 'BVFuhp6gQEJifs7o' . + '03', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'disable_aging'} -a $cf{'def_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/with expire time/], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, ); From 9ce5ad47c055c4930ad59e457ef2253ac3ce23de Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 13 Jun 2015 06:31:11 -0700 Subject: [PATCH 132/219] [test suite] disable python tests if Python.h is missing --- test/test-fwknop.pl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index b6eb3ceb..f6ea257e 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -2615,6 +2615,15 @@ sub python_fko_compile_install() { &run_cmd("$python_path setup.py install --prefix=../test/$python_fko_dir", $cmd_out_tmp, "../test/$curr_test_file"); + if (&file_find_regex( + [qr/fatal\serror.*Python\.h/], + $MATCH_ALL, $APPEND_RESULTS, "../test/$curr_test_file")) { + ### python-devel is missing, disable all python tests + push @tests_to_exclude, qr/python/; + $rv = 0; + } + + chdir $curr_pwd or die $!; return $rv; From 70fd1c990f9ecbd7084d7683eb29d58c38d1a3a3 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 14 Jun 2015 08:41:06 -0400 Subject: [PATCH 133/219] include link to DefCon 14 presentation on fwknop + Tor --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 71db6843..19dea162 100644 --- a/README.md +++ b/README.md @@ -132,11 +132,13 @@ The following is a complete list of features supported by the fwknop project: as the port over which the follow-on connection is made via the iptables NAT capabilities. The later applies to forwarded connections to internal services and to access granted to local sockets on the system running fwknopd. - * Integration with Tor (see my DefCon 14 presentation). Note that because Tor uses - TCP for transport, sending SPA packets through the Tor network requires that each - SPA packet is sent over an established TCP connection, so technically this breaks - the "single" aspect of "Single Packet Authorization". However, Tor provides - anonymity benefits that can outweigh this consideration in some deployments. + * Integration with Tor (as described in this + [DefCon 14](http://www.cipherdyne.org/fwknop/docs/talks/dc14_fwknop_slides.pdf) presentation). + Note that because Tor uses TCP for transport, sending SPA packets through the Tor + network requires that each SPA packet is sent over an established TCP connection, + so technically this breaks the "single" aspect of "Single Packet Authorization". + However, Tor provides anonymity benefits that can outweigh this consideration in + some deployments. * Implements a versioned protocol for SPA communications, so it is easy to extend the protocol to offer new SPA message types and maintain backwards compatibility with older fwknop clients at the same time. From e8cc2845fa761269f7e40fa0c85b808c92df6d7b Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 14 Jun 2015 05:59:30 -0700 Subject: [PATCH 134/219] [test suite] minor formatting update --- test/tests/afl_fuzzing.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/tests/afl_fuzzing.pl b/test/tests/afl_fuzzing.pl index e0405cd7..9c3a05ed 100644 --- a/test/tests/afl_fuzzing.pl +++ b/test/tests/afl_fuzzing.pl @@ -7,7 +7,8 @@ 'subcategory' => 'FUZZING', 'detail' => 'pkt to stdin', 'function' => \&generic_exec, - 'cmdline' => 'echo -n "1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAA" | ' . + 'cmdline' => + 'echo -n "1716411011200157:root:1397329899:2.0.1:1:127.0.0.2,tcp/22:AAAAA" | ' . "$lib_view_str $valgrind_str $fwknopdCmd $default_server_conf_args -A -f -v", }, ); From e20c09d572b192c880a74246e17889eb7aa07248 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 14 Jun 2015 19:15:34 -0700 Subject: [PATCH 135/219] [test suite] add ASAN verification if fwknop is compiled with ASAN support --- test/asan/use-after-free.c | 10 ++++++ test/test-fwknop.pl | 57 ++++++++++++++++++++++++++++++++- test/tests/address_sanitizer.pl | 10 ++++++ 3 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 test/asan/use-after-free.c create mode 100644 test/tests/address_sanitizer.pl diff --git a/test/asan/use-after-free.c b/test/asan/use-after-free.c new file mode 100644 index 00000000..c31ff52f --- /dev/null +++ b/test/asan/use-after-free.c @@ -0,0 +1,10 @@ +#include <stdlib.h> +/* Basic program to trigger a crash under Google's Address Sanitizer: + + https://code.google.com/p/address-sanitizer/wiki/AddressSanitizer#Using_AddressSanitizer +*/ +int main() { + char *x = (char*)malloc(10 * sizeof(char*)); + free(x); + return x[5]; +} diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index f6ea257e..efc42730 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -104,6 +104,7 @@ my $python_script = 'fko-python.py'; my $python_path = ''; our $cmd_exec_test_file = '/tmp/fwknoptest'; my $default_key = 'fwknoptest'; +my $asan_dir = 'asan'; my $tests_dir = 'tests'; @@ -123,6 +124,7 @@ my @test_files = ( "$tests_dir/rijndael_hmac_fuzzing.pl", "$tests_dir/fault_injection.pl", "$tests_dir/afl_fuzzing.pl", + "$tests_dir/address_sanitizer.pl", "$tests_dir/os_compatibility.pl", "$tests_dir/perl_FKO_module.pl", "$tests_dir/python_fko.pl", @@ -149,6 +151,7 @@ our @rijndael_fuzzing = (); ### from tests/rijndael_fuzzing.pl our @rijndael_hmac_fuzzing = (); ### from tests/rijndael_hmac_fuzzing.pl our @fault_injection = (); ### from tests/fault_injection.pl our @afl_fuzzing = (); ### from tests/alf_fuzzing.pl +our @address_sanitizer = (); ### from tests/address_sanitizer.pl our @gpg_no_pw = (); ### from tests/gpg_now_pw.pl our @gpg_no_pw_hmac = (); ### from tests/gpg_now_pw_hmac.pl our @gpg = (); ### from tests/gpg.pl @@ -804,6 +807,7 @@ my @tests = ( @rijndael_hmac, @rijndael_hmac_fuzzing, @fault_injection, + @address_sanitizer, @afl_fuzzing, @os_compatibility, @perl_FKO_module, @@ -1335,6 +1339,47 @@ sub build_results_hash() { return; } +sub asan_verification() { + my $test_hr = shift; + + my $rv = 1; + + chdir $asan_dir or die $!; + + unless (&run_cmd('make clean', "../$cmd_out_tmp", + "../$curr_test_file")) { + chdir '..' or die $!; + return 0; + } + + if ($sudo_path) { + unless (&run_cmd("$sudo_path -u $username make", + "../$cmd_out_tmp", "../$curr_test_file")) { + unless (&run_cmd('make', "../$cmd_out_tmp", + "../$curr_test_file")) { + $rv = 0; + } + } + } else { + unless (&run_cmd('make', "../$cmd_out_tmp", + "../$curr_test_file")) { + $rv = 0; + } + } + + if ($rv) { + &run_cmd('./a.out', "../$cmd_out_tmp", "../$curr_test_file"); + unless (&file_find_regex([qr/ERROR\:\sAddressSanitizer/, + qr/SUMMARY\:\sAddressSanitizer/], + $MATCH_ALL, $NO_APPEND_RESULTS, "../$curr_test_file")) { + $rv = 0; + } + } + + chdir '..' or die $!; + return $rv; +} + sub compile_warnings() { my $curr_pwd = cwd() or die $!; @@ -1629,6 +1674,10 @@ sub look_for_crashes() { next if -d $f; next unless $f =~ /\.test$/; + ### only look for ASAN crashes in normal test files + next if &file_find_regex([qr/ASAN.*crash\sverification/i], + $MATCH_ALL, $NO_APPEND_RESULTS, $f); + if (&file_find_regex([qr/segmentation\sfault/i, qr/core\sdumped/i], $MATCH_ANY, $NO_APPEND_RESULTS, $f)) { &write_test_file("[-] crash message found in: $f\n", @@ -1637,7 +1686,7 @@ sub look_for_crashes() { } if (&file_find_regex([qr/ERROR\:\sAddressSanitizer/, - qr/SUMMARY\s:\sAddressSanitizer/], + qr/SUMMARY\:\sAddressSanitizer/], $MATCH_ANY, $NO_APPEND_RESULTS, $f)) { &write_test_file("[-] AddressSanitizer crash found in: $f\n", $curr_test_file); @@ -6812,6 +6861,12 @@ sub init() { $lcov_path = &find_command('lcov') unless $lcov_path; $genhtml_path = &find_command('genhtml') unless $genhtml_path; + ### see if we're compiled with ASAN support + unless (&file_find_regex([qr/enable\-asan\-support/], + $MATCH_ALL, $APPEND_RESULTS, '../config.log')) { + push @tests_to_exclude, qr/ASAN/; + } + if ($gcov_path) { if ($enable_profile_coverage_check and not $list_mode) { diff --git a/test/tests/address_sanitizer.pl b/test/tests/address_sanitizer.pl new file mode 100644 index 00000000..5e3c47eb --- /dev/null +++ b/test/tests/address_sanitizer.pl @@ -0,0 +1,10 @@ +@address_sanitizer = ( + ### this verifies that Google's Address Sanitizer is functioning properly + ### if fwknop has been compiled with it. + { + 'category' => 'ASAN', + 'subcategory' => 'Address Sanitizer', + 'detail' => 'crash verification', + 'function' => \&asan_verification, + }, +); From 7e6ec092f6eadb2c0ee670ad884a77626e304809 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 14 Jun 2015 19:23:18 -0800 Subject: [PATCH 136/219] [test suite] consolidate crash detection into a single function --- test/test-fwknop.pl | 42 ++++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index efc42730..443ceaf5 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1592,12 +1592,7 @@ sub fko_wrapper_exec() { } } - if (&file_find_regex([qr/segmentation\sfault/i, qr/core\sdumped/i], - $MATCH_ANY, $NO_APPEND_RESULTS, $curr_test_file)) { - &write_test_file("[-] crash message found in: $curr_test_file\n", - $curr_test_file); - $rv = 0; - } + $rv = 0 if &is_crash($curr_test_file); } return $rv; @@ -1678,20 +1673,7 @@ sub look_for_crashes() { next if &file_find_regex([qr/ASAN.*crash\sverification/i], $MATCH_ALL, $NO_APPEND_RESULTS, $f); - if (&file_find_regex([qr/segmentation\sfault/i, qr/core\sdumped/i], - $MATCH_ANY, $NO_APPEND_RESULTS, $f)) { - &write_test_file("[-] crash message found in: $f\n", - $curr_test_file); - $rv = 0; - } - - if (&file_find_regex([qr/ERROR\:\sAddressSanitizer/, - qr/SUMMARY\:\sAddressSanitizer/], - $MATCH_ANY, $NO_APPEND_RESULTS, $f)) { - &write_test_file("[-] AddressSanitizer crash found in: $f\n", - $curr_test_file); - $rv = 0; - } + $rv = 0 if &is_crash($f); } $do_crash_check = 0; @@ -1699,6 +1681,26 @@ sub look_for_crashes() { return $rv; } +sub is_crash() { + my $file = shift; + my $rv = 0; + if (&file_find_regex([qr/segmentation\sfault/i, qr/core\sdumped/i], + $MATCH_ANY, $NO_APPEND_RESULTS, $file)) { + &write_test_file("[-] crash message found in: $file\n", + $curr_test_file); + $rv = 1; + } + + if (&file_find_regex([qr/ERROR\:\sAddressSanitizer/, + qr/SUMMARY\:\sAddressSanitizer/], + $MATCH_ANY, $NO_APPEND_RESULTS, $file)) { + &write_test_file("[-] AddressSanitizer crash found in: $file\n", + $curr_test_file); + $rv = 1; + } + return $rv; +} + sub config_recompile() { my $config_cmd = shift; From 7da6b9e78771a18f1d4547bb9d6f3c2fe3cf4389 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 14 Jun 2015 19:43:55 -0800 Subject: [PATCH 137/219] [test suite] produce include/exclude stats --- test/test-fwknop.pl | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 443ceaf5..95009f93 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -168,6 +168,8 @@ my $test_include = ''; my @tests_to_include = (); my $test_exclude = ''; my @tests_to_exclude = (); +my %include_tracking = (); +my %exclude_tracking = (); my $do_crash_check = 1; my %valgrind_flagged_fcns = (); my %valgrind_flagged_fcns_unique = (); @@ -1003,6 +1005,29 @@ if ($total_elapsed_seconds > 60) { &logr(" Run time: $total_elapsed_seconds seconds\n"); } +if (@tests_to_include and keys %include_tracking) { + my $tot_included = 0; + for my $re (keys %include_tracking) { + $tot_included += keys %{$include_tracking{$re}}; + for my $test (keys %{$include_tracking{$re}}) { + &write_test_file("$re: $test\n", "$output_dir/tests.included"); + } + } + &logr(" Tests included (see $output_dir/tests.included): " + . $tot_included . "\n"); +} +if (@tests_to_exclude and keys %exclude_tracking) { + my $tot_excluded = 0; + for my $re (keys %exclude_tracking) { + $tot_excluded += keys %{$exclude_tracking{$re}}; + for my $test (keys %{$exclude_tracking{$re}}) { + &write_test_file("$re: $test\n", "$output_dir/tests.excluded"); + } + } + &logr(" Tests excluded (see $output_dir/tests.excluded): " + . $tot_excluded . "\n"); +} + &logr("\n"); if ($enable_openssl_compatibility_tests) { @@ -1182,6 +1207,7 @@ sub process_include_exclude() { or ($enable_profile_coverage_check and $msg =~ /profile\scoverage/) or ($msg =~ /segfault.*dump\smessages/) ) { + $include_tracking{$test}{$msg} = ''; $found = 1; last; } @@ -1192,6 +1218,7 @@ sub process_include_exclude() { my $found = 0; for my $test (@tests_to_exclude) { if ($msg =~ $test) { + $exclude_tracking{$test}{$msg} = ''; $found = 1; last; } From e0778a2d37a1a5f067367be826a6807f4ed0ac48 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 14 Jun 2015 19:58:54 -0800 Subject: [PATCH 138/219] [test suite] disable fault injection 'tag' tests with the fko wrapper does not compile against libfiu --- test/test-fwknop.pl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 95009f93..55304fba 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1620,6 +1620,11 @@ sub fko_wrapper_exec() { } $rv = 0 if &is_crash($curr_test_file); + + } else { + ### could not compile, so disable remaining fault injection + ### "tag" tests + push @tests_to_exclude, qr/fault\sinjection.*\stag\s/; } return $rv; From 4d3c4721169685e6aa1b8772ca4e0b458eb22249 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 16 Jun 2015 18:32:19 -0700 Subject: [PATCH 139/219] [test suite] add Rijndael+HMAC test for F-Droid Fwknop2 client written by Jonathan Bennett --- Makefile.am | 1 + test/conf/hmac_android_fdroid_access.conf | 4 ++++ test/test-fwknop.pl | 1 + test/tests/os_compatibility.pl | 29 ++++++++++++++++++++++- 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 test/conf/hmac_android_fdroid_access.conf diff --git a/Makefile.am b/Makefile.am index 73d2a6cf..fe3feb1b 100644 --- a/Makefile.am +++ b/Makefile.am @@ -125,6 +125,7 @@ EXTRA_DIST = \ python/fko.py \ test/conf/gpg_dirs.tar.gz \ test/conf/hmac_android_access.conf \ + test/conf/hmac_android_fdroid_access.conf \ test/conf/android_access.conf \ test/conf/android_legacy_iv_access.conf \ test/conf/base64_key_access.conf \ diff --git a/test/conf/hmac_android_fdroid_access.conf b/test/conf/hmac_android_fdroid_access.conf new file mode 100644 index 00000000..0388dbb6 --- /dev/null +++ b/test/conf/hmac_android_fdroid_access.conf @@ -0,0 +1,4 @@ +SOURCE ANY +KEY testfwknop +HMAC_KEY testhmac +FW_ACCESS_TIMEOUT 3 diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 55304fba..9b6a9867 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -453,6 +453,7 @@ our %cf = ( "${fw_conf_prefix}_no_flush_init_or_exit" => "$conf_dir/${fw_conf_prefix}_no_flush_init_or_exit_fwknopd.conf", 'ipfw_active_expire' => "$conf_dir/ipfw_active_expire_equal_fwknopd.conf", 'hmac_android_access' => "$conf_dir/hmac_android_access.conf", + 'hmac_android_fdroid_access' => "$conf_dir/hmac_android_fdroid_access.conf", 'android_access' => "$conf_dir/android_access.conf", 'android_legacy_iv_access' => "$conf_dir/android_legacy_iv_access.conf", 'dual_key_access' => "$conf_dir/dual_key_usage_access.conf", diff --git a/test/tests/os_compatibility.pl b/test/tests/os_compatibility.pl index e20f68a7..f58c6bd5 100644 --- a/test/tests/os_compatibility.pl +++ b/test/tests/os_compatibility.pl @@ -368,6 +368,33 @@ 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, }, - + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'Android compatibility', + 'detail' => 'F-Droid Fwknop2 2015-06-16', + 'function' => \&os_compatibility, + 'no_ip_check' => 1, + 'pkt' => + '9OBA' . + 'YI4pRmsVz1AXyO1M' . + 'zkbx0RdUx6C+zHXM' . + '9aegQZFkYl0agWNI' . + 'Wqh2kbIlbUvqq1NG' . + '47cp3AyccBG4+6SX' . + 'Qpe4G9JvDgtcYc6D' . + 'QaG1pT48zi+6BDvn' . + 'V3K2eojdaPTIIdFR' . + 'n75c278iCdxue/WW' . + '54iK1n07GtNSl8xy' . + 'jTBiC4dlEfGpYbM7' . + 'FIGmIciVZo3PZOxt' . + 'apdF8Ml9SRwHwka/' . + 'pCS+3hKnjbUOk', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'disable_aging'} -a $cf{'hmac_android_fdroid_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/with expire time/], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + }, ); From e2520754bf2d743524c55a0d74ec75f43cea5759 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 16 Jun 2015 18:35:05 -0700 Subject: [PATCH 140/219] update CREDITS file to include Fwknop2 --- CREDITS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CREDITS b/CREDITS index c3d559b0..5dc3fa2b 100644 --- a/CREDITS +++ b/CREDITS @@ -3,6 +3,8 @@ Jonathan Bennett - Suggested the addition of the --key-gen option to fwknopd. - Contributed the console-qr.sh script (in extras/console-qr/) to create QR codes from fwknopd access.conf keys. + - Wrote a new fwknop client for Android called "Fwknop2" - see: + https://f-droid.org/repository/browse/?fdid=org.cipherdyne.fwknop2 Sebastien Jeanquier - Assisted with getting fwknop included in BackTrack Linux - the choice From df51dacf17bf79ac50bf5ada4975a6f898fe4b27 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 16 Jun 2015 19:06:36 -0700 Subject: [PATCH 141/219] add test/asan/ files --- Makefile.am | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile.am b/Makefile.am index fe3feb1b..151020ee 100644 --- a/Makefile.am +++ b/Makefile.am @@ -362,6 +362,8 @@ EXTRA_DIST = \ test/misc/freebsd_rc.conf \ test/misc/pf.rules \ test/misc/pf.sh \ + test/asan/use-after-free.c \ + test/asan/Makefile \ test/afl/compile/afl-compile-code-coverage.sh \ test/afl/compile/afl-compile.sh \ test/afl/doc/AFL_status_screen.png \ From 5c4f7dac9be5f7f994697b2edc1df4a1b092f892 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 16 Jun 2015 19:16:36 -0700 Subject: [PATCH 142/219] [test suite] add fwknoprc2 file to AFL client rc test cases --- Makefile.am | 1 + test/afl/test-cases/client-rc/fwknoprc2 | 52 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 test/afl/test-cases/client-rc/fwknoprc2 diff --git a/Makefile.am b/Makefile.am index 151020ee..26b49f0e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -390,6 +390,7 @@ EXTRA_DIST = \ test/afl/fuzzing-wrappers/fcns \ test/afl/fuzzing-wrappers/server-conf.sh \ test/afl/test-cases/client-rc/fwknoprc \ + test/afl/test-cases/client-rc/fwknoprc2 \ test/afl/test-cases/server-digest-cache/digest.cache \ test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start \ test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start \ diff --git a/test/afl/test-cases/client-rc/fwknoprc2 b/test/afl/test-cases/client-rc/fwknoprc2 new file mode 100644 index 00000000..de07bc8a --- /dev/null +++ b/test/afl/test-cases/client-rc/fwknoprc2 @@ -0,0 +1,52 @@ +[default] +ACCESS tcp/22 +SPA_SERVER 127.0.0.1 +ALLOW_IP 127.0.0.2 +USE_HMAC Y +HMAC_DIGEST_TYPE sha256 +DIGEST_TYPE sha256 +SPA_SERVER_PROTO udp +SPA_SERVER_PORT 62201 +SPOOF_USER mbrtest +VERBOSE Y +RESOLVE_IP_HTTP N +TIME_OFFSET -1s +ENCRYPTION_MODE CBC +USE_GPG N +USE_GPG_AGENT N + +[testhost.com] +KEY_BASE64 wzNP62oPPgEc+kXDPQLHPOayQBuNbYUTPP+QrErNDmg= +HMAC_KEY_BASE64 Yh+xizBnl6FotC5ec7FanVGClRMlsOAPh2u6eovnerfBVKwaVKzjGoblFMHMc593TNyi0dWn4opLoTIV9q/ttg== +ENCRYPTION_MODE CBC + +[testhost2.com] +KEY testkey +HMAC_KEY hmackey +RAND_PORT Y +SPA_SOURCE_PORT 22222 +NAT_RAND_PORT Y +NAT_PORT 11111 +NAT_ACCESS 192.168.10.1:12345 + +#RAND_PORT +#SPA_SOURCE_PORT +#FW_TIMEOUT +#GPG_RECIPIENT +#GPG_SIGNER +#GPG_HOMEDIR +#GPG_EXE +#GPG_SIGNING_PW +#GPG_SIGNING_PW_BASE64 +#GPG_NO_SIGNING_PW +#SPOOF_SOURCE_IP +#KEY +#HMAC_KEY +#KEY_FILE +#HMAC_KEY_FILE +#RESOLVE_URL +#NAT_ACCESS +#HTTP_USER_AGENT +#NAT_LOCAL +#NAT_RAND_PORT +#NAT_PORT From bc6118e19fd4c21ec1eb4b5f1e8d5155929a1a1a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 16 Jun 2015 20:59:57 -0700 Subject: [PATCH 143/219] [test suite] added missing test/asan/Makefile --- test/asan/Makefile | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 test/asan/Makefile diff --git a/test/asan/Makefile b/test/asan/Makefile new file mode 100644 index 00000000..aa6f6452 --- /dev/null +++ b/test/asan/Makefile @@ -0,0 +1,6 @@ + +all : use-after-free.c + cc -Wall -m32 -O1 -g -fsanitize=address -fno-omit-frame-pointer use-after-free.c + +clean: + rm -f a.out From 2b5c38dc2befd6d88babc03617604d95d042a9f7 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 23 Jun 2015 16:56:25 -0700 Subject: [PATCH 144/219] [test suite] default to not zeroing profile coverage counters The typical work flow when generating gcov coverage results is: - compile fwknop with coverage support - run the test suite - hack on fwknop - re-run the test suite to see what coverage has been added This work flow is much more common than collecting coverage results for a complete test suite run. Therefore, this commit switches the default behavior in --enable-complete mode (which enables coverage support) to not zero-out coverage counters. A new argument --enable-profile-coverage-init zeros the counters in preparation for a global coverage run. --- Makefile.am | 1 - test/rm-coverage-files.sh | 12 ---------- test/test-fwknop.pl | 48 +++++++++++++++------------------------ 3 files changed, 18 insertions(+), 43 deletions(-) delete mode 100755 test/rm-coverage-files.sh diff --git a/Makefile.am b/Makefile.am index 26b49f0e..2a7a494c 100644 --- a/Makefile.am +++ b/Makefile.am @@ -448,7 +448,6 @@ EXTRA_DIST = \ test/run-test-suite.sh \ test/valgrind_suppressions \ test/configure_max_coverage.sh \ - test/rm-coverage-files.sh \ test/gen-coverage-report.sh \ test/init-lcov.sh \ test/lcov.env \ diff --git a/test/rm-coverage-files.sh b/test/rm-coverage-files.sh deleted file mode 100755 index 9bb474dc..00000000 --- a/test/rm-coverage-files.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -x - -cd .. -for d in client server lib -do - for s in *.gcda *.gcno *.gcov - do - find $d -name $s | xargs rm -f - done -done -cd test -exit diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 9b6a9867..09f6aff5 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -184,6 +184,7 @@ my $anonymize_results = 0; my $orig_config_args = ''; my $curr_test_file = 'init'; my $init_file = $curr_test_file; +my $config_log = '../config.log'; my $tarfile = 'test_fwknop.tar.gz'; our $key_gen_file = "$output_dir/key_gen"; our $verbose_str = "--verbose --verbose"; @@ -237,10 +238,9 @@ my $fko_obj = (); my $enable_recompilation_warnings_check = 0; my $enable_configure_args_checks = 0; my $enable_profile_coverage_check = 0; -my $disable_profile_coverage_init = 0; -my $profile_rm_prev_sh = 'rm-coverage-files.sh'; -my $profile_gen_report_sh = 'gen-coverage-report.sh'; -my $profile_init_sh = 'init-lcov.sh'; +my $enable_profile_coverage_init = 0; +my $profile_gen_report_sh = './gen-coverage-report.sh'; +my $profile_init_sh = './init-lcov.sh'; my $enable_make_distcheck = 0; my $enable_perl_module_checks = 0; my $enable_perl_module_fuzzing_spa_pkt_generation = 0; @@ -337,7 +337,7 @@ exit 1 unless GetOptions( 'enable-configure-args-checks' => \$enable_configure_args_checks, 'enable-profile-coverage-check' => \$enable_profile_coverage_check, 'enable-cores-pattern' => \$enable_cores_pattern_mode, - 'disable-profile-coverage-init' => \$disable_profile_coverage_init, + 'enable-profile-coverage-init' => \$enable_profile_coverage_init, 'enable-ip-resolve' => \$enable_client_ip_resolve_test, 'enable-distcheck' => \$enable_make_distcheck, 'enable-dist-check' => \$enable_make_distcheck, ### synonym @@ -1459,7 +1459,7 @@ sub profile_coverage() { return 0; } - &run_cmd("./$profile_gen_report_sh", $cmd_out_tmp, $curr_test_file); + &run_cmd($profile_gen_report_sh, $cmd_out_tmp, $curr_test_file); if (-d $lcov_results_dir) { move $lcov_results_dir, "$output_dir/$lcov_results_dir"; @@ -1739,14 +1739,6 @@ sub config_recompile() { my $rv = 1; - if ($enable_profile_coverage_check) { - chdir 'test' or die $!; - ### we're recompiling, so remove any existing profile coverage - ### files since they will be invalidated by the recompile - &run_cmd("./$profile_rm_prev_sh", $cmd_out_tmp, $curr_test_file); - chdir '..' or die $!; - } - &run_cmd('make clean', $cmd_out_tmp, "test/$curr_test_file"); if ($config_cmd) { @@ -6731,9 +6723,8 @@ sub init() { ### cache the configure args that were used before running the ### test suite - my $config_log_file = '../config.log'; - if (-e $config_log_file) { - open F, "< $config_log_file" or die $!; + if (-e $config_log) { + open F, "< $config_log" or die $!; while (<F>) { ### $ ./configure --prefix=/usr --sysconfdir=/etc ... if (m/^\s+[\$#]\s+(\.\/configure.*)/) { @@ -6898,23 +6889,21 @@ sub init() { ### see if we're compiled with ASAN support unless (&file_find_regex([qr/enable\-asan\-support/], - $MATCH_ALL, $APPEND_RESULTS, '../config.log')) { + $MATCH_ALL, $NO_APPEND_RESULTS, $config_log)) { + &write_test_file("[-] Can't find --enable-asan-support in $config_log\n", + $curr_test_file); push @tests_to_exclude, qr/ASAN/; } if ($gcov_path) { if ($enable_profile_coverage_check and not $list_mode) { - unless ($disable_profile_coverage_init) { - print "[+] Recompiling fwknop and removing any previous coverage files...\n"; - ### if we recompile then remove the .gcno files (which are - ### generated at compile time) - &compile_warnings(); - if (&file_find_regex([qr/profile\-arcs.*test\-coverage/], - $MATCH_ALL, $APPEND_RESULTS, $curr_test_file)) { - print "[+] Found -fprofile-args -ftest-coverage\n"; + if ($enable_profile_coverage_init) { + if (&file_find_regex([qr/\-enable\-profile\-coverage/], + $MATCH_ALL, $NO_APPEND_RESULTS, $config_log)) { + print "[+] Found --enable-profile-coverage\n"; } else { - print "[-] Warning: -fprofile-args -ftest-coverage not ", + print "[-] Warning: --enable-profile-coverage not ", "found, use ./configure --enable-profile-coverage?\n"; } &run_cmd($profile_init_sh, $cmd_out_tmp, $curr_test_file); @@ -6926,7 +6915,7 @@ sub init() { } ### unless we are in client only mode, see if the target firewall - ### is PF - FreeBSD can be either ipfw or PF for example + ### is PF (since FreeBSD can be either ipfw or PF for example) if (-e $fwknopdCmd) { my $fw = ''; my $cmd = "$fwknopdCmd -c $cf{'def'} -a $cf{'def_access'} -D"; @@ -7700,8 +7689,7 @@ sub usage() { --enable-profile-coverage - Generate profile coverage stats with an emphasis on finding functions that the test suite does not call. - --disable-profile-coverage-init - Do not remove old .gcno, .gcda, and - .gcov files or recompile fwknop. + --enable-profile-coverage-init - Reset .gcov coverage counters to zero. --enable-recompile - Recompile fwknop sources and look for compilation warnings. --enable-configure-args-checks - Run the autoconf configure script with From 5ba88e7b83f6ee5d822da3bb5c51fc329bd66d8c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 25 Jun 2015 22:01:20 -0700 Subject: [PATCH 145/219] [test suite] support afl-fuzz on Mac OS X which uses afl-clang --- Makefile.am | 1 + test/afl/compile/afl-asan-compile.sh | 7 ++++++- test/afl/compile/afl-compile.sh | 7 ++++++- test/afl/compile/fcns | 11 +++++++++++ 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 test/afl/compile/fcns diff --git a/Makefile.am b/Makefile.am index 2a7a494c..4833ba66 100644 --- a/Makefile.am +++ b/Makefile.am @@ -366,6 +366,7 @@ EXTRA_DIST = \ test/asan/Makefile \ test/afl/compile/afl-compile-code-coverage.sh \ test/afl/compile/afl-compile.sh \ + test/afl/compile/fcns \ test/afl/doc/AFL_status_screen.png \ test/afl/README.md \ test/afl/fuzzing-wrappers/client-rc.sh \ diff --git a/test/afl/compile/afl-asan-compile.sh b/test/afl/compile/afl-asan-compile.sh index bac8971e..0122d0db 100755 --- a/test/afl/compile/afl-asan-compile.sh +++ b/test/afl/compile/afl-asan-compile.sh @@ -1,8 +1,13 @@ #!/bin/sh -x +. ./compile/fcns + +### set either afl-gcc or afl-clang (defaults to afl-gcc) +set_afl_cc + cd ../../ -AFL_USE_ASAN=1 CC=afl-gcc ./extras/apparmor/configure_args.sh --enable-afl-fuzzing --without-gpgme --enable-32bit-mode --enable-asan-support $@ +AFL_USE_ASAN=1 CC=$AFL_CC ./extras/apparmor/configure_args.sh --enable-afl-fuzzing --without-gpgme --enable-32bit-mode --enable-asan-support $@ if [ $? -ne 0 ] then diff --git a/test/afl/compile/afl-compile.sh b/test/afl/compile/afl-compile.sh index 990563a6..a31935b6 100755 --- a/test/afl/compile/afl-compile.sh +++ b/test/afl/compile/afl-compile.sh @@ -1,8 +1,13 @@ #!/bin/sh -x +. ./compile/fcns + +### set either afl-gcc or afl-clang (defaults to afl-gcc) +set_afl_cc + cd ../../ -CC=afl-gcc ./extras/apparmor/configure_args.sh --enable-afl-fuzzing $@ +CC=$AFL_CC ./extras/apparmor/configure_args.sh --enable-afl-fuzzing $@ if [ $? -ne 0 ] then diff --git a/test/afl/compile/fcns b/test/afl/compile/fcns new file mode 100644 index 00000000..ab8e112c --- /dev/null +++ b/test/afl/compile/fcns @@ -0,0 +1,11 @@ + +AFL_CC=afl-gcc + +set_afl_cc() { + $AFL_CC /dev/null 2>&1 | grep -q -i "On Apple systems.*wrapper for clang" + if [ $? -eq 0 ] + then + ### Need to switch to afl-clang + AFL_CC=afl-clang + fi +} From ca54ec7a9b445fa15ed798a1052c250c15ba9941 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 29 Jun 2015 19:06:50 -0700 Subject: [PATCH 146/219] [test suite] integrate afl-cov with afl-fuzz wrapper scripts Here is an example for the client-rc.sh wrapper script to have it also generate code coverage results for afl-fuzz (afl-cov is enabled via two environmental variables AFL_COV and CODE_DIR). $ cd /tmp/afl-ramdisk/fwknop.git/test/afl/ $ AFL_COV=1 CODE_DIR=/home/mbr/git/fwknop.git ./fuzzing-wrappers/client-rc.sh --- test/afl/fuzzing-wrappers/client-rc.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/afl/fuzzing-wrappers/client-rc.sh b/test/afl/fuzzing-wrappers/client-rc.sh index d7fd6db5..3f92d56a 100755 --- a/test/afl/fuzzing-wrappers/client-rc.sh +++ b/test/afl/fuzzing-wrappers/client-rc.sh @@ -20,6 +20,22 @@ BANNER="$TSTR$GIT_STR" ### set up directories dir_init $ARCHIVE_DIR $FDIR $OUT_DIR PREV_OUT_DIR +### see if we're going to enable code coverage with afl-cov +if [ "$AFL_COV" != "" ] +then + echo "[+] Enabling afl-cov coverage mode..." + if [ "$CODE_DIR" = "" ] + then + echo "[*] Must set CODE_DIR with path to gcov compiled code" + exit 1 + fi + + ### kick off afl-cov in --background mode + afl-cov -d $OUT_DIR --live --background --sleep 10 --coverage-cmd \ + "LD_LIBRARY_PATH=$CODE_DIR/test/afl/$LIB_DIR $CODE_DIR/test/afl/$CLIENT --rc-file AFL_FILE -T -a 1.1.1.1 -n testhost2.com" \ + --code-dir $CODE_DIR +fi + ### make sure the client rc file can be parsed (a failure ### exit status is expected though) ./fuzzing-wrappers/helpers/fwknop-rc-test.sh && exit $? From ca2a73e3334bd15b2cdfd797e86a10e8cfac743c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 29 Jun 2015 19:48:02 -0700 Subject: [PATCH 147/219] add --with-firewalld autoconf argument as a synonym for --with-firewall-cmd --- ChangeLog | 3 +++ configure.ac | 54 ++++++++++++++++++++++++++++++++++------------------ 2 files changed, 38 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 931dbeaa..de513e3a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -4,6 +4,9 @@ fwknop-2.6.7 (05//2015): take advantage of this will likely be OpenWRT thanks to Jonathan. - Added a script from Jonathan Bennett at extras/console-qr/console-qr.sh to generate QR codes from fwknopd access.conf keys. + - Added --with-firewalld to the autoconf configure script. This is a + synonym for --with-firewall-cmd to avoid confusion. Some package + maintainers use --with-firewalld to build fwknop. fwknop-2.6.6 (04/23/2015): - [server] Add the ability for fwknopd to function as an generic SPA diff --git a/configure.ac b/configure.ac index 677791d8..7c5bb8cd 100644 --- a/configure.ac +++ b/configure.ac @@ -579,6 +579,22 @@ dnl ] ) + AC_ARG_WITH([firewalld], + [AS_HELP_STRING([--with-firewalld=/path/to/firewall-cmd], + [Synonym for --with-firewall-cmd, specify path to the firewall-cmd executable @<:@default=check path@:>@])], + [ + AS_IF([ test "x$withval" = xno ], [], + AS_IF([ test "x$withval" = x -o "x$withval" = xyes ], + [AC_MSG_ERROR([--with-firewalld requires an argument specifying a path to firewall-cmd])], + [ FORCE_FIREWALLD_EXE=$withval ] + ) + ) + ], + [ + AC_PATH_PROG(FIREWALLD_EXE, [firewalld], [], [$APP_PATH]) + ] + ) + dnl Check for iptables dnl AC_ARG_WITH([iptables], @@ -654,29 +670,29 @@ dnl dnl If a firewall was forced. set the appropriate _EXE var and clear the others. dnl AS_IF([test "x$FORCE_FIREWALLD_EXE" != x], [ - FIREWALLD_EXE="$FORCE_FIREWALLD_EXE" + FIREWALLD_EXE="$FORCE_FIREWALLD_EXE" ],[ AS_IF([test "x$FORCE_IPTABLES_EXE" != x], [ - IPTABLES_EXE="$FORCE_IPTABLES_EXE" - FIREWALLD_EXE="" + IPTABLES_EXE="$FORCE_IPTABLES_EXE" + FIREWALLD_EXE="" ],[ AS_IF([test "x$FORCE_IPFW_EXE" != x], [ - IPFW_EXE="$FORCE_IPFW_EXE" - IPTABLES_EXE="" - FIREWALLD_EXE="" + IPFW_EXE="$FORCE_IPFW_EXE" + IPTABLES_EXE="" + FIREWALLD_EXE="" ],[ AS_IF([test "x$FORCE_PF_EXE" != x], [ - PF_EXE="$FORCE_PF_EXE" - IPFW_EXE="" - IPTABLES_EXE="" - FIREWALLD_EXE="" + PF_EXE="$FORCE_PF_EXE" + IPFW_EXE="" + IPTABLES_EXE="" + FIREWALLD_EXE="" ],[ AS_IF([test "x$FORCE_IPF_EXE" != x], [ - IPF_EXE="$FORCE_IPF_EXE" - PF_EXE="" - IPFW_EXE="" - IPTABLES_EXE="" - FIREWALLD_EXE="" + IPF_EXE="$FORCE_IPF_EXE" + PF_EXE="" + IPFW_EXE="" + IPTABLES_EXE="" + FIREWALLD_EXE="" ] ] ] @@ -690,19 +706,19 @@ dnl then ipfw, pf, and otherwise we try ipf. dnl AS_IF([test "x$FIREWALLD_EXE" != x], [ FW_DEF="FW_FIREWALLD" - FIREWALL_TYPE="firewalld" + FIREWALL_TYPE="firewalld" FIREWALL_EXE=$FIREWALLD_EXE AC_DEFINE_UNQUOTED([FIREWALL_FIREWALLD], [1], [The firewall type: firewalld.]) ],[ AS_IF([test "x$IPTABLES_EXE" != x], [ FW_DEF="FW_IPTABLES" - FIREWALL_TYPE="iptables" + FIREWALL_TYPE="iptables" FIREWALL_EXE=$IPTABLES_EXE AC_DEFINE_UNQUOTED([FIREWALL_IPTABLES], [1], [The firewall type: iptables.]) ],[ AS_IF([test "x$IPFW_EXE" != x], [ FW_DEF="FW_IPFW" - FIREWALL_TYPE="ipfw" + FIREWALL_TYPE="ipfw" FIREWALL_EXE=$IPFW_EXE AC_DEFINE_UNQUOTED([FIREWALL_IPFW], [1], [The firewall type: ipfw.]) ],[ @@ -714,7 +730,7 @@ dnl ],[ AS_IF([test "x$IPF_EXE" != x], [ AC_MSG_ERROR([Sorry - ipf was specified or the only one found, however, it is not supported yet.]) - FIREWALL_TYPE="ipf" + FIREWALL_TYPE="ipf" FIREWALL_EXE=$IPF_EXE AC_DEFINE_UNQUOTED([FIREWALL_IPF], [1], [The firewall type: ipf.]) ], [AC_MSG_ERROR([No firewall program was found or specified.]) ] From 464a680f137653444ae9031274d94cf26282ffbb Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 30 Jun 2015 17:44:07 -0700 Subject: [PATCH 148/219] [server] minor --udp-server option handling update for completeness --- server/fwknopd.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server/fwknopd.c b/server/fwknopd.c index 6342c14a..d2963130 100644 --- a/server/fwknopd.c +++ b/server/fwknopd.c @@ -224,7 +224,11 @@ main(int argc, char **argv) /* If the TCP server option was set, fire it up here. Note that in * this mode, fwknopd still acquires SPA packets via libpcap. If you - * want to use UDP only without the libpcap dependency, see the FIXME... + * want to use UDP only without the libpcap dependency, then fwknop + * needs to be compiled with --enable-udp-server. Note that the UDP + * server can be run even when fwknopd links against libpcap as well, + * but there is no reason to link against it if SPA packets are + * always going to be acquired via a UDP socket. */ if(strncasecmp(opts.config[CONF_ENABLE_TCP_SERVER], "Y", 1) == 0) { @@ -238,8 +242,11 @@ main(int argc, char **argv) #if USE_LIBPCAP /* Intiate pcap capture mode... */ - if(strncasecmp(opts.config[CONF_ENABLE_UDP_SERVER], "N", 1) == 0) + if(!opts.enable_udp_server + && strncasecmp(opts.config[CONF_ENABLE_UDP_SERVER], "N", 1) == 0) + { pcap_capture(&opts); + } #endif /* Deal with any signals that we've received and break out From 814d9e10500b515a22edafa5676f6039ea966e20 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 30 Jun 2015 17:47:01 -0700 Subject: [PATCH 149/219] [test suite] minor comment update --- test/afl/fuzzing-wrappers/client-rc.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/test/afl/fuzzing-wrappers/client-rc.sh b/test/afl/fuzzing-wrappers/client-rc.sh index 3f92d56a..c5dfa516 100755 --- a/test/afl/fuzzing-wrappers/client-rc.sh +++ b/test/afl/fuzzing-wrappers/client-rc.sh @@ -1,7 +1,12 @@ #!/bin/sh -x # -# Fuzz the fwknop client fwknoprc file +# Fuzz the fwknop client fwknoprc file. This wrapper also has the ability to +# kick of afl-cov to produce code coverage results at the same time. Note that +# CODE_DIR points to the fwknop project code compiled with gcov profiling +# support. +# +# $ AFL_COV=1 CODE_DIR=/path/to/code/fwknop.git ./fuzzing-wrappers/client-rc.sh # . ./fuzzing-wrappers/fcns From 788bf543c8b1bc4dc75a0c14486f2aab58a9d7c3 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 30 Jun 2015 21:24:00 -0400 Subject: [PATCH 150/219] [extras] added ramdisk-create-osx.sh for Mac OS X systems --- extras/ramdisk/ramdisk-create-osx.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100755 extras/ramdisk/ramdisk-create-osx.sh diff --git a/extras/ramdisk/ramdisk-create-osx.sh b/extras/ramdisk/ramdisk-create-osx.sh new file mode 100755 index 00000000..546a5871 --- /dev/null +++ b/extras/ramdisk/ramdisk-create-osx.sh @@ -0,0 +1,27 @@ +#!/bin/sh -x +# +# This script creates a ramdisk and clones the fwknop git repository +# into it. This is meant for AFL fuzzing cycles. +# + +### 1GB +RSIZE=2097152 +LABEL="ramdisk-for-fwknop" +RAMDISK=/Volumes/$LABEL + +if [ -d $RAMDISK ] +then + echo "[*] $RAMDISK mount point already exists" + exit 1 +fi + +if [ -f extras/ramdisk/ramdisk-create-osx.sh ] +then + diskutil erasevolume HFS+ "$LABEL" `hdiutil attach -nomount ram://$RSIZE` + git clone . $RAMDISK/fwknop.git +else + echo "[*] Run this script from the top level fwknop sources directory" + exit 1 +fi + +exit $? From ff9adc5f5113e913cd7016690c81106e56f2d780 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 1 Jul 2015 07:43:24 -0400 Subject: [PATCH 151/219] add OS X ramdisk wrapper script --- Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.am b/Makefile.am index 4833ba66..b433fe2f 100644 --- a/Makefile.am +++ b/Makefile.am @@ -72,6 +72,7 @@ EXTRA_DIST = \ extras/apparmor/usr.sbin.fwknopd \ extras/apparmor/configure_args.sh \ extras/ramdisk/ramdisk-create.sh \ + extras/ramdisk/ramdisk-create-osx.sh \ extras/console-qr/console-qr.sh \ fwknop.spec \ iphone/main.m \ From a212353765542e369cba342a58c66ea6247713e1 Mon Sep 17 00:00:00 2001 From: Steve Harvey <sgh@vex.net> Date: Thu, 2 Jul 2015 19:33:03 -0400 Subject: [PATCH 152/219] [server] daemon exits if listened-to interface goes down This commit fixes fwknopd becoming non-responsive should the interface temporarily cycles through a down state. Verified on CentOS 7. --- server/pcap_capture.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/server/pcap_capture.c b/server/pcap_capture.c index c64c1b9d..5955c63f 100644 --- a/server/pcap_capture.c +++ b/server/pcap_capture.c @@ -31,6 +31,7 @@ #if USE_LIBPCAP #include <pcap.h> + #include <errno.h> #endif #include "fwknopd_common.h" @@ -288,9 +289,19 @@ pcap_capture(fko_srv_options_t *opts) */ else if(res == -1) { - log_msg(LOG_ERR, "[*] Error from pcap_dispatch: %s", - pcap_geterr(pcap) - ); + if(errno == ENETDOWN) + { + log_msg(LOG_ERR, "[*] Fatal error from pcap_dispatch: %s", + pcap_geterr(pcap) + ); + clean_exit(opts, FW_CLEANUP, EXIT_FAILURE); + } + else + { + log_msg(LOG_ERR, "[*] Error from pcap_dispatch: %s", + pcap_geterr(pcap) + ); + } if(pcap_errcnt++ > MAX_PCAP_ERRORS_BEFORE_BAIL) { From 4c7679fabd225e27145e5770d6e36931926560f0 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 2 Jul 2015 23:44:16 -0400 Subject: [PATCH 153/219] [server] start on sudo usage for command exec (issue #159) --- doc/fwknopd.man.asciidoc | 27 +++++++++++++++++++++++---- server/access.c | 8 ++++++++ server/cmd_opts.h | 3 +++ server/config_init.c | 20 +++++++++++++++++++- server/fwknopd_common.h | 7 +++++++ server/utils.c | 37 ++++++++++++++++++++++++++++++------- server/utils.h | 4 ++++ 7 files changed, 94 insertions(+), 12 deletions(-) diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index e36bed60..2924217a 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -526,11 +526,30 @@ directive starts a new stanza. the *fwknopd* server as the user specified by the ``CMD_EXEC_USER'' or as the user that started *fwknopd* if that is not set. +*CMD_EXEC_ALL_SUDO* '<Y/N>':: + *sudo* provides a powerful means of restricting the sets of commands that + users can execute via the ``sudoers'' file. By enabling this feature (and + in ``ENABLE_CMD_EXEC'' mode), all incoming commands from valid SPA packets + will be prefixed by ``/path/to/sudo -u <user>'' where the path to sudo is + set by the ``SUDO_EXE'' variable, and ``<user>'' is set by the + ``CMD_EXEC_USER'' variable (default is ``root'' if not set). + *CMD_EXEC_USER* '<username>':: - This specifies the user that will execute commands contained within a SPA - packet. If not specified, fwknopd will execute it as the user it is - running as (most likely root). Setting this to a non-root user is highly - recommended. + This specifies the user (via setuid) that will execute commands contained + within a SPA packet. If not specified, fwknopd will execute it as the user + it is running as (most likely root). Setting this to a non-root user such + as ``nobody'' is highly recommended if elevated permissions are not + needed. + +*CMD_EXEC_GROUP* '<groupname>':: + This specifies the group (via setgid) that will execute commands contained + within a SPA packet. If not specified, fwknopd will execute it as the user + it is running as (most likely root). Setting this to a non-root user such + as ``nobody'' is highly recommended if elevated permissions are not + needed. + +*SUDO_EXE* '<path>':: + Define the path to the sudo binary. Default is ``/usr/bin/sudo''. *REQUIRE_USERNAME* '<username>':: Require a specific username from the client system as encoded in the SPA diff --git a/server/access.c b/server/access.c index 5686a8da..4717e225 100644 --- a/server/access.c +++ b/server/access.c @@ -1480,6 +1480,10 @@ parse_access_file(fko_srv_options_t *opts) { add_acc_bool(&(curr_acc->enable_cmd_exec), val); } + else if(CONF_VAR_IS(var, "ENABLE_CMD_SUDO_EXEC")) + { + add_acc_bool(&(curr_acc->enable_cmd_sudo_exec), val); + } else if(CONF_VAR_IS(var, "CMD_EXEC_USER")) { if(add_acc_string(&(curr_acc->cmd_exec_user), val) != SUCCESS) @@ -1956,7 +1960,9 @@ dump_access_list(const fko_srv_options_t *opts) " HMAC_DIGEST_TYPE: %d\n" " FW_ACCESS_TIMEOUT: %i\n" " ENABLE_CMD_EXEC: %s\n" + " ENABLE_CMD_SUDO_EXEC: %s\n" " CMD_EXEC_USER: %s\n" + " CMD_EXEC_GROUP: %s\n" " REQUIRE_USERNAME: %s\n" " REQUIRE_SOURCE_ADDRESS: %s\n" " FORCE_NAT (ip): %s\n" @@ -1989,7 +1995,9 @@ dump_access_list(const fko_srv_options_t *opts) acc->hmac_type, acc->fw_access_timeout, acc->enable_cmd_exec ? "Yes" : "No", + acc->enable_cmd_sudo_exec ? "Yes" : "No", (acc->cmd_exec_user == NULL) ? "<not set>" : acc->cmd_exec_user, + (acc->cmd_exec_group == NULL) ? "<not set>" : acc->cmd_exec_group, (acc->require_username == NULL) ? "<not set>" : acc->require_username, acc->require_source_address ? "Yes" : "No", acc->force_nat ? acc->force_nat_ip : "<not set>", diff --git a/server/cmd_opts.h b/server/cmd_opts.h index d7a645cb..bda46183 100644 --- a/server/cmd_opts.h +++ b/server/cmd_opts.h @@ -126,6 +126,7 @@ static char *config_map[NUMBER_OF_CONFIG_ENTRIES] = { #endif "GPG_HOME_DIR", "GPG_EXE", + "SUDO_EXE", "FIREWALL_EXE", "VERBOSE", #if AFL_FUZZING @@ -148,6 +149,7 @@ enum { AFL_PKT_FILE, GPG_HOME_DIR, GPG_EXE_PATH, + SUDO_EXE_PATH, FIREWD_DISABLE_CHECK_SUPPORT, IPT_DISABLE_CHECK_SUPPORT, PCAP_FILE, @@ -205,6 +207,7 @@ static struct option cmd_opts[] = {"run-dir", 1, NULL, 'r'}, {"restart", 0, NULL, 'R'}, {"status", 0, NULL, 'S'}, + {"sudo-exe", 1, NULL, SUDO_EXE_PATH }, {"test", 0, NULL, 't'}, {"udp-server", 0, NULL, 'U'}, {"verbose", 0, NULL, 'v'}, diff --git a/server/config_init.c b/server/config_init.c index 2c05efcf..ca9111f9 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -864,6 +864,11 @@ validate_options(fko_srv_options_t *opts) if(opts->config[CONF_GPG_EXE] == NULL) set_config_entry(opts, CONF_GPG_EXE, DEF_GPG_EXE); + /* sudo executable + */ + if(opts->config[CONF_SUDO_EXE] == NULL) + set_config_entry(opts, CONF_SUDO_EXE, DEF_SUDO_EXE); + /* Enable SPA over HTTP. */ if(opts->config[CONF_ENABLE_SPA_OVER_HTTP] == NULL) @@ -1233,6 +1238,19 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) case FW_FLUSH: opts->fw_flush = 1; break; + case GPG_EXE_PATH: + if (is_valid_exe(optarg)) + { + set_config_entry(opts, CONF_GPG_EXE, optarg); + } + else + { + log_msg(LOG_ERR, + "[*] gpg path '%s' could not stat()/does not exist?", + optarg); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; case GPG_HOME_DIR: if (is_valid_dir(optarg)) { @@ -1241,7 +1259,7 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) else { log_msg(LOG_ERR, - "[*] Directory '%s' could not stat()/does not exist?", + "[*] gpg home directory '%s' could not stat()/does not exist?", optarg); clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index 8c33eaa0..4f3534cd 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -98,6 +98,11 @@ #else #define DEF_GPG_EXE "/usr/bin/gpg" #endif +#ifdef SUDO_EXE + #define DEF_SUDO_EXE SUDO_EXE +#else + #define DEF_SUDO_EXE "/usr/bin/sudo" +#endif #define DEF_ENABLE_SPA_OVER_HTTP "N" #define DEF_ENABLE_TCP_SERVER "N" #define DEF_TCPSERV_PORT "62201" @@ -305,6 +310,7 @@ enum { #endif CONF_GPG_HOME_DIR, CONF_GPG_EXE, + CONF_SUDO_EXE, CONF_FIREWALL_EXE, CONF_VERBOSE, #if AFL_FUZZING @@ -366,6 +372,7 @@ typedef struct acc_stanza unsigned char use_rijndael; int fw_access_timeout; unsigned char enable_cmd_exec; + unsigned char enable_cmd_sudo_exec; char *cmd_exec_user; char *cmd_exec_group; uid_t cmd_exec_uid; diff --git a/server/utils.c b/server/utils.c index ec91396d..37fce304 100644 --- a/server/utils.c +++ b/server/utils.c @@ -76,31 +76,54 @@ hex_dump(const unsigned char *data, const int size) return; } -/* Basic directory checks (stat() and whether the path is actually - * a directory). +/* Basic directory/binary checks (stat() and whether the path is actually + * a directory or an executable). */ -int -is_valid_dir(const char *path) +static int +is_valid_path(const char *path, const int file_type) { #if HAVE_STAT struct stat st; - /* If we are unable to stat the given dir, then return with error. + /* If we are unable to stat the given path, then return with error. */ if(stat(path, &st) != 0) { - log_msg(LOG_ERR, "[-] unable to stat() directory: %s: %s", + log_msg(LOG_ERR, "[-] unable to stat() path: %s: %s", path, strerror(errno)); return(0); } - if(!S_ISDIR(st.st_mode)) + if(file_type == IS_DIR) + { + if(!S_ISDIR(st.st_mode)) + return(0); + } + else if(file_type == IS_EXE) + { + if(!S_ISREG(st.st_mode) || ! (st.st_mode & S_IXUSR)) + return(0); + } + else return(0); + #endif /* HAVE_STAT */ return(1); } +int +is_valid_dir(const char *path) +{ + return is_valid_path(path, IS_DIR); +} + +int +is_valid_exe(const char *path) +{ + return is_valid_path(path, IS_EXE); +} + int verify_file_perms_ownership(const char *file) { diff --git a/server/utils.h b/server/utils.h index 3d37a45f..58fc9599 100644 --- a/server/utils.h +++ b/server/utils.h @@ -54,11 +54,15 @@ x == '#' || x == '\n' || x == '\r' || x == ';' || x == '\0' \ ) +#define IS_DIR 1 +#define IS_EXE 2 + /* Prototypes */ void hex_dump(const unsigned char *data, const int size); char* dump_ctx(fko_ctx_t ctx); int is_valid_dir(const char *path); +int is_valid_exe(const char *path); int verify_file_perms_ownership(const char *file); int strtoargv(const char * const args_str, char **argv_new, int *argc_new, const fko_srv_options_t * const opts); From 86bcf243e6bf675c478b9c8a8eb3812caa0fc7c5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 4 Jul 2015 17:03:08 -0400 Subject: [PATCH 154/219] [test suite] bug fix for iptables vs. firewalld --- test/test-fwknop.pl | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 09f6aff5..c38e2720 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -92,6 +92,7 @@ our $FW_PREFIX = 'IPT'; our $fw_conf_prefix = 'ipt'; my $prefer_iptables = 0; my $fw_bin = ''; +my $fw_bin_and_prefix = ''; our $spoof_user = 'testuser'; @@ -5451,7 +5452,7 @@ sub client_server_interaction() { } if ($test_hr->{'insert_rule_while_running'}) { - &run_cmd("iptables -A FWKNOP_INPUT -p tcp -s $fake_ip --dport 1234 -j ACCEPT", + &run_cmd("$fw_bin_and_prefix -A FWKNOP_INPUT -p tcp -s $fake_ip --dport 1234 -j ACCEPT", $cmd_out_tmp, $curr_test_file); } @@ -5461,7 +5462,7 @@ sub client_server_interaction() { my $time_prefix = '_exp_' . (time() + 2+$i); ### default timeout &write_test_file("[+] Inserting duplicate rule with expire comment: $time_prefix\n", $curr_test_file); - &run_cmd("iptables -A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + &run_cmd("$fw_bin_and_prefix -A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . "--dport 22 -m comment --comment $time_prefix -j ACCEPT", $cmd_out_tmp, $curr_test_file); } @@ -6971,15 +6972,16 @@ sub os_fw_detect() { if ($platform eq $LINUX) { if ($prefer_iptables) { - $fw_bin = &find_command('iptables'); + $fw_bin = $fw_bin_and_prefix = &find_command('iptables'); } else { $fw_bin = &find_command('firewall-cmd'); if ($fw_bin) { $FW_TYPE = 'firewalld'; $FW_PREFIX = 'FIREWD'; $fw_conf_prefix = 'firewd'; + $fw_bin_and_prefix = "$fw_bin --direct --passthrough ipv4"; } else { - $fw_bin = &find_command('iptables'); + $fw_bin = $fw_bin_and_prefix = &find_command('iptables'); } } } else { @@ -7407,18 +7409,10 @@ sub is_fw_rule_active() { if ($fw_bin and $FW_TYPE eq 'firewalld' or $FW_TYPE eq 'iptables') { ### make sure there is at least one jump rule ### 79 5304 FWKNOP_INPUT all -- * * 0.0.0.0/0 0.0.0.0/0 - if ($FW_TYPE eq 'firewalld') { - unless (&run_cmd("$fw_bin --direct --passthrough ipv4 -t filter " . - "-nL -v | grep -v Chain | grep FWKNOP_ ", $cmd_out_tmp, $curr_test_file)) { - &write_test_file("[-] No jump rule found.\n", $curr_test_file); - $rv = 0; - } - } else { - unless (&run_cmd("$fw_bin -t filter " . - "-nL -v | grep -v Chain | grep FWKNOP_ ", $cmd_out_tmp, $curr_test_file)) { - &write_test_file("[-] No jump rule found.\n", $curr_test_file); - $rv = 0; - } + unless (&run_cmd("$fw_bin_and_prefix -t filter " . + "-nL -v | grep -v Chain | grep FWKNOP_ ", $cmd_out_tmp, $curr_test_file)) { + &write_test_file("[-] No jump rule found.\n", $curr_test_file); + $rv = 0; } } From 5a58390ab4172545b59f5f7bd64bf1bd81bb4829 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 4 Jul 2015 17:12:49 -0400 Subject: [PATCH 155/219] [test suite] add dupe rule server output check --- test/tests/rijndael_hmac.pl | 1 + 1 file changed, 1 insertion(+) diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index fd80f04c..5cc9d975 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -271,6 +271,7 @@ 'fw_rule_removed' => $REQUIRE_NO_NEW_REMOVED, 'key_file' => $cf{'rc_hmac_b64_key'}, 'insert_duplicate_rule_while_running' => $YES, + 'server_positive_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], }, { From 012d1cf8884da137f21620f92045a35203eb819f Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 5 Jul 2015 20:47:06 -0400 Subject: [PATCH 156/219] [server] interim commit towards a fix for --no-ipt-check rule detection This is a significant commit for issue #162 where fwknopd is not properly detecting rules (particularly NAT rules) on systems running older versions of iptables where -C support is not offered. A new capability of searching the output of an external command and getting the first matching line was added with the search_extcmd_getline() function. --- server/extcmd.c | 43 +++++++++++++++++------- server/extcmd.h | 8 ++++- server/fw_util_iptables.c | 29 ++++++++++------- test/test-fwknop.pl | 54 +++++++++++++++++++++++------- test/tests/rijndael_hmac.pl | 65 ++++++++++++++++++++++++++++++++++++- 5 files changed, 163 insertions(+), 36 deletions(-) diff --git a/server/extcmd.c b/server/extcmd.c index ace7f842..9d4f4a15 100644 --- a/server/extcmd.c +++ b/server/extcmd.c @@ -82,7 +82,7 @@ alarm_handler(int sig) */ static int _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, - const size_t so_buf_sz, const int want_stderr, const int timeout, + const size_t so_buf_sz, const int cflag, const int timeout, const char *substr_search, int *pid_status, const fko_srv_options_t * const opts) { @@ -148,7 +148,7 @@ _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, { close(pipe_fd[0]); dup2(pipe_fd[1], STDOUT_FILENO); - if(want_stderr) + if(cflag & WANT_STDERR) dup2(pipe_fd[1], STDERR_FILENO); else close(STDERR_FILENO); @@ -191,12 +191,20 @@ _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, if(so_buf != NULL) { - strlcat(so_buf, so_read_buf, so_buf_sz); - - if(strlen(so_buf) >= so_buf_sz-1) - break; + if(cflag & WANT_STDOUT_GETLINE) + { + memset(so_buf, 0x0, so_buf_sz); + strlcpy(so_buf, so_read_buf, so_buf_sz); + } + else + { + strlcat(so_buf, so_read_buf, so_buf_sz); + if(strlen(so_buf) >= so_buf_sz-1) + break; + } } - else /* we are looking for a substring */ + + if(substr_search != NULL) /* we are looking for a substring */ { /* Get past comments and empty lines (note: we only look at the * first character). @@ -666,8 +674,8 @@ run_extcmd(const char *cmd, char *so_buf, const size_t so_buf_sz, const int want_stderr, const int timeout, int *pid_status, const fko_srv_options_t * const opts) { - return _run_extcmd(0, 0, cmd, so_buf, so_buf_sz, want_stderr, - timeout, NULL, pid_status, opts); + return _run_extcmd(ROOT_UID, ROOT_GID, cmd, so_buf, so_buf_sz, + want_stderr, timeout, NULL, pid_status, opts); } /* _run_extcmd() wrapper, run an external command as the specified user. @@ -688,8 +696,21 @@ search_extcmd(const char *cmd, const int want_stderr, const int timeout, const char *substr_search, int *pid_status, const fko_srv_options_t * const opts) { - return _run_extcmd(0, 0, cmd, NULL, 0, want_stderr, timeout, - substr_search, pid_status, opts); + return _run_extcmd(ROOT_UID, ROOT_GID, cmd, NULL, 0, want_stderr, + timeout, substr_search, pid_status, opts); +} + +/* _run_extcmd() wrapper, search command output for a substring and return + * the matching line. +*/ +int +search_extcmd_getline(const char *cmd, char *so_buf, const size_t so_buf_sz, + const int timeout, const char *substr_search, int *pid_status, + const fko_srv_options_t * const opts) +{ + return _run_extcmd(ROOT_UID, ROOT_GID, cmd, so_buf, so_buf_sz, + WANT_STDERR | WANT_STDOUT_GETLINE, timeout, substr_search, + pid_status, opts); } /* _run_extcmd_write() wrapper, run a command which is expecting input via stdin diff --git a/server/extcmd.h b/server/extcmd.h index 203de638..dca9f4b4 100644 --- a/server/extcmd.h +++ b/server/extcmd.h @@ -34,8 +34,11 @@ #define IO_READ_BUF_LEN 256 #define EXTCMD_DEF_TIMEOUT 15 #define NO_TIMEOUT 0 -#define WANT_STDERR 1 +#define WANT_STDERR 0x01 +#define WANT_STDOUT_GETLINE 0x02 #define NO_STDERR 0 +#define ROOT_UID 0 +#define ROOT_GID 0 /* The various return status states in which an external command result * may end up in. @@ -88,6 +91,9 @@ int run_extcmd_as(uid_t uid, gid_t gid, const char *cmd, char *so_buf, int search_extcmd(const char *cmd, const int want_stderr, const int timeout, const char *substr_search, int *pid_status, const fko_srv_options_t * const opts); +int search_extcmd_getline(const char *cmd, char *so_buf, const size_t so_buf_sz, + const int timeout, const char *substr_search, int *pid_status, + const fko_srv_options_t * const opts); int run_extcmd_write(const char *cmd, const char *cmd_write, int *pid_status, const fko_srv_options_t * const opts); #endif /* EXTCMD_H */ diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 328e839e..89b65177 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -75,6 +75,7 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, { int rule_exists=0; char cmd_buf[CMD_BUFSIZE] = {0}; + char ipt_line_buf[CMD_BUFSIZE] = {0}; char target_search[CMD_BUFSIZE] = {0}; char proto_search[CMD_BUFSIZE] = {0}; char srcip_search[CMD_BUFSIZE] = {0}; @@ -108,7 +109,7 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, else snprintf(proto_search, CMD_BUFSIZE-1, " %u ", proto); - snprintf(port_search, CMD_BUFSIZE-1, ":%u ", port); + snprintf(port_search, CMD_BUFSIZE-1, "dpt:%u ", port); snprintf(target_search, CMD_BUFSIZE-1, " %s ", fwc->target); snprintf(srcip_search, CMD_BUFSIZE-1, " %s ", srcip); if (dstip != NULL) @@ -117,20 +118,24 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, } snprintf(exp_ts_search, CMD_BUFSIZE-1, "%u ", exp_ts); - /* search for each of the substrings - yes, matches from different - * rules may get triggered here, but the expiration time is the + /* search for each of the substrings - the rule expiration time is the * primary search method */ - if(search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, exp_ts_search, &pid_status, opts) - && (proto == ANY_PROTO) ? 1 : - search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, proto_search, &pid_status, opts) - && search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, srcip_search, &pid_status, opts) - && (dstip == NULL) ? 1 : - search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, dstip_search, &pid_status, opts) - && search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, target_search, &pid_status, opts) - && (port == ANY_PORT) ? 1 : - search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, port_search, &pid_status, opts)) + if(search_extcmd_getline(cmd_buf, ipt_line_buf, + CMD_BUFSIZE, NO_TIMEOUT, exp_ts_search, &pid_status, opts) + /* we have an iptables policy rule that matches the + * expiration time, so make sure this rule matches the + * other fields too. If not, then it is for different + * access requested by a separate SPA packet. + */ + && ((proto == ANY_PROTO) ? 1 : (strstr(ipt_line_buf, proto_search) != NULL)) + && (strstr(ipt_line_buf, srcip_search) != NULL) + && ((dstip == NULL) ? 1 : (strstr(ipt_line_buf, dstip_search) != NULL)) + && (strstr(ipt_line_buf, target_search) != NULL) + && ((port == ANY_PORT) ? 1 : (strstr(ipt_line_buf, port_search) != NULL))) + { rule_exists = 1; + } if(rule_exists) log_msg(LOG_DEBUG, diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index c38e2720..072b7a60 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -904,6 +904,7 @@ my %test_keys = ( 'insert_rule_before_exec' => $OPTIONAL, 'insert_rule_while_running' => $OPTIONAL, 'insert_duplicate_rule_while_running' => $OPTIONAL, + 'fw_dupe_rule_args' => $OPTIONAL, 'weak_server_receive_check' => $OPTIONAL, 'search_for_rule_after_exit' => $OPTIONAL, 'rc_positive_output_matches' => $OPTIONAL, @@ -5457,13 +5458,37 @@ sub client_server_interaction() { } if ($test_hr->{'insert_duplicate_rule_while_running'}) { - ### insert duplicate rules - guess that this is for SSH - for (my $i=0; $i < 4; $i++) { - my $time_prefix = '_exp_' . (time() + 2+$i); ### default timeout - &write_test_file("[+] Inserting duplicate rule with expire comment: $time_prefix\n", + ### insert duplicate rules + my ($prv, $lib_path, $fwknopd_conf, $access_conf) + = &parse_fwknopd_cmdline($test_hr); + if ($prv) { + &write_test_file("[+] Policy before inserting duplicate rules:\n", $curr_test_file); - &run_cmd("$fw_bin_and_prefix -A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . - "--dport 22 -m comment --comment $time_prefix -j ACCEPT", + &run_cmd("LD_LIBRARY_PATH=$lib_path $fwknopdCmd -c " . + "$fwknopd_conf -a $access_conf --fw-list", + $cmd_out_tmp, $curr_test_file); + for (my $i=0; $i < 4; $i++) { + my $time_prefix = '_exp_' . (time() + 2+$i); ### default timeout + &write_test_file("[+] Inserting duplicate rule with expire comment: $time_prefix\n", + $curr_test_file); + if ($test_hr->{'fw_dupe_rule_args'}) { + my $fw_args = $test_hr->{'fw_dupe_rule_args'}; + if ($fw_args =~ /EXP_TIME/) { + $fw_args =~ s/EXP_TIME/$time_prefix/; + } + &run_cmd("$fw_bin_and_prefix $fw_args", + $cmd_out_tmp, $curr_test_file); + } else { + ### assume SSH + &run_cmd("$fw_bin_and_prefix -A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment $time_prefix -j ACCEPT", + $cmd_out_tmp, $curr_test_file); + } + } + &write_test_file("[+] Policy after inserting duplicate rules:\n", + $curr_test_file); + &run_cmd("LD_LIBRARY_PATH=$lib_path $fwknopdCmd -c " . + "$fwknopd_conf -a $access_conf --fw-list", $cmd_out_tmp, $curr_test_file); } } @@ -5672,11 +5697,9 @@ sub iptables_rm_chains() { ### this deletes fwknop chains out from under the running fwknopd ### instance (tests whether it is able to recover with ### chain_exists(), etc.) - if ($test_hr->{'fwknopd_cmdline'} - =~ /LD_LIBRARY_PATH=(\S+)\s.*\s\-c\s(\S+)\s\-a\s(\S+)/) { - my $lib_path = $1; - my $fwknopd_conf = $2; - my $access_conf = $3; + my ($prv, $lib_path, $fwknopd_conf, $access_conf) + = &parse_fwknopd_cmdline($test_hr); + if ($prv) { &write_test_file("[+] fwknopd iptables policy before flush:\n", $curr_test_file); &run_cmd("LD_LIBRARY_PATH=$lib_path $fwknopdCmd -c " . @@ -5694,6 +5717,15 @@ sub iptables_rm_chains() { return; } +sub parse_fwknopd_cmdline() { + my $test_hr = shift; + if ($test_hr->{'fwknopd_cmdline'} + =~ /LD_LIBRARY_PATH=(\S+)\s.*\s\-c\s(\S+)\s\-a\s(\S+)/) { + return 1, $1, $2, $3; + } + return 0, '', '', ''; +} + sub get_spa_packet_from_file() { my $file = shift; diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index 5cc9d975..a2240a4c 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -244,6 +244,28 @@ 'fw_rule_removed' => $REQUIRE_NO_NEW_REMOVED, 'key_file' => $cf{'rc_hmac_b64_key'}, 'insert_duplicate_rule_while_running' => $YES, + 'fw_dupe_rule_args' => "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment EXP_TIME -j ACCEPT", + 'server_positive_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => '--ipt-no-check non-matching dupe rule', + 'function' => \&spa_cycle, + 'cmdline' => $default_client_hmac_args, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . + "-d $default_digest_file -p $default_pid_file " . + "$intf_str --no-ipt-check-support --no-firewd-check-support", + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $REQUIRE_NO_NEW_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'insert_duplicate_rule_while_running' => $YES, + ### port 1234 builds a non-matching rule, so it isn't actually + ### a duplicate - require a negative server match + 'fw_dupe_rule_args' => "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + "--dport 1234 -m comment --comment EXP_TIME -j ACCEPT", + 'server_negative_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], }, { @@ -271,7 +293,6 @@ 'fw_rule_removed' => $REQUIRE_NO_NEW_REMOVED, 'key_file' => $cf{'rc_hmac_b64_key'}, 'insert_duplicate_rule_while_running' => $YES, - 'server_positive_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], }, { @@ -1349,6 +1370,48 @@ 'key_file' => $cf{'rc_hmac_b64_key'}, 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "NAT to $internal_nat_host --no-ipt-check", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + "$cf{'rc_hmac_b64_key'} -N $internal_nat_host:22", + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'hmac_open_ports_access'} / . + "-d $default_digest_file -p $default_pid_file " . + "$intf_str --no-ipt-check-support --no-firewd-check-support", + 'server_positive_output_matches' => [ + qr/FWKNOP_FORWARD\s.*dport\s22\s/, + qr/\*\/\sto\:$internal_nat_host\:22/i], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "NAT $internal_nat_host --no-ipt-check dupe", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + "$cf{'rc_hmac_b64_key'} -N $internal_nat_host:22", + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'hmac_open_ports_access'} / . + "-d $default_digest_file -p $default_pid_file " . + "$intf_str --no-ipt-check-support --no-firewd-check-support", + 'server_positive_output_matches' => [ + qr/FWKNOP_FORWARD\s.*dport\s22\s/, + qr/\*\/\sto\:$internal_nat_host\:22/i], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, + 'insert_duplicate_rule_while_running' => $YES, + 'fw_dupe_rule_args' => "-A FWKNOP_PREROUTING -t nat -p 6 -s 127.0.0.2 -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment EXP_TIME -j DNAT " . + "--to-destination 192.168.1.2:22", + 'server_positive_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', From 4874dc9c83823b216479524fd1fcefd96e99e282 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 5 Jul 2015 22:55:23 -0400 Subject: [PATCH 157/219] [test suite] add --gpg-exe invalid path test --- test/tests/basic_operations.pl | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index 76a509d9..a2246581 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -407,6 +407,15 @@ 'exec_err' => $YES, 'cmdline' => "$default_client_args_no_get_key --gpg-encryption", }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => 'GPG invalid binary path', + 'function' => \&generic_exec, + 'exec_err' => $YES, + 'cmdline' => "$fwknopdCmd $default_server_conf_args --gpg-exe /invalid/path" + }, + { 'category' => 'basic operations', 'subcategory' => 'client', From 5460509f8807304aca16de6ea80c02119fd92546 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 7 Jul 2015 08:28:16 -0400 Subject: [PATCH 158/219] [server] add NAT rule existence detection for --no-ipt-check support (issue #162) --- server/fw_util_iptables.c | 173 ++++++++++++++++++++++++-------------- server/fw_util_iptables.h | 1 + server/utils.c | 8 ++ server/utils.h | 1 + 4 files changed, 122 insertions(+), 61 deletions(-) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 89b65177..6fa4336e 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -59,29 +59,29 @@ zero_cmd_buffers(void) static int pid_status = 0; -static void -chop_newline(char *str) -{ - if(str[0] != 0x0 && str[strlen(str)-1] == 0x0a) - str[strlen(str)-1] = 0x0; - return; -} - static int rule_exists_no_chk_support(const fko_srv_options_t * const opts, - const struct fw_chain * const fwc, const unsigned int proto, - const char * const srcip, const char * const dstip, - const unsigned int port, const unsigned int exp_ts) + const struct fw_chain * const fwc, + const unsigned int proto, + const char * const srcip, + const char * const dstip, + const unsigned int port, + const char * const natip, + const unsigned int nat_port, + const unsigned int exp_ts) { int rule_exists=0; - char cmd_buf[CMD_BUFSIZE] = {0}; - char ipt_line_buf[CMD_BUFSIZE] = {0}; - char target_search[CMD_BUFSIZE] = {0}; - char proto_search[CMD_BUFSIZE] = {0}; - char srcip_search[CMD_BUFSIZE] = {0}; - char dstip_search[CMD_BUFSIZE] = {0}; - char port_search[CMD_BUFSIZE] = {0}; - char exp_ts_search[CMD_BUFSIZE] = {0}; + char cmd_buf[CMD_BUFSIZE] = {0}; + char ipt_line_buf[CMD_BUFSIZE] = {0}; + char target_search[CMD_BUFSIZE] = {0}; + char proto_search[CMD_BUFSIZE] = {0}; + char srcip_search[CMD_BUFSIZE] = {0}; + char dstip_search[CMD_BUFSIZE] = {0}; + char natip_search[CMD_BUFSIZE] = {0}; + char port_search[CMD_BUFSIZE] = {0}; + char nat_port_search[CMD_BUFSIZE] = {0}; + char exp_ts_search[CMD_BUFSIZE] = {0}; + char *ndx = NULL; #if CODE_COVERAGE int pid_status = 0; @@ -110,31 +110,69 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, snprintf(proto_search, CMD_BUFSIZE-1, " %u ", proto); snprintf(port_search, CMD_BUFSIZE-1, "dpt:%u ", port); + snprintf(nat_port_search, CMD_BUFSIZE-1, ":%u", nat_port); snprintf(target_search, CMD_BUFSIZE-1, " %s ", fwc->target); - snprintf(srcip_search, CMD_BUFSIZE-1, " %s ", srcip); + + if (srcip != NULL) + snprintf(srcip_search, CMD_BUFSIZE-1, " %s ", srcip); + if (dstip != NULL) - { snprintf(dstip_search, CMD_BUFSIZE-1, " %s ", dstip); - } + + if (natip != NULL) + snprintf(dstip_search, CMD_BUFSIZE-1, " to:%s", natip); + snprintf(exp_ts_search, CMD_BUFSIZE-1, "%u ", exp_ts); /* search for each of the substrings - the rule expiration time is the * primary search method */ if(search_extcmd_getline(cmd_buf, ipt_line_buf, - CMD_BUFSIZE, NO_TIMEOUT, exp_ts_search, &pid_status, opts) - /* we have an iptables policy rule that matches the - * expiration time, so make sure this rule matches the - * other fields too. If not, then it is for different - * access requested by a separate SPA packet. - */ - && ((proto == ANY_PROTO) ? 1 : (strstr(ipt_line_buf, proto_search) != NULL)) - && (strstr(ipt_line_buf, srcip_search) != NULL) + CMD_BUFSIZE, NO_TIMEOUT, exp_ts_search, &pid_status, opts)) + { + chop_newline(ipt_line_buf); + /* we have an iptables policy rule that matches the + * expiration time, so make sure this rule matches the + * other fields too. If not, then it is for different + * access requested by a separate SPA packet. + */ + if(((proto == ANY_PROTO) ? 1 : (strstr(ipt_line_buf, proto_search) != NULL)) + && ((srcip == NULL) ? 1 : (strstr(ipt_line_buf, srcip_search) != NULL)) && ((dstip == NULL) ? 1 : (strstr(ipt_line_buf, dstip_search) != NULL)) + && ((natip == NULL) ? 1 : (strstr(ipt_line_buf, natip_search) != NULL)) && (strstr(ipt_line_buf, target_search) != NULL) && ((port == ANY_PORT) ? 1 : (strstr(ipt_line_buf, port_search) != NULL))) + { + rule_exists = 1; + } + } + + /* If there is a nat port, we have to qualify it as part + * of the 'to:<ip>:<port>' portion of the rule (at the end) + */ + if(rule_exists && nat_port != NAT_ANY_PORT) { - rule_exists = 1; + ndx = strstr(ipt_line_buf, " to:"); + /* Make sure there isn't a duplicate " to:" string (i.e. if someone + * was trying to be tricky with the iptables comment match). + */ + if(ndx != NULL && (strstr((ndx+strlen(" to:")), " to:") == NULL)) + { + ndx = strstr((ndx+strlen(" to:")), nat_port_search); + if (ndx == NULL) + { + rule_exists = 0; + } + else if((*(ndx+strlen(nat_port_search)) != '\0') + && (*(ndx+strlen(nat_port_search)) != ' ')) + { + rule_exists = 0; + } + } + else + { + rule_exists = 0; + } } if(rule_exists) @@ -185,9 +223,14 @@ rule_exists_chk_support(const fko_srv_options_t * const opts, static int rule_exists(const fko_srv_options_t * const opts, - const struct fw_chain * const fwc, const char * const rule, - const unsigned int proto, const char * const srcip, - const char * const dstip, const unsigned int port, + const struct fw_chain * const fwc, + const char * const rule, + const unsigned int proto, + const char * const srcip, + const char * const dstip, + const unsigned int port, + const char * const nat_ip, + const unsigned int nat_port, const unsigned int exp_ts) { int rule_exists = 0; @@ -196,7 +239,8 @@ rule_exists(const fko_srv_options_t * const opts, rule_exists = rule_exists_chk_support(opts, fwc->to_chain, rule); else rule_exists = rule_exists_no_chk_support(opts, fwc, proto, srcip, - (opts->fw_config->use_destination ? dstip : NULL), port, exp_ts); + (opts->fw_config->use_destination ? dstip : NULL), port, + nat_ip, nat_port, exp_ts); if(rule_exists == 1) log_msg(LOG_DEBUG, "rule_exists() Rule : '%s' in %s already exists", @@ -435,7 +479,8 @@ jump_rule_exists_chk_support(const fko_srv_options_t * const opts, const int cha } static int -jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, const int chain_num) +jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, + const int chain_num) { int exists = 0; char cmd_buf[CMD_BUFSIZE] = {0}; @@ -962,11 +1007,17 @@ static void ipt_rule(const fko_srv_options_t * const opts, const char * const complete_rule_buf, const char * const fw_rule_macro, - const char * const srcip, const char * const dstip, - const unsigned int proto, const unsigned int port, + const char * const srcip, + const char * const dstip, + const unsigned int proto, + const unsigned int port, + const char * const nat_ip, + const unsigned int nat_port, struct fw_chain * const chain, - const unsigned int exp_ts, const time_t now, - const char * const msg, const char * const access_msg) + const unsigned int exp_ts, + const time_t now, + const char * const msg, + const char * const access_msg) { char rule_buf[CMD_BUFSIZE] = {0}; @@ -989,12 +1040,12 @@ ipt_rule(const fko_srv_options_t * const opts, ); } - /* Check to make sure that the chain and jump rule exists + /* Check to make sure that the chain and jump rule exist */ mk_chain(opts, chain->type); - if(rule_exists(opts, chain, rule_buf, - proto, srcip, dstip, port, exp_ts) == 0) + if(rule_exists(opts, chain, rule_buf, proto, srcip, + dstip, port, nat_ip, nat_port, exp_ts) == 0) { if(create_rule(opts, chain->to_chain, rule_buf)) { @@ -1047,17 +1098,16 @@ static void forward_access_rule(const fko_srv_options_t * const opts, /* Make a global ACCEPT rule for all ports/protocols */ ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, - "FORWARD ALL", "*/*"); + NULL, ANY_PROTO, ANY_PORT, NULL, NAT_ANY_PORT, + fwd_chain, exp_ts, now, "FORWARD ALL", "*/*"); } else { /* Make the FORWARD access rule */ ipt_rule(opts, NULL, IPT_FWD_RULE_ARGS, spadat->use_src_ip, - nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, - "FORWARD", spadat->spa_message_remain); - + nat_ip, fst_proto, nat_port, NULL, NAT_ANY_PORT, + fwd_chain, exp_ts, now, "FORWARD", spadat->spa_message_remain); } return; } @@ -1094,8 +1144,8 @@ static void dnat_rule(const fko_srv_options_t * const opts, /* Make a global DNAT rule for all ports/protocols */ ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, dnat_chain, exp_ts, now, - "DNAT ALL", "*/*"); + NULL, ANY_PROTO, ANY_PORT, NULL, NAT_ANY_PORT, + dnat_chain, exp_ts, now, "DNAT ALL", "*/*"); } else { @@ -1115,8 +1165,8 @@ static void dnat_rule(const fko_srv_options_t * const opts, ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - fst_proto, fst_port, dnat_chain, exp_ts, now, "DNAT", - spadat->spa_message_remain); + fst_proto, fst_port, nat_ip, nat_port, dnat_chain, exp_ts, now, + "DNAT", spadat->spa_message_remain); } return; } @@ -1176,8 +1226,8 @@ static void snat_rule(const fko_srv_options_t * const opts, ); ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, snat_chain, exp_ts, now, - "SNAT ALL", "*/*"); + NULL, ANY_PROTO, ANY_PORT, NULL, NAT_ANY_PORT, + snat_chain, exp_ts, now, "SNAT ALL", "*/*"); } else { @@ -1227,7 +1277,8 @@ static void snat_rule(const fko_srv_options_t * const opts, ); ipt_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, fst_proto, nat_port, snat_chain, exp_ts, now, "SNAT", + NULL, fst_proto, nat_port, nat_ip, nat_port, + snat_chain, exp_ts, now, "SNAT", spadat->spa_message_remain); } return; @@ -1328,8 +1379,8 @@ process_spa_request(const fko_srv_options_t * const opts, { ipt_rule(opts, NULL, IPT_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - fst_proto, nat_port, in_chain, exp_ts, now, "local NAT", - spadat->spa_message_remain); + fst_proto, nat_port, nat_ip, nat_port, in_chain, exp_ts, + now, "local NAT", spadat->spa_message_remain); } else if(strlen(fwd_chain->to_chain)) { @@ -1359,8 +1410,8 @@ process_spa_request(const fko_srv_options_t * const opts, { ipt_rule(opts, NULL, IPT_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - ple->proto, ple->port, in_chain, exp_ts, now, "access", - spadat->spa_message_remain); + ple->proto, ple->port, NULL, NAT_ANY_PORT, + in_chain, exp_ts, now, "access", spadat->spa_message_remain); /* We need to make a corresponding OUTPUT rule if out_chain target * is not NULL. @@ -1369,8 +1420,8 @@ process_spa_request(const fko_srv_options_t * const opts, { ipt_rule(opts, NULL, IPT_OUT_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : IPT_ANY_IP), - ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", - spadat->spa_message_remain); + ple->proto, ple->port, NULL, NAT_ANY_PORT, + out_chain, exp_ts, now, "OUTPUT", spadat->spa_message_remain); } ple = ple->next; } diff --git a/server/fw_util_iptables.h b/server/fw_util_iptables.h index 223c4d1b..67f39e35 100644 --- a/server/fw_util_iptables.h +++ b/server/fw_util_iptables.h @@ -64,6 +64,7 @@ #define IPT_LIST_RULES_ARGS "-t %s -L %s --line-numbers -n" SH_REDIR #define IPT_LIST_ALL_RULES_ARGS "-t %s -v -n -L --line-numbers" SH_REDIR #define IPT_ANY_IP "0.0.0.0/0" +#define IPT_NAT_ANY_IP IPT_ANY_IP int validate_ipt_chain_conf(const char * const chain_str); diff --git a/server/utils.c b/server/utils.c index 37fce304..70d95427 100644 --- a/server/utils.c +++ b/server/utils.c @@ -186,6 +186,14 @@ verify_file_perms_ownership(const char *file) return 1; } +void +chop_newline(char *str) +{ + if(str != NULL && str[0] != 0x0 && str[strlen(str)-1] == 0x0a) + str[strlen(str)-1] = 0x0; + return; +} + static int add_argv(char **argv_new, int *argc_new, const char *new_arg, const fko_srv_options_t * const opts) diff --git a/server/utils.h b/server/utils.h index 58fc9599..7f1a2a49 100644 --- a/server/utils.h +++ b/server/utils.h @@ -64,6 +64,7 @@ char* dump_ctx(fko_ctx_t ctx); int is_valid_dir(const char *path); int is_valid_exe(const char *path); int verify_file_perms_ownership(const char *file); +void chop_newline(char *str); int strtoargv(const char * const args_str, char **argv_new, int *argc_new, const fko_srv_options_t * const opts); void free_argv(char **argv_new, int *argc_new); From cd18570f717bf671453db9e8afc8302edf4fad6d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 10 Jul 2015 22:45:44 -0400 Subject: [PATCH 159/219] [server] default to not returning partial line when collecting the output of an external command --- server/extcmd.c | 104 ++++++++++++++++++++++++++---------------------- server/extcmd.h | 1 + server/utils.c | 32 +++++++++++++++ server/utils.h | 1 + 4 files changed, 90 insertions(+), 48 deletions(-) diff --git a/server/extcmd.c b/server/extcmd.c index 9d4f4a15..83ed3452 100644 --- a/server/extcmd.c +++ b/server/extcmd.c @@ -74,6 +74,42 @@ alarm_handler(int sig) } */ +static void +copy_or_search(char *so_read_buf, char *so_buf, const size_t so_buf_sz, + const char *substr_search, const int cflag, int *found_str, + int *do_break) +{ + if(so_buf != NULL) + { + if(cflag & WANT_STDOUT_GETLINE) + { + memset(so_buf, 0x0, so_buf_sz); + strlcpy(so_buf, so_read_buf, so_buf_sz); + } + else + { + strlcat(so_buf, so_read_buf, so_buf_sz); + if(strlen(so_buf) >= so_buf_sz-1) + *do_break = 1; + } + } + + if(substr_search != NULL) /* we are looking for a substring */ + { + /* Search the current line in so_read_buf instead of + * so_buf (which may contain a partial line at the + * end at this point). + */ + if(!IS_EMPTY_LINE(so_read_buf[0]) + && strstr(so_read_buf, substr_search) != NULL) + { + *found_str = 1; + *do_break = 1; + } + } + return; +} + /* Run an external command returning exit status, and optionally filling * provided buffer with STDOUT output up to the size provided. * @@ -90,7 +126,7 @@ _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, pid_t pid=0; FILE *output; int retval = EXTCMD_SUCCESS_ALL_OUTPUT; - int line_ctr = 0, found_str = 0; + int line_ctr = 0, found_str = 0, do_break = 0; char *argv_new[MAX_CMDLINE_ARGS]; /* for validation and/or execvpe() */ int argc_new=0; @@ -189,37 +225,18 @@ _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, { line_ctr++; - if(so_buf != NULL) - { - if(cflag & WANT_STDOUT_GETLINE) - { - memset(so_buf, 0x0, so_buf_sz); - strlcpy(so_buf, so_read_buf, so_buf_sz); - } - else - { - strlcat(so_buf, so_read_buf, so_buf_sz); - if(strlen(so_buf) >= so_buf_sz-1) - break; - } - } + copy_or_search(so_read_buf, so_buf, so_buf_sz, + substr_search, cflag, &found_str, &do_break); - if(substr_search != NULL) /* we are looking for a substring */ - { - /* Get past comments and empty lines (note: we only look at the - * first character). - */ - if(IS_EMPTY_LINE(so_read_buf[0])) - continue; - - if(strstr(so_read_buf, substr_search) != NULL) - { - found_str = 1; - break; - } - } + if(do_break) + break; } fclose(output); + + /* Make sure we only have complete lines + */ + if(!(cflag & ALLOW_PARTIAL_LINES)) + truncate_partial_line(so_buf); } else { @@ -293,28 +310,19 @@ _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, while((fgets(so_read_buf, IO_READ_BUF_LEN, output)) != NULL) { line_ctr++; - if(so_buf != NULL) - { - strlcat(so_buf, so_read_buf, so_buf_sz); - if(strlen(so_buf) >= so_buf_sz-1) - break; - } - else /* we are looking for a substring */ - { - /* Get past comments and empty lines (note: we only look at the - * first character). - */ - if(IS_EMPTY_LINE(so_read_buf[0])) - continue; - if(strstr(so_read_buf, substr_search) != NULL) - { - found_str = 1; - break; - } - } + copy_or_search(so_read_buf, so_buf, so_buf_sz, + substr_search, cflag, &found_str, &do_break); + + if(do_break) + break; } pclose(output); + + /* Make sure we only have complete lines + */ + if(!(cflag & ALLOW_PARTIAL_LINES)) + truncate_partial_line(so_buf); } } diff --git a/server/extcmd.h b/server/extcmd.h index dca9f4b4..988be7b8 100644 --- a/server/extcmd.h +++ b/server/extcmd.h @@ -36,6 +36,7 @@ #define NO_TIMEOUT 0 #define WANT_STDERR 0x01 #define WANT_STDOUT_GETLINE 0x02 +#define ALLOW_PARTIAL_LINES 0x04 #define NO_STDERR 0 #define ROOT_UID 0 #define ROOT_GID 0 diff --git a/server/utils.c b/server/utils.c index 70d95427..a44cccf3 100644 --- a/server/utils.c +++ b/server/utils.c @@ -194,6 +194,38 @@ chop_newline(char *str) return; } +void +truncate_partial_line(char *str) +{ + int i, have_newline=0; + + if(str != NULL && str[0] != 0x0) + { + for (i=0; i < strlen(str); i++) + { + if(str[i] == 0x0a) + { + have_newline = 1; + break; + } + } + + /* Don't zero out any data unless there is at least + * one newline + */ + if(have_newline) + { + for (i=strlen(str)-1; i > 0; i--) + { + if(str[i] == 0x0a) + break; + str[i] = 0x0; + } + } + } + return; +} + static int add_argv(char **argv_new, int *argc_new, const char *new_arg, const fko_srv_options_t * const opts) diff --git a/server/utils.h b/server/utils.h index 7f1a2a49..4545d9af 100644 --- a/server/utils.h +++ b/server/utils.h @@ -65,6 +65,7 @@ int is_valid_dir(const char *path); int is_valid_exe(const char *path); int verify_file_perms_ownership(const char *file); void chop_newline(char *str); +void truncate_partial_line(char *str); int strtoargv(const char * const args_str, char **argv_new, int *argc_new, const fko_srv_options_t * const opts); void free_argv(char **argv_new, int *argc_new); From 416023723f011da6e7647a2023695648b8eb0aa8 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 11 Jul 2015 21:28:56 -0400 Subject: [PATCH 160/219] minor #define addition --- common/common.h | 1 + 1 file changed, 1 insertion(+) diff --git a/common/common.h b/common/common.h index c7b2e573..37291360 100644 --- a/common/common.h +++ b/common/common.h @@ -147,6 +147,7 @@ enum { #define MIN_HIGH_PORT 10000 /* sensible minimum for SPA dest port */ #define ANY_PORT 0 /* used as a wildcard */ #define ANY_PROTO 0 /* used as a wildcard */ +#define NAT_ANY_PORT ANY_PORT #define MAX_SERVER_STR_LEN 50 #define MAX_ICMP_TYPE 40 #define MAX_ICMP_CODE 15 From f4f2ada1c086a5f8a72845e3001471b8e620198e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Jul 2015 20:36:06 -0400 Subject: [PATCH 161/219] [server] bug fix to not zero the wrong buffer for iptables rule deletion This commit fixes a bug where zero_cmd_buffers() was being called against the wrong buffer as SPA rules were supposed to be deleted. Although multiple iterations of check_firewall_rules() would have compensated, some rules would not have been deleted as quickly as they should have in multi-rule scenarios. --- server/fw_util_iptables.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 6fa4336e..5d9b9f1e 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1443,6 +1443,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) char exp_str[12] = {0}; char rule_num_str[6] = {0}; char *ndx, *rn_start, *rn_end, *tmp_mark; + char ipt_output_buf[STANDARD_CMD_OUT_BUFSIZE] = {0}; int i, res, rn_offset, rule_num, is_err; time_t now, rule_exp, min_exp = 0; @@ -1462,6 +1463,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) continue; zero_cmd_buffers(); + memset(ipt_output_buf, 0x0, STANDARD_CMD_OUT_BUFSIZE); rn_offset = 0; @@ -1474,22 +1476,23 @@ check_firewall_rules(const fko_srv_options_t * const opts) ch[i].to_chain ); - res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE, + res = run_extcmd(cmd_buf, ipt_output_buf, STANDARD_CMD_OUT_BUFSIZE, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); - chop_newline(cmd_out); + chop_newline(ipt_output_buf); - log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)", - cmd_buf, res, cmd_out); + log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, ipt_output_buf: %s)", + cmd_buf, res, ipt_output_buf); if(!EXTCMD_IS_SUCCESS(res)) { - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); + log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, ipt_output_buf); continue; } - log_msg(LOG_DEBUG, "RES=%i, CMD_BUF: %s\nRULES LIST: %s", res, cmd_buf, cmd_out); + log_msg(LOG_DEBUG, "RES=%i, CMD_BUF: %s\nRULES LIST: %s", + res, cmd_buf, ipt_output_buf); - ndx = strstr(cmd_out, EXPIRE_COMMENT_PREFIX); + ndx = strstr(ipt_output_buf, EXPIRE_COMMENT_PREFIX); if(ndx == NULL) { /* we did not find an expected rule. @@ -1523,7 +1526,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) /* Backtrack and get the rule number and delete it. */ rn_start = ndx; - while(--rn_start > cmd_out) + while(--rn_start > ipt_output_buf) { if(*rn_start == '\n') break; From bb90a0cb2e6b888b6ba0cc56cce30266b807597b Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Jul 2015 20:57:09 -0400 Subject: [PATCH 162/219] [server] minor comment addition --- server/fw_util_iptables.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 5d9b9f1e..d8c4a965 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1583,7 +1583,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) opts->fw_config->fw_command, ch[i].table, ch[i].to_chain, - rule_num - rn_offset + rule_num - rn_offset /* account for previously deleted rule */ ); res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, From 41b137611fa49a81dd7d13aba3c7ae8696fb15e7 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 12 Jul 2015 22:50:06 -0400 Subject: [PATCH 163/219] [test suite] validate multiple rules removed in a single check_firewall_rules() pass - validates f4f2ada1 --- test/test-fwknop.pl | 10 ++++++++-- test/tests/rijndael_hmac.pl | 27 +++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 072b7a60..b8efc26f 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -910,6 +910,7 @@ my %test_keys = ( 'rc_positive_output_matches' => $OPTIONAL, 'rc_negative_output_matches' => $OPTIONAL, 'mv_and_restore_replay_cache' => $OPTIONAL, + 'relax_receive_cycle_num_check' => $OPTIONAL, 'client_positive_output_matches' => $OPTIONAL, 'client_negative_output_matches' => $OPTIONAL, 'server_positive_output_matches' => $OPTIONAL, @@ -2441,8 +2442,13 @@ sub _client_send_spa_packet() { $rv = 0 unless &run_cmd($test_hr->{'cmdline'}, $cmd_out_tmp, $curr_test_file); - $rv = 0 unless &file_find_num_matches(qr/Final\sSPA\sData/, - $NO_APPEND_RESULTS, $curr_test_file) == $cycle_ctr+1; + if ($test_hr->{'relax_receive_cycle_num_check'}) { + $rv = 0 unless &file_find_regex([qr/Final\sSPA\sData/], + $MATCH_ALL, $NO_APPEND_RESULTS, $curr_test_file); + } else { + $rv = 0 unless &file_find_num_matches(qr/Final\sSPA\sData/, + $NO_APPEND_RESULTS, $curr_test_file) == $cycle_ctr+1; + } last if $server_receive_check == $NO_SERVER_RECEIVE_CHECK; if ($test_hr->{'client_pkt_tries'} > 0) { diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index a2240a4c..16cbcf4d 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -662,6 +662,33 @@ 'fw_rule_removed' => $NEW_RULE_REMOVED, 'key_file' => $cf{'rc_hmac_b64_key'}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => 'multiple client invocations (1)', + 'function' => \&spa_cycle, + 'cmdline' => "LD_LIBRARY_PATH=$lib_dir " . + "$fwknopCmd -A tcp/22 -a $fake_ip -D $loopback_ip --rc-file " . + "$cf{'rc_hmac_b64_key'} $verbose_str " . + "&& LD_LIBRARY_PATH=$lib_dir " . + "$fwknopCmd -A tcp/23 -a $fake_ip -D $loopback_ip --rc-file " . + "$cf{'rc_hmac_b64_key'} $verbose_str " . + "&& LD_LIBRARY_PATH=$lib_dir " . + "$fwknopCmd -A tcp/24 -a $fake_ip -D $loopback_ip --rc-file " . + "$cf{'rc_hmac_b64_key'} $verbose_str", + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/Removed\srule\s1/, + qr/Removed\srule\s2/, + qr/Removed\srule\s3/, + ], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'relax_receive_cycle_num_check' => $YES, ### multiple SPA packets involved + 'weak_server_receive_check' => $YES, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', From ef9498f7834d0df8e230f3ef9f2640b65fd3248a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 13 Jul 2015 21:29:16 -0400 Subject: [PATCH 164/219] [server] Implement garbage cleanup mode for rule deletion This is a significant commit that allows fwknopd to delete expired rules from the firewall policy regardless of whether fwknopd is tracking them. That is, a third party program could insert rules into the fwknopd chains (iptables for now, but this will be extended to the other firewalls) in order to take advantage of fwknopd rule deletion. --- server/fw_util.h | 3 +- server/fw_util_iptables.c | 289 +++++++++++++++++++++----------------- server/fwknopd_common.h | 7 + server/pcap_capture.c | 12 +- server/udp_server.c | 13 +- 5 files changed, 188 insertions(+), 136 deletions(-) diff --git a/server/fw_util.h b/server/fw_util.h index 4e737313..60f6c044 100644 --- a/server/fw_util.h +++ b/server/fw_util.h @@ -66,7 +66,8 @@ int fw_config_init(fko_srv_options_t * const opts); int fw_initialize(const fko_srv_options_t * const opts); int fw_cleanup(const fko_srv_options_t * const opts); -void check_firewall_rules(const fko_srv_options_t * const opts); +void check_firewall_rules(const fko_srv_options_t * const opts, + const int chk_rm_all); int fw_dump_rules(const fko_srv_options_t * const opts); int process_spa_request(const fko_srv_options_t * const opts, const acc_stanza_t * const acc, spa_data_t * const spadat); diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index d8c4a965..266a611b 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -71,7 +71,6 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, const unsigned int exp_ts) { int rule_exists=0; - char cmd_buf[CMD_BUFSIZE] = {0}; char ipt_line_buf[CMD_BUFSIZE] = {0}; char target_search[CMD_BUFSIZE] = {0}; char proto_search[CMD_BUFSIZE] = {0}; @@ -483,7 +482,6 @@ jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, const int chain_num) { int exists = 0; - char cmd_buf[CMD_BUFSIZE] = {0}; char chain_search[CMD_BUFSIZE] = {0}; snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " IPT_LIST_RULES_ARGS, @@ -1434,19 +1432,152 @@ process_spa_request(const fko_srv_options_t * const opts, return(res); } +static void +rm_expired_rules(const fko_srv_options_t * const opts, + const char * const ipt_output_buf, + char *ndx, struct fw_chain *ch, int cpos, time_t now) +{ + char exp_str[12] = {0}; + char rule_num_str[6] = {0}; + char *rn_start, *rn_end, *tmp_mark; + + int res, is_err, rn_offset=0, rule_num; + time_t rule_exp, min_exp = 0; + + /* walk the list and process rules as needed. + */ + while (ndx != NULL) { + /* Jump forward and extract the timestamp + */ + ndx += strlen(EXPIRE_COMMENT_PREFIX); + + /* remember this spot for when we look for the next + * rule. + */ + tmp_mark = ndx; + + strlcpy(exp_str, ndx, sizeof(exp_str)); + rule_exp = (time_t)atoll(exp_str); + + if(rule_exp <= now) + { + /* Backtrack and get the rule number and delete it. + */ + rn_start = ndx; + while(--rn_start > ipt_output_buf) + { + if(*rn_start == '\n') + break; + } + + if(*rn_start != '\n') + { + /* This should not happen. But if it does, complain, + * decrement the active rule value, and go on. + */ + log_msg(LOG_ERR, + "Rule parse error while finding rule line start in chain %i", + cpos); + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + + break; + } + rn_start++; + + rn_end = strchr(rn_start, ' '); + if(rn_end == NULL) + { + /* This should not happen. But if it does, complain, + * decrement the active rule value, and go on. + */ + log_msg(LOG_ERR, + "Rule parse error while finding rule number in chain %i", + cpos); + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + + break; + } + + strlcpy(rule_num_str, rn_start, (rn_end - rn_start)+1); + + rule_num = strtol_wrapper(rule_num_str, rn_offset, RCHK_MAX_IPT_RULE_NUM, + NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, + "Rule parse error while finding rule number in chain %i", + cpos); + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + + break; + } + + zero_cmd_buffers(); + + snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " IPT_DEL_RULE_ARGS, + opts->fw_config->fw_command, + ch[cpos].table, + ch[cpos].to_chain, + rule_num - rn_offset /* account for position of previously + deleted rule with rn_offset */ + ); + + res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, + WANT_STDERR, NO_TIMEOUT, &pid_status, opts); + chop_newline(err_buf); + + log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, err: %s)", + cmd_buf, res, err_buf); + + if(EXTCMD_IS_SUCCESS(res)) + { + log_msg(LOG_INFO, "Removed rule %s from %s with expire time of %u", + rule_num_str, ch[cpos].to_chain, rule_exp + ); + + rn_offset++; + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + } + else + log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + + } + else + { + /* Track the minimum future rule expire time. + */ + if(rule_exp > now) + min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; + } + + /* Push our tracking index forward beyond (just processed) _exp_ + * string so we can continue to the next rule in the list. + */ + ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); + } + return; +} + /* Iterate over the configure firewall access chains and purge expired * firewall rules. */ void -check_firewall_rules(const fko_srv_options_t * const opts) +check_firewall_rules(const fko_srv_options_t * const opts, + const int chk_rm_all) { - char exp_str[12] = {0}; - char rule_num_str[6] = {0}; - char *ndx, *rn_start, *rn_end, *tmp_mark; + char *ndx; char ipt_output_buf[STANDARD_CMD_OUT_BUFSIZE] = {0}; - int i, res, rn_offset, rule_num, is_err; - time_t now, rule_exp, min_exp = 0; + int i, res; + time_t now, min_exp = 0; struct fw_chain *ch = opts->fw_config->chain; @@ -1459,16 +1590,21 @@ check_firewall_rules(const fko_srv_options_t * const opts) /* If there are no active rules or we have not yet * reached our expected next expire time, continue. */ - if(ch[i].active_rules == 0 || ch[i].next_expire > now) + if(!chk_rm_all && (ch[i].active_rules == 0 || ch[i].next_expire > now)) + continue; + + if(ch[i].table[0] == '\0' || ch[i].to_chain[i] == '\0') continue; zero_cmd_buffers(); memset(ipt_output_buf, 0x0, STANDARD_CMD_OUT_BUFSIZE); - rn_offset = 0; - - /* There should be a rule to delete. Get the current list of - * rules for this chain and delete the ones that are expired. + /* Get the current list of rules for this chain and delete + * any that have expired. Note that chk_rm_all puts us in + * garbage collection mode, and allows any rules that have + * been manually added (potentially by a program separate + * from fwknopd) to take advantage of fwknopd's timeout + * mechanism. */ snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " IPT_LIST_RULES_ARGS, opts->fw_config->fw_command, @@ -1480,12 +1616,14 @@ check_firewall_rules(const fko_srv_options_t * const opts) WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(ipt_output_buf); - log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, ipt_output_buf: %s)", + log_msg(LOG_DEBUG, + "check_firewall_rules() CMD: '%s' (res: %d, ipt_output_buf: %s)", cmd_buf, res, ipt_output_buf); if(!EXTCMD_IS_SUCCESS(res)) { - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, ipt_output_buf); + log_msg(LOG_ERR, + "Error %i from cmd:'%s': %s", res, cmd_buf, ipt_output_buf); continue; } @@ -1495,9 +1633,9 @@ check_firewall_rules(const fko_srv_options_t * const opts) ndx = strstr(ipt_output_buf, EXPIRE_COMMENT_PREFIX); if(ndx == NULL) { - /* we did not find an expected rule. + /* we did not find a candidate rule to expire */ - log_msg(LOG_ERR, + log_msg(LOG_DEBUG, "Did not find expire comment in rules list %i", i); if (ch[i].active_rules > 0) @@ -1506,121 +1644,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) continue; } - /* walk the list and process rules as needed. - */ - while (ndx != NULL) { - /* Jump forward and extract the timestamp - */ - ndx += strlen(EXPIRE_COMMENT_PREFIX); - - /* remember this spot for when we look for the next - * rule. - */ - tmp_mark = ndx; - - strlcpy(exp_str, ndx, sizeof(exp_str)); - rule_exp = (time_t)atoll(exp_str); - - if(rule_exp <= now) - { - /* Backtrack and get the rule number and delete it. - */ - rn_start = ndx; - while(--rn_start > ipt_output_buf) - { - if(*rn_start == '\n') - break; - } - - if(*rn_start != '\n') - { - /* This should not happen. But if it does, complain, - * decrement the active rule value, and go on. - */ - log_msg(LOG_ERR, - "Rule parse error while finding rule line start in chain %i", i); - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - - break; - } - rn_start++; - - rn_end = strchr(rn_start, ' '); - if(rn_end == NULL) - { - /* This should not happen. But if it does, complain, - * decrement the active rule value, and go on. - */ - log_msg(LOG_ERR, - "Rule parse error while finding rule number in chain %i", i); - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - - break; - } - - strlcpy(rule_num_str, rn_start, (rn_end - rn_start)+1); - - rule_num = strtol_wrapper(rule_num_str, rn_offset, RCHK_MAX_IPT_RULE_NUM, - NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_ERR, - "Rule parse error while finding rule number in chain %i", i); - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - - break; - } - - zero_cmd_buffers(); - - snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " IPT_DEL_RULE_ARGS, - opts->fw_config->fw_command, - ch[i].table, - ch[i].to_chain, - rule_num - rn_offset /* account for previously deleted rule */ - ); - - res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, - WANT_STDERR, NO_TIMEOUT, &pid_status, opts); - chop_newline(err_buf); - - log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, err: %s)", - cmd_buf, res, err_buf); - - if(EXTCMD_IS_SUCCESS(res)) - { - log_msg(LOG_INFO, "Removed rule %s from %s with expire time of %u", - rule_num_str, ch[i].to_chain, rule_exp - ); - - rn_offset++; - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - } - else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - - } - else - { - /* Track the minimum future rule expire time. - */ - if(rule_exp > now) - min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; - } - - /* Push our tracking index forward beyond (just processed) _exp_ - * string so we can continue to the next rule in the list. - */ - ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); - } + rm_expired_rules(opts, ipt_output_buf, ndx, ch, i, now); /* Set the next pending expire time accordingly. 0 if there are no * more rules, or whatever the next expected (min_exp) time will be. @@ -1630,6 +1654,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) else if(min_exp) ch[i].next_expire = min_exp; } + return; } int diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index 4f3534cd..c882615c 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -91,6 +91,7 @@ #define DEF_ENABLE_SPA_PACKET_AGING "Y" #define DEF_MAX_SPA_PACKET_AGE "120" #define DEF_ENABLE_DIGEST_PERSISTENCE "Y" +#define DEF_RULES_CHECK_CTR 10 #define DEF_MAX_SNIFF_BYTES "1500" #define DEF_GPG_HOME_DIR "/root/.gnupg" #ifdef GPG_EXE @@ -646,6 +647,12 @@ typedef struct fko_srv_options */ struct fw_config *fw_config; + /* Rule checking counter - this is for garbage cleanup mode to remove + * any rules with an expired timer (even those that may have been + * added by a third-party program). + */ + unsigned int check_rules_ctr; + /* Set to 1 when messages have to go through syslog, 0 otherwise */ unsigned char syslog_enable; diff --git a/server/pcap_capture.c b/server/pcap_capture.c index c64c1b9d..80e61414 100644 --- a/server/pcap_capture.c +++ b/server/pcap_capture.c @@ -67,6 +67,7 @@ pcap_capture(fko_srv_options_t *opts) int pcap_dispatch_count; int max_sniff_bytes; int is_err; + int chk_rm_all = 0; pid_t child_pid; #if FIREWALL_IPFW @@ -312,7 +313,16 @@ pcap_capture(fko_srv_options_t *opts) /* Check for any expired firewall rules and deal with them. */ if(!opts->test) - check_firewall_rules(opts); + { + opts->check_rules_ctr++; + if(opts->check_rules_ctr % DEF_RULES_CHECK_CTR == 0) + { + chk_rm_all = 1; + opts->check_rules_ctr = 0; + } + check_firewall_rules(opts, chk_rm_all); + chk_rm_all = 0; + } #if FIREWALL_IPFW /* Purge expired rules that no longer have any corresponding diff --git a/server/udp_server.c b/server/udp_server.c index b31b2e7d..bc0fb787 100644 --- a/server/udp_server.c +++ b/server/udp_server.c @@ -53,7 +53,7 @@ int run_udp_server(fko_srv_options_t *opts) { int s_sock, sfd_flags, selval, pkt_len; - int is_err, s_timeout, rv=1; + int is_err, s_timeout, rv=1, chk_rm_all=0; fd_set sfd_set; struct sockaddr_in saddr, caddr; struct timeval tv; @@ -148,7 +148,16 @@ run_udp_server(fko_srv_options_t *opts) /* Check for any expired firewall rules and deal with them. */ if(!opts->test) - check_firewall_rules(opts); + { + opts->check_rules_ctr++; + if(opts->check_rules_ctr % DEF_RULES_CHECK_CTR == 0) + { + chk_rm_all = 1; + opts->check_rules_ctr = 0; + } + check_firewall_rules(opts, chk_rm_all); + chk_rm_all = 0; + } /* Initialize and setup the socket for select. */ From 588cba6063d106208edb8104a92a6c3fac247ea1 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 13 Jul 2015 21:59:58 -0400 Subject: [PATCH 165/219] [test suite] validate iptables rule garbage collection (added in ef9498f7) --- test/tests/rijndael_hmac.pl | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index 16cbcf4d..9d45f6e1 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -689,6 +689,28 @@ 'weak_server_receive_check' => $YES, 'key_file' => $cf{'rc_hmac_b64_key'}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "iptables garbage collect rule", + 'function' => \&spa_cycle, + 'cmdline' => + ### insert a dummy rule that should be garbage collected + qq|iptables -A FWKNOP_INPUT -p tcp --dport 22 -s $fake_ip | . + qq|-m comment --comment "_exp_1234" -j ACCEPT | . + "&& LD_LIBRARY_PATH=$lib_dir $fwknopCmd -A tcp/22 -a $fake_ip " . + "-D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} $verbose_str ", + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/Removed\srule\s1/, + qr/Removed\srule.*expire time of 1234/, + ], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', From 3de56f8f89836f9686984d0f4ba4488a5770a8bf Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 13 Jul 2015 22:41:21 -0400 Subject: [PATCH 166/219] [test suite] add valgrind string to client command line for garbage collection test --- test/tests/rijndael_hmac.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index 9d45f6e1..a038b4ec 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -698,7 +698,7 @@ ### insert a dummy rule that should be garbage collected qq|iptables -A FWKNOP_INPUT -p tcp --dport 22 -s $fake_ip | . qq|-m comment --comment "_exp_1234" -j ACCEPT | . - "&& LD_LIBRARY_PATH=$lib_dir $fwknopCmd -A tcp/22 -a $fake_ip " . + "&& LD_LIBRARY_PATH=$lib_dir $valgrind_str $fwknopCmd -A tcp/22 -a $fake_ip " . "-D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} $verbose_str ", 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", From f1c3806dca3d7e420e1d9b417ce499e17c9d2794 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 14 Jul 2015 21:13:46 -0400 Subject: [PATCH 167/219] [test suite] added tests for duplicate rule detection (issue #162) --- server/fw_util_iptables.c | 11 +-- test/test-fwknop.pl | 58 ++++++++++++--- test/tests/rijndael_hmac.pl | 136 ++++++++++++++++++++++++++++++------ 3 files changed, 171 insertions(+), 34 deletions(-) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 266a611b..0249d42a 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -202,18 +202,21 @@ rule_exists_chk_support(const fko_srv_options_t * const opts, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(err_buf); - log_msg(LOG_DEBUG, "rule_exists_chk_support() CMD: '%s' (res: %d, err: %s)", - cmd_buf, res, err_buf); + log_msg(LOG_DEBUG, + "rule_exists_chk_support() CMD: '%s' (res: %d, err: %s)", + cmd_buf, res, err_buf); if(EXTCMD_IS_SUCCESS(res) && strlen(err_buf)) { - log_msg(LOG_DEBUG, "rule_exists_chk_support() Rule : '%s' in %s does not exist", + log_msg(LOG_DEBUG, + "rule_exists_chk_support() Rule : '%s' in %s does not exist", rule, chain); } else { rule_exists = 1; - log_msg(LOG_DEBUG, "rule_exists_chk_support() Rule : '%s' in %s already exists", + log_msg(LOG_DEBUG, + "rule_exists_chk_support() Rule : '%s' in %s already exists", rule, chain); } diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index b8efc26f..0576f04c 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -214,6 +214,7 @@ my $valgrind_disable_suppressions = 0; my $valgrind_disable_child_silent = 0; my $valgrind_suppressions_file = cwd() . '/valgrind_suppressions'; our $valgrind_str = ''; +my %cached_fw_policy = (); my $cpan_valgrind_mod = 'Test::Valgrind'; my %prev_valgrind_cov = (); my %prev_valgrind_file_titles = (); @@ -5478,12 +5479,14 @@ sub client_server_interaction() { &write_test_file("[+] Inserting duplicate rule with expire comment: $time_prefix\n", $curr_test_file); if ($test_hr->{'fw_dupe_rule_args'}) { - my $fw_args = $test_hr->{'fw_dupe_rule_args'}; - if ($fw_args =~ /EXP_TIME/) { - $fw_args =~ s/EXP_TIME/$time_prefix/; + for my $fw_args (@{$test_hr->{'fw_dupe_rule_args'}}) { + my $cp = $fw_args; + if ($cp =~ /EXP_TIME/) { + $cp =~ s/EXP_TIME/$time_prefix/; + } + &run_cmd("$fw_bin_and_prefix $cp", + $cmd_out_tmp, $curr_test_file); } - &run_cmd("$fw_bin_and_prefix $fw_args", - $cmd_out_tmp, $curr_test_file); } else { ### assume SSH &run_cmd("$fw_bin_and_prefix -A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . @@ -5496,6 +5499,7 @@ sub client_server_interaction() { &run_cmd("LD_LIBRARY_PATH=$lib_path $fwknopdCmd -c " . "$fwknopd_conf -a $access_conf --fw-list", $cmd_out_tmp, $curr_test_file); + &cache_fw_policy($cmd_out_tmp); } } @@ -5549,7 +5553,7 @@ sub client_server_interaction() { $fw_rule_removed = 0; } - if ($fw_rule_created) { + if ($fw_rule_created or $test_hr->{'insert_duplicate_rule_while_running'}) { if ($test_hr->{'rm_rule_mid_cycle'}) { &write_test_file("[+] Flushing firewall rules out from under fwknopd...\n", $curr_test_file); @@ -6562,6 +6566,21 @@ sub popen_cmd() { return 1; } +sub cache_fw_policy() { + my $file = shift; + open FWP, "< $file" or die "[*] Could not open $file: $!"; + while (<FWP>) { + ### 3 ACCEPT tcp -- 127.0.0.2... + ### Since we use the policy cache to detect duplicate rules, + ### don't allow the rule number itself to make each rule + ### unique by default + if (/^\d+\s+(.*)/) { + $cached_fw_policy{$1} = ''; + } + } + close FWP; +} + sub run_cmd() { my ($cmd, $cmd_out, $file) = @_; @@ -7438,9 +7457,30 @@ sub is_fw_rule_active() { &run_cmd("$lib_view_str $fwknopdCmd " . qq{$conf_args --fw-list | grep -v "# DISABLED" }, $cmd_out_tmp, $curr_test_file); - unless (&file_find_regex([qr/\s$fake_ip\s.*_exp_/], - $MATCH_ALL, $NO_APPEND_RESULTS, $cmd_out_tmp)) { - $rv = 0; + if ($test_hr->{'insert_duplicate_rule_while_running'}) { + ### see if there is a new rule that wasn't in the + ### policy before the SPA packet was sent + my $new_fw_rule = 0; + open FWPOL, "< $cmd_out_tmp" or die $!; + while (<FWPOL>) { + my $line = $_; + if ($line =~ /^\d+\s+(.*)/) { + if (not defined $cached_fw_policy{$1}) { + &write_test_file( + "[.] Found new rule not found in previously cached policy: $line\n", + $curr_test_file); + $new_fw_rule = 1; + last; + } + } + } + close FWPOL; + $rv = 0 unless $new_fw_rule; + } else { + unless (&file_find_regex([qr/\s$fake_ip\s.*_exp_/], + $MATCH_ALL, $NO_APPEND_RESULTS, $cmd_out_tmp)) { + $rv = 0; + } } } diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index a038b4ec..461199d7 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -207,7 +207,7 @@ { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', - 'detail' => '--ipt-no-check-support', + 'detail' => '--no-ipt-check-support', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . @@ -220,7 +220,7 @@ { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', - 'detail' => '3 cycles --ipt-no-check-support', + 'detail' => '3 cycles --no-ipt-check-support', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . @@ -234,38 +234,43 @@ { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', - 'detail' => '--ipt-no-check dupe rule', + 'detail' => '--no-ipt-check dupe rule', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . "-d $default_digest_file -p $default_pid_file " . "$intf_str --no-ipt-check-support --no-firewd-check-support", - 'fw_rule_created' => $NEW_RULE_REQUIRED, - 'fw_rule_removed' => $REQUIRE_NO_NEW_REMOVED, + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, 'key_file' => $cf{'rc_hmac_b64_key'}, 'insert_duplicate_rule_while_running' => $YES, - 'fw_dupe_rule_args' => "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . - "--dport 22 -m comment --comment EXP_TIME -j ACCEPT", - 'server_positive_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], + 'fw_dupe_rule_args' => [ + "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment EXP_TIME -j ACCEPT" + ], + 'server_positive_output_matches' + => [qr/rule_exists_no_chk_support.*tcp.*22.*already exists/], }, { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', - 'detail' => '--ipt-no-check non-matching dupe rule', + 'detail' => '--no-ipt-check != dupe rule', 'function' => \&spa_cycle, 'cmdline' => $default_client_hmac_args, 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . "-d $default_digest_file -p $default_pid_file " . "$intf_str --no-ipt-check-support --no-firewd-check-support", 'fw_rule_created' => $NEW_RULE_REQUIRED, - 'fw_rule_removed' => $REQUIRE_NO_NEW_REMOVED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, 'key_file' => $cf{'rc_hmac_b64_key'}, 'insert_duplicate_rule_while_running' => $YES, ### port 1234 builds a non-matching rule, so it isn't actually ### a duplicate - require a negative server match - 'fw_dupe_rule_args' => "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . - "--dport 1234 -m comment --comment EXP_TIME -j ACCEPT", - 'server_negative_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], + 'fw_dupe_rule_args' => [ + "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + "--dport 1234 -m comment --comment EXP_TIME -j ACCEPT" + ], + 'server_negative_output_matches' + => [qr/rule_exists_no_chk_support.*tcp.*22.*already exists/], }, { @@ -289,8 +294,7 @@ 'cmdline' => $default_client_hmac_args, 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", - 'fw_rule_created' => $NEW_RULE_REQUIRED, - 'fw_rule_removed' => $REQUIRE_NO_NEW_REMOVED, + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, 'key_file' => $cf{'rc_hmac_b64_key'}, 'insert_duplicate_rule_while_running' => $YES, }, @@ -298,7 +302,7 @@ { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', - 'detail' => '--ipt-no-check-support udp/53', + 'detail' => '--no-ipt-check-support udp/53', 'function' => \&spa_cycle, 'cmdline' => "$fwknopCmd -A udp/53 -a $fake_ip -D $loopback_ip --rc-file " . "$cf{'rc_hmac_b64_key'} $verbose_str", @@ -1437,6 +1441,63 @@ 'key_file' => $cf{'rc_hmac_b64_key'}, 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "NAT $internal_nat_host dupe detection", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + "$cf{'rc_hmac_b64_key'} -N $internal_nat_host:22", + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'hmac_open_ports_access'} / . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/FWKNOP_FORWARD\s.*dport\s22\s/, + qr/\*\/\sto\:$internal_nat_host\:22/i, + qr/rule_exists.*FWKNOP_PREROUTING already exists/, + qr/rule_exists.*FWKNOP_FORWARD already exists/, + ], + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, + 'insert_duplicate_rule_while_running' => $YES, + 'fw_dupe_rule_args' => [ + "-A FWKNOP_PREROUTING -t nat -p 6 -s 127.0.0.2 -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment EXP_TIME -j DNAT " . + "--to-destination 192.168.1.2:22", + + "-A FWKNOP_FORWARD -p 6 -s 127.0.0.2 -d 192.168.1.2 " . + "--dport 22 -m comment --comment EXP_TIME -j ACCEPT" + ], + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "NAT $internal_nat_host != dupe detection", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + "$cf{'rc_hmac_b64_key'} -N $internal_nat_host:22", + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} / . + qq/-a $cf{'hmac_open_ports_access'} / . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [ + qr/FWKNOP_FORWARD\s.*dport\s22\s/, + qr/\*\/\sto\:$internal_nat_host\:22/i, + ], + 'server_negative_output_matches' => [ + qr/rule_exists.*22.*already exists/ + ], + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, + 'insert_duplicate_rule_while_running' => $YES, + 'fw_dupe_rule_args' => [ + "-A FWKNOP_PREROUTING -t nat -p 6 -s 127.0.0.2 -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment EXP_TIME -j DNAT " . + "--to-destination 192.168.1.2:1234" + ], + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', @@ -1447,18 +1508,51 @@ 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} -a $cf{'hmac_open_ports_access'} / . "-d $default_digest_file -p $default_pid_file " . "$intf_str --no-ipt-check-support --no-firewd-check-support", + 'server_positive_output_matches' => [ + qr/rule_exists.*FWKNOP_PREROUTING already exists/, + qr/rule_exists_no_chk_support.* expires\:\s.*already exists/ + ], + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, + 'insert_duplicate_rule_while_running' => $YES, + 'fw_dupe_rule_args' => [ + "-A FWKNOP_PREROUTING -t nat -p 6 -s 127.0.0.2 -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment EXP_TIME -j DNAT " . + "--to-destination 192.168.1.2:22", + + "-A FWKNOP_FORWARD -p 6 -s 127.0.0.2 -d 192.168.1.2 " . + "--dport 22 -m comment --comment EXP_TIME -j ACCEPT" + ], + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "NAT --no-ipt-check != dupe", + 'function' => \&spa_cycle, + 'cmdline' => "$default_client_args_no_get_key --rc-file " . + "$cf{'rc_hmac_b64_key'} -N $internal_nat_host:22", + 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_nat"} / . + qq/-a $cf{'hmac_open_ports_access'} / . + "-d $default_digest_file -p $default_pid_file " . + "$intf_str --no-ipt-check-support --no-firewd-check-support", 'server_positive_output_matches' => [ qr/FWKNOP_FORWARD\s.*dport\s22\s/, - qr/\*\/\sto\:$internal_nat_host\:22/i], + qr/\*\/\sto\:$internal_nat_host\:22/i, + ], + 'server_negative_output_matches' => [ + qr/rule_exists_no_chk_support.* expires\:\s.*already exists/ + ], 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, 'key_file' => $cf{'rc_hmac_b64_key'}, 'server_conf' => $cf{"${fw_conf_prefix}_nat"}, 'insert_duplicate_rule_while_running' => $YES, - 'fw_dupe_rule_args' => "-A FWKNOP_PREROUTING -t nat -p 6 -s 127.0.0.2 -d 0.0.0.0/0 " . - "--dport 22 -m comment --comment EXP_TIME -j DNAT " . - "--to-destination 192.168.1.2:22", - 'server_positive_output_matches' => [qr/rule_exists_no_chk_support.*rule already exists/], + 'fw_dupe_rule_args' => [ + "-A FWKNOP_PREROUTING -t nat -p 6 -s 127.0.0.2 -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment EXP_TIME -j DNAT " . + "--to-destination 192.168.1.2:2222" + ], }, { From fd07a9588092ee4a2e5caf1e2aef200ebdc661ff Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 14 Jul 2015 21:14:54 -0400 Subject: [PATCH 168/219] add test/tests/address_sanitizer.pl --- Makefile.am | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile.am b/Makefile.am index b433fe2f..9b3781cd 100644 --- a/Makefile.am +++ b/Makefile.am @@ -415,6 +415,7 @@ EXTRA_DIST = \ test/afl/test-cases/spa-pkts/spa2_md5.start \ test/afl/test-cases/server-conf/firewalld/fwknopd.conf \ test/afl/test-cases/server-conf/iptables/fwknopd.conf \ + test/tests/address_sanitizer.pl \ test/tests/build_security.pl \ test/tests/preliminaries.pl \ test/tests/code_structure.pl \ From 43f38551c95a6d1a1a418574277f868079a80def Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 14 Jul 2015 21:26:44 -0400 Subject: [PATCH 169/219] [test suite] add ASAN mode to fko-wrapper --- test/fko-wrapper/Makefile | 4 ++++ test/test-fwknop.pl | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/test/fko-wrapper/Makefile b/test/fko-wrapper/Makefile index 7f25966f..5283737e 100644 --- a/test/fko-wrapper/Makefile +++ b/test/fko-wrapper/Makefile @@ -3,6 +3,10 @@ all : fko_wrapper.c fko_basic.c cc -Wall -g -I../../lib fko_wrapper.c -o fko_wrapper -L../../lib/.libs -lfko cc -Wall -g -I../../lib fko_basic.c -o fko_basic -L../../lib/.libs -lfko +asan : fko_wrapper.c fko_basic.c + cc -Wall -fsanitize=address -fno-omit-frame-pointer -g -I../../lib fko_wrapper.c -o fko_wrapper -L../../lib/.libs -lfko + cc -Wall -fsanitize=address -fno-omit-frame-pointer -g -I../../lib fko_basic.c -o fko_basic -L../../lib/.libs -lfko + fuzzing: fko_wrapper.c cc -Wall -g -DFUZZING_INTERFACES -I../../lib fko_wrapper.c -o fko_wrapper -L../../lib/.libs -lfko diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 0576f04c..bfb97ecd 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -214,6 +214,7 @@ my $valgrind_disable_suppressions = 0; my $valgrind_disable_child_silent = 0; my $valgrind_suppressions_file = cwd() . '/valgrind_suppressions'; our $valgrind_str = ''; +my $asan_mode = 0; my %cached_fw_policy = (); my $cpan_valgrind_mod = 'Test::Valgrind'; my %prev_valgrind_cov = (); @@ -1567,6 +1568,8 @@ sub fko_wrapper_exec() { my $make_arg = $test_hr->{'wrapper_compile'}; + $make_arg = 'asan' if $asan_mode; + if ($test_hr->{'wrapper_binary'} =~ m|/fko_wrapper$|) { if ($enable_fuzzing_interfaces_tests) { $make_arg = 'fuzzing'; @@ -6946,8 +6949,10 @@ sub init() { $genhtml_path = &find_command('genhtml') unless $genhtml_path; ### see if we're compiled with ASAN support - unless (&file_find_regex([qr/enable\-asan\-support/], + if (&file_find_regex([qr/enable\-asan\-support/], $MATCH_ALL, $NO_APPEND_RESULTS, $config_log)) { + $asan_mode = 1; + } else { &write_test_file("[-] Can't find --enable-asan-support in $config_log\n", $curr_test_file); push @tests_to_exclude, qr/ASAN/; From 72f03ae99cb5eab3c393ecead86eedbafe2aa16d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 14 Jul 2015 21:50:11 -0400 Subject: [PATCH 170/219] [test suite] fix 'FORWARD_ALL SNAT translate IP' test --- test/test-fwknop.pl | 1 + test/tests/rijndael_hmac.pl | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index bfb97ecd..3e53e3b0 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -80,6 +80,7 @@ our $spoof_ip = '1.2.3.4'; our $internal_nat_host = '192.168.1.2'; our $force_nat_host = '192.168.1.123'; our $force_nat_host2 = '123.4.4.4'; +our $force_nat_host3 = '8.1.2.3'; our $force_snat_host = '33.3.3.3'; our $default_spa_port = 62201; our $non_std_spa_port = 12345; diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index 461199d7..b09f760e 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -1720,10 +1720,12 @@ 'fwknopd_cmdline' => qq/$fwknopdCmd -c $cf{"${fw_conf_prefix}_snat_translate_ip"} -a $cf{'hmac_force_nat_forward_all_access'} / . "-d $default_digest_file -p $default_pid_file $intf_str", 'server_positive_output_matches' => [ - qr/\sSNAT\s.*all.*\sto:$force_nat_host2/], - 'server_negative_output_matches' => [qr/DNAT\s.*\*\/\sto\:/, + qr/\sSNAT\s.*all.*\sto:$force_nat_host3/ + ], + 'server_negative_output_matches' => [ qr/\*\/\sto\:$internal_nat_host\:22/i, - qr/\*\/\sto\:$force_nat_host\:22/i], + qr/\*\/\sto\:$force_nat_host\:22/i + ], 'fw_rule_created' => $NEW_RULE_REQUIRED, 'fw_rule_removed' => $NEW_RULE_REMOVED, 'server_conf' => $cf{"${fw_conf_prefix}_snat_translate_ip"}, From 3c8e03d062dd3adf36331be7306758b64d0e2e49 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 16 Jul 2015 11:39:14 -0700 Subject: [PATCH 171/219] [server] add stronger 'no -C' support for firewalld systems (issue #162) --- server/fw_util_firewalld.c | 509 ++++++++++++++++++++++--------------- server/fw_util_iptables.h | 1 - 2 files changed, 300 insertions(+), 210 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index a735ea1e..13f23237 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -59,28 +59,28 @@ zero_cmd_buffers(void) static int pid_status = 0; -static void -chop_newline(char *str) -{ - if(str[0] != 0x0 && str[strlen(str)-1] == 0x0a) - str[strlen(str)-1] = 0x0; - return; -} - static int rule_exists_no_chk_support(const fko_srv_options_t * const opts, - const struct fw_chain * const fwc, const unsigned int proto, - const char * const srcip, const char * const dstip, - const unsigned int port, const unsigned int exp_ts) + const struct fw_chain * const fwc, + const unsigned int proto, + const char * const srcip, + const char * const dstip, + const unsigned int port, + const char * const natip, + const unsigned int nat_port, + const unsigned int exp_ts) { int rule_exists=0; - char cmd_buf[CMD_BUFSIZE] = {0}; - char target_search[CMD_BUFSIZE] = {0}; - char proto_search[CMD_BUFSIZE] = {0}; - char srcip_search[CMD_BUFSIZE] = {0}; - char dstip_search[CMD_BUFSIZE] = {0}; - char port_search[CMD_BUFSIZE] = {0}; - char exp_ts_search[CMD_BUFSIZE] = {0}; + char fw_line_buf[CMD_BUFSIZE] = {0}; + char target_search[CMD_BUFSIZE] = {0}; + char proto_search[CMD_BUFSIZE] = {0}; + char srcip_search[CMD_BUFSIZE] = {0}; + char dstip_search[CMD_BUFSIZE] = {0}; + char natip_search[CMD_BUFSIZE] = {0}; + char port_search[CMD_BUFSIZE] = {0}; + char nat_port_search[CMD_BUFSIZE] = {0}; + char exp_ts_search[CMD_BUFSIZE] = {0}; + char *ndx = NULL; snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " FIREWD_LIST_RULES_ARGS, opts->fw_config->fw_command, @@ -108,30 +108,75 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, else snprintf(proto_search, CMD_BUFSIZE-1, " %u ", proto); - snprintf(port_search, CMD_BUFSIZE-1, ":%u ", port); + snprintf(port_search, CMD_BUFSIZE-1, "dpt:%u ", port); + snprintf(nat_port_search, CMD_BUFSIZE-1, ":%u", nat_port); snprintf(target_search, CMD_BUFSIZE-1, " %s ", fwc->target); - snprintf(srcip_search, CMD_BUFSIZE-1, " %s ", srcip); + + if (srcip != NULL) + snprintf(srcip_search, CMD_BUFSIZE-1, " %s ", srcip); + if (dstip != NULL) - { snprintf(dstip_search, CMD_BUFSIZE-1, " %s ", dstip); - } + + if (natip != NULL) + snprintf(natip_search, CMD_BUFSIZE-1, " to:%s ", natip); + snprintf(exp_ts_search, CMD_BUFSIZE-1, "%u ", exp_ts); - /* search for each of the substrings - yes, matches from different - * rules may get triggered here, but the expiration time is the + /* search for each of the substrings - the rule expiration time is the * primary search method */ - if(search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, exp_ts_search, &pid_status, opts) - && search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, proto_search, &pid_status, opts) - && search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, srcip_search, &pid_status, opts) - && (dstip == NULL) ? 1 : search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, dstip_search, &pid_status, opts) - && search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, target_search, &pid_status, opts) - && search_extcmd(cmd_buf, WANT_STDERR, NO_TIMEOUT, port_search, &pid_status, opts)) - rule_exists = 1; + if(search_extcmd_getline(cmd_buf, fw_line_buf, + CMD_BUFSIZE, NO_TIMEOUT, exp_ts_search, &pid_status, opts)) + { + chop_newline(fw_line_buf); + /* we have an iptables policy rule that matches the + * expiration time, so make sure this rule matches the + * other fields too. If not, then it is for different + * access requested by a separate SPA packet. + */ + if(((proto == ANY_PROTO) ? 1 : (strstr(fw_line_buf, proto_search) != NULL)) + && ((srcip == NULL) ? 1 : (strstr(fw_line_buf, srcip_search) != NULL)) + && ((dstip == NULL) ? 1 : (strstr(fw_line_buf, dstip_search) != NULL)) + && ((natip == NULL) ? 1 : (strstr(fw_line_buf, natip_search) != NULL)) + && (strstr(fw_line_buf, target_search) != NULL) + && ((port == ANY_PORT) ? 1 : (strstr(fw_line_buf, port_search) != NULL))) + { + rule_exists = 1; + } + } + + /* If there is a nat port, we have to qualify it as part + * of the 'to:<ip>:<port>' portion of the rule (at the end) + */ + if(rule_exists && nat_port != NAT_ANY_PORT) + { + ndx = strstr(fw_line_buf, " to:"); + /* Make sure there isn't a duplicate " to:" string (i.e. if someone + * was trying to be tricky with the iptables comment match). + */ + if(ndx != NULL && (strstr((ndx+strlen(" to:")), " to:") == NULL)) + { + ndx = strstr((ndx+strlen(" to:")), nat_port_search); + if (ndx == NULL) + { + rule_exists = 0; + } + else if((*(ndx+strlen(nat_port_search)) != '\0') + && (*(ndx+strlen(nat_port_search)) != ' ')) + { + rule_exists = 0; + } + } + else + { + rule_exists = 0; + } + } if(rule_exists) log_msg(LOG_DEBUG, - "rule_exists_no_chk_support() %s %u -> %s expires: %u rule (already exists", + "rule_exists_no_chk_support() %s %u -> %s expires: %u rule already exists", proto_search, port, srcip, exp_ts); else log_msg(LOG_DEBUG, @@ -157,18 +202,21 @@ rule_exists_chk_support(const fko_srv_options_t * const opts, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(err_buf); - log_msg(LOG_DEBUG, "rule_exists_chk_support() CMD: '%s' (res: %d, err: %s)", - cmd_buf, res, err_buf); + log_msg(LOG_DEBUG, + "rule_exists_chk_support() CMD: '%s' (res: %d, err: %s)", + cmd_buf, res, err_buf); if(strncmp(err_buf, "success", strlen("success")) == 0) { rule_exists = 1; - log_msg(LOG_DEBUG, "rule_exists_chk_support() Rule : '%s' in %s already exists", + log_msg(LOG_DEBUG, + "rule_exists_chk_support() Rule : '%s' in %s already exists", rule, chain); } else { - log_msg(LOG_DEBUG, "rule_exists_chk_support() Rule : '%s' in %s does not exist", + log_msg(LOG_DEBUG, + "rule_exists_chk_support() Rule : '%s' in %s does not exist", rule, chain); } @@ -177,9 +225,14 @@ rule_exists_chk_support(const fko_srv_options_t * const opts, static int rule_exists(const fko_srv_options_t * const opts, - const struct fw_chain * const fwc, const char * const rule, - const unsigned int proto, const char * const srcip, - const char * const dstip, const unsigned int port, + const struct fw_chain * const fwc, + const char * const rule, + const unsigned int proto, + const char * const srcip, + const char * const dstip, + const unsigned int port, + const char * const nat_ip, + const unsigned int nat_port, const unsigned int exp_ts) { int rule_exists = 0; @@ -187,7 +240,9 @@ rule_exists(const fko_srv_options_t * const opts, if(have_firewd_chk_support == 1) rule_exists = rule_exists_chk_support(opts, fwc->to_chain, rule); else - rule_exists = rule_exists_no_chk_support(opts, fwc, proto, srcip, (opts->fw_config->use_destination ? dstip : NULL), port, exp_ts); + rule_exists = rule_exists_no_chk_support(opts, fwc, proto, srcip, + (opts->fw_config->use_destination ? dstip : NULL), port, + nat_ip, nat_port, exp_ts); if(rule_exists == 1) log_msg(LOG_DEBUG, "rule_exists() Rule : '%s' in %s already exists", @@ -429,10 +484,10 @@ jump_rule_exists_chk_support(const fko_srv_options_t * const opts, const int cha } static int -jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, const int chain_num) +jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, + const int chain_num) { int exists = 0; - char cmd_buf[CMD_BUFSIZE] = {0}; char chain_search[CMD_BUFSIZE] = {0}; snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " FIREWD_LIST_RULES_ARGS, @@ -880,6 +935,14 @@ fw_initialize(const fko_srv_options_t * const opts) { int res = 1; + /* See if firewalld offers the '-C' argument (older versions don't). If not, + * then switch to parsing firewalld -L output to find rules. + */ + if(opts->firewd_disable_check_support) + have_firewd_chk_support = 0; + else + firewd_chk_support(opts); + /* Flush the chains (just in case) so we can start fresh. */ if(strncasecmp(opts->config[CONF_FLUSH_FIREWD_AT_INIT], "Y", 1) == 0) @@ -909,14 +972,6 @@ fw_initialize(const fko_srv_options_t * const opts) } } - /* See if firewalld offers the '-C' argument (older versions don't). If not, - * then switch to parsing firewalld -L output to find rules. - */ - if(opts->firewd_disable_check_support) - have_firewd_chk_support = 0; - else - firewd_chk_support(opts); - return(res); } @@ -963,11 +1018,17 @@ static void firewd_rule(const fko_srv_options_t * const opts, const char * const complete_rule_buf, const char * const fw_rule_macro, - const char * const srcip, const char * const dstip, - const unsigned int proto, const unsigned int port, + const char * const srcip, + const char * const dstip, + const unsigned int proto, + const unsigned int port, + const char * const nat_ip, + const unsigned int nat_port, struct fw_chain * const chain, - const unsigned int exp_ts, const time_t now, - const char * const msg, const char * const access_msg) + const unsigned int exp_ts, + const time_t now, + const char * const msg, + const char * const access_msg) { char rule_buf[CMD_BUFSIZE] = {0}; @@ -994,8 +1055,8 @@ firewd_rule(const fko_srv_options_t * const opts, */ mk_chain(opts, chain->type); - if(rule_exists(opts, chain, rule_buf, - proto, srcip, dstip, port, exp_ts) == 0) + if(rule_exists(opts, chain, rule_buf, proto, srcip, + dstip, port, nat_ip, nat_port, exp_ts) == 0) { if(create_rule(opts, chain->to_chain, rule_buf)) { @@ -1048,17 +1109,16 @@ static void forward_access_rule(const fko_srv_options_t * const opts, /* Make a global ACCEPT rule for all ports/protocols */ firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, fwd_chain, exp_ts, now, - "FORWARD ALL", "*/*"); + NULL, ANY_PROTO, ANY_PORT, NULL, NAT_ANY_PORT, + fwd_chain, exp_ts, now, "FORWARD ALL", "*/*"); } else { /* Make the FORWARD access rule */ firewd_rule(opts, NULL, FIREWD_FWD_RULE_ARGS, spadat->use_src_ip, - nat_ip, fst_proto, nat_port, fwd_chain, exp_ts, now, - "FORWARD", spadat->spa_message_remain); - + nat_ip, fst_proto, nat_port, NULL, NAT_ANY_PORT, + fwd_chain, exp_ts, now, "FORWARD", spadat->spa_message_remain); } return; } @@ -1095,8 +1155,8 @@ static void dnat_rule(const fko_srv_options_t * const opts, /* Make a global DNAT rule for all ports/protocols */ firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, dnat_chain, exp_ts, now, - "DNAT ALL", "*/*"); + NULL, ANY_PROTO, ANY_PORT, NULL, NAT_ANY_PORT, + dnat_chain, exp_ts, now, "DNAT ALL", "*/*"); } else { @@ -1116,8 +1176,8 @@ static void dnat_rule(const fko_srv_options_t * const opts, firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - fst_proto, fst_port, dnat_chain, exp_ts, now, "DNAT", - spadat->spa_message_remain); + fst_proto, fst_port, nat_ip, nat_port, dnat_chain, exp_ts, now, + "DNAT", spadat->spa_message_remain); } return; } @@ -1177,8 +1237,8 @@ static void snat_rule(const fko_srv_options_t * const opts, ); firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, ANY_PROTO, ANY_PORT, snat_chain, exp_ts, now, - "SNAT ALL", "*/*"); + NULL, ANY_PROTO, ANY_PORT, NULL, NAT_ANY_PORT, + snat_chain, exp_ts, now, "SNAT ALL", "*/*"); } else { @@ -1228,7 +1288,8 @@ static void snat_rule(const fko_srv_options_t * const opts, ); firewd_rule(opts, rule_buf, NULL, spadat->use_src_ip, - NULL, fst_proto, nat_port, snat_chain, exp_ts, now, "SNAT", + NULL, fst_proto, nat_port, nat_ip, nat_port, + snat_chain, exp_ts, now, "SNAT", spadat->spa_message_remain); } return; @@ -1329,8 +1390,8 @@ process_spa_request(const fko_srv_options_t * const opts, { firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - fst_proto, nat_port, in_chain, exp_ts, now, "local NAT", - spadat->spa_message_remain); + fst_proto, nat_port, nat_ip, nat_port, in_chain, exp_ts, + now, "local NAT", spadat->spa_message_remain); } else if(strlen(fwd_chain->to_chain)) { @@ -1360,8 +1421,8 @@ process_spa_request(const fko_srv_options_t * const opts, { firewd_rule(opts, NULL, FIREWD_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - ple->proto, ple->port, in_chain, exp_ts, now, "access", - spadat->spa_message_remain); + ple->proto, ple->port, NULL, NAT_ANY_PORT, + in_chain, exp_ts, now, "access", spadat->spa_message_remain); /* We need to make a corresponding OUTPUT rule if out_chain target * is not NULL. @@ -1370,8 +1431,8 @@ process_spa_request(const fko_srv_options_t * const opts, { firewd_rule(opts, NULL, FIREWD_OUT_RULE_ARGS, spadat->use_src_ip, (fwc.use_destination ? spadat->pkt_destination_ip : FIREWD_ANY_IP), - ple->proto, ple->port, out_chain, exp_ts, now, "OUTPUT", - spadat->spa_message_remain); + ple->proto, ple->port, NULL, NAT_ANY_PORT, + out_chain, exp_ts, now, "OUTPUT", spadat->spa_message_remain); } ple = ple->next; } @@ -1384,18 +1445,152 @@ process_spa_request(const fko_srv_options_t * const opts, return(res); } +static void +rm_expired_rules(const fko_srv_options_t * const opts, + const char * const fw_output_buf, + char *ndx, struct fw_chain *ch, int cpos, time_t now) +{ + char exp_str[12] = {0}; + char rule_num_str[6] = {0}; + char *rn_start, *rn_end, *tmp_mark; + + int res, is_err, rn_offset=0, rule_num; + time_t rule_exp, min_exp = 0; + + /* walk the list and process rules as needed. + */ + while (ndx != NULL) { + /* Jump forward and extract the timestamp + */ + ndx += strlen(EXPIRE_COMMENT_PREFIX); + + /* remember this spot for when we look for the next + * rule. + */ + tmp_mark = ndx; + + strlcpy(exp_str, ndx, sizeof(exp_str)); + rule_exp = (time_t)atoll(exp_str); + + if(rule_exp <= now) + { + /* Backtrack and get the rule number and delete it. + */ + rn_start = ndx; + while(--rn_start > fw_output_buf) + { + if(*rn_start == '\n') + break; + } + + if(*rn_start != '\n') + { + /* This should not happen. But if it does, complain, + * decrement the active rule value, and go on. + */ + log_msg(LOG_ERR, + "Rule parse error while finding rule line start in chain %i", + cpos); + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + + break; + } + rn_start++; + + rn_end = strchr(rn_start, ' '); + if(rn_end == NULL) + { + /* This should not happen. But if it does, complain, + * decrement the active rule value, and go on. + */ + log_msg(LOG_ERR, + "Rule parse error while finding rule number in chain %i", + cpos); + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + + break; + } + + strlcpy(rule_num_str, rn_start, (rn_end - rn_start)+1); + + rule_num = strtol_wrapper(rule_num_str, rn_offset, RCHK_MAX_FIREWD_RULE_NUM, + NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, + "Rule parse error while finding rule number in chain %i", + cpos); + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + + break; + } + + zero_cmd_buffers(); + + snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " FIREWD_DEL_RULE_ARGS, + opts->fw_config->fw_command, + ch[cpos].table, + ch[cpos].to_chain, + rule_num - rn_offset /* account for position of previously + deleted rule with rn_offset */ + ); + + res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, + WANT_STDERR, NO_TIMEOUT, &pid_status, opts); + chop_newline(err_buf); + + log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, err: %s)", + cmd_buf, res, err_buf); + + if(EXTCMD_IS_SUCCESS(res)) + { + log_msg(LOG_INFO, "Removed rule %s from %s with expire time of %u", + rule_num_str, ch[cpos].to_chain, rule_exp + ); + + rn_offset++; + + if (ch[cpos].active_rules > 0) + ch[cpos].active_rules--; + } + else + log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + + } + else + { + /* Track the minimum future rule expire time. + */ + if(rule_exp > now) + min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; + } + + /* Push our tracking index forward beyond (just processed) _exp_ + * string so we can continue to the next rule in the list. + */ + ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); + } + return; +} + /* Iterate over the configure firewall access chains and purge expired * firewall rules. */ void -check_firewall_rules(const fko_srv_options_t * const opts) +check_firewall_rules(const fko_srv_options_t * const opts, + const int chk_rm_all) { - char exp_str[12] = {0}; - char rule_num_str[6] = {0}; - char *ndx, *rn_start, *rn_end, *tmp_mark; + char *ndx; + char fw_output_buf[STANDARD_CMD_OUT_BUFSIZE] = {0}; - int i, res, rn_offset, rule_num, is_err; - time_t now, rule_exp, min_exp = 0; + int i, res; + time_t now, min_exp = 0; struct fw_chain *ch = opts->fw_config->chain; @@ -1408,15 +1603,21 @@ check_firewall_rules(const fko_srv_options_t * const opts) /* If there are no active rules or we have not yet * reached our expected next expire time, continue. */ - if(ch[i].active_rules == 0 || ch[i].next_expire > now) + if(!chk_rm_all && (ch[i].active_rules == 0 || ch[i].next_expire > now)) + continue; + + if(ch[i].table[0] == '\0' || ch[i].to_chain[i] == '\0') continue; zero_cmd_buffers(); + memset(fw_output_buf, 0x0, STANDARD_CMD_OUT_BUFSIZE); - rn_offset = 0; - - /* There should be a rule to delete. Get the current list of - * rules for this chain and delete the ones that are expired. + /* Get the current list of rules for this chain and delete + * any that have expired. Note that chk_rm_all puts us in + * garbage collection mode, and allows any rules that have + * been manually added (potentially by a program separate + * from fwknopd) to take advantage of fwknopd's timeout + * mechanism. */ snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " FIREWD_LIST_RULES_ARGS, opts->fw_config->fw_command, @@ -1424,27 +1625,30 @@ check_firewall_rules(const fko_srv_options_t * const opts) ch[i].to_chain ); - res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE, + res = run_extcmd(cmd_buf, fw_output_buf, STANDARD_CMD_OUT_BUFSIZE, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); - chop_newline(cmd_out); + chop_newline(fw_output_buf); - log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, cmd_out: %s)", - cmd_buf, res, cmd_out); + log_msg(LOG_DEBUG, + "check_firewall_rules() CMD: '%s' (res: %d, fw_output_buf: %s)", + cmd_buf, res, fw_output_buf); if(!EXTCMD_IS_SUCCESS(res)) { - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); + log_msg(LOG_ERR, + "Error %i from cmd:'%s': %s", res, cmd_buf, fw_output_buf); continue; } - log_msg(LOG_DEBUG, "RES=%i, CMD_BUF: %s\nRULES LIST: %s", res, cmd_buf, cmd_out); + log_msg(LOG_DEBUG, "RES=%i, CMD_BUF: %s\nRULES LIST: %s", + res, cmd_buf, fw_output_buf); - ndx = strstr(cmd_out, EXPIRE_COMMENT_PREFIX); + ndx = strstr(fw_output_buf, EXPIRE_COMMENT_PREFIX); if(ndx == NULL) { - /* we did not find an expected rule. + /* we did not find a candidate rule to expire */ - log_msg(LOG_ERR, + log_msg(LOG_DEBUG, "Did not find expire comment in rules list %i", i); if (ch[i].active_rules > 0) @@ -1453,121 +1657,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) continue; } - /* walk the list and process rules as needed. - */ - while (ndx != NULL) { - /* Jump forward and extract the timestamp - */ - ndx += strlen(EXPIRE_COMMENT_PREFIX); - - /* remember this spot for when we look for the next - * rule. - */ - tmp_mark = ndx; - - strlcpy(exp_str, ndx, sizeof(exp_str)); - rule_exp = (time_t)atoll(exp_str); - - if(rule_exp <= now) - { - /* Backtrack and get the rule number and delete it. - */ - rn_start = ndx; - while(--rn_start > cmd_out) - { - if(*rn_start == '\n') - break; - } - - if(*rn_start != '\n') - { - /* This should not happen. But if it does, complain, - * decrement the active rule value, and go on. - */ - log_msg(LOG_ERR, - "Rule parse error while finding rule line start in chain %i", i); - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - - break; - } - rn_start++; - - rn_end = strchr(rn_start, ' '); - if(rn_end == NULL) - { - /* This should not happen. But if it does, complain, - * decrement the active rule value, and go on. - */ - log_msg(LOG_ERR, - "Rule parse error while finding rule number in chain %i", i); - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - - break; - } - - strlcpy(rule_num_str, rn_start, (rn_end - rn_start)+1); - - rule_num = strtol_wrapper(rule_num_str, rn_offset, RCHK_MAX_FIREWD_RULE_NUM, - NO_EXIT_UPON_ERR, &is_err); - if(is_err != FKO_SUCCESS) - { - log_msg(LOG_ERR, - "Rule parse error while finding rule number in chain %i", i); - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - - break; - } - - zero_cmd_buffers(); - - snprintf(cmd_buf, CMD_BUFSIZE-1, "%s " FIREWD_DEL_RULE_ARGS, - opts->fw_config->fw_command, - ch[i].table, - ch[i].to_chain, - rule_num - rn_offset - ); - - res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, - WANT_STDERR, NO_TIMEOUT, &pid_status, opts); - chop_newline(err_buf); - - log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, err: %s)", - cmd_buf, res, err_buf); - - if(EXTCMD_IS_SUCCESS(res)) - { - log_msg(LOG_INFO, "Removed rule %s from %s with expire time of %u", - rule_num_str, ch[i].to_chain, rule_exp - ); - - rn_offset++; - - if (ch[i].active_rules > 0) - ch[i].active_rules--; - } - else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); - - } - else - { - /* Track the minimum future rule expire time. - */ - if(rule_exp > now) - min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; - } - - /* Push our tracking index forward beyond (just processed) _exp_ - * string so we can continue to the next rule in the list. - */ - ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); - } + rm_expired_rules(opts, fw_output_buf, ndx, ch, i, now); /* Set the next pending expire time accordingly. 0 if there are no * more rules, or whatever the next expected (min_exp) time will be. @@ -1577,6 +1667,7 @@ check_firewall_rules(const fko_srv_options_t * const opts) else if(min_exp) ch[i].next_expire = min_exp; } + return; } int diff --git a/server/fw_util_iptables.h b/server/fw_util_iptables.h index 67f39e35..223c4d1b 100644 --- a/server/fw_util_iptables.h +++ b/server/fw_util_iptables.h @@ -64,7 +64,6 @@ #define IPT_LIST_RULES_ARGS "-t %s -L %s --line-numbers -n" SH_REDIR #define IPT_LIST_ALL_RULES_ARGS "-t %s -v -n -L --line-numbers" SH_REDIR #define IPT_ANY_IP "0.0.0.0/0" -#define IPT_NAT_ANY_IP IPT_ANY_IP int validate_ipt_chain_conf(const char * const chain_str); From 71d6f01d110ddfc3db631a3cd85dd1559f20410e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 16 Jul 2015 11:49:04 -0700 Subject: [PATCH 172/219] [server] further no_chk_support for issue #162 --- server/fw_util_firewalld.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 13f23237..e409b903 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -71,7 +71,7 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, const unsigned int exp_ts) { int rule_exists=0; - char fw_line_buf[CMD_BUFSIZE] = {0}; + char fw_line_buf[CMD_BUFSIZE] = {0}; char target_search[CMD_BUFSIZE] = {0}; char proto_search[CMD_BUFSIZE] = {0}; char srcip_search[CMD_BUFSIZE] = {0}; @@ -119,7 +119,7 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, snprintf(dstip_search, CMD_BUFSIZE-1, " %s ", dstip); if (natip != NULL) - snprintf(natip_search, CMD_BUFSIZE-1, " to:%s ", natip); + snprintf(natip_search, CMD_BUFSIZE-1, " to:%s", natip); snprintf(exp_ts_search, CMD_BUFSIZE-1, "%u ", exp_ts); From 042bf2d438738c1c60b9dd6f95784700223e0de6 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 16 Jul 2015 11:59:34 -0700 Subject: [PATCH 173/219] bump version to 2.6.7 (getting close to 2.6.7-pre1) --- ChangeLog | 23 ++++++++++++++++------- VERSION | 2 +- configure.ac | 2 +- win32/config.h | 2 +- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index de513e3a..141b9d15 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,20 @@ fwknop-2.6.7 (05//2015): - - Added --key-gen to fwknopd. This feature was suggested by Jonathan - Bennett, and will help with ease of use efforts. The first platform to - take advantage of this will likely be OpenWRT thanks to Jonathan. - - Added a script from Jonathan Bennett at extras/console-qr/console-qr.sh - to generate QR codes from fwknopd access.conf keys. - - Added --with-firewalld to the autoconf configure script. This is a - synonym for --with-firewall-cmd to avoid confusion. Some package + - [server] Kevin Layer reported a bug to the fwknop mailing list that + simultaneous NAT access for two different access.conf stanza was not + functioning properly. After some diagnosis, this is a result of + rule_exists() not properly detecting and differentiating existing DNAT + rules from new ones with different port numbers when 'iptables -C' + support is not available. This was against iptables-1.4.7, and has been + fixed in this release of fwknop (tracked as issue #162). + - [server] Added --key-gen to fwknopd. This feature was suggested by + Jonathan Bennett, and will help with ease of use efforts. The first + platform to take advantage of this will likely be OpenWRT thanks to + Jonathan. + - [extras] Added a script from Jonathan Bennett at + extras/console-qr/console-qr.sh to generate QR codes from fwknopd + access.conf keys. + - [build] Added --with-firewalld to the autoconf configure script. This is + a synonym for --with-firewall-cmd to avoid confusion. Some package maintainers use --with-firewalld to build fwknop. fwknop-2.6.6 (04/23/2015): diff --git a/VERSION b/VERSION index 338a5b5d..e261122d 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.6.6 +2.6.7 diff --git a/configure.ac b/configure.ac index 7c5bb8cd..8fcc79ae 100644 --- a/configure.ac +++ b/configure.ac @@ -11,7 +11,7 @@ AC_PREREQ(2.62) dnl Define our name, version and email. m4_define(my_package, [fwknop]) -m4_define(my_version, [2.6.6]) +m4_define(my_version, [2.6.7]) m4_define(my_bug_email, [dstuart@dstuart.org]) AC_INIT(my_package, my_version, my_bug_email) diff --git a/win32/config.h b/win32/config.h index 6a86136a..1d9ac9f0 100644 --- a/win32/config.h +++ b/win32/config.h @@ -178,7 +178,7 @@ #undef TIME_WITH_SYS_TIME /* Version number of package */ -#define VERSION "2.6.6" +#define VERSION "2.6.7" /* Define to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel and VAX). */ From e7b48af47c79e7c4f91b67626ff3015ad204561b Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 17 Jul 2015 00:05:10 -0700 Subject: [PATCH 174/219] [server] Calculate payload length from IP header Github user Scotte noticed that in his setup a 'VSS-Monitoring ethernet trailer' was being added to incoming Ethernet frames that contained SPA packets. This caused base64 decoding to break because the packet data length was calculated from what libpcap returned for the frame (so these bytes became included in the SPA payload itself). This issue was reported as #163 on github. This commit has fwknopd calculate the SPA payload length using the length field in the IP header so that any trailing bytes in the Ethernet frame are not included. This solution also applies to the Ethernet Frame Check Sequence issue (#126). --- server/process_packet.c | 24 ++++++++++-------------- server/process_packet.h | 4 ++-- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/server/process_packet.c b/server/process_packet.c index 10467d9c..5ccb5e0a 100644 --- a/server/process_packet.c +++ b/server/process_packet.c @@ -58,6 +58,7 @@ process_packet(unsigned char *args, const struct pcap_pkthdr *packet_header, unsigned char *pkt_data; unsigned short pkt_data_len; unsigned char *pkt_end; + unsigned char *fr_end; unsigned int ip_hdr_words; @@ -85,7 +86,7 @@ process_packet(unsigned char *args, const struct pcap_pkthdr *packet_header, /* Determine packet end. */ - pkt_end = (unsigned char *) packet + packet_header->caplen; + fr_end = (unsigned char *) packet + packet_header->caplen; /* The ethernet header. */ @@ -128,7 +129,7 @@ process_packet(unsigned char *args, const struct pcap_pkthdr *packet_header, /* If IP header is past calculated packet end, bail. */ - if ((unsigned char*)(iph_p + 1) > pkt_end) + if ((unsigned char*)(iph_p + 1) > fr_end) return; /* ip_hdr_words is the number of 32 bit words in the IP header. After @@ -140,19 +141,14 @@ process_packet(unsigned char *args, const struct pcap_pkthdr *packet_header, if (ip_hdr_words < MIN_IPV4_WORDS) return; - /* Support for the cases where libpcap returns the Ethernet Frame Check - * Sequence (4 bytes at the end of the Ethernet frame) as part of the - * capture. libpcap returning the FCS is fairly rare. Default settings on - * the following system included an Ethernet FCS in the libpcap capture: - * BeagleBone Black rev C running 3.8.13-bone50 #1 SMP Tue May 13 - * 13:24:52 UTC 2014 armv7l GNU/Linux - * - * Calculate the new pkt_end from the length in the ip header. + /* Make sure to calculate the packet end based on the length in the + * IP header. This allows additional bytes that may be added to the + * frame (such as a 4-byte Ethernet Frame Check Sequence) to not + * interfere with SPA operations. */ - if(((unsigned char*)iph_p)+ntohs(iph_p->tot_len) == pkt_end-FCS_HEADER_LEN) { - log_msg(LOG_DEBUG, "Adjusting packet end to account for FCS header on Ethernet frame"); - pkt_end -= FCS_HEADER_LEN; - } + pkt_end = ((unsigned char*)iph_p)+ntohs(iph_p->tot_len); + if(pkt_end > fr_end) + return; /* Now, find the packet data payload (depending on IPPROTO). */ diff --git a/server/process_packet.h b/server/process_packet.h index a5966290..0e8946cc 100644 --- a/server/process_packet.h +++ b/server/process_packet.h @@ -33,7 +33,6 @@ #define IPV4_VER_MASK 0x15 #define MIN_IPV4_WORDS 0x05 -#define FCS_HEADER_LEN 0x04 /* For items not defined by this system */ @@ -47,7 +46,8 @@ /* Prototypes */ #if USE_LIBPCAP -void process_packet(unsigned char *args, const struct pcap_pkthdr *packet_header, const unsigned char *packet); +void process_packet(unsigned char *args, + const struct pcap_pkthdr *packet_header, const unsigned char *packet); #endif #endif /* PROCESS_PACKET_H */ From 4169c6d477021c79cfb02df36dd9fd1e712a2a2e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 17 Jul 2015 10:38:34 -0700 Subject: [PATCH 175/219] [server] switch chain_exists() log message to LOG_DEBUG upon error since FWKNOP_INPUT almost never exists at startup --- server/fw_util_firewalld.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index e409b903..9d9a6cfd 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -456,7 +456,8 @@ chain_exists(const fko_srv_options_t * const opts, const int chain_num) rv = 1; } else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_DEBUG, + "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); return rv; } @@ -506,9 +507,11 @@ jump_rule_exists_no_chk_support(const fko_srv_options_t * const opts, exists = 1; if(exists) - log_msg(LOG_DEBUG, "jump_rule_exists_no_chk_support() jump rule found"); + log_msg(LOG_DEBUG, + "jump_rule_exists_no_chk_support() jump rule found"); else - log_msg(LOG_DEBUG, "jump_rule_exists_no_chk_support() jump rule not found"); + log_msg(LOG_DEBUG, + "jump_rule_exists_no_chk_support() jump rule not found"); return(exists); } @@ -994,7 +997,8 @@ create_rule(const fko_srv_options_t * const opts, zero_cmd_buffers(); - snprintf(cmd_buf, CMD_BUFSIZE-1, "%s -A %s %s", opts->fw_config->fw_command, fw_chain, fw_rule); + snprintf(cmd_buf, CMD_BUFSIZE-1, "%s -A %s %s", + opts->fw_config->fw_command, fw_chain, fw_rule); res = run_extcmd(cmd_buf, err_buf, CMD_BUFSIZE, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); From b753812cf6a32cf934fa34544ecc426a6d559fa6 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 17 Jul 2015 11:48:28 -0700 Subject: [PATCH 176/219] [server] minor addition of function names to fw command error log messages --- server/fw_util_firewalld.c | 38 +++++++++++++++++++++++------------- server/fw_util_iptables.c | 40 +++++++++++++++++++++++++------------- 2 files changed, 51 insertions(+), 27 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 9d9a6cfd..f246532a 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -367,7 +367,8 @@ comment_match_exists(const fko_srv_options_t * const opts) chop_newline(cmd_out); if(!EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); + log_msg(LOG_ERR, "comment_match_exists() Error %i from cmd:'%s': %s", + res, cmd_buf, cmd_out); ndx = strstr(cmd_out, TMP_COMMENT); if(ndx == NULL) @@ -423,7 +424,8 @@ add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) rv = 1; } else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "add_jump_rule() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return rv; } @@ -457,7 +459,8 @@ chain_exists(const fko_srv_options_t * const opts, const int chain_num) } else log_msg(LOG_DEBUG, - "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + "chain_exists() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return rv; } @@ -568,7 +571,8 @@ fw_dump_rules(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) { - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "fw_dump_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); got_err++; } } @@ -605,7 +609,8 @@ fw_dump_rules(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) { - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "fw_dump_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); got_err++; } } @@ -650,7 +655,8 @@ delete_all_chains(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "delete_all_chains() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); cmd_ctr++; } @@ -674,7 +680,8 @@ delete_all_chains(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "delete_all_chains() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); zero_cmd_buffers(); @@ -693,7 +700,8 @@ delete_all_chains(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "delete_all_chains() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); } return; @@ -725,7 +733,8 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) if(EXTCMD_IS_SUCCESS(res)) rv = 1; else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "create_chain() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return rv; } @@ -956,7 +965,7 @@ fw_initialize(const fko_srv_options_t * const opts) if(create_fw_chains(opts) != 0) { log_msg(LOG_WARNING, - "Warning: Errors detected during fwknop custom chain creation"); + "fw_initialize() Warning: Errors detected during fwknop custom chain creation"); res = 0; } @@ -1013,7 +1022,8 @@ create_rule(const fko_srv_options_t * const opts, res = 1; } else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "create_rule() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return res; } @@ -1564,7 +1574,8 @@ rm_expired_rules(const fko_srv_options_t * const opts, ch[cpos].active_rules--; } else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "rm_expired_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); } else @@ -1640,7 +1651,8 @@ check_firewall_rules(const fko_srv_options_t * const opts, if(!EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_ERR, - "Error %i from cmd:'%s': %s", res, cmd_buf, fw_output_buf); + "check_firewall_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, fw_output_buf); continue; } diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 0249d42a..da7701c7 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -367,7 +367,8 @@ comment_match_exists(const fko_srv_options_t * const opts) chop_newline(cmd_out); if(!EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); + log_msg(LOG_ERR, "comment_match_exists() Error %i from cmd:'%s': %s", + res, cmd_buf, cmd_out); ndx = strstr(cmd_out, TMP_COMMENT); if(ndx == NULL) @@ -423,7 +424,8 @@ add_jump_rule(const fko_srv_options_t * const opts, const int chain_num) rv = 1; } else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "add_jump_rule() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return rv; } @@ -453,7 +455,8 @@ chain_exists(const fko_srv_options_t * const opts, const int chain_num) fwc.chain[chain_num].table, fwc.chain[chain_num].to_chain); else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "chain_exists() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return res; } @@ -561,7 +564,8 @@ fw_dump_rules(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) { - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "fw_dump_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); got_err++; } } @@ -598,7 +602,8 @@ fw_dump_rules(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) { - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "fw_dump_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); got_err++; } } @@ -643,7 +648,8 @@ delete_all_chains(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "delete_all_chains() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); cmd_ctr++; } @@ -667,7 +673,8 @@ delete_all_chains(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "delete_all_chains() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); zero_cmd_buffers(); @@ -686,7 +693,8 @@ delete_all_chains(const fko_srv_options_t * const opts) /* Expect full success on this */ if(! EXTCMD_IS_SUCCESS(res)) - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "delete_all_chains() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); } return; } @@ -717,7 +725,8 @@ create_chain(const fko_srv_options_t * const opts, const int chain_num) if(EXTCMD_IS_SUCCESS(res)) rv = 1; else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "create_chain() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return rv; } @@ -941,7 +950,7 @@ fw_initialize(const fko_srv_options_t * const opts) if(create_fw_chains(opts) != 0) { log_msg(LOG_WARNING, - "Warning: Errors detected during fwknop custom chain creation"); + "fw_initialize() Warning: Errors detected during fwknop custom chain creation"); res = 0; } @@ -999,7 +1008,8 @@ create_rule(const fko_srv_options_t * const opts, res = 1; } else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "create_rule() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); return res; } @@ -1535,7 +1545,7 @@ rm_expired_rules(const fko_srv_options_t * const opts, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); chop_newline(err_buf); - log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d, err: %s)", + log_msg(LOG_DEBUG, "rm_expired_rules() CMD: '%s' (res: %d, err: %s)", cmd_buf, res, err_buf); if(EXTCMD_IS_SUCCESS(res)) @@ -1550,7 +1560,8 @@ rm_expired_rules(const fko_srv_options_t * const opts, ch[cpos].active_rules--; } else - log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, err_buf); + log_msg(LOG_ERR, "rm_expired_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, err_buf); } else @@ -1626,7 +1637,8 @@ check_firewall_rules(const fko_srv_options_t * const opts, if(!EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_ERR, - "Error %i from cmd:'%s': %s", res, cmd_buf, ipt_output_buf); + "check_firewall_rules() Error %i from cmd:'%s': %s", + res, cmd_buf, ipt_output_buf); continue; } From 6e4ad4767fa08d0227547a628ba5c1898e55d78c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 17 Jul 2015 12:15:01 -0700 Subject: [PATCH 177/219] [server] make sure fw _exp_NNN... strings contain only digits after the _exp_ prefix --- server/fw_util_firewalld.c | 4 ++++ server/fw_util_ipfw.c | 4 ++++ server/fw_util_iptables.c | 4 ++++ server/fw_util_pf.c | 4 ++++ server/utils.c | 34 ++++++++++++++++++++++++++++++++++ server/utils.h | 2 ++ 6 files changed, 52 insertions(+) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index f246532a..ce59bfc2 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -1484,6 +1484,10 @@ rm_expired_rules(const fko_srv_options_t * const opts, tmp_mark = ndx; strlcpy(exp_str, ndx, sizeof(exp_str)); + chop_spaces(exp_str); + if(!is_digits(exp_str)) + break; + rule_exp = (time_t)atoll(exp_str); if(rule_exp <= now) diff --git a/server/fw_util_ipfw.c b/server/fw_util_ipfw.c index 1025b4e6..449f458e 100644 --- a/server/fw_util_ipfw.c +++ b/server/fw_util_ipfw.c @@ -681,6 +681,10 @@ check_firewall_rules(const fko_srv_options_t * const opts) tmp_mark = ndx; strlcpy(exp_str, ndx, sizeof(exp_str)); + chop_spaces(exp_str); + if(!is_digits(exp_str)) + break; + rule_exp = (time_t)atoll(exp_str); if(rule_exp <= now) diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index da7701c7..19497c33 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1470,6 +1470,10 @@ rm_expired_rules(const fko_srv_options_t * const opts, tmp_mark = ndx; strlcpy(exp_str, ndx, sizeof(exp_str)); + chop_spaces(exp_str); + if(!is_digits(exp_str)) + break; + rule_exp = (time_t)atoll(exp_str); if(rule_exp <= now) diff --git a/server/fw_util_pf.c b/server/fw_util_pf.c index f41bf7a7..e6951dd9 100644 --- a/server/fw_util_pf.c +++ b/server/fw_util_pf.c @@ -405,6 +405,10 @@ check_firewall_rules(const fko_srv_options_t * const opts) tmp_mark = ndx; strlcpy(exp_str, ndx, sizeof(exp_str)); + chop_spaces(exp_str); + if(!is_digits(exp_str)) + break; + rule_exp = (time_t)atoll(exp_str); if(rule_exp <= now) diff --git a/server/utils.c b/server/utils.c index a44cccf3..9d0a0f9c 100644 --- a/server/utils.c +++ b/server/utils.c @@ -194,6 +194,21 @@ chop_newline(char *str) return; } +void chop_spaces(char *str) +{ + int i; + if (str != NULL && str[0] != 0x0) + { + for (i=strlen(str)-1; i > 0; i--) + { + if(str[i] != 0x20) + break; + str[i] = 0x0; + } + } + return; +} + void truncate_partial_line(char *str) { @@ -226,6 +241,25 @@ truncate_partial_line(char *str) return; } +/* Simple test to see if a string only contains digits +*/ +int +is_digits(const char * const str) +{ + int i; + printf("........EXP: %s\n", str); + if (str != NULL && str[0] != 0x0) + { + for (i=0; i<strlen(str); i++) + { + if(!isdigit(str[i])) + return 0; + i++; + } + } + return 1; +} + static int add_argv(char **argv_new, int *argc_new, const char *new_arg, const fko_srv_options_t * const opts) diff --git a/server/utils.h b/server/utils.h index 4545d9af..fff0bb83 100644 --- a/server/utils.h +++ b/server/utils.h @@ -65,7 +65,9 @@ int is_valid_dir(const char *path); int is_valid_exe(const char *path); int verify_file_perms_ownership(const char *file); void chop_newline(char *str); +void chop_spaces(char *str); void truncate_partial_line(char *str); +int is_digits(const char * const str); int strtoargv(const char * const args_str, char **argv_new, int *argc_new, const fko_srv_options_t * const opts); void free_argv(char **argv_new, int *argc_new); From 76d8ce5158311c6881681bdc8fa8d74f44c61a8a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 17 Jul 2015 12:17:48 -0700 Subject: [PATCH 178/219] minor change to remove debugging statement --- server/utils.c | 1 - 1 file changed, 1 deletion(-) diff --git a/server/utils.c b/server/utils.c index 9d0a0f9c..a5091291 100644 --- a/server/utils.c +++ b/server/utils.c @@ -247,7 +247,6 @@ int is_digits(const char * const str) { int i; - printf("........EXP: %s\n", str); if (str != NULL && str[0] != 0x0) { for (i=0; i<strlen(str); i++) From 295a6a0d1489e8f80bd96dbf2488708c557803bf Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 17 Jul 2015 21:28:02 -0700 Subject: [PATCH 179/219] [server] fix is_digits() logic and add tests --- server/fw_util_firewalld.c | 7 ++++++- server/fw_util_ipfw.c | 7 ++++++- server/fw_util_iptables.c | 7 ++++++- server/fw_util_pf.c | 7 ++++++- test/tests/rijndael_hmac.pl | 36 ++++++++++++++++++++++++++++++++++++ 5 files changed, 60 insertions(+), 4 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index ce59bfc2..9d8c4c5b 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -1486,7 +1486,12 @@ rm_expired_rules(const fko_srv_options_t * const opts, strlcpy(exp_str, ndx, sizeof(exp_str)); chop_spaces(exp_str); if(!is_digits(exp_str)) - break; + { + /* go to the next rule if it exists + */ + ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); + continue; + } rule_exp = (time_t)atoll(exp_str); diff --git a/server/fw_util_ipfw.c b/server/fw_util_ipfw.c index 449f458e..1cde108d 100644 --- a/server/fw_util_ipfw.c +++ b/server/fw_util_ipfw.c @@ -683,7 +683,12 @@ check_firewall_rules(const fko_srv_options_t * const opts) strlcpy(exp_str, ndx, sizeof(exp_str)); chop_spaces(exp_str); if(!is_digits(exp_str)) - break; + { + /* go to the next rule if it exists + */ + ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); + continue; + } rule_exp = (time_t)atoll(exp_str); diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 19497c33..c349e2ad 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1472,7 +1472,12 @@ rm_expired_rules(const fko_srv_options_t * const opts, strlcpy(exp_str, ndx, sizeof(exp_str)); chop_spaces(exp_str); if(!is_digits(exp_str)) - break; + { + /* go to the next rule if it exists + */ + ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); + continue; + } rule_exp = (time_t)atoll(exp_str); diff --git a/server/fw_util_pf.c b/server/fw_util_pf.c index e6951dd9..1a47b975 100644 --- a/server/fw_util_pf.c +++ b/server/fw_util_pf.c @@ -407,7 +407,12 @@ check_firewall_rules(const fko_srv_options_t * const opts) strlcpy(exp_str, ndx, sizeof(exp_str)); chop_spaces(exp_str); if(!is_digits(exp_str)) - break; + { + /* go to the next rule if it exists + */ + ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); + continue; + } rule_exp = (time_t)atoll(exp_str); diff --git a/test/tests/rijndael_hmac.pl b/test/tests/rijndael_hmac.pl index b09f760e..ce07456d 100644 --- a/test/tests/rijndael_hmac.pl +++ b/test/tests/rijndael_hmac.pl @@ -231,6 +231,42 @@ 'key_file' => $cf{'rc_hmac_b64_key'}, 'client_cycles_per_server_instance' => 3, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => 'invalid _exp_ prefix', + 'function' => \&spa_cycle, + 'cmdline' => $default_client_hmac_args, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . + "-d $default_digest_file -p $default_pid_file " . + "$intf_str --no-ipt-check-support --no-firewd-check-support", + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'insert_duplicate_rule_while_running' => $YES, + 'fw_dupe_rule_args' => [ + "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment _exp_NNN -j ACCEPT" + ], + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => 'invalid _exp_ prefix (2)', + 'function' => \&spa_cycle, + 'cmdline' => $default_client_hmac_args, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'fw_rule_created' => $NEW_RULE_REQUIRED, + 'fw_rule_removed' => $NEW_RULE_REMOVED, + 'key_file' => $cf{'rc_hmac_b64_key'}, + 'insert_duplicate_rule_while_running' => $YES, + 'fw_dupe_rule_args' => [ + "-A FWKNOP_INPUT -p 6 -s $fake_ip -d 0.0.0.0/0 " . + "--dport 22 -m comment --comment _exp_NNN -j ACCEPT" + ], + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', From 795b1de4ddeeed3c2331ec69f60f66253e04a055 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 18 Jul 2015 10:37:17 -0700 Subject: [PATCH 180/219] [server] Added RULES_CHECK_THRESHOLD to define 'deep' rule expiration check frequency The RULES_CHECK_THRESHOLD variable defines the number of times firewall rule expiration times must be checked before a "deep" check is run. This allows fwknopd to remove rules that contain a proper '_exp_<time>' even if a third party program added them instead of fwknopd. The default value for this variable is 20, and this typically results in this check being run every two seconds or so. To disable this type of checking altogether, set this variable to zero. --- doc/fwknopd.man.asciidoc | 8 ++++++++ server/cmd_opts.h | 1 + server/config_init.c | 11 ++++++++++- server/fwknopd_common.h | 4 +++- server/pcap_capture.c | 22 +++++++++++++++++----- server/udp_server.c | 19 +++++++++++++++---- 6 files changed, 54 insertions(+), 11 deletions(-) diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index 2924217a..b56f9085 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -277,6 +277,14 @@ corresponding details. previously save digests. It is a good idea to leave this feature on to reduce the possibility of being vulnerable to a replay attack. +*RULES_CHECK_THRESHOLD* '<count>':: + Defines the number of times firewall rule expiration times must be checked + before a "deep" check is run. This allows *fwknopd* to remove rules that + contain a proper '_exp_<time>' even if a third party program added them + instead of *fwknopd*. The default value for this variable is 20, and this + typically results in this check being run every two seconds or so. To + disable this type of checking altogether, set this variable to zero. + *ENABLE_IPT_FORWARDING* '<Y/N>':: Allow SPA clients to request access to services through an iptables firewall instead of just to it (i.e. access through the FWKNOP_FORWARD diff --git a/server/cmd_opts.h b/server/cmd_opts.h index bda46183..561a0198 100644 --- a/server/cmd_opts.h +++ b/server/cmd_opts.h @@ -52,6 +52,7 @@ static char *config_map[NUMBER_OF_CONFIG_ENTRIES] = { "ENABLE_SPA_PACKET_AGING", "MAX_SPA_PACKET_AGE", "ENABLE_DIGEST_PERSISTENCE", + "RULES_CHECK_THRESHOLD", "CMD_EXEC_TIMEOUT", //"BLACKLIST", "ENABLE_SPA_OVER_HTTP", diff --git a/server/config_init.c b/server/config_init.c index ca9111f9..a1312549 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -149,6 +149,8 @@ validate_int_var_ranges(fko_srv_options_t *opts) 1, RCHK_MAX_SPA_PACKET_AGE); range_check(opts, "MAX_SNIFF_BYTES", opts->config[CONF_MAX_SNIFF_BYTES], 1, RCHK_MAX_SNIFF_BYTES); + range_check(opts, "RULES_CHECK_THRESHOLD", opts->config[CONF_RULES_CHECK_THRESHOLD], + 0, RCHK_MAX_RULES_CHECK_THRESHOLD); range_check(opts, "TCPSERV_PORT", opts->config[CONF_TCPSERV_PORT], 1, RCHK_MAX_TCPSERV_PORT); range_check(opts, "UDPSERV_PORT", opts->config[CONF_UDPSERV_PORT], @@ -484,13 +486,20 @@ validate_options(fko_srv_options_t *opts) set_config_entry(opts, CONF_MAX_SPA_PACKET_AGE, DEF_MAX_SPA_PACKET_AGE); - /* Enable digest persistence. */ if(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE] == NULL) set_config_entry(opts, CONF_ENABLE_DIGEST_PERSISTENCE, DEF_ENABLE_DIGEST_PERSISTENCE); + /* Set firewall rule "deep" collection interval - this allows + * fwknopd to remove rules with proper _exp_<time> expiration + * times even when added by a different program. + */ + if(opts->config[CONF_RULES_CHECK_THRESHOLD] == NULL) + set_config_entry(opts, CONF_RULES_CHECK_THRESHOLD, + DEF_RULES_CHECK_THRESHOLD); + /* Enable destination rule. */ if(opts->config[CONF_ENABLE_DESTINATION_RULE] == NULL) diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index c882615c..505b341c 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -91,7 +91,7 @@ #define DEF_ENABLE_SPA_PACKET_AGING "Y" #define DEF_MAX_SPA_PACKET_AGE "120" #define DEF_ENABLE_DIGEST_PERSISTENCE "Y" -#define DEF_RULES_CHECK_CTR 10 +#define DEF_RULES_CHECK_THRESHOLD "20" #define DEF_MAX_SNIFF_BYTES "1500" #define DEF_GPG_HOME_DIR "/root/.gnupg" #ifdef GPG_EXE @@ -130,6 +130,7 @@ #define RCHK_MAX_UDPSERV_SELECT_TIMEOUT (2 << 22) #define RCHK_MAX_PCAP_DISPATCH_COUNT (2 << 22) #define RCHK_MAX_FW_TIMEOUT (2 << 22) +#define RCHK_MAX_RULES_CHECK_THRESHOLD ((2 << 16) - 1) /* FirewallD-specific defines */ @@ -236,6 +237,7 @@ enum { CONF_ENABLE_SPA_PACKET_AGING, CONF_MAX_SPA_PACKET_AGE, CONF_ENABLE_DIGEST_PERSISTENCE, + CONF_RULES_CHECK_THRESHOLD, CONF_CMD_EXEC_TIMEOUT, //CONF_BLACKLIST, CONF_ENABLE_SPA_OVER_HTTP, diff --git a/server/pcap_capture.c b/server/pcap_capture.c index e332dbc2..aff9d314 100644 --- a/server/pcap_capture.c +++ b/server/pcap_capture.c @@ -65,6 +65,7 @@ pcap_capture(fko_srv_options_t *opts) int pcap_file_mode = 0; int status; int useconds; + int rules_chk_threshold; int pcap_dispatch_count; int max_sniff_bytes; int is_err; @@ -79,7 +80,7 @@ pcap_capture(fko_srv_options_t *opts) 0, RCHK_MAX_PCAP_LOOP_SLEEP, NO_EXIT_UPON_ERR, &is_err); if(is_err != FKO_SUCCESS) { - log_msg(LOG_ERR, "[*] invalid PCAP_LOOP_SLEEP_value"); + log_msg(LOG_ERR, "[*] invalid PCAP_LOOP_SLEEP value"); clean_exit(opts, FW_CLEANUP, EXIT_FAILURE); } @@ -91,6 +92,14 @@ pcap_capture(fko_srv_options_t *opts) clean_exit(opts, FW_CLEANUP, EXIT_FAILURE); } + rules_chk_threshold = strtol_wrapper(opts->config[CONF_RULES_CHECK_THRESHOLD], + 0, RCHK_MAX_RULES_CHECK_THRESHOLD, NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, "[*] invalid RULES_CHECK_THRESHOLD"); + clean_exit(opts, FW_CLEANUP, EXIT_FAILURE); + } + /* Set promiscuous mode if ENABLE_PCAP_PROMISC is set to 'Y'. */ if(strncasecmp(opts->config[CONF_ENABLE_PCAP_PROMISC], "Y", 1) == 0) @@ -325,11 +334,14 @@ pcap_capture(fko_srv_options_t *opts) */ if(!opts->test) { - opts->check_rules_ctr++; - if(opts->check_rules_ctr % DEF_RULES_CHECK_CTR == 0) + if(rules_chk_threshold > 0) { - chk_rm_all = 1; - opts->check_rules_ctr = 0; + opts->check_rules_ctr++; + if ((opts->check_rules_ctr % rules_chk_threshold) == 0) + { + chk_rm_all = 1; + opts->check_rules_ctr = 0; + } } check_firewall_rules(opts, chk_rm_all); chk_rm_all = 0; diff --git a/server/udp_server.c b/server/udp_server.c index bc0fb787..42398b3d 100644 --- a/server/udp_server.c +++ b/server/udp_server.c @@ -54,6 +54,7 @@ run_udp_server(fko_srv_options_t *opts) { int s_sock, sfd_flags, selval, pkt_len; int is_err, s_timeout, rv=1, chk_rm_all=0; + int rules_chk_threshold; fd_set sfd_set; struct sockaddr_in saddr, caddr; struct timeval tv; @@ -76,6 +77,13 @@ run_udp_server(fko_srv_options_t *opts) log_msg(LOG_ERR, "[*] Invalid max UDPSERV_SELECT_TIMEOUT value."); return -1; } + rules_chk_threshold = strtol_wrapper(opts->config[CONF_RULES_CHECK_THRESHOLD], + 0, RCHK_MAX_RULES_CHECK_THRESHOLD, NO_EXIT_UPON_ERR, &is_err); + if(is_err != FKO_SUCCESS) + { + log_msg(LOG_ERR, "[*] invalid RULES_CHECK_THRESHOLD"); + clean_exit(opts, FW_CLEANUP, EXIT_FAILURE); + } log_msg(LOG_INFO, "Kicking off UDP server to listen on port %i.", port); @@ -149,11 +157,14 @@ run_udp_server(fko_srv_options_t *opts) */ if(!opts->test) { - opts->check_rules_ctr++; - if(opts->check_rules_ctr % DEF_RULES_CHECK_CTR == 0) + if(rules_chk_threshold > 0) { - chk_rm_all = 1; - opts->check_rules_ctr = 0; + opts->check_rules_ctr++; + if ((opts->check_rules_ctr % rules_chk_threshold) == 0) + { + chk_rm_all = 1; + opts->check_rules_ctr = 0; + } } check_firewall_rules(opts, chk_rm_all); chk_rm_all = 0; From 8647854efe986d7b8bcab5a3dbe6e7541c46713f Mon Sep 17 00:00:00 2001 From: Ilya Tumaykin <itumaykin@gmail.com> Date: Sun, 19 Jul 2015 06:18:54 +0300 Subject: [PATCH 181/219] extras: add systemd unit file and tmpfiles.d configuration for fwknopd --- extras/systemd/fwknopd.service | 12 ++++++++++++ extras/systemd/fwknopd.tmpfiles.conf | 1 + 2 files changed, 13 insertions(+) create mode 100644 extras/systemd/fwknopd.service create mode 100644 extras/systemd/fwknopd.tmpfiles.conf diff --git a/extras/systemd/fwknopd.service b/extras/systemd/fwknopd.service new file mode 100644 index 00000000..d2e8c312 --- /dev/null +++ b/extras/systemd/fwknopd.service @@ -0,0 +1,12 @@ +[Unit] +Description=Firewall Knock Operator Daemon +After=network-online.target + +[Service] +Type=forking +PIDFile=/run/fwknop/fwknopd.pid +ExecStart=/usr/sbin/fwknopd +ExecReload=/bin/kill -HUP $MAINPID + +[Install] +WantedBy=multi-user.target diff --git a/extras/systemd/fwknopd.tmpfiles.conf b/extras/systemd/fwknopd.tmpfiles.conf new file mode 100644 index 00000000..b7cb3856 --- /dev/null +++ b/extras/systemd/fwknopd.tmpfiles.conf @@ -0,0 +1 @@ +d /run/fwknop 0700 root root - From 89b2e8f477245bf6fdf1d2746c829f9ba26faf15 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 18 Jul 2015 13:11:25 -0700 Subject: [PATCH 182/219] [server] interface goes down will cause fwknopd to exit By default, fwknopd will now exit if the interface that it is sniffing goes down (patch contributed by Github user 'sgh7'). If this happens, it is expected that the native process monitoring feature in things like systemd or upstart will restart fwknopd. However, if fwknopd is not being monitored by systemd, upstart, or anything else, this behavior can be disabled with the EXIT_AT_INTF_DOWN variable in the fwknopd.conf file. If disabled, fwknopd will try to recover when a downed interface comes back up. --- CREDITS | 6 ++++ ChangeLog | 8 +++++ Makefile.am | 1 + doc/fwknopd.man.asciidoc | 9 +++++ server/cmd_opts.h | 1 + server/config_init.c | 7 ++++ server/fwknopd_common.h | 2 ++ server/pcap_capture.c | 3 +- test/conf/no_exit_down_intf_fwknopd.conf | 1 + test/test-fwknop.pl | 46 ++++++++++++++++++++---- test/tests/basic_operations.pl | 20 +++++++++++ 11 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 test/conf/no_exit_down_intf_fwknopd.conf diff --git a/CREDITS b/CREDITS index 5dc3fa2b..b9ebecd6 100644 --- a/CREDITS +++ b/CREDITS @@ -224,3 +224,9 @@ Dan Brooks - Contributed a patch for the Android client app to add the definition of custom server udp port. This is similiar to the --server-port argument offered by the main fwknop client. + +Github user 'sgh7': + - Contributed a patch to have fwknopd exit if the interface it is sniffing + on goes down. If this happens, it is expected that the native process + monitoring feature in things like systemd or upstart will restart + fwknopd. diff --git a/ChangeLog b/ChangeLog index 141b9d15..360dfce8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -10,6 +10,14 @@ fwknop-2.6.7 (05//2015): Jonathan Bennett, and will help with ease of use efforts. The first platform to take advantage of this will likely be OpenWRT thanks to Jonathan. + - [server] By default, fwknopd will now exit if the interface that it is + sniffing goes down (patch contributed by Github user 'sgh7'). If this + happens, it is expected that the native process monitoring feature in + things like systemd or upstart will restart fwknopd. However, if fwknopd + is not being monitored by systemd, upstart, or anything else, this + behavior can be disabled with the EXIT_AT_INTF_DOWN variable in the + fwknopd.conf file. If disabled, fwknopd will try to recover when a + downed interface comes back up. - [extras] Added a script from Jonathan Bennett at extras/console-qr/console-qr.sh to generate QR codes from fwknopd access.conf keys. diff --git a/Makefile.am b/Makefile.am index 9b3781cd..306e3b09 100644 --- a/Makefile.am +++ b/Makefile.am @@ -151,6 +151,7 @@ EXTRA_DIST = \ test/conf/expired_epoch_stanza_access.conf \ test/conf/expired_stanza_access.conf \ test/conf/force_nat_access.conf \ + test/conf/no_exit_down_intf_fwknopd.conf \ test/conf/future_expired_stanza_access.conf \ test/conf/fuzzing_open_ports_access.conf \ test/conf/fuzzing_restrict_ports_access.conf \ diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index b56f9085..faa7d459 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -335,6 +335,15 @@ corresponding details. Flush all existing rules in the fwknop chains when *fwknopd* is stopped or otherwise exits cleanly. The default is ``Y''. +*EXIT_AT_INTF_DOWN* '<Y/N>':: + When *fwknopd* is sniffing an interface, if the interface is + administratively downed or unplugged, fwknopd will cleanly exit and an + assumption is made that any process monitoring infrastructure like systemd + or upstart will restart it. However, if fwknopd is not being monitored by + systemd, upstart, or anything else, this behavior can be disabled with the + ``EXIT_AT_INTF_DOWN'' variable. If disabled, fwknopd will try to recover + when a downed interface comes back up. + *GPG_HOME_DIR* '<path>':: If GPG keys are used instead of a Rijndael symmetric key, this is the default GPG keys directory. Note that each access stanza in diff --git a/server/cmd_opts.h b/server/cmd_opts.h index 561a0198..cd39a7c1 100644 --- a/server/cmd_opts.h +++ b/server/cmd_opts.h @@ -48,6 +48,7 @@ static char *config_map[NUMBER_OF_CONFIG_ENTRIES] = { "PCAP_DISPATCH_COUNT", "PCAP_LOOP_SLEEP", "ENABLE_PCAP_ANY_DIRECTION", + "EXIT_AT_INTF_DOWN", "MAX_SNIFF_BYTES", "ENABLE_SPA_PACKET_AGING", "MAX_SPA_PACKET_AGE", diff --git a/server/config_init.c b/server/config_init.c index a1312549..d1456820 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -459,6 +459,13 @@ validate_options(fko_srv_options_t *opts) set_config_entry(opts, CONF_PCAP_LOOP_SLEEP, DEF_PCAP_LOOP_SLEEP); + /* Control whether to exit if the interface where we're sniffing + * goes down. + */ + if(opts->config[CONF_EXIT_AT_INTF_DOWN] == NULL) + set_config_entry(opts, CONF_EXIT_AT_INTF_DOWN, + DEF_EXIT_AT_INTF_DOWN); + /* PCAP Filter. */ if(opts->config[CONF_PCAP_FILTER] == NULL) diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index 505b341c..2fdc2ae2 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -88,6 +88,7 @@ #define DEF_PCAP_DISPATCH_COUNT "100" #define DEF_PCAP_LOOP_SLEEP "100000" /* a tenth of a second (in microseconds) */ #define DEF_ENABLE_PCAP_ANY_DIRECTION "N" +#define DEF_EXIT_AT_INTF_DOWN "Y" #define DEF_ENABLE_SPA_PACKET_AGING "Y" #define DEF_MAX_SPA_PACKET_AGE "120" #define DEF_ENABLE_DIGEST_PERSISTENCE "Y" @@ -233,6 +234,7 @@ enum { CONF_PCAP_DISPATCH_COUNT, CONF_PCAP_LOOP_SLEEP, CONF_ENABLE_PCAP_ANY_DIRECTION, + CONF_EXIT_AT_INTF_DOWN, CONF_MAX_SNIFF_BYTES, CONF_ENABLE_SPA_PACKET_AGING, CONF_MAX_SPA_PACKET_AGE, diff --git a/server/pcap_capture.c b/server/pcap_capture.c index aff9d314..38d91e3d 100644 --- a/server/pcap_capture.c +++ b/server/pcap_capture.c @@ -299,7 +299,8 @@ pcap_capture(fko_srv_options_t *opts) */ else if(res == -1) { - if(errno == ENETDOWN) + if((strncasecmp(opts->config[CONF_EXIT_AT_INTF_DOWN], "Y", 1) == 0) + && errno == ENETDOWN) { log_msg(LOG_ERR, "[*] Fatal error from pcap_dispatch: %s", pcap_geterr(pcap) diff --git a/test/conf/no_exit_down_intf_fwknopd.conf b/test/conf/no_exit_down_intf_fwknopd.conf new file mode 100644 index 00000000..cac6a28d --- /dev/null +++ b/test/conf/no_exit_down_intf_fwknopd.conf @@ -0,0 +1 @@ +EXIT_AT_INTF_DOWN N; diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 3e53e3b0..323d0286 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -276,6 +276,7 @@ our $openssl_path = ''; our $base64_path = ''; our $pinentry_fail = 0; our $perl_path = ''; +our $ifconfig_path = ''; our $platform = ''; our $help = 0; our $YES = 1; @@ -463,6 +464,7 @@ our %cf = ( 'dual_key_access' => "$conf_dir/dual_key_usage_access.conf", 'dual_key_legacy_iv_access' => "$conf_dir/dual_key_legacy_iv_access.conf", 'hmac_dual_key_access' => "$conf_dir/hmac_dual_key_usage_access.conf", + 'no_exit_down_intf' => "$conf_dir/no_exit_down_intf_fwknopd.conf", 'gpg_access' => "$conf_dir/gpg_access.conf", 'gpg_hmac_access' => "$conf_dir/gpg_hmac_access.conf", 'gpg_invalid_exe_access' => "$conf_dir/gpg_invalid_exe_access.conf", @@ -603,6 +605,7 @@ exit &diff_test_results() if $diff_mode; ### run an fwknop command under gdb from a previous test run exit &gdb_test_cmd() if $gdb_test_file; +$ifconfig_path = &find_command('ifconfig') unless $ifconfig_path; &identify_loopback_intf() unless $list_mode or $client_only_mode; ### make sure everything looks as expected before continuing @@ -901,6 +904,7 @@ my %test_keys = ( 'cmd_exec_file_owner' => $OPTIONAL, 'rm_rule_mid_cycle' => $OPTIONAL, 'server_receive_re' => $OPTIONAL, + 'no_exit_intf_down' => $OPTIONAL, 'positive_output_matches' => $OPTIONAL, 'negative_output_matches' => $OPTIONAL, 'client_and_server_mode' => $OPTIONAL_NUMERIC, @@ -5438,6 +5442,27 @@ sub server_ignore_small_packets() { return $rv; } +sub down_interface() { + my $test_hr = shift; + + my $rv = 1; + + &start_fwknopd($test_hr); + + &run_cmd("$ifconfig_path lo down", $cmd_out_tmp, $curr_test_file); + sleep 1; + &run_cmd("$ifconfig_path lo up", $cmd_out_tmp, $curr_test_file); + + if (&is_fwknopd_running()) { + $rv = 0 unless $test_hr->{'no_exit_intf_down'} eq $YES; + &stop_fwknopd(); + } + + $rv = 0 unless &process_output_matches($test_hr); + + return $rv; +} + sub client_server_interaction() { my ($test_hr, $pkts_hr, $spa_client_flag) = @_; @@ -6911,12 +6936,12 @@ sub init() { push @tests_to_exclude, qr/perl FKO module.*FUZZING/; } - $sudo_path = &find_command('sudo') unless $sudo_path; - $killall_path = &find_command('killall') unless $killall_path; - $pgrep_path = &find_command('pgrep') unless $pgrep_path; - $lib_view_cmd = &find_command('ldd') unless $lib_view_cmd; - $git_path = &find_command('git') unless $git_path; - $perl_path = &find_command('perl') unless $perl_path; + $sudo_path = &find_command('sudo') unless $sudo_path; + $killall_path = &find_command('killall') unless $killall_path; + $pgrep_path = &find_command('pgrep') unless $pgrep_path; + $lib_view_cmd = &find_command('ldd') unless $lib_view_cmd; + $git_path = &find_command('git') unless $git_path; + $perl_path = &find_command('perl') unless $perl_path; if ($sudo_path) { $username = (getpwuid((stat($test_suite_path))[4]))[0]; @@ -6949,6 +6974,10 @@ sub init() { $lcov_path = &find_command('lcov') unless $lcov_path; $genhtml_path = &find_command('genhtml') unless $genhtml_path; + unless ($ifconfig_path) { + push @tests_to_exclude, qr/down interface/; + } + ### see if we're compiled with ASAN support if (&file_find_regex([qr/enable\-asan\-support/], $MATCH_ALL, $NO_APPEND_RESULTS, $config_log)) { @@ -7154,6 +7183,9 @@ sub openssl_hmac_style_check() { sub identify_loopback_intf() { return if $loopback_intf; + die "[*] ifconfig command not found, use --loopback <name>" + unless $ifconfig_path; + ### Linux: ### lo Link encap:Local Loopback @@ -7177,7 +7209,7 @@ sub identify_loopback_intf() { my $intf = ''; my $found_loopback_intf = 0; - my $cmd = 'ifconfig -a'; + my $cmd = "$ifconfig_path -a"; open C, "$cmd |" or die "[*] (use --loopback <name>) $cmd: $!"; while (<C>) { if (/^(\S+?):?\s+.*loopback/i) { diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index a2246581..0a1f8415 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -62,6 +62,26 @@ 'detail' => 'start restart stop cycle', 'function' => \&server_start_stop_cycle, }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => 'exit upon down interface', + 'function' => \&down_interface, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/Fatal error from pcap_dispatch\b/], + }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => 'no exit upon down interface', + 'function' => \&down_interface, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'no_exit_down_intf'} " . + "-a $cf{'hmac_access'} -d $default_digest_file -p " . + "$default_pid_file $intf_str", + 'server_positive_output_matches' => [qr/Error from pcap_dispatch\b/], + 'no_exit_intf_down' => $YES + }, { 'category' => 'basic operations', From 0ac52b9b4d8a332671c8d1c75e74bd0527442f97 Mon Sep 17 00:00:00 2001 From: micha137 <bunk@iat.uni-leipzig.de> Date: Tue, 21 Jul 2015 18:39:43 +0200 Subject: [PATCH 183/219] Fix some typos --- server/fwknopd.conf | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/server/fwknopd.conf b/server/fwknopd.conf index f406acc5..ed2afeb1 100644 --- a/server/fwknopd.conf +++ b/server/fwknopd.conf @@ -13,13 +13,13 @@ # You will need to edit the access.conf file in order for fwknop to function # correctly. # -# Most of these can remain commented out unless you need to overide the +# Most of these can remain commented out unless you need to override the # default setting. # # It is also important to note that there are some subtle (and some not # so subtle) differences between this configuration file, its parameters # and valid values and the configuration file used by the legacy Perl -# version of fwknopd. Please pay careful attention to the format and +# version of fwknopd. Please pay careful attention to the format and # values used in this file if you are migrating from the legacy Perl # version. # @@ -28,8 +28,8 @@ # # Define the default verbosity level the fwknop server should use. -# A value of "0" is the default verbosity level. Setting it up to "1" or -# higher will allow debugging messges be displayed. +# A value of "0" is the default verbosity level. Setting it up to "1" or +# higher will allow debugging messages to be displayed. # #VERBOSE 0; @@ -81,7 +81,7 @@ # man page. #PCAP_DISPATCH_COUNT 0; -# Sets the number of microseconds to passed as an argument to usleep() in +# Sets the number of microseconds to pass as an argument to usleep() in # the pcap loop. The default is 100000 microseconds, or 1/10th of a second. #PCAP_LOOP_SLEEP 100000; @@ -111,8 +111,8 @@ # Enable the fwknopd TCP server. This is a "dummy" TCP server that will # accept TCP connection requests on the specified TCPSERV_PORT. -# If set to "Y", fwknopd will fork off a child process to listen for, and -# accept incoming TCP request. This server only accepts the +# If set to "Y", fwknopd will fork off a child process to listen for and +# accept incoming TCP requests. This server only accepts the # request. It does not otherwise communicate. This is only to allow the # incoming SPA over TCP packet which is detected via PCAP. The connection # is closed after 1 second regardless. @@ -142,7 +142,7 @@ # This variable controls whether fwknopd is permitted to sniff SPA packets # regardless of whether they are received on the sniffing interface or sent -# from the sniffing interface. In the later case, this can be useful to have +# from the sniffing interface. In the latter case, this can be useful to have # fwknopd sniff SPA packets that are forwarded through a system and destined # for a different network. If the sniffing interface is the egress interface # for such packets, then this variable will need to be set to "Y" in order for @@ -167,7 +167,7 @@ # This is a possible future feature of fwknopd. # # The following four variables control whether a global set of "open" and -# "close" commands are executed after receving a valid SPA packet. These +# "close" commands are executed after receiving a valid SPA packet. These # variables are used only if FIREWALL_TYPE is set to "external_cmd", but # the same variables can also exist within the access.conf file so that # mixed deployments are possible - that is, some SPA packets will operate @@ -216,7 +216,7 @@ #FLUSH_FIREWD_AT_EXIT Y; # -# Allow SPA clients to request access to services through an firewalld +# Allow SPA clients to request access to services through a firewalld # firewall instead of just to it (i.e. access through the FWKNOP_FORWARD # chain instead of the INPUT chain). # @@ -240,7 +240,7 @@ # when ENABLE_FIREWD_SNAT is set to "Y", and by default SNAT rules are built # with the MASQUERADE target (since then the internal IP does not have to be # defined here in the fwknop.conf file), but if you want fwknopd to use the -# SNAT target then also defined an IP address with the SNAT_TRANSLATE_IP +# SNAT target then also define an IP address with the SNAT_TRANSLATE_IP # variable. # #ENABLE_FIREWD_SNAT N; @@ -283,7 +283,7 @@ # where fwknop rules are added. # # "Rule_position": -# Defines the position where rule are added within the To_chain. +# Defines the position where rules are added within the To_chain. # #FIREWD_INPUT_ACCESS ACCEPT, filter, INPUT, 1, FWKNOP_INPUT, 1; @@ -309,7 +309,7 @@ # firewalld 'comment' match at start up. If it's not found, then fwknopd will # exit and throw an error. This variable is enabled by default, but can be # disabled if you want fwknopd to run without being sure that the comment match -# if available (not recommended, since the comment match enables new SPA rules +# is available (not recommended, since the comment match enables new SPA rules # to be timed out). # #ENABLE_FIREWD_COMMENT_CHECK Y; @@ -348,7 +348,7 @@ # when ENABLE_IPT_SNAT is set to "Y", and by default SNAT rules are built # with the MASQUERADE target (since then the internal IP does not have to be # defined here in the fwknop.conf file), but if you want fwknopd to use the -# SNAT target then also defined an IP address with the SNAT_TRANSLATE_IP +# SNAT target then also define an IP address with the SNAT_TRANSLATE_IP # variable. # #ENABLE_IPT_SNAT N; @@ -417,7 +417,7 @@ # iptables 'comment' match at start up. If it's not found, then fwknopd will # exit and throw an error. This variable is enabled by default, but can be # disabled if you want fwknopd to run without being sure that the comment match -# if available (not recommended, since the comment match enables new SPA rules +# is available (not recommended, since the comment match enables new SPA rules # to be timed out). # #ENABLE_IPT_COMMENT_CHECK Y; From d681485e2921020fddd4678a2f2bf93dfc15e92d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Jul 2015 20:23:04 -0700 Subject: [PATCH 184/219] [server] add sudo support, closes #159 --- ChangeLog | 11 +- doc/fwknopd.man.asciidoc | 2 +- server/access.c | 137 ++++++++++++++++------ server/config_init.c | 13 +++ server/extcmd.c | 4 +- server/fwknopd_common.h | 4 + server/incoming_spa.c | 51 +++++++-- test/test-fwknop.pl | 124 ++++++++++++++++++-- test/tests/rijndael_hmac_cmd_exec.pl | 162 ++++++++++++++++++++++++++- 9 files changed, 448 insertions(+), 60 deletions(-) diff --git a/ChangeLog b/ChangeLog index 360dfce8..2b668bb2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,7 +1,14 @@ -fwknop-2.6.7 (05//2015): +fwknop-2.6.7 (07//2015): + - [server] Added sudo support for command execution mode. This was + suggested by Github user 'freegigi' (issue #159) as a means to provide + command filtering using the powerful sudoers syntax. This feature is + implemented by prefixing any incoming command from a valid SPA packet + with the sudo command along with optional user and group requirements + as defined by the following new access.conf variables: + ENABLE_CMD_SUDO_EXEC, CMD_SUDO_EXEC_USER, and CMD_SUDO_EXEC_GROUP. - [server] Kevin Layer reported a bug to the fwknop mailing list that simultaneous NAT access for two different access.conf stanza was not - functioning properly. After some diagnosis, this is a result of + functioning properly. After some diagnosis, this was a result of rule_exists() not properly detecting and differentiating existing DNAT rules from new ones with different port numbers when 'iptables -C' support is not available. This was against iptables-1.4.7, and has been diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index faa7d459..167eda54 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -543,7 +543,7 @@ directive starts a new stanza. the *fwknopd* server as the user specified by the ``CMD_EXEC_USER'' or as the user that started *fwknopd* if that is not set. -*CMD_EXEC_ALL_SUDO* '<Y/N>':: +*ENABLE_CMD_SUDO_EXEC* '<Y/N>':: *sudo* provides a powerful means of restricting the sets of commands that users can execute via the ``sudoers'' file. By enabling this feature (and in ``ENABLE_CMD_EXEC'' mode), all incoming commands from valid SPA packets diff --git a/server/access.c b/server/access.c index 4717e225..4929c68e 100644 --- a/server/access.c +++ b/server/access.c @@ -76,6 +76,58 @@ add_acc_string(char **var, const char *val) return SUCCESS; } +/* Add an access user entry +*/ +static int +add_acc_user(char **user_var, uid_t *uid_var, struct passwd *upw, + const char *val, const char *var_name) +{ + struct passwd *pw = NULL; + + if(add_acc_string(user_var, val) != SUCCESS) + return FATAL_ERR; + + errno = 0; + upw = pw = getpwnam(val); + + if(pw == NULL) + { + log_msg(LOG_ERR, "[*] Unable to determine UID for %s: %s.", + var_name, errno ? strerror(errno) : "Not a user on this system"); + return FATAL_ERR; + } + + *uid_var = pw->pw_uid; + + return SUCCESS; +} + +/* Add an access group entry +*/ +static int +add_acc_group(char **group_var, gid_t *gid_var, + const char *val, const char *var_name) +{ + struct passwd *pw = NULL; + + if(add_acc_string(group_var, val) != SUCCESS) + return FATAL_ERR; + + errno = 0; + pw = getpwnam(val); + + if(pw == NULL) + { + log_msg(LOG_ERR, "[*] Unable to determine UID for %s: %s.", + var_name, errno ? strerror(errno) : "Not a group on this system"); + return FATAL_ERR; + } + + *gid_var = pw->pw_gid; + + return SUCCESS; +} + /* Decode base64 encoded string into access entry */ static int @@ -803,6 +855,12 @@ free_acc_stanza_data(acc_stanza_t *acc) free(acc->hmac_key_base64); } + if(acc->cmd_sudo_exec_user != NULL) + free(acc->cmd_sudo_exec_user); + + if(acc->cmd_sudo_exec_group != NULL) + free(acc->cmd_sudo_exec_group); + if(acc->cmd_exec_user != NULL) free(acc->cmd_exec_user); @@ -1077,7 +1135,9 @@ set_acc_defaults(fko_srv_options_t *opts) /* Perform some sanity checks on an acc stanza data. */ static int -acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t * const acc) +acc_data_is_valid(fko_srv_options_t *opts, + struct passwd *user_pw, struct passwd *sudo_user_pw, + acc_stanza_t * const acc) { if(acc == NULL) { @@ -1176,6 +1236,17 @@ acc_data_is_valid(fko_srv_options_t *opts, struct passwd *user_pw, acc_stanza_t acc->cmd_exec_gid = user_pw->pw_gid; } + if(sudo_user_pw != NULL + && acc->cmd_sudo_exec_uid != 0 && acc->cmd_sudo_exec_gid == 0) + { + log_msg(LOG_INFO, + "Setting gid to group associated with CMD_SUDO_EXEC_USER '%s' in stanza source: '%s'", + acc->cmd_exec_user, + acc->source + ); + acc->cmd_sudo_exec_gid = sudo_user_pw->pw_gid; + } + return(1); } @@ -1193,8 +1264,8 @@ parse_access_file(fko_srv_options_t *opts) char var[MAX_LINE_LEN] = {0}; char val[MAX_LINE_LEN] = {0}; - struct passwd *pw = NULL; struct passwd *user_pw = NULL; + struct passwd *sudo_user_pw = NULL; struct stat st; acc_stanza_t *curr_acc = NULL; @@ -1293,7 +1364,7 @@ parse_access_file(fko_srv_options_t *opts) * stanza for the minimum required data. */ if(curr_acc != NULL) { - if(!acc_data_is_valid(opts, user_pw, curr_acc)) + if(!acc_data_is_valid(opts, user_pw, sudo_user_pw, curr_acc)) { log_msg(LOG_ERR, "[*] Data error in access file: '%s'", opts->config[CONF_ACCESS_FILE]); @@ -1484,47 +1555,45 @@ parse_access_file(fko_srv_options_t *opts) { add_acc_bool(&(curr_acc->enable_cmd_sudo_exec), val); } + else if(CONF_VAR_IS(var, "CMD_SUDO_EXEC_USER")) + { + if(add_acc_user(&(curr_acc->cmd_sudo_exec_user), + &(curr_acc->cmd_sudo_exec_uid), sudo_user_pw, + val, "CMD_SUDO_EXEC_USER") != SUCCESS) + { + fclose(file_ptr); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + } + else if(CONF_VAR_IS(var, "CMD_SUDO_EXEC_GROUP")) + { + if(add_acc_group(&(curr_acc->cmd_sudo_exec_group), + &(curr_acc->cmd_sudo_exec_gid), val, + "CMD_SUDO_EXEC_GROUP") != SUCCESS) + { + fclose(file_ptr); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + } else if(CONF_VAR_IS(var, "CMD_EXEC_USER")) { - if(add_acc_string(&(curr_acc->cmd_exec_user), val) != SUCCESS) + if(add_acc_user(&(curr_acc->cmd_exec_user), + &(curr_acc->cmd_exec_uid), user_pw, + val, "CMD_EXEC_USER") != SUCCESS) { fclose(file_ptr); clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } - - errno = 0; - user_pw = pw = getpwnam(val); - - if(pw == NULL) - { - log_msg(LOG_ERR, "[*] Unable to determine UID for CMD_EXEC_USER: %s.", - errno ? strerror(errno) : "Not a user on this system"); - fclose(file_ptr); - clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); - } - - curr_acc->cmd_exec_uid = pw->pw_uid; } else if(CONF_VAR_IS(var, "CMD_EXEC_GROUP")) { - if(add_acc_string(&(curr_acc->cmd_exec_group), val) != SUCCESS) + if(add_acc_group(&(curr_acc->cmd_exec_group), + &(curr_acc->cmd_exec_gid), val, + "CMD_SUDO_EXEC_GROUP") != SUCCESS) { fclose(file_ptr); clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } - - errno = 0; - pw = getpwnam(val); - - if(pw == NULL) - { - log_msg(LOG_ERR, "[*] Unable to determine GID for CMD_EXEC_GROUP: %s.", - errno ? strerror(errno) : "Not a group on this system"); - fclose(file_ptr); - clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); - } - - curr_acc->cmd_exec_gid = pw->pw_gid; } else if(CONF_VAR_IS(var, "REQUIRE_USERNAME")) { @@ -1759,7 +1828,7 @@ parse_access_file(fko_srv_options_t *opts) /* Sanity check the last stanza */ - if(!acc_data_is_valid(opts, user_pw, curr_acc)) + if(!acc_data_is_valid(opts, user_pw, sudo_user_pw, curr_acc)) { log_msg(LOG_ERR, "[*] Data error in access file: '%s'", @@ -1961,6 +2030,8 @@ dump_access_list(const fko_srv_options_t *opts) " FW_ACCESS_TIMEOUT: %i\n" " ENABLE_CMD_EXEC: %s\n" " ENABLE_CMD_SUDO_EXEC: %s\n" + " CMD_SUDO_EXEC_USER: %s\n" + " CMD_SUDO_EXEC_GROUP: %s\n" " CMD_EXEC_USER: %s\n" " CMD_EXEC_GROUP: %s\n" " REQUIRE_USERNAME: %s\n" @@ -1996,6 +2067,8 @@ dump_access_list(const fko_srv_options_t *opts) acc->fw_access_timeout, acc->enable_cmd_exec ? "Yes" : "No", acc->enable_cmd_sudo_exec ? "Yes" : "No", + (acc->cmd_sudo_exec_user == NULL) ? "<not set>" : acc->cmd_sudo_exec_user, + (acc->cmd_sudo_exec_group == NULL) ? "<not set>" : acc->cmd_sudo_exec_group, (acc->cmd_exec_user == NULL) ? "<not set>" : acc->cmd_exec_user, (acc->cmd_exec_group == NULL) ? "<not set>" : acc->cmd_exec_group, (acc->require_username == NULL) ? "<not set>" : acc->require_username, diff --git a/server/config_init.c b/server/config_init.c index d1456820..fcf5d197 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -1322,6 +1322,19 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) case 'S': opts->status = 1; break; + case SUDO_EXE_PATH: + if (is_valid_exe(optarg)) + { + set_config_entry(opts, CONF_SUDO_EXE, optarg); + } + else + { + log_msg(LOG_ERR, + "[*] gpg path '%s' could not stat()/does not exist?", + optarg); + clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); + } + break; case 't': opts->test = 1; break; diff --git a/server/extcmd.c b/server/extcmd.c index 83ed3452..5e003429 100644 --- a/server/extcmd.c +++ b/server/extcmd.c @@ -111,7 +111,7 @@ copy_or_search(char *so_read_buf, char *so_buf, const size_t so_buf_sz, } /* Run an external command returning exit status, and optionally filling - * provided buffer with STDOUT output up to the size provided. + * provided buffer with STDOUT output up to the size provided. * * Note: XXX: We are not using the timeout parameter at present. We still need * to implement a reliable timeout mechanism. @@ -136,6 +136,8 @@ _run_extcmd(uid_t uid, gid_t gid, const char *cmd, char *so_buf, #endif #if AFL_FUZZING + /* Don't allow command execution in AFL fuzzing mode + */ return 0; #endif diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index 2fdc2ae2..fd8c6752 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -378,6 +378,10 @@ typedef struct acc_stanza int fw_access_timeout; unsigned char enable_cmd_exec; unsigned char enable_cmd_sudo_exec; + char *cmd_sudo_exec_user; + char *cmd_sudo_exec_group; + uid_t cmd_sudo_exec_uid; + gid_t cmd_sudo_exec_gid; char *cmd_exec_user; char *cmd_exec_group; uid_t cmd_exec_uid; diff --git a/server/incoming_spa.c b/server/incoming_spa.c index 40501f3c..c9cab7b3 100644 --- a/server/incoming_spa.c +++ b/server/incoming_spa.c @@ -304,6 +304,7 @@ incoming_spa(fko_srv_options_t *opts) int is_err, cmd_exec_success = 0, attempted_decrypt = 0; int conf_pkt_age = 0; char dump_buf[CTX_DUMP_BUFSIZE]; + char cmd_buf[MAX_SPA_CMD_LEN] = {0}; spa_pkt_info_t *spa_pkt = &(opts->spa_pkt); @@ -881,24 +882,54 @@ incoming_spa(fko_srv_options_t *opts) spadat.pkt_source_ip, stanza_num, spadat.spa_message_remain ); - /* Do we need to become another user? If so, we call - * run_extcmd_as and pass the cmd_exec_uid. - */ - if(acc->cmd_exec_user != NULL && strncasecmp(acc->cmd_exec_user, "root", 4) != 0) + memset(cmd_buf, 0x0, sizeof(cmd_buf)); + if(acc->enable_cmd_sudo_exec) + { + /* Run the command via sudo - this allows sudo filtering + * to apply to the incoming command + */ + strlcpy(cmd_buf, opts->config[CONF_SUDO_EXE], + sizeof(cmd_buf)); + if(acc->cmd_sudo_exec_user != NULL + && strncasecmp(acc->cmd_sudo_exec_user, "root", 4) != 0) + { + strlcat(cmd_buf, " -u ", sizeof(cmd_buf)); + strlcat(cmd_buf, acc->cmd_sudo_exec_user, sizeof(cmd_buf)); + } + if(acc->cmd_exec_group != NULL + && strncasecmp(acc->cmd_sudo_exec_group, "root", 4) != 0) + { + strlcat(cmd_buf, " -g ", sizeof(cmd_buf)); + strlcat(cmd_buf, + acc->cmd_sudo_exec_group, sizeof(cmd_buf)); + } + strlcat(cmd_buf, " ", sizeof(cmd_buf)); + strlcat(cmd_buf, spadat.spa_message_remain, sizeof(cmd_buf)); + } + else + strlcpy(cmd_buf, spadat.spa_message_remain, sizeof(cmd_buf)); + + if(acc->cmd_exec_user != NULL + && strncasecmp(acc->cmd_exec_user, "root", 4) != 0) { log_msg(LOG_INFO, - "[%s] (stanza #%d) setuid/setgid user/group to %s/%s (UID=%i,GID=%i) before running command.", - spadat.pkt_source_ip, stanza_num, acc->cmd_exec_user, + "[%s] (stanza #%d) Running command '%s' setuid/setgid user/group to %s/%s (UID=%i,GID=%i)", + spadat.pkt_source_ip, stanza_num, cmd_buf, acc->cmd_exec_user, acc->cmd_exec_group == NULL ? acc->cmd_exec_user : acc->cmd_exec_group, acc->cmd_exec_uid, acc->cmd_exec_gid); res = run_extcmd_as(acc->cmd_exec_uid, acc->cmd_exec_gid, - spadat.spa_message_remain, NULL, 0, - WANT_STDERR, NO_TIMEOUT, &pid_status, opts); + cmd_buf, NULL, 0, WANT_STDERR, NO_TIMEOUT, + &pid_status, opts); } else /* Just run it as we are (root that is). */ - res = run_extcmd(spadat.spa_message_remain, NULL, 0, - WANT_STDERR, 5, &pid_status, opts); + { + log_msg(LOG_INFO, + "[%s] (stanza #%d) Running command '%s'", + spadat.pkt_source_ip, stanza_num, cmd_buf); + res = run_extcmd(cmd_buf, NULL, 0, WANT_STDERR, + 5, &pid_status, opts); + } /* should only call WEXITSTATUS() if WIFEXITED() is true */ diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 323d0286..27769970 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -201,6 +201,9 @@ my $fuzzing_test_tag = ''; my $fuzzing_class = 'bogus data'; my %fuzzing_spa_packets = (); my $total_fuzzing_pkts = 0; +our $sudo_access_conf = "$run_dir/sudo_access.conf"; +my $sudo_conf = '/etc/sudoers'; +my $sudo_conf_testing = ''; my $server_test_file = ''; my $client_only_mode = 0; my $server_only_mode = 0; @@ -267,6 +270,7 @@ our $valgrind_path = ''; our $fiu_run_path = ''; our $sudo_path = ''; our $gcov_path = ''; +my $touch_path = ''; my $lcov_path = ''; my $coverage_diff_path = 'coverage_diff.py'; my $genhtml_path = ''; @@ -875,6 +879,11 @@ my %test_keys = ( 'server_exec_err' => $OPTIONAL, 'fw_rule_created' => $OPTIONAL, 'fw_rule_removed' => $OPTIONAL, + 'sudo_test' => $OPTIONAL, + 'sudo_conf' => $OPTIONAL, + 'sudo_exec_user' => $OPTIONAL, + 'sudo_exec_group' => $OPTIONAL, + 'exec_user' => $OPTIONAL, 'server_conf' => $OPTIONAL, 'client_only' => $OPTIONAL_NUMERIC, 'server_only' => $OPTIONAL_NUMERIC, @@ -902,6 +911,7 @@ my %test_keys = ( 'server_conf_file' => $OPTIONAL, 'digest_cache_file' => $OPTIONAL, 'cmd_exec_file_owner' => $OPTIONAL, + 'cmd_exec_file_not_created' => $OPTIONAL, 'rm_rule_mid_cycle' => $OPTIONAL, 'server_receive_re' => $OPTIONAL, 'no_exit_intf_down' => $OPTIONAL, @@ -4672,28 +4682,103 @@ sub get_mod_paths() { return \@paths; } +sub write_sudo_access_conf() { + my $test_hr = shift; + unlink $sudo_access_conf if -e $sudo_access_conf; + + # mbr localhost = NOPASSWD: /usr/bin/cat, /usr/bin/touch + # mbr localhost = NOPASSWD: /usr/bin/cat, (root) /usr/bin/touch + # mbr localhost = NOPASSWD: /usr/bin/cat, (mbr : mbr) /usr/bin/touch + if ($test_hr->{'sudo_conf'}) { + open ST, "> $sudo_conf_testing" or die $!; + $test_hr->{'sudo_conf'} =~ s/USER/$username/g; + if ($test_hr->{'sudo_conf'} =~ /TOUCH/) { + if ($touch_path) { + $test_hr->{'sudo_conf'} =~ s/TOUCH/$touch_path/; + } else { + $test_hr->{'sudo_conf'} =~ s|TOUCH|/bin/touch|; + } + } + print ST $test_hr->{'sudo_conf'}, "\n"; + close ST; + &write_test_file( + "[+] Setting $sudo_conf_testing file to:\n$test_hr->{'sudo_conf'}\n", + $curr_test_file); + } + + copy $cf{'hmac_cmd_access'}, $sudo_access_conf or die $!; + + open CA, ">> $sudo_access_conf" or die $!; + print CA "ENABLE_CMD_SUDO_EXEC Y\n"; + + if ($test_hr->{'exec_user'} eq $YES) { + print CA "CMD_EXEC_USER $username\n"; + } + if ($test_hr->{'sudo_exec_user'} eq $YES) { + print CA "CMD_SUDO_EXEC_USER $username\n"; + } + if ($test_hr->{'sudo_exec_group'} eq $YES) { + print CA "CMD_SUDO_EXEC_GROUP $username\n"; + } + + close CA; + + return; +} + sub spa_cmd_exec_cycle() { my $test_hr = shift; unlink $cmd_exec_test_file if -e $cmd_exec_test_file; + if ($test_hr->{'sudo_test'} eq $YES) { + ### we need to write the access.conf file based on sudo + ### requirements + &write_sudo_access_conf($test_hr); + } + + if (-e $cmd_exec_test_file) { + &write_test_file("[-] $cmd_exec_test_file file exists before SPA cycle.\n", + $curr_test_file); + } else { + &write_test_file("[+] $cmd_exec_test_file does not exist before SPA cycle.\n", + $curr_test_file); + } + my $rv = &spa_cycle($test_hr); if (-e $cmd_exec_test_file) { + &run_cmd("ls -l $cmd_exec_test_file", $cmd_out_tmp, $curr_test_file); if ($test_hr->{'cmd_exec_file_owner'}) { + $test_hr->{'cmd_exec_file_owner'} =~ s/USER/$username/; my $user = (getpwuid((stat($cmd_exec_test_file))[4]))[0]; - if ($user and $user eq 'nobody') { - &write_test_file("[+] $cmd_exec_test_file is owned by user 'nobody'\n", + if ($user and $user eq $test_hr->{'cmd_exec_file_owner'}) { + &write_test_file("[+] $cmd_exec_test_file is owned by user: $user\n", + $curr_test_file); + $rv = 1; + } else { + &write_test_file("[+] $cmd_exec_test_file is not " . + "owned by user: $test_hr->{'cmd_exec_file_owner'}\n", $curr_test_file); - &run_cmd("ls -l $cmd_exec_test_file", $cmd_out_tmp, $curr_test_file); $rv = 1; } } + if ($test_hr->{'cmd_exec_file_not_created'}) { + &write_test_file("[-] $cmd_exec_test_file file exists, setting rv=0.\n", + $curr_test_file); + $rv = 0; + } unlink $cmd_exec_test_file; } else { - &write_test_file("[-] $cmd_exec_test_file file does not exist, setting rv=0.\n", - $curr_test_file); - $rv = 0; + if ($test_hr->{'cmd_exec_file_not_created'}) { + &write_test_file("[+] $cmd_exec_test_file file does not exist.\n", + $curr_test_file); + $rv = 1; + } else { + &write_test_file("[-] $cmd_exec_test_file file does not exist, setting rv=0.\n", + $curr_test_file); + $rv = 0; + } } return $rv; @@ -6936,17 +7021,32 @@ sub init() { push @tests_to_exclude, qr/perl FKO module.*FUZZING/; } - $sudo_path = &find_command('sudo') unless $sudo_path; - $killall_path = &find_command('killall') unless $killall_path; - $pgrep_path = &find_command('pgrep') unless $pgrep_path; - $lib_view_cmd = &find_command('ldd') unless $lib_view_cmd; - $git_path = &find_command('git') unless $git_path; - $perl_path = &find_command('perl') unless $perl_path; + $sudo_path = &find_command('sudo') unless $sudo_path; + $killall_path = &find_command('killall') unless $killall_path; + $pgrep_path = &find_command('pgrep') unless $pgrep_path; + $lib_view_cmd = &find_command('ldd') unless $lib_view_cmd; + $git_path = &find_command('git') unless $git_path; + $perl_path = &find_command('perl') unless $perl_path; + $touch_path = &find_command('touch') unless $touch_path; if ($sudo_path) { $username = (getpwuid((stat($test_suite_path))[4]))[0]; die "[*] Could not determine $test_suite_path owner" unless $username; + + ### see if sudo is configured to accept custom configs + if (-e $sudo_conf) { + open SR, "< $sudo_conf" or die $!; + while (<SR>) { + if (/^#includedir\s+(\/\S+)/) { + $sudo_conf_testing = "$1/fwknop_testing"; + last; + } + } + close SR; + } + } else { + push @tests_to_exclude, qr/sudo/; } ### see if the 'nobody' user is on the system diff --git a/test/tests/rijndael_hmac_cmd_exec.pl b/test/tests/rijndael_hmac_cmd_exec.pl index 4cd9ac56..2428dba7 100644 --- a/test/tests/rijndael_hmac_cmd_exec.pl +++ b/test/tests/rijndael_hmac_cmd_exec.pl @@ -28,6 +28,20 @@ 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, 'server_positive_output_matches' => [qr/Command messages are not allowed/] }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => 'command execution invalid path', + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "badpath $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} ". + "$verbose_str", + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_cmd_access'} " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + 'cmd_exec_file_not_created' => $YES, + }, + { 'category' => 'Rijndael+HMAC', 'subcategory' => 'client+server', @@ -87,12 +101,156 @@ 'detail' => "command execution uid/gid 'nobody'", 'function' => \&spa_cmd_exec_cycle, 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . - "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} ". - "$verbose_str", + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, 'cmd_exec_file_owner' => 'nobody', 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $cf{'hmac_cmd_giduid_access'} " . "-d $default_digest_file -p $default_pid_file $intf_str", 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (1)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, TOUCH', + 'cmd_exec_file_owner' => 'root', + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (2)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'cmd_exec_file_owner' => 'nobody', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, (root) TOUCH', + 'sudo_exec_user' => $YES, + 'cmd_exec_file_owner' => 'root', + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (3)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'cmd_exec_file_owner' => 'nobody', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'exec_user' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, TOUCH', + 'sudo_exec_user' => $YES, + 'cmd_exec_file_not_created' => $YES, + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + 'server_positive_output_matches' => [qr/is not allowed to execute/] + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (4)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'cmd_exec_file_owner' => 'nobody', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'exec_user' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, (USER) TOUCH', + 'sudo_exec_user' => $YES, + 'cmd_exec_file_owner' => 'USER', + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (5)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'cmd_exec_file_owner' => 'nobody', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'exec_user' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, (baduser) TOUCH', + 'sudo_exec_user' => $YES, + 'cmd_exec_file_not_created' => $YES, + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + 'server_positive_output_matches' => [qr/is not allowed to execute/] + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (6)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'cmd_exec_file_owner' => 'nobody', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'exec_user' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, notouchcmd', + 'sudo_exec_user' => $YES, + 'cmd_exec_file_not_created' => $YES, + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + 'server_positive_output_matches' => [qr/is not allowed to execute/] + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (7)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'cmd_exec_file_owner' => 'nobody', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'exec_user' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, (USER : USER) TOUCH', + 'sudo_exec_user' => $YES, + 'cmd_exec_file_owner' => 'USER', + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + }, + { + 'category' => 'Rijndael+HMAC', + 'subcategory' => 'client+server', + 'detail' => "command exec sudo current user (8)", + 'function' => \&spa_cmd_exec_cycle, + 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . + "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . + $verbose_str, + 'cmd_exec_file_owner' => 'nobody', + 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . + "-d $default_digest_file -p $default_pid_file $intf_str", + 'sudo_test' => $YES, + 'exec_user' => $YES, + 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, (USER : USER) TOUCH', + 'sudo_exec_user' => $YES, + 'sudo_exec_group' => $YES, + 'cmd_exec_file_owner' => 'USER', + 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, + }, ); From 01beb31861a8fdfb4555cce73e4d02139fc946a1 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Jul 2015 20:35:54 -0700 Subject: [PATCH 185/219] [server] start to split incoming_spa() main loop into functions --- server/incoming_spa.c | 390 ++++++++++++++++++++++++------------------ 1 file changed, 224 insertions(+), 166 deletions(-) diff --git a/server/incoming_spa.c b/server/incoming_spa.c index c9cab7b3..c2e8cfd7 100644 --- a/server/incoming_spa.c +++ b/server/incoming_spa.c @@ -50,13 +50,13 @@ * error code value if there is any indication the data is not valid spa data. */ static int -preprocess_spa_data(fko_srv_options_t *opts, const char *src_ip) +preprocess_spa_data(fko_srv_options_t *opts, spa_pkt_info_t *spa_pkt) { - spa_pkt_info_t *spa_pkt = &(opts->spa_pkt); char *ndx = (char *)&(spa_pkt->packet_data); - int pkt_data_len = spa_pkt->packet_data_len; - int i; + int i, pkt_data_len = 0; + + pkt_data_len = spa_pkt->packet_data_len; /* At this point, we can reset the packet data length to 0. This is our * indicator to the rest of the program that we do not have a current @@ -133,10 +133,9 @@ preprocess_spa_data(fko_srv_options_t *opts, const char *src_ip) return(SPA_MSG_NOT_SPA_DATA); - /* --DSS: Are there other checks we can do here ??? */ - - /* If we made it here, we have no reason to assume this is not SPA data - * (at least until we come up with more checks). + /* If we made it here, we have no reason to assume this is not SPA data. + * The ultimate test will be whether the SPA data authenticates via an + * HMAC anyway. */ return(FKO_SUCCESS); } @@ -228,7 +227,6 @@ get_raw_digest(char **digest, char *pkt_data) return res; } - /* Popluate a spa_data struct from an initialized (and populated) FKO context. */ static int @@ -271,6 +269,30 @@ get_spa_data_fields(fko_ctx_t ctx, spa_data_t *spdat) return(res); } +static int +check_stanza_expiration(acc_stanza_t *acc, + spa_data_t *spadat, int stanza_num) +{ + if(acc->access_expire_time > 0) + { + if(acc->expired) + { + return 0; + } + else + { + if(time(NULL) > acc->access_expire_time) + { + log_msg(LOG_INFO, "[%s] (stanza #%d) Access stanza has expired", + spadat->pkt_source_ip, stanza_num); + acc->expired = 1; + return 0; + } + } + } + return 1; +} + /* Check for access.conf stanza SOURCE match based on SPA packet * source IP */ @@ -287,6 +309,185 @@ is_src_match(acc_stanza_t *acc, const uint32_t ip) return 0; } +static int +src_check(fko_srv_options_t *opts, spa_pkt_info_t *spa_pkt, + spa_data_t *spadat, char **raw_digest) +{ + if (is_src_match(opts->acc_stanzas, ntohl(spa_pkt->packet_src_ip))) + { + if(strncasecmp(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE], "Y", 1) == 0) + { + /* Check for a replay attack + */ + if(get_raw_digest(raw_digest, (char *)spa_pkt->packet_data) != FKO_SUCCESS) + { + if (*raw_digest != NULL) + free(*raw_digest); + return 0; + } + if (*raw_digest == NULL) + return 0; + + if (is_replay(opts, *raw_digest) != SPA_MSG_SUCCESS) + { + free(*raw_digest); + return 0; + } + } + } + else + { + log_msg(LOG_WARNING, + "No access data found for source IP: %s", spadat->pkt_source_ip + ); + return 0; + } + return 1; +} + +static int +precheck_pkt(fko_srv_options_t *opts, spa_pkt_info_t *spa_pkt, + spa_data_t *spadat, char **raw_digest) +{ + int res = 0, packet_data_len = 0; + + packet_data_len = spa_pkt->packet_data_len; + + res = preprocess_spa_data(opts, spa_pkt); + if(res != FKO_SUCCESS) + { + log_msg(LOG_DEBUG, "[%s] preprocess_spa_data() returned error %i: '%s' for incoming packet.", + spadat->pkt_source_ip, res, get_errstr(res)); + return 0; + } + + if(opts->foreground == 1 && opts->verbose > 2) + { + printf("[+] candidate SPA packet payload:\n"); + hex_dump(spa_pkt->packet_data, packet_data_len); + } + + if(! src_check(opts, spa_pkt, spadat, raw_digest)) + return 0; + + return 1; +} + +static int +src_dst_check(acc_stanza_t *acc, spa_pkt_info_t *spa_pkt, + spa_data_t *spadat, int stanza_num) +{ + if(! compare_addr_list(acc->source_list, ntohl(spa_pkt->packet_src_ip)) || + (acc->destination_list != NULL + && ! compare_addr_list(acc->destination_list, ntohl(spa_pkt->packet_dst_ip)))) + { + log_msg(LOG_DEBUG, + "(stanza #%d) SPA packet (%s -> %s) filtered by SOURCE and/or DESTINATION criteria", + stanza_num, spadat->pkt_source_ip, spadat->pkt_destination_ip); + return 0; + } + return 1; +} + +/* Process command messages +*/ +static int +process_cmd_msg(fko_srv_options_t *opts, acc_stanza_t *acc, + spa_data_t *spadat, int stanza_num, int *res) +{ + int pid_status=0; + char cmd_buf[MAX_SPA_CMD_LEN] = {0}; + + if(!acc->enable_cmd_exec) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) SPA Command messages are not allowed in the current configuration.", + spadat->pkt_source_ip, stanza_num + ); + return 0; + } + else if(opts->test) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) --test mode enabled, skipping command execution.", + spadat->pkt_source_ip, stanza_num + ); + return 0; + } + else + { + log_msg(LOG_INFO, + "[%s] (stanza #%d) Processing SPA Command message: command='%s'.", + spadat->pkt_source_ip, stanza_num, spadat->spa_message_remain + ); + + memset(cmd_buf, 0x0, sizeof(cmd_buf)); + if(acc->enable_cmd_sudo_exec) + { + /* Run the command via sudo - this allows sudo filtering + * to apply to the incoming command + */ + strlcpy(cmd_buf, opts->config[CONF_SUDO_EXE], + sizeof(cmd_buf)); + if(acc->cmd_sudo_exec_user != NULL + && strncasecmp(acc->cmd_sudo_exec_user, "root", 4) != 0) + { + strlcat(cmd_buf, " -u ", sizeof(cmd_buf)); + strlcat(cmd_buf, acc->cmd_sudo_exec_user, sizeof(cmd_buf)); + } + if(acc->cmd_exec_group != NULL + && strncasecmp(acc->cmd_sudo_exec_group, "root", 4) != 0) + { + strlcat(cmd_buf, " -g ", sizeof(cmd_buf)); + strlcat(cmd_buf, + acc->cmd_sudo_exec_group, sizeof(cmd_buf)); + } + strlcat(cmd_buf, " ", sizeof(cmd_buf)); + strlcat(cmd_buf, spadat->spa_message_remain, sizeof(cmd_buf)); + } + else + strlcpy(cmd_buf, spadat->spa_message_remain, sizeof(cmd_buf)); + + if(acc->cmd_exec_user != NULL + && strncasecmp(acc->cmd_exec_user, "root", 4) != 0) + { + log_msg(LOG_INFO, + "[%s] (stanza #%d) Running command '%s' setuid/setgid user/group to %s/%s (UID=%i,GID=%i)", + spadat->pkt_source_ip, stanza_num, cmd_buf, acc->cmd_exec_user, + acc->cmd_exec_group == NULL ? acc->cmd_exec_user : acc->cmd_exec_group, + acc->cmd_exec_uid, acc->cmd_exec_gid); + + *res = run_extcmd_as(acc->cmd_exec_uid, acc->cmd_exec_gid, + cmd_buf, NULL, 0, WANT_STDERR, NO_TIMEOUT, + &pid_status, opts); + } + else /* Just run it as we are (root that is). */ + { + log_msg(LOG_INFO, + "[%s] (stanza #%d) Running command '%s'", + spadat->pkt_source_ip, stanza_num, cmd_buf); + *res = run_extcmd(cmd_buf, NULL, 0, WANT_STDERR, + 5, &pid_status, opts); + } + + /* should only call WEXITSTATUS() if WIFEXITED() is true + */ + log_msg(LOG_INFO, + "[%s] (stanza #%d) CMD_EXEC: command returned %i, pid_status: %d", + spadat->pkt_source_ip, stanza_num, *res, + WIFEXITED(pid_status) ? WEXITSTATUS(pid_status) : pid_status); + + if(WIFEXITED(pid_status)) + { + if(WEXITSTATUS(pid_status) != 0) + *res = SPA_MSG_COMMAND_ERROR; + } + else + *res = SPA_MSG_COMMAND_ERROR; + } + return 1; +} + /* Process the SPA packet data */ void @@ -299,12 +500,11 @@ incoming_spa(fko_srv_options_t *opts) char *spa_ip_demark, *gpg_id, *gpg_fpr, *raw_digest = NULL; time_t now_ts; - int res, ts_diff, enc_type, stanza_num=0, pid_status=0; - int added_replay_digest = 0, pkt_data_len=0; + int res, ts_diff, enc_type, stanza_num=0; + int added_replay_digest = 0; int is_err, cmd_exec_success = 0, attempted_decrypt = 0; int conf_pkt_age = 0; char dump_buf[CTX_DUMP_BUFSIZE]; - char cmd_buf[MAX_SPA_CMD_LEN] = {0}; spa_pkt_info_t *spa_pkt = &(opts->spa_pkt); @@ -329,20 +529,8 @@ incoming_spa(fko_srv_options_t *opts) * SPA data and/or to be reasonably sure we have a SPA packet (i.e * try to eliminate obvious non-spa packets). */ - pkt_data_len = spa_pkt->packet_data_len; - res = preprocess_spa_data(opts, spadat.pkt_source_ip); - if(res != FKO_SUCCESS) - { - log_msg(LOG_DEBUG, "[%s] preprocess_spa_data() returned error %i: '%s' for incoming packet.", - spadat.pkt_source_ip, res, get_errstr(res)); + if(!precheck_pkt(opts, spa_pkt, &spadat, &raw_digest)) return; - } - - if(opts->foreground == 1 && opts->verbose > 2) - { - printf("[+] candidate SPA packet payload:\n"); - hex_dump(spa_pkt->packet_data, pkt_data_len); - } if(strncasecmp(opts->config[CONF_ENABLE_SPA_PACKET_AGING], "Y", 1) == 0) { @@ -355,37 +543,6 @@ incoming_spa(fko_srv_options_t *opts) } } - if (is_src_match(opts->acc_stanzas, ntohl(spa_pkt->packet_src_ip))) - { - if(strncasecmp(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE], "Y", 1) == 0) - { - /* Check for a replay attack - */ - res = get_raw_digest(&raw_digest, (char *)spa_pkt->packet_data); - if(res != FKO_SUCCESS) - { - if (raw_digest != NULL) - free(raw_digest); - return; - } - if (raw_digest == NULL) - return; - - if (is_replay(opts, raw_digest) != SPA_MSG_SUCCESS) - { - free(raw_digest); - return; - } - } - } - else - { - log_msg(LOG_WARNING, - "No access data found for source IP: %s", spadat.pkt_source_ip - ); - return; - } - /* Now that we know there is a matching access.conf stanza and the * incoming SPA packet is not a replay, see if we should grant any * access @@ -411,12 +568,8 @@ incoming_spa(fko_srv_options_t *opts) /* Check for a match for the SPA source and destination IP and the access stanza */ - if(! compare_addr_list(acc->source_list, ntohl(spa_pkt->packet_src_ip)) || - (acc->destination_list != NULL && ! compare_addr_list(acc->destination_list, ntohl(spa_pkt->packet_dst_ip)))) + if(! src_dst_check(acc, spa_pkt, &spadat, stanza_num)) { - log_msg(LOG_DEBUG, - "(stanza #%d) SPA packet (%s -> %s) filtered by SOURCE and/or DESTINATION criteria", - stanza_num, spadat.pkt_source_ip, spadat.pkt_destination_ip); acc = acc->next; continue; } @@ -428,24 +581,10 @@ incoming_spa(fko_srv_options_t *opts) /* Make sure this access stanza has not expired */ - if(acc->access_expire_time > 0) + if(! check_stanza_expiration(acc, &spadat, stanza_num)) { - if(acc->expired) - { - acc = acc->next; - continue; - } - else - { - if(time(NULL) > acc->access_expire_time) - { - log_msg(LOG_INFO, "[%s] (stanza #%d) Access stanza has expired", - spadat.pkt_source_ip, stanza_num); - acc->expired = 1; - acc = acc->next; - continue; - } - } + acc = acc->next; + continue; } /* Get encryption type and try its decoding routine first (if the key @@ -857,100 +996,19 @@ incoming_spa(fko_srv_options_t *opts) */ if(spadat.message_type == FKO_COMMAND_MSG) { - if(!acc->enable_cmd_exec) + if(process_cmd_msg(opts, acc, &spadat, stanza_num, &res)) { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) SPA Command messages are not allowed in the current configuration.", - spadat.pkt_source_ip, stanza_num - ); - acc = acc->next; - continue; - } - else if(opts->test) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) --test mode enabled, skipping command execution.", - spadat.pkt_source_ip, stanza_num - ); - acc = acc->next; - continue; - } - else - { - log_msg(LOG_INFO, - "[%s] (stanza #%d) Processing SPA Command message: command='%s'.", - spadat.pkt_source_ip, stanza_num, spadat.spa_message_remain - ); - - memset(cmd_buf, 0x0, sizeof(cmd_buf)); - if(acc->enable_cmd_sudo_exec) - { - /* Run the command via sudo - this allows sudo filtering - * to apply to the incoming command - */ - strlcpy(cmd_buf, opts->config[CONF_SUDO_EXE], - sizeof(cmd_buf)); - if(acc->cmd_sudo_exec_user != NULL - && strncasecmp(acc->cmd_sudo_exec_user, "root", 4) != 0) - { - strlcat(cmd_buf, " -u ", sizeof(cmd_buf)); - strlcat(cmd_buf, acc->cmd_sudo_exec_user, sizeof(cmd_buf)); - } - if(acc->cmd_exec_group != NULL - && strncasecmp(acc->cmd_sudo_exec_group, "root", 4) != 0) - { - strlcat(cmd_buf, " -g ", sizeof(cmd_buf)); - strlcat(cmd_buf, - acc->cmd_sudo_exec_group, sizeof(cmd_buf)); - } - strlcat(cmd_buf, " ", sizeof(cmd_buf)); - strlcat(cmd_buf, spadat.spa_message_remain, sizeof(cmd_buf)); - } - else - strlcpy(cmd_buf, spadat.spa_message_remain, sizeof(cmd_buf)); - - if(acc->cmd_exec_user != NULL - && strncasecmp(acc->cmd_exec_user, "root", 4) != 0) - { - log_msg(LOG_INFO, - "[%s] (stanza #%d) Running command '%s' setuid/setgid user/group to %s/%s (UID=%i,GID=%i)", - spadat.pkt_source_ip, stanza_num, cmd_buf, acc->cmd_exec_user, - acc->cmd_exec_group == NULL ? acc->cmd_exec_user : acc->cmd_exec_group, - acc->cmd_exec_uid, acc->cmd_exec_gid); - - res = run_extcmd_as(acc->cmd_exec_uid, acc->cmd_exec_gid, - cmd_buf, NULL, 0, WANT_STDERR, NO_TIMEOUT, - &pid_status, opts); - } - else /* Just run it as we are (root that is). */ - { - log_msg(LOG_INFO, - "[%s] (stanza #%d) Running command '%s'", - spadat.pkt_source_ip, stanza_num, cmd_buf); - res = run_extcmd(cmd_buf, NULL, 0, WANT_STDERR, - 5, &pid_status, opts); - } - - /* should only call WEXITSTATUS() if WIFEXITED() is true - */ - log_msg(LOG_INFO, - "[%s] (stanza #%d) CMD_EXEC: command returned %i, pid_status: %d", - spadat.pkt_source_ip, stanza_num, res, - WIFEXITED(pid_status) ? WEXITSTATUS(pid_status) : pid_status); - - if(WIFEXITED(pid_status)) - { - if(WEXITSTATUS(pid_status) != 0) - res = SPA_MSG_COMMAND_ERROR; - } - else - res = SPA_MSG_COMMAND_ERROR; - /* we processed the command on a matching access stanza, so we * don't look for anything else to do with this SPA packet */ break; } + else + { + acc = acc->next; + continue; + } + } /* From this point forward, we have some kind of access message. So From 6116419e212a7f65ca658473e0617f073d303495 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Jul 2015 20:38:23 -0700 Subject: [PATCH 186/219] [test suite] ensure HMAC key string is equal to SHA512_BLOCK_LEN in length (fixes ASAN warning) --- test/fko-wrapper/fko_wrapper.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/test/fko-wrapper/fko_wrapper.c b/test/fko-wrapper/fko_wrapper.c index 9f755366..ebddcae7 100644 --- a/test/fko-wrapper/fko_wrapper.c +++ b/test/fko-wrapper/fko_wrapper.c @@ -25,8 +25,14 @@ #define DO_DIGEST 1 #define RAW_DIGEST 2 #define MAX_LINE_LEN 3000 /* really long for fuzzing tests */ -#define ENC_KEY "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" /* 32 bytes */ -#define HMAC_KEY "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" /* 32 bytes */ + +/* We use HMAC and encryption keys that are as long as the max + * sizes since we pass in bogus key lengths. That is, libfko + * functions cannot be expected to handle key lengths that are + * longer than the key buffers themselves. +*/ +#define ENC_KEY "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" /* 32 bytes (RIJNDAEL_MAX_KEYSIZE) */ +#define HMAC_KEY "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB" /* 128 bytes (SHA512_BLOCK_LEN) */ #define IS_EMPTY_LINE(x) ( \ x == '#' || x == '\n' || x == '\r' || x == ';' || x == '\0' \ @@ -744,4 +750,6 @@ display_ctx(fko_ctx_t ctx) printf(" Final SPA Data: %s\n", spa_data); spa_calls += 31; + + return; } From 3270900a3813a521be6a83a8274baa2101fa6588 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 19 Jul 2015 21:54:20 -0700 Subject: [PATCH 187/219] [server] continued work on splitting incoming_spa() into functions --- server/incoming_spa.c | 351 ++++++++++++++++++++++-------------------- 1 file changed, 186 insertions(+), 165 deletions(-) diff --git a/server/incoming_spa.c b/server/incoming_spa.c index c2e8cfd7..288a8eca 100644 --- a/server/incoming_spa.c +++ b/server/incoming_spa.c @@ -270,8 +270,8 @@ get_spa_data_fields(fko_ctx_t ctx, spa_data_t *spdat) } static int -check_stanza_expiration(acc_stanza_t *acc, - spa_data_t *spadat, int stanza_num) +check_stanza_expiration(acc_stanza_t *acc, spa_data_t *spadat, + const int stanza_num) { if(acc->access_expire_time > 0) { @@ -375,7 +375,7 @@ precheck_pkt(fko_srv_options_t *opts, spa_pkt_info_t *spa_pkt, static int src_dst_check(acc_stanza_t *acc, spa_pkt_info_t *spa_pkt, - spa_data_t *spadat, int stanza_num) + spa_data_t *spadat, const int stanza_num) { if(! compare_addr_list(acc->source_list, ntohl(spa_pkt->packet_src_ip)) || (acc->destination_list != NULL @@ -393,7 +393,7 @@ src_dst_check(acc_stanza_t *acc, spa_pkt_info_t *spa_pkt, */ static int process_cmd_msg(fko_srv_options_t *opts, acc_stanza_t *acc, - spa_data_t *spadat, int stanza_num, int *res) + spa_data_t *spadat, const int stanza_num, int *res) { int pid_status=0; char cmd_buf[MAX_SPA_CMD_LEN] = {0}; @@ -488,6 +488,178 @@ process_cmd_msg(fko_srv_options_t *opts, acc_stanza_t *acc, return 1; } +static int +handle_gpg_enc(acc_stanza_t *acc, spa_pkt_info_t *spa_pkt, + spa_data_t *spadat, fko_ctx_t *ctx, int *attempted_decrypt, + const int stanza_num, int *res) +{ + /* For GPG we create the new context without decrypting on the fly + * so we can set some GPG parameters first. + */ + if(acc->gpg_decrypt_pw != NULL || acc->gpg_allow_no_pw) + { + *res = fko_new_with_data(ctx, (char *)spa_pkt->packet_data, NULL, + 0, FKO_ENC_MODE_ASYMMETRIC, acc->hmac_key, + acc->hmac_key_len, acc->hmac_type); + + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error creating fko context (before decryption): %s", + spadat->pkt_source_ip, stanza_num, fko_errstr(*res) + ); + return 0; + } + + /* Set whatever GPG parameters we have. + */ + if(acc->gpg_exe != NULL) + { + *res = fko_set_gpg_exe(*ctx, acc->gpg_exe); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error setting GPG path %s: %s", + spadat->pkt_source_ip, stanza_num, acc->gpg_exe, + fko_errstr(*res) + ); + return 0; + } + } + + if(acc->gpg_home_dir != NULL) + { + *res = fko_set_gpg_home_dir(*ctx, acc->gpg_home_dir); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error setting GPG keyring path to %s: %s", + spadat->pkt_source_ip, stanza_num, acc->gpg_home_dir, + fko_errstr(*res) + ); + return 0; + } + } + + if(acc->gpg_decrypt_id != NULL) + fko_set_gpg_recipient(*ctx, acc->gpg_decrypt_id); + + /* If GPG_REQUIRE_SIG is set for this acc stanza, then set + * the FKO context accordingly and check the other GPG Sig- + * related parameters. This also applies when REMOTE_ID is + * set. + */ + if(acc->gpg_require_sig) + { + fko_set_gpg_signature_verify(*ctx, 1); + + /* Set whether or not to ignore signature verification errors. + */ + fko_set_gpg_ignore_verify_error(*ctx, acc->gpg_ignore_sig_error); + } + else + { + fko_set_gpg_signature_verify(*ctx, 0); + fko_set_gpg_ignore_verify_error(*ctx, 1); + } + + /* Now decrypt the data. + */ + *res = fko_decrypt_spa_data(*ctx, acc->gpg_decrypt_pw, 0); + *attempted_decrypt = 1; + } + return 1; +} + +static int +handle_gpg_sigs(acc_stanza_t *acc, spa_data_t *spadat, + fko_ctx_t *ctx, const int stanza_num, int *res) +{ + char *gpg_id, *gpg_fpr; + acc_string_list_t *gpg_id_ndx; + acc_string_list_t *gpg_fpr_ndx; + unsigned char is_gpg_match = 0; + + *res = fko_get_gpg_signature_id(*ctx, &gpg_id); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error pulling the GPG signature ID from the context: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + + *res = fko_get_gpg_signature_fpr(*ctx, &gpg_fpr); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error pulling the GPG fingerprint from the context: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + + log_msg(LOG_INFO, "[%s] (stanza #%d) Incoming SPA data signed by '%s' (fingerprint '%s').", + spadat->pkt_source_ip, stanza_num, gpg_id, gpg_fpr); + + /* prefer GnuPG fingerprint match if so configured + */ + if(acc->gpg_remote_fpr != NULL) + { + is_gpg_match = 0; + for(gpg_fpr_ndx = acc->gpg_remote_fpr_list; + gpg_fpr_ndx != NULL; gpg_fpr_ndx=gpg_fpr_ndx->next) + { + *res = fko_gpg_signature_fpr_match(*ctx, + gpg_fpr_ndx->str, &is_gpg_match); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error in GPG signature comparision: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + if(is_gpg_match) + break; + } + if(! is_gpg_match) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Incoming SPA packet signed by: %s, but that fingerprint is not in the GPG_FINGERPRINT_ID list.", + spadat->pkt_source_ip, stanza_num, gpg_fpr); + return 0; + } + } + + if(acc->gpg_remote_id != NULL) + { + is_gpg_match = 0; + for(gpg_id_ndx = acc->gpg_remote_id_list; + gpg_id_ndx != NULL; gpg_id_ndx=gpg_id_ndx->next) + { + *res = fko_gpg_signature_id_match(*ctx, + gpg_id_ndx->str, &is_gpg_match); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error in GPG signature comparision: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + if(is_gpg_match) + break; + } + + if(! is_gpg_match) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Incoming SPA packet signed by ID: %s, but that ID is not in the GPG_REMOTE_ID list.", + spadat->pkt_source_ip, stanza_num, gpg_id); + return 0; + } + } + return 1; +} + /* Process the SPA packet data */ void @@ -498,7 +670,7 @@ incoming_spa(fko_srv_options_t *opts) */ fko_ctx_t ctx = NULL; - char *spa_ip_demark, *gpg_id, *gpg_fpr, *raw_digest = NULL; + char *spa_ip_demark, *raw_digest = NULL; time_t now_ts; int res, ts_diff, enc_type, stanza_num=0; int added_replay_digest = 0; @@ -515,9 +687,6 @@ incoming_spa(fko_srv_options_t *opts) /* Loop through all access stanzas looking for a match */ acc_stanza_t *acc = opts->acc_stanzas; - acc_string_list_t *gpg_id_ndx; - acc_string_list_t *gpg_fpr_ndx; - unsigned char is_gpg_match = 0; inet_ntop(AF_INET, &(spa_pkt->packet_src_ip), spadat.pkt_source_ip, sizeof(spadat.pkt_source_ip)); @@ -619,83 +788,11 @@ incoming_spa(fko_srv_options_t *opts) if(acc->use_gpg && enc_type == FKO_ENCRYPTION_GPG && cmd_exec_success == 0) { - /* For GPG we create the new context without decrypting on the fly - * so we can set some GPG parameters first. - */ - if(acc->gpg_decrypt_pw != NULL || acc->gpg_allow_no_pw) + if(! handle_gpg_enc(acc, spa_pkt, &spadat, + &ctx, &attempted_decrypt, stanza_num, &res)) { - res = fko_new_with_data(&ctx, (char *)spa_pkt->packet_data, NULL, - 0, FKO_ENC_MODE_ASYMMETRIC, acc->hmac_key, - acc->hmac_key_len, acc->hmac_type); - - if(res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error creating fko context (before decryption): %s", - spadat.pkt_source_ip, stanza_num, fko_errstr(res) - ); - acc = acc->next; - continue; - } - - /* Set whatever GPG parameters we have. - */ - if(acc->gpg_exe != NULL) - { - res = fko_set_gpg_exe(ctx, acc->gpg_exe); - if(res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error setting GPG path %s: %s", - spadat.pkt_source_ip, stanza_num, acc->gpg_exe, - fko_errstr(res) - ); - acc = acc->next; - continue; - } - } - - if(acc->gpg_home_dir != NULL) - { - res = fko_set_gpg_home_dir(ctx, acc->gpg_home_dir); - if(res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error setting GPG keyring path to %s: %s", - spadat.pkt_source_ip, stanza_num, acc->gpg_home_dir, - fko_errstr(res) - ); - acc = acc->next; - continue; - } - } - - if(acc->gpg_decrypt_id != NULL) - fko_set_gpg_recipient(ctx, acc->gpg_decrypt_id); - - /* If GPG_REQUIRE_SIG is set for this acc stanza, then set - * the FKO context accordingly and check the other GPG Sig- - * related parameters. This also applies when REMOTE_ID is - * set. - */ - if(acc->gpg_require_sig) - { - fko_set_gpg_signature_verify(ctx, 1); - - /* Set whether or not to ignore signature verification errors. - */ - fko_set_gpg_ignore_verify_error(ctx, acc->gpg_ignore_sig_error); - } - else - { - fko_set_gpg_signature_verify(ctx, 0); - fko_set_gpg_ignore_verify_error(ctx, 1); - } - - /* Now decrypt the data. - */ - res = fko_decrypt_spa_data(ctx, acc->gpg_decrypt_pw, 0); - attempted_decrypt = 1; + acc = acc->next; + continue; } } @@ -740,8 +837,9 @@ incoming_spa(fko_srv_options_t *opts) added_replay_digest = 1; } - /* At this point, we assume the SPA data is valid. Now we need to see - * if it meets our access criteria. + /* At this point the SPA data is authenticated via the HMAC (if used + * for now). Next we need to see if it meets our access criteria which + * the server imposes regardless of the content of the SPA packet. */ log_msg(LOG_DEBUG, "[%s] (stanza #%d) SPA Decode (res=%i):", spadat.pkt_source_ip, stanza_num, res); @@ -756,91 +854,14 @@ incoming_spa(fko_srv_options_t *opts) * then we need to make sure this incoming message is signer ID matches * an entry in the list. */ + if(enc_type == FKO_ENCRYPTION_GPG && acc->gpg_require_sig) { - res = fko_get_gpg_signature_id(ctx, &gpg_id); - if(res != FKO_SUCCESS) + if(! handle_gpg_sigs(acc, &spadat, &ctx, stanza_num, &res)) { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error pulling the GPG signature ID from the context: %s", - spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); acc = acc->next; continue; } - - res = fko_get_gpg_signature_fpr(ctx, &gpg_fpr); - if(res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error pulling the GPG fingerprint from the context: %s", - spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); - acc = acc->next; - continue; - } - - log_msg(LOG_INFO, "[%s] (stanza #%d) Incoming SPA data signed by '%s' (fingerprint '%s').", - spadat.pkt_source_ip, stanza_num, gpg_id, gpg_fpr); - - /* prefer GnuPG fingerprint match if so configured - */ - if(acc->gpg_remote_fpr != NULL) - { - is_gpg_match = 0; - for(gpg_fpr_ndx = acc->gpg_remote_fpr_list; - gpg_fpr_ndx != NULL; gpg_fpr_ndx=gpg_fpr_ndx->next) - { - res = fko_gpg_signature_fpr_match(ctx, - gpg_fpr_ndx->str, &is_gpg_match); - if(res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error in GPG signature comparision: %s", - spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); - acc = acc->next; - continue; - } - if(is_gpg_match) - break; - } - if(! is_gpg_match) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Incoming SPA packet signed by: %s, but that fingerprint is not in the GPG_FINGERPRINT_ID list.", - spadat.pkt_source_ip, stanza_num, gpg_fpr); - acc = acc->next; - continue; - } - } - - if(acc->gpg_remote_id != NULL) - { - is_gpg_match = 0; - for(gpg_id_ndx = acc->gpg_remote_id_list; - gpg_id_ndx != NULL; gpg_id_ndx=gpg_id_ndx->next) - { - res = fko_gpg_signature_id_match(ctx, - gpg_id_ndx->str, &is_gpg_match); - if(res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error in GPG signature comparision: %s", - spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); - acc = acc->next; - continue; - } - if(is_gpg_match) - break; - } - - if(! is_gpg_match) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Incoming SPA packet signed by ID: %s, but that ID is not in the GPG_REMOTE_ID list.", - spadat.pkt_source_ip, stanza_num, gpg_id); - acc = acc->next; - continue; - } - } } /* Populate our spa data struct for future reference. From 591d400216f40f16b3aa116e938130130fb7929e Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 25 Jul 2015 13:26:50 -0700 Subject: [PATCH 188/219] [test suite] fix sudo user tests --- test/test-fwknop.pl | 4 ++-- test/tests/rijndael_hmac_cmd_exec.pl | 8 +------- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 27769970..90976fa2 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -4757,10 +4757,10 @@ sub spa_cmd_exec_cycle() { $curr_test_file); $rv = 1; } else { - &write_test_file("[+] $cmd_exec_test_file is not " . + &write_test_file("[-] $cmd_exec_test_file is not " . "owned by user: $test_hr->{'cmd_exec_file_owner'}\n", $curr_test_file); - $rv = 1; + $rv = 0; } } if ($test_hr->{'cmd_exec_file_not_created'}) { diff --git a/test/tests/rijndael_hmac_cmd_exec.pl b/test/tests/rijndael_hmac_cmd_exec.pl index 2428dba7..3248ba35 100644 --- a/test/tests/rijndael_hmac_cmd_exec.pl +++ b/test/tests/rijndael_hmac_cmd_exec.pl @@ -131,13 +131,12 @@ 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . $verbose_str, - 'cmd_exec_file_owner' => 'nobody', 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . "-d $default_digest_file -p $default_pid_file $intf_str", 'sudo_test' => $YES, 'sudo_conf' => 'USER localhost = NOPASSWD: /usr/bin/cat, (root) TOUCH', 'sudo_exec_user' => $YES, - 'cmd_exec_file_owner' => 'root', + 'cmd_exec_file_owner' => 'USER', 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, }, { @@ -167,7 +166,6 @@ 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . $verbose_str, - 'cmd_exec_file_owner' => 'nobody', 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . "-d $default_digest_file -p $default_pid_file $intf_str", 'sudo_test' => $YES, @@ -185,7 +183,6 @@ 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . $verbose_str, - 'cmd_exec_file_owner' => 'nobody', 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . "-d $default_digest_file -p $default_pid_file $intf_str", 'sudo_test' => $YES, @@ -204,7 +201,6 @@ 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . $verbose_str, - 'cmd_exec_file_owner' => 'nobody', 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . "-d $default_digest_file -p $default_pid_file $intf_str", 'sudo_test' => $YES, @@ -223,7 +219,6 @@ 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . $verbose_str, - 'cmd_exec_file_owner' => 'nobody', 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . "-d $default_digest_file -p $default_pid_file $intf_str", 'sudo_test' => $YES, @@ -241,7 +236,6 @@ 'cmdline' => qq|$fwknopCmd --server-cmd "touch $cmd_exec_test_file" | . "-a $fake_ip -D $loopback_ip --rc-file $cf{'rc_hmac_b64_key'} " . $verbose_str, - 'cmd_exec_file_owner' => 'nobody', 'fwknopd_cmdline' => "$fwknopdCmd -c $cf{'def'} -a $sudo_access_conf " . "-d $default_digest_file -p $default_pid_file $intf_str", 'sudo_test' => $YES, From c0330e5c8b604fb50330dfbe60fdf305393250c4 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 25 Jul 2015 13:27:42 -0700 Subject: [PATCH 189/219] [server] additional work on splitting incoming_spa() loop into functions --- server/incoming_spa.c | 646 ++++++++++++++++++++++++------------------ 1 file changed, 374 insertions(+), 272 deletions(-) diff --git a/server/incoming_spa.c b/server/incoming_spa.c index 288a8eca..158f6a34 100644 --- a/server/incoming_spa.c +++ b/server/incoming_spa.c @@ -50,7 +50,7 @@ * error code value if there is any indication the data is not valid spa data. */ static int -preprocess_spa_data(fko_srv_options_t *opts, spa_pkt_info_t *spa_pkt) +preprocess_spa_data(const fko_srv_options_t *opts, spa_pkt_info_t *spa_pkt) { char *ndx = (char *)&(spa_pkt->packet_data); @@ -269,6 +269,29 @@ get_spa_data_fields(fko_ctx_t ctx, spa_data_t *spdat) return(res); } +static int +check_pkt_age(const fko_srv_options_t *opts, spa_data_t *spadat, + const int stanza_num, const int conf_pkt_age) +{ + int ts_diff; + time_t now_ts; + + if(strncasecmp(opts->config[CONF_ENABLE_SPA_PACKET_AGING], "Y", 1) == 0) + { + time(&now_ts); + + ts_diff = labs(now_ts - spadat->timestamp); + + if(ts_diff > conf_pkt_age) + { + log_msg(LOG_WARNING, "[%s] (stanza #%d) SPA data time difference is too great (%i seconds).", + spadat->pkt_source_ip, stanza_num, ts_diff); + return 0; + } + } + return 1; +} + static int check_stanza_expiration(acc_stanza_t *acc, spa_data_t *spadat, const int stanza_num) @@ -489,173 +512,365 @@ process_cmd_msg(fko_srv_options_t *opts, acc_stanza_t *acc, } static int -handle_gpg_enc(acc_stanza_t *acc, spa_pkt_info_t *spa_pkt, - spa_data_t *spadat, fko_ctx_t *ctx, int *attempted_decrypt, - const int stanza_num, int *res) +check_mode_ctx(spa_data_t *spadat, fko_ctx_t *ctx, int attempted_decrypt, + const int enc_type, const int stanza_num, const int res) { - /* For GPG we create the new context without decrypting on the fly - * so we can set some GPG parameters first. - */ - if(acc->gpg_decrypt_pw != NULL || acc->gpg_allow_no_pw) + if(attempted_decrypt == 0) { - *res = fko_new_with_data(ctx, (char *)spa_pkt->packet_data, NULL, - 0, FKO_ENC_MODE_ASYMMETRIC, acc->hmac_key, - acc->hmac_key_len, acc->hmac_type); + log_msg(LOG_ERR, + "[%s] (stanza #%d) No stanza encryption mode match for encryption type: %i.", + spadat->pkt_source_ip, stanza_num, enc_type); + return 0; + } - if(*res != FKO_SUCCESS) + /* Do we have a valid FKO context? Did the SPA decrypt properly? + */ + if(res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, "[%s] (stanza #%d) Error creating fko context: %s", + spadat->pkt_source_ip, stanza_num, fko_errstr(res)); + + if(IS_GPG_ERROR(res)) + log_msg(LOG_WARNING, "[%s] (stanza #%d) - GPG ERROR: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + + return 1; +} + +static int +handle_rijndael_enc(acc_stanza_t *acc, spa_pkt_info_t *spa_pkt, + spa_data_t *spadat, fko_ctx_t *ctx, int *attempted_decrypt, + int *cmd_exec_success, const int enc_type, const int stanza_num, + int *res) +{ + if(acc->use_rijndael) + { + if(acc->key == NULL) { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error creating fko context (before decryption): %s", - spadat->pkt_source_ip, stanza_num, fko_errstr(*res) + log_msg(LOG_ERR, + "[%s] (stanza #%d) No KEY for RIJNDAEL encrypted messages", + spadat->pkt_source_ip, stanza_num ); return 0; } - /* Set whatever GPG parameters we have. + /* Command mode messages may be quite long */ - if(acc->gpg_exe != NULL) + if(acc->enable_cmd_exec || enc_type == FKO_ENCRYPTION_RIJNDAEL) { - *res = fko_set_gpg_exe(*ctx, acc->gpg_exe); + *res = fko_new_with_data(ctx, (char *)spa_pkt->packet_data, + acc->key, acc->key_len, acc->encryption_mode, acc->hmac_key, + acc->hmac_key_len, acc->hmac_type); + *attempted_decrypt = 1; + if(*res == FKO_SUCCESS) + *cmd_exec_success = 1; + } + } + return 1; +} + +static int +handle_gpg_enc(acc_stanza_t *acc, spa_pkt_info_t *spa_pkt, + spa_data_t *spadat, fko_ctx_t *ctx, int *attempted_decrypt, + const int cmd_exec_success, const int enc_type, + const int stanza_num, int *res) +{ + if(acc->use_gpg && enc_type == FKO_ENCRYPTION_GPG && cmd_exec_success == 0) + { + /* For GPG we create the new context without decrypting on the fly + * so we can set some GPG parameters first. + */ + if(acc->gpg_decrypt_pw != NULL || acc->gpg_allow_no_pw) + { + *res = fko_new_with_data(ctx, (char *)spa_pkt->packet_data, NULL, + 0, FKO_ENC_MODE_ASYMMETRIC, acc->hmac_key, + acc->hmac_key_len, acc->hmac_type); + if(*res != FKO_SUCCESS) { log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error setting GPG path %s: %s", - spadat->pkt_source_ip, stanza_num, acc->gpg_exe, - fko_errstr(*res) + "[%s] (stanza #%d) Error creating fko context (before decryption): %s", + spadat->pkt_source_ip, stanza_num, fko_errstr(*res) ); return 0; } - } - if(acc->gpg_home_dir != NULL) - { - *res = fko_set_gpg_home_dir(*ctx, acc->gpg_home_dir); - if(*res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error setting GPG keyring path to %s: %s", - spadat->pkt_source_ip, stanza_num, acc->gpg_home_dir, - fko_errstr(*res) - ); - return 0; - } - } - - if(acc->gpg_decrypt_id != NULL) - fko_set_gpg_recipient(*ctx, acc->gpg_decrypt_id); - - /* If GPG_REQUIRE_SIG is set for this acc stanza, then set - * the FKO context accordingly and check the other GPG Sig- - * related parameters. This also applies when REMOTE_ID is - * set. - */ - if(acc->gpg_require_sig) - { - fko_set_gpg_signature_verify(*ctx, 1); - - /* Set whether or not to ignore signature verification errors. + /* Set whatever GPG parameters we have. */ - fko_set_gpg_ignore_verify_error(*ctx, acc->gpg_ignore_sig_error); - } - else - { - fko_set_gpg_signature_verify(*ctx, 0); - fko_set_gpg_ignore_verify_error(*ctx, 1); - } + if(acc->gpg_exe != NULL) + { + *res = fko_set_gpg_exe(*ctx, acc->gpg_exe); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error setting GPG path %s: %s", + spadat->pkt_source_ip, stanza_num, acc->gpg_exe, + fko_errstr(*res) + ); + return 0; + } + } - /* Now decrypt the data. - */ - *res = fko_decrypt_spa_data(*ctx, acc->gpg_decrypt_pw, 0); - *attempted_decrypt = 1; + if(acc->gpg_home_dir != NULL) + { + *res = fko_set_gpg_home_dir(*ctx, acc->gpg_home_dir); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error setting GPG keyring path to %s: %s", + spadat->pkt_source_ip, stanza_num, acc->gpg_home_dir, + fko_errstr(*res) + ); + return 0; + } + } + + if(acc->gpg_decrypt_id != NULL) + fko_set_gpg_recipient(*ctx, acc->gpg_decrypt_id); + + /* If GPG_REQUIRE_SIG is set for this acc stanza, then set + * the FKO context accordingly and check the other GPG Sig- + * related parameters. This also applies when REMOTE_ID is + * set. + */ + if(acc->gpg_require_sig) + { + fko_set_gpg_signature_verify(*ctx, 1); + + /* Set whether or not to ignore signature verification errors. + */ + fko_set_gpg_ignore_verify_error(*ctx, acc->gpg_ignore_sig_error); + } + else + { + fko_set_gpg_signature_verify(*ctx, 0); + fko_set_gpg_ignore_verify_error(*ctx, 1); + } + + /* Now decrypt the data. + */ + *res = fko_decrypt_spa_data(*ctx, acc->gpg_decrypt_pw, 0); + *attempted_decrypt = 1; + } } return 1; } static int handle_gpg_sigs(acc_stanza_t *acc, spa_data_t *spadat, - fko_ctx_t *ctx, const int stanza_num, int *res) + fko_ctx_t *ctx, const int enc_type, const int stanza_num, int *res) { char *gpg_id, *gpg_fpr; acc_string_list_t *gpg_id_ndx; acc_string_list_t *gpg_fpr_ndx; unsigned char is_gpg_match = 0; - *res = fko_get_gpg_signature_id(*ctx, &gpg_id); - if(*res != FKO_SUCCESS) + if(enc_type == FKO_ENCRYPTION_GPG && acc->gpg_require_sig) { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error pulling the GPG signature ID from the context: %s", - spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); - return 0; - } - - *res = fko_get_gpg_signature_fpr(*ctx, &gpg_fpr); - if(*res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error pulling the GPG fingerprint from the context: %s", - spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); - return 0; - } - - log_msg(LOG_INFO, "[%s] (stanza #%d) Incoming SPA data signed by '%s' (fingerprint '%s').", - spadat->pkt_source_ip, stanza_num, gpg_id, gpg_fpr); - - /* prefer GnuPG fingerprint match if so configured - */ - if(acc->gpg_remote_fpr != NULL) - { - is_gpg_match = 0; - for(gpg_fpr_ndx = acc->gpg_remote_fpr_list; - gpg_fpr_ndx != NULL; gpg_fpr_ndx=gpg_fpr_ndx->next) - { - *res = fko_gpg_signature_fpr_match(*ctx, - gpg_fpr_ndx->str, &is_gpg_match); - if(*res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error in GPG signature comparision: %s", - spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); - return 0; - } - if(is_gpg_match) - break; - } - if(! is_gpg_match) + *res = fko_get_gpg_signature_id(*ctx, &gpg_id); + if(*res != FKO_SUCCESS) { log_msg(LOG_WARNING, - "[%s] (stanza #%d) Incoming SPA packet signed by: %s, but that fingerprint is not in the GPG_FINGERPRINT_ID list.", - spadat->pkt_source_ip, stanza_num, gpg_fpr); + "[%s] (stanza #%d) Error pulling the GPG signature ID from the context: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + + *res = fko_get_gpg_signature_fpr(*ctx, &gpg_fpr); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error pulling the GPG fingerprint from the context: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + + log_msg(LOG_INFO, + "[%s] (stanza #%d) Incoming SPA data signed by '%s' (fingerprint '%s').", + spadat->pkt_source_ip, stanza_num, gpg_id, gpg_fpr); + + /* prefer GnuPG fingerprint match if so configured + */ + if(acc->gpg_remote_fpr != NULL) + { + is_gpg_match = 0; + for(gpg_fpr_ndx = acc->gpg_remote_fpr_list; + gpg_fpr_ndx != NULL; gpg_fpr_ndx=gpg_fpr_ndx->next) + { + *res = fko_gpg_signature_fpr_match(*ctx, + gpg_fpr_ndx->str, &is_gpg_match); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error in GPG signature comparision: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + if(is_gpg_match) + break; + } + if(! is_gpg_match) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Incoming SPA packet signed by: %s, but that fingerprint is not in the GPG_FINGERPRINT_ID list.", + spadat->pkt_source_ip, stanza_num, gpg_fpr); + return 0; + } + } + + if(acc->gpg_remote_id != NULL) + { + is_gpg_match = 0; + for(gpg_id_ndx = acc->gpg_remote_id_list; + gpg_id_ndx != NULL; gpg_id_ndx=gpg_id_ndx->next) + { + *res = fko_gpg_signature_id_match(*ctx, + gpg_id_ndx->str, &is_gpg_match); + if(*res != FKO_SUCCESS) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Error in GPG signature comparision: %s", + spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); + return 0; + } + if(is_gpg_match) + break; + } + + if(! is_gpg_match) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Incoming SPA packet signed by ID: %s, but that ID is not in the GPG_REMOTE_ID list.", + spadat->pkt_source_ip, stanza_num, gpg_id); + return 0; + } + } + } + return 1; +} + +static int +check_src_access(acc_stanza_t *acc, spa_data_t *spadat, const int stanza_num) +{ + if(strcmp(spadat->spa_message_src_ip, "0.0.0.0") == 0) + { + if(acc->require_source_address) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Got 0.0.0.0 when valid source IP was required.", + spadat->pkt_source_ip, stanza_num + ); + return 0; + } + spadat->use_src_ip = spadat->pkt_source_ip; + } + else + spadat->use_src_ip = spadat->spa_message_src_ip; + + return 1; +} + +static int +check_username(acc_stanza_t *acc, spa_data_t *spadat, const int stanza_num) +{ + if(acc->require_username != NULL) + { + if(strcmp(spadat->username, acc->require_username) != 0) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) Username in SPA data (%s) does not match required username: %s", + spadat->pkt_source_ip, stanza_num, spadat->username, acc->require_username + ); return 0; } } + return 1; +} - if(acc->gpg_remote_id != NULL) +static int +check_nat_access_types(fko_srv_options_t *opts, acc_stanza_t *acc, + spa_data_t *spadat, const int stanza_num) +{ + if(spadat->message_type == FKO_LOCAL_NAT_ACCESS_MSG + || spadat->message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG + || spadat->message_type == FKO_NAT_ACCESS_MSG + || spadat->message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) { - is_gpg_match = 0; - for(gpg_id_ndx = acc->gpg_remote_id_list; - gpg_id_ndx != NULL; gpg_id_ndx=gpg_id_ndx->next) - { - *res = fko_gpg_signature_id_match(*ctx, - gpg_id_ndx->str, &is_gpg_match); - if(*res != FKO_SUCCESS) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Error in GPG signature comparision: %s", - spadat->pkt_source_ip, stanza_num, fko_gpg_errstr(*ctx)); - return 0; - } - if(is_gpg_match) - break; - } - - if(! is_gpg_match) +#if FIREWALL_FIREWALLD + if(strncasecmp(opts->config[CONF_ENABLE_FIREWD_FORWARDING], "Y", 1)!=0) { log_msg(LOG_WARNING, - "[%s] (stanza #%d) Incoming SPA packet signed by ID: %s, but that ID is not in the GPG_REMOTE_ID list.", - spadat->pkt_source_ip, stanza_num, gpg_id); + "(stanza #%d) SPA packet from %s requested NAT access, but is not enabled", + stanza_num, spadat->pkt_source_ip + ); return 0; } +#elif FIREWALL_IPTABLES + if(strncasecmp(opts->config[CONF_ENABLE_IPT_FORWARDING], "Y", 1)!=0) + { + log_msg(LOG_WARNING, + "(stanza #%d) SPA packet from %s requested NAT access, but is not enabled", + stanza_num, spadat->pkt_source_ip + ); + return 0; + } +#else + log_msg(LOG_WARNING, + "(stanza #%d) SPA packet from %s requested unsupported NAT access", + stanza_num, spadat->pkt_source_ip + ); + return 0; +#endif + } + return 1; +} + +static int +add_replay_cache(fko_srv_options_t *opts, acc_stanza_t *acc, + spa_data_t *spadat, char *raw_digest, int *added_replay_digest, + const int stanza_num, int *res) +{ + if (!opts->test && added_replay_digest == 0 + && strncasecmp(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE], "Y", 1) == 0) + { + + *res = add_replay(opts, raw_digest); + if (*res != SPA_MSG_SUCCESS) + { + log_msg(LOG_WARNING, "[%s] (stanza #%d) Could not add digest to replay cache", + spadat->pkt_source_ip, stanza_num); + return 0; + } + *added_replay_digest = 1; + } + + return 1; +} + +static void +set_timeout(acc_stanza_t *acc, spa_data_t *spadat) +{ + if(spadat->client_timeout > 0) + spadat->fw_access_timeout = spadat->client_timeout; + else if(acc->fw_access_timeout > 0) + spadat->fw_access_timeout = acc->fw_access_timeout; + else + spadat->fw_access_timeout = DEF_FW_ACCESS_TIMEOUT; + return; +} + +static int +check_port_proto(acc_stanza_t *acc, spa_data_t *spadat, const int stanza_num) +{ + if(! acc_check_port_access(acc, spadat->spa_message_remain)) + { + log_msg(LOG_WARNING, + "[%s] (stanza #%d) One or more requested protocol/ports was denied per access.conf.", + spadat->pkt_source_ip, stanza_num + ); + return 0; } return 1; } @@ -671,8 +886,7 @@ incoming_spa(fko_srv_options_t *opts) fko_ctx_t ctx = NULL; char *spa_ip_demark, *raw_digest = NULL; - time_t now_ts; - int res, ts_diff, enc_type, stanza_num=0; + int res, enc_type, stanza_num=0; int added_replay_digest = 0; int is_err, cmd_exec_success = 0, attempted_decrypt = 0; int conf_pkt_age = 0; @@ -761,80 +975,35 @@ incoming_spa(fko_srv_options_t *opts) */ enc_type = fko_encryption_type((char *)spa_pkt->packet_data); - if(acc->use_rijndael) + if(! handle_rijndael_enc(acc, spa_pkt, &spadat, &ctx, + &attempted_decrypt, &cmd_exec_success, enc_type, + stanza_num, &res)) { - if (acc->key == NULL) - { - log_msg(LOG_ERR, - "[%s] (stanza #%d) No KEY for RIJNDAEL encrypted messages", - spadat.pkt_source_ip, stanza_num - ); - acc = acc->next; - continue; - } - - /* Command mode messages may be quite long - */ - if(acc->enable_cmd_exec || enc_type == FKO_ENCRYPTION_RIJNDAEL) - { - res = fko_new_with_data(&ctx, (char *)spa_pkt->packet_data, - acc->key, acc->key_len, acc->encryption_mode, acc->hmac_key, - acc->hmac_key_len, acc->hmac_type); - attempted_decrypt = 1; - if(res == FKO_SUCCESS) - cmd_exec_success = 1; - } - } - - if(acc->use_gpg && enc_type == FKO_ENCRYPTION_GPG && cmd_exec_success == 0) - { - if(! handle_gpg_enc(acc, spa_pkt, &spadat, - &ctx, &attempted_decrypt, stanza_num, &res)) - { - acc = acc->next; - continue; - } - } - - if(attempted_decrypt == 0) - { - log_msg(LOG_ERR, - "[%s] (stanza #%d) No stanza encryption mode match for encryption type: %i.", - spadat.pkt_source_ip, stanza_num, enc_type); acc = acc->next; continue; } - /* Do we have a valid FKO context? Did the SPA decrypt properly? - */ - if(res != FKO_SUCCESS) + if(! handle_gpg_enc(acc, spa_pkt, &spadat, &ctx, &attempted_decrypt, + cmd_exec_success, enc_type, stanza_num, &res)) { - log_msg(LOG_WARNING, "[%s] (stanza #%d) Error creating fko context: %s", - spadat.pkt_source_ip, stanza_num, fko_errstr(res)); - - if(IS_GPG_ERROR(res)) - log_msg(LOG_WARNING, "[%s] (stanza #%d) - GPG ERROR: %s", - spadat.pkt_source_ip, stanza_num, fko_gpg_errstr(ctx)); + acc = acc->next; + continue; + } + if(! check_mode_ctx(&spadat, &ctx, attempted_decrypt, + enc_type, stanza_num, res)) + { acc = acc->next; continue; } /* Add this SPA packet into the replay detection cache */ - if (!opts->test && added_replay_digest == 0 - && strncasecmp(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE], "Y", 1) == 0) + if(! add_replay_cache(opts, acc, &spadat, raw_digest, + &added_replay_digest, stanza_num, &res)) { - - res = add_replay(opts, raw_digest); - if (res != SPA_MSG_SUCCESS) - { - log_msg(LOG_WARNING, "[%s] (stanza #%d) Could not add digest to replay cache", - spadat.pkt_source_ip, stanza_num); - acc = acc->next; - continue; - } - added_replay_digest = 1; + acc = acc->next; + continue; } /* At this point the SPA data is authenticated via the HMAC (if used @@ -855,13 +1024,10 @@ incoming_spa(fko_srv_options_t *opts) * an entry in the list. */ - if(enc_type == FKO_ENCRYPTION_GPG && acc->gpg_require_sig) + if(! handle_gpg_sigs(acc, &spadat, &ctx, enc_type, stanza_num, &res)) { - if(! handle_gpg_sigs(acc, &spadat, &ctx, stanza_num, &res)) - { - acc = acc->next; - continue; - } + acc = acc->next; + continue; } /* Populate our spa data struct for future reference. @@ -881,29 +1047,14 @@ incoming_spa(fko_srv_options_t *opts) * data, then use that. If not, try the FW_ACCESS_TIMEOUT from the * access.conf file (if there is one). Otherwise use the default. */ - if(spadat.client_timeout > 0) - spadat.fw_access_timeout = spadat.client_timeout; - else if(acc->fw_access_timeout > 0) - spadat.fw_access_timeout = acc->fw_access_timeout; - else - spadat.fw_access_timeout = DEF_FW_ACCESS_TIMEOUT; + set_timeout(acc, &spadat); /* Check packet age if so configured. */ - if(strncasecmp(opts->config[CONF_ENABLE_SPA_PACKET_AGING], "Y", 1) == 0) + if(! check_pkt_age(opts, &spadat, stanza_num, conf_pkt_age)) { - time(&now_ts); - - ts_diff = labs(now_ts - spadat.timestamp); - - if(ts_diff > conf_pkt_age) - { - log_msg(LOG_WARNING, "[%s] (stanza #%d) SPA data time difference is too great (%i seconds).", - spadat.pkt_source_ip, stanza_num, ts_diff); - - acc = acc->next; - continue; - } + acc = acc->next; + continue; } /* At this point, we have enough to check the embedded (or packet source) @@ -943,74 +1094,27 @@ incoming_spa(fko_srv_options_t *opts) /* If use source IP was requested (embedded IP of 0.0.0.0), make sure it * is allowed. */ - if(strcmp(spadat.spa_message_src_ip, "0.0.0.0") == 0) + if(! check_src_access(acc, &spadat, stanza_num)) { - if(acc->require_source_address) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Got 0.0.0.0 when valid source IP was required.", - spadat.pkt_source_ip, stanza_num - ); - acc = acc->next; - continue; - } - - spadat.use_src_ip = spadat.pkt_source_ip; + acc = acc->next; + continue; } - else - spadat.use_src_ip = spadat.spa_message_src_ip; /* If REQUIRE_USERNAME is set, make sure the username in this SPA data * matches. */ - if(acc->require_username != NULL) + if(! check_username(acc, &spadat, stanza_num)) { - if(strcmp(spadat.username, acc->require_username) != 0) - { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) Username in SPA data (%s) does not match required username: %s", - spadat.pkt_source_ip, stanza_num, spadat.username, acc->require_username - ); - acc = acc->next; - continue; - } + acc = acc->next; + continue; } /* Take action based on SPA message type. */ - if(spadat.message_type == FKO_LOCAL_NAT_ACCESS_MSG - || spadat.message_type == FKO_CLIENT_TIMEOUT_LOCAL_NAT_ACCESS_MSG - || spadat.message_type == FKO_NAT_ACCESS_MSG - || spadat.message_type == FKO_CLIENT_TIMEOUT_NAT_ACCESS_MSG) + if(! check_nat_access_types(opts, acc, &spadat, stanza_num)) { -#if FIREWALL_FIREWALLD - if(strncasecmp(opts->config[CONF_ENABLE_FIREWD_FORWARDING], "Y", 1)!=0) - { - log_msg(LOG_WARNING, - "(stanza #%d) SPA packet from %s requested NAT access, but is not enabled", - stanza_num, spadat.pkt_source_ip - ); - acc = acc->next; - continue; - } -#elif FIREWALL_IPTABLES - if(strncasecmp(opts->config[CONF_ENABLE_IPT_FORWARDING], "Y", 1)!=0) - { - log_msg(LOG_WARNING, - "(stanza #%d) SPA packet from %s requested NAT access, but is not enabled", - stanza_num, spadat.pkt_source_ip - ); - acc = acc->next; - continue; - } -#else - log_msg(LOG_WARNING, - "(stanza #%d) SPA packet from %s requested unsupported NAT access", - stanza_num, spadat.pkt_source_ip - ); acc = acc->next; continue; -#endif } /* Command messages. @@ -1029,7 +1133,6 @@ incoming_spa(fko_srv_options_t *opts) acc = acc->next; continue; } - } /* From this point forward, we have some kind of access message. So @@ -1038,12 +1141,8 @@ incoming_spa(fko_srv_options_t *opts) * * --DSS TODO: We should add BLACKLIST support here as well. */ - if(! acc_check_port_access(acc, spadat.spa_message_remain)) + if(! check_port_proto(acc, &spadat, stanza_num)) { - log_msg(LOG_WARNING, - "[%s] (stanza #%d) One or more requested protocol/ports was denied per access.conf.", - spadat.pkt_source_ip, stanza_num - ); acc = acc->next; continue; } @@ -1066,6 +1165,9 @@ incoming_spa(fko_srv_options_t *opts) process_spa_request(opts, acc, &spadat); } + /* If we made it here, then the SPA packet was processed according + * to a matching access.conf stanza, so we're done with this packet. + */ break; } From 72555ba9fec3af9d734a383ce98050a84bb7b5bd Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 25 Jul 2015 18:58:39 -0700 Subject: [PATCH 190/219] [server] minor comment fix for group ID determination in access.conf parsing --- server/access.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/access.c b/server/access.c index 4929c68e..8ce974df 100644 --- a/server/access.c +++ b/server/access.c @@ -118,7 +118,7 @@ add_acc_group(char **group_var, gid_t *gid_var, if(pw == NULL) { - log_msg(LOG_ERR, "[*] Unable to determine UID for %s: %s.", + log_msg(LOG_ERR, "[*] Unable to determine GID for %s: %s.", var_name, errno ? strerror(errno) : "Not a group on this system"); return FATAL_ERR; } From 47851dffddb25e3eb9a22ec54394adbc79bfe56f Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 25 Jul 2015 19:17:10 -0700 Subject: [PATCH 191/219] [test suite] use pgrep for fwknopd check at init time --- test/test-fwknop.pl | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 90976fa2..cb62654c 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -280,6 +280,7 @@ our $openssl_path = ''; our $base64_path = ''; our $pinentry_fail = 0; our $perl_path = ''; +our $prove_path = ''; our $ifconfig_path = ''; our $platform = ''; our $help = 0; @@ -940,7 +941,7 @@ my %test_keys = ( ### make sure no fwknopd instance is currently running die "[*] Please stop the running fwknopd instance." - if &is_fwknopd_running(); + if &global_fwknopd_pgrep_check(); ### now that we're ready to run, preserve any previous test ### suite output @@ -2823,7 +2824,7 @@ sub perl_fko_module_compile_install() { &run_cmd("make clean", $cmd_out_tmp, "../../test/$curr_test_file") if -e 'Makefile' or -e 'Makefile.old'; - &run_cmd("perl Makefile.PL PREFIX=../../test/$perl_mod_fko_dir " . + &run_cmd("$perl_path Makefile.PL PREFIX=../../test/$perl_mod_fko_dir " . "LIB=../../test/$perl_mod_fko_dir", $cmd_out_tmp, "../../test/$curr_test_file"); @@ -2901,7 +2902,7 @@ sub perl_fko_module_make_test_valgrind() { chdir '../perl/FKO' or die $!; - &run_cmd("prove --exec 'perl -Iblib/lib -Iblib/arch -M$cpan_valgrind_mod' t/*.t", + &run_cmd("$prove_path --exec 'perl -Iblib/lib -Iblib/arch -M$cpan_valgrind_mod' t/*.t", $cmd_out_tmp, "../../test/$curr_test_file"); chdir $curr_pwd or die $!; @@ -6987,7 +6988,7 @@ sub init() { ### check to see if the Test::Valgrind module is installed if ($enable_valgrind and $valgrind_path) { - unless (&run_cmd("perl -e 'use $cpan_valgrind_mod'", + unless (&run_cmd("$perl_path -e 'use $cpan_valgrind_mod'", $cmd_out_tmp, $curr_test_file) and &find_command('prove')) { push @tests_to_exclude, qr/$cpan_valgrind_mod/; } @@ -7027,7 +7028,9 @@ sub init() { $lib_view_cmd = &find_command('ldd') unless $lib_view_cmd; $git_path = &find_command('git') unless $git_path; $perl_path = &find_command('perl') unless $perl_path; + $prove_path = &find_command('prove') unless $prove_path; $touch_path = &find_command('touch') unless $touch_path; + $pgrep_path = &find_command('pgrep') unless $pgrep_path; if ($sudo_path) { $username = (getpwuid((stat($test_suite_path))[4]))[0]; @@ -7635,6 +7638,23 @@ sub is_fw_rule_active() { return $rv; } +sub global_fwknopd_pgrep_check() { + my $rv = 0; + if ($pgrep_path) { + open PGREP, "$pgrep_path fwknopd |" or die $!; + while (<PGREP>) { + if (/(\d+)/) { + print "[*] Found existing fwknopd pid: $1\n"; + $rv = 1; + } + } + close PGREP; + } else { + $rv = &is_fwknopd_running(); + } + return $rv; +} + sub is_fwknopd_running() { &run_cmd("$lib_view_str $fwknopdCmd $default_server_conf_args " . From e5c6f96788a57695e3d6c293cd0ebaa69563e167 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 25 Jul 2015 23:10:06 -0400 Subject: [PATCH 192/219] [server] fix compilation issue for non-iptables firewalls --- server/fw_util_ipf.c | 3 ++- server/fw_util_ipfw.c | 3 ++- server/fw_util_pf.c | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/server/fw_util_ipf.c b/server/fw_util_ipf.c index dbb4f499..41d2b177 100644 --- a/server/fw_util_ipf.c +++ b/server/fw_util_ipf.c @@ -153,7 +153,8 @@ process_spa_request(const fko_srv_options_t *opts, const acc_stanza_t *acc, spa_ * firewall rules. */ void -check_firewall_rules(const fko_srv_options_t *opts) +check_firewall_rules(const fko_srv_options_t *opts, + const int chk_rm_all) { /* TODO: Implement me */ diff --git a/server/fw_util_ipfw.c b/server/fw_util_ipfw.c index 1cde108d..9f49aea9 100644 --- a/server/fw_util_ipfw.c +++ b/server/fw_util_ipfw.c @@ -601,7 +601,8 @@ process_spa_request(const fko_srv_options_t * const opts, * firewall rules. */ void -check_firewall_rules(const fko_srv_options_t * const opts) +check_firewall_rules(const fko_srv_options_t * const opts, + const int chk_rm_all) { char exp_str[12] = {0}; char rule_num_str[6] = {0}; diff --git a/server/fw_util_pf.c b/server/fw_util_pf.c index 1a47b975..d25e278c 100644 --- a/server/fw_util_pf.c +++ b/server/fw_util_pf.c @@ -336,7 +336,8 @@ process_spa_request(const fko_srv_options_t * const opts, * firewall rules. */ void -check_firewall_rules(const fko_srv_options_t * const opts) +check_firewall_rules(const fko_srv_options_t * const opts, + const int chk_rm_all) { char exp_str[12] = {0}; char anchor_rules_copy[STANDARD_CMD_OUT_BUFSIZE] = {0}; From 743d861c6713e6456e71267f107681c8485a2db5 Mon Sep 17 00:00:00 2001 From: Damien Stuart <dstuart@dstuart.org> Date: Fri, 14 Aug 2015 16:49:07 -0400 Subject: [PATCH 193/219] Updated version in the spec file. --- fwknop.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fwknop.spec b/fwknop.spec index ae50287d..d9581b1c 100644 --- a/fwknop.spec +++ b/fwknop.spec @@ -13,7 +13,7 @@ %define _mandir /usr/share/man Name: fwknop -Version: 2.6.6 +Version: 2.6.7 Epoch: 1 Release: 1%{?dist} Summary: Firewall Knock Operator client. An implementation of Single Packet Authorization. From f3b25bdc241e6410ef5f99bcb2257911622ec4bd Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 16 Aug 2015 21:06:26 -0400 Subject: [PATCH 194/219] [test suite] require custom config paths for sudo tests --- test/test-fwknop.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index cb62654c..e4708813 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -7048,10 +7048,10 @@ sub init() { } close SR; } - } else { - push @tests_to_exclude, qr/sudo/; } + push @tests_to_exclude, qr/sudo/ unless $sudo_conf_testing; + ### see if the 'nobody' user is on the system unless (getpwnam('nobody')) { push @tests_to_exclude, qr/setuid nobody/; From 8edad8b5839acaf82f51631d40031f3c39bc619a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 16 Aug 2015 21:27:14 -0400 Subject: [PATCH 195/219] [extras] update Coverity version to 7.7.0 for interface script --- extras/coverity/coverity_scan.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/coverity/coverity_scan.sh b/extras/coverity/coverity_scan.sh index 73f9a4cc..08508f0d 100755 --- a/extras/coverity/coverity_scan.sh +++ b/extras/coverity/coverity_scan.sh @@ -1,7 +1,7 @@ #!/bin/sh +x make clean -export PATH=$PATH:/home/mbr/coverity/cov-analysis-linux64-7.6.0/bin +export PATH=$PATH:/home/mbr/coverity/cov-analysis-linux64-7.7.0/bin cov-build --dir cov-int make tar cvfz fwknop.tgz cov-int From 5e0a668a7f61e04eddd4b7dd4ec8273c543b1e0a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 16 Aug 2015 21:31:48 -0400 Subject: [PATCH 196/219] [server] minor access.c fix to quiet both Coverity and the CLANG static analyzer --- server/access.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/access.c b/server/access.c index 8ce974df..ee943e6a 100644 --- a/server/access.c +++ b/server/access.c @@ -90,7 +90,7 @@ add_acc_user(char **user_var, uid_t *uid_var, struct passwd *upw, errno = 0; upw = pw = getpwnam(val); - if(pw == NULL) + if(upw == NULL || pw == NULL) { log_msg(LOG_ERR, "[*] Unable to determine UID for %s: %s.", var_name, errno ? strerror(errno) : "Not a user on this system"); From 47ff151dea9ba469a39753943e0aa472c668f5b0 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 18 Aug 2015 20:37:56 -0400 Subject: [PATCH 197/219] [build] add convenience script for ASan builds Sometimes when ASan support is wanted for fwknop, the following compile error can be generated. This script provides a means to solve this. fwknop-spa_comm.o: In function `send_spa_packet_http': /home/mbr/git/fwknop.git/client/spa_comm.c:516: undefined reference to `rpl_malloc' ../lib/.libs/libfko.so: undefined reference to `rpl_realloc' --- Makefile.am | 1 + extras/sanitizer/asan-build.sh | 21 +++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100755 extras/sanitizer/asan-build.sh diff --git a/Makefile.am b/Makefile.am index 306e3b09..6ed2e9b1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -74,6 +74,7 @@ EXTRA_DIST = \ extras/ramdisk/ramdisk-create.sh \ extras/ramdisk/ramdisk-create-osx.sh \ extras/console-qr/console-qr.sh \ + extras/sanitizer/asan-build.sh \ fwknop.spec \ iphone/main.m \ iphone/Fwknop.xcodeproj \ diff --git a/extras/sanitizer/asan-build.sh b/extras/sanitizer/asan-build.sh new file mode 100755 index 00000000..ed42691b --- /dev/null +++ b/extras/sanitizer/asan-build.sh @@ -0,0 +1,21 @@ +#!/bin/sh -x + +# +# In some cases when enabling Google's Address Sanitizer, errors like the +# following can be generated. This script provides a workaround. +# +# fwknop-spa_comm.o: In function `send_spa_packet_http': +# /home/mbr/git/fwknop.git/client/spa_comm.c:516: undefined reference to `rpl_malloc' +# ../lib/.libs/libfko.so: undefined reference to `rpl_realloc' +# + +if [ -x ./configure ]; then + export ac_cv_func_malloc_0_nonnull=yes + export ac_cv_func_realloc_0_nonnull=yes + ./autogen.sh + ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/run --enable-asan-support $@ + make clean + make +else + echo "[*] Execute from the fwknop top level sources directory" +fi From a9c3e204dcf3714e1a891193a420f299438817f5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 18 Aug 2015 20:40:14 -0400 Subject: [PATCH 198/219] [test suite] pgrep usage bug fix --- test/test-fwknop.pl | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index e4708813..14c0ac94 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -1176,7 +1176,7 @@ sub run_test() { if ($enable_valgrind and &is_valgrind_running()) { if ($killall_path and $pgrep_path) { for my $cmd ('memcheck', 'valgrind') { - system "$pgrep_path > /dev/null $cmd " . + system "$pgrep_path -f $cmd > /dev/null " . "&& $killall_path -g -r $cmd > /dev/null 2>&1"; } } @@ -7030,7 +7030,6 @@ sub init() { $perl_path = &find_command('perl') unless $perl_path; $prove_path = &find_command('prove') unless $prove_path; $touch_path = &find_command('touch') unless $touch_path; - $pgrep_path = &find_command('pgrep') unless $pgrep_path; if ($sudo_path) { $username = (getpwuid((stat($test_suite_path))[4]))[0]; From 0fdc263a435a7ffe9e805b0ec2f1a9669406c7b5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 18 Aug 2015 21:58:53 -0400 Subject: [PATCH 199/219] options struct should not be global (CLANG -Wshadow warning) --- client/fwknop_common.h | 2 -- server/fwknopd_common.h | 5 ++--- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/client/fwknop_common.h b/client/fwknop_common.h index c57db028..45761a74 100644 --- a/client/fwknop_common.h +++ b/client/fwknop_common.h @@ -171,8 +171,6 @@ typedef struct fko_cli_options } fko_cli_options_t; -extern fko_cli_options_t options; - void free_configs(fko_cli_options_t *opts); #endif /* FWKNOP_COMMON_H */ diff --git a/server/fwknopd_common.h b/server/fwknopd_common.h index fd8c6752..ec4fd562 100644 --- a/server/fwknopd_common.h +++ b/server/fwknopd_common.h @@ -666,13 +666,12 @@ typedef struct fko_srv_options } fko_srv_options_t; -extern fko_srv_options_t options; - /* For cleaning up memory before exiting */ #define FW_CLEANUP 1 #define NO_FW_CLEANUP 0 -void clean_exit(fko_srv_options_t *opts, unsigned int fw_cleanup_flag, unsigned int exit_status); +void clean_exit(fko_srv_options_t *opts, + unsigned int fw_cleanup_flag, unsigned int exit_status); #endif /* FWKNOPD_COMMON_H */ From 423899f3c47122a1246a335d7abf978f1773abad Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 18 Aug 2015 22:02:00 -0400 Subject: [PATCH 200/219] [server] minor fix to remove unnecessary var definition --- server/fw_util_firewalld.c | 1 - server/fw_util_iptables.c | 1 - 2 files changed, 2 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index 9d8c4c5b..ff495717 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -89,7 +89,6 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, ); #if CODE_COVERAGE - int pid_status = 0; /* If we're maximizing code coverage, then exercise the run_extcmd_write() * function which is normally only used for the PF firewall. This is to * maximize code coverage in conjunction with the test suite, and is never diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index c349e2ad..2e209bb5 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -83,7 +83,6 @@ rule_exists_no_chk_support(const fko_srv_options_t * const opts, char *ndx = NULL; #if CODE_COVERAGE - int pid_status = 0; /* If we're maximizing code coverage, then exercise the run_extcmd_write() * function which is normally only used for the PF firewall. This is to * maximize code coverage in conjunction with the test suite, and is never From 82464574a6d07108dce57d2ca5873b8863861381 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Tue, 18 Aug 2015 22:12:23 -0400 Subject: [PATCH 201/219] [client] minor update to make chksum() static --- client/spa_comm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/spa_comm.c b/client/spa_comm.c index 6dd4808d..1a3692e5 100644 --- a/client/spa_comm.c +++ b/client/spa_comm.c @@ -54,7 +54,7 @@ dump_transmit_options(const fko_cli_options_t *options) /* Function to generate a header checksum. */ -unsigned short +static unsigned short chksum(unsigned short *buf, int nbytes) { unsigned int sum; From c5507d2c2a49aaac30582d51701e8a74b398a6fc Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 19 Aug 2015 23:41:17 -0400 Subject: [PATCH 202/219] [server] fix ptr vs. val check spotted by Coverity --- server/incoming_spa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/incoming_spa.c b/server/incoming_spa.c index 158f6a34..7bea742e 100644 --- a/server/incoming_spa.c +++ b/server/incoming_spa.c @@ -832,7 +832,7 @@ add_replay_cache(fko_srv_options_t *opts, acc_stanza_t *acc, spa_data_t *spadat, char *raw_digest, int *added_replay_digest, const int stanza_num, int *res) { - if (!opts->test && added_replay_digest == 0 + if (!opts->test && *added_replay_digest == 0 && strncasecmp(opts->config[CONF_ENABLE_DIGEST_PERSISTENCE], "Y", 1) == 0) { From ec9eef33654b596a3e863176e2b61a4ee32c51d8 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Wed, 19 Aug 2015 23:41:47 -0400 Subject: [PATCH 203/219] [server] fix a dead code condition spotted by Coverity --- server/fw_util_firewalld.c | 23 ++++++++++++----------- server/fw_util_iptables.c | 23 ++++++++++++----------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/server/fw_util_firewalld.c b/server/fw_util_firewalld.c index ff495717..c72d7b1e 100644 --- a/server/fw_util_firewalld.c +++ b/server/fw_util_firewalld.c @@ -1590,8 +1590,7 @@ rm_expired_rules(const fko_srv_options_t * const opts, { /* Track the minimum future rule expire time. */ - if(rule_exp > now) - min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; + min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; } /* Push our tracking index forward beyond (just processed) _exp_ @@ -1599,6 +1598,15 @@ rm_expired_rules(const fko_srv_options_t * const opts, */ ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); } + + /* Set the next pending expire time accordingly. 0 if there are no + * more rules, or whatever the next expected (min_exp) time will be. + */ + if(ch[cpos].active_rules < 1) + ch[cpos].next_expire = 0; + else if(min_exp) + ch[cpos].next_expire = min_exp; + return; } @@ -1613,7 +1621,7 @@ check_firewall_rules(const fko_srv_options_t * const opts, char fw_output_buf[STANDARD_CMD_OUT_BUFSIZE] = {0}; int i, res; - time_t now, min_exp = 0; + time_t now; struct fw_chain *ch = opts->fw_config->chain; @@ -1682,15 +1690,8 @@ check_firewall_rules(const fko_srv_options_t * const opts, } rm_expired_rules(opts, fw_output_buf, ndx, ch, i, now); - - /* Set the next pending expire time accordingly. 0 if there are no - * more rules, or whatever the next expected (min_exp) time will be. - */ - if(ch[i].active_rules < 1) - ch[i].next_expire = 0; - else if(min_exp) - ch[i].next_expire = min_exp; } + return; } diff --git a/server/fw_util_iptables.c b/server/fw_util_iptables.c index 2e209bb5..a8fbb6f5 100644 --- a/server/fw_util_iptables.c +++ b/server/fw_util_iptables.c @@ -1576,8 +1576,7 @@ rm_expired_rules(const fko_srv_options_t * const opts, { /* Track the minimum future rule expire time. */ - if(rule_exp > now) - min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; + min_exp = (min_exp < rule_exp) ? min_exp : rule_exp; } /* Push our tracking index forward beyond (just processed) _exp_ @@ -1585,6 +1584,15 @@ rm_expired_rules(const fko_srv_options_t * const opts, */ ndx = strstr(tmp_mark, EXPIRE_COMMENT_PREFIX); } + + /* Set the next pending expire time accordingly. 0 if there are no + * more rules, or whatever the next expected (min_exp) time will be. + */ + if(ch[cpos].active_rules < 1) + ch[cpos].next_expire = 0; + else if(min_exp) + ch[cpos].next_expire = min_exp; + return; } @@ -1599,7 +1607,7 @@ check_firewall_rules(const fko_srv_options_t * const opts, char ipt_output_buf[STANDARD_CMD_OUT_BUFSIZE] = {0}; int i, res; - time_t now, min_exp = 0; + time_t now; struct fw_chain *ch = opts->fw_config->chain; @@ -1668,15 +1676,8 @@ check_firewall_rules(const fko_srv_options_t * const opts, } rm_expired_rules(opts, ipt_output_buf, ndx, ch, i, now); - - /* Set the next pending expire time accordingly. 0 if there are no - * more rules, or whatever the next expected (min_exp) time will be. - */ - if(ch[i].active_rules < 1) - ch[i].next_expire = 0; - else if(min_exp) - ch[i].next_expire = min_exp; } + return; } From 2f94413b2fa4132f50dfca055e9fb15a5e633b85 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 21 Aug 2015 21:35:10 -0400 Subject: [PATCH 204/219] [server] bug fix for ipfw firewall rule removal --- server/fw_util_ipfw.c | 1 + 1 file changed, 1 insertion(+) diff --git a/server/fw_util_ipfw.c b/server/fw_util_ipfw.c index 9f49aea9..8a753cb0 100644 --- a/server/fw_util_ipfw.c +++ b/server/fw_util_ipfw.c @@ -640,6 +640,7 @@ check_firewall_rules(const fko_srv_options_t * const opts, res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); + chop_newline(cmd_out); log_msg(LOG_DEBUG, "check_firewall_rules() CMD: '%s' (res: %d)", cmd_buf, res); From f37fd2281607c68463311e06433db52f906c35e6 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 21 Aug 2015 21:49:07 -0400 Subject: [PATCH 205/219] [extras] use default configure args before running cov-build --- extras/coverity/coverity_scan.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/extras/coverity/coverity_scan.sh b/extras/coverity/coverity_scan.sh index 08508f0d..e3672562 100755 --- a/extras/coverity/coverity_scan.sh +++ b/extras/coverity/coverity_scan.sh @@ -1,6 +1,7 @@ #!/bin/sh +x make clean +./extras/apparmor/configure_args.sh export PATH=$PATH:/home/mbr/coverity/cov-analysis-linux64-7.7.0/bin cov-build --dir cov-int make tar cvfz fwknop.tgz cov-int From e999f61f82930254ef81f3b06de141e08a6f562a Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 21 Aug 2015 22:04:58 -0400 Subject: [PATCH 206/219] [test suite] allow /usr/local/etc/sudoers path --- test/test-fwknop.pl | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 14c0ac94..1c8402e7 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -202,7 +202,6 @@ my $fuzzing_class = 'bogus data'; my %fuzzing_spa_packets = (); my $total_fuzzing_pkts = 0; our $sudo_access_conf = "$run_dir/sudo_access.conf"; -my $sudo_conf = '/etc/sudoers'; my $sudo_conf_testing = ''; my $server_test_file = ''; my $client_only_mode = 0; @@ -7037,15 +7036,19 @@ sub init() { unless $username; ### see if sudo is configured to accept custom configs - if (-e $sudo_conf) { + SCONF: for my $sudo_conf ('/etc/sudoers', '/usr/local/etc/sudoers') { + next SCONF unless -e $sudo_conf; open SR, "< $sudo_conf" or die $!; - while (<SR>) { + LINES: while (<SR>) { if (/^#includedir\s+(\/\S+)/) { - $sudo_conf_testing = "$1/fwknop_testing"; - last; + my $dir = $1; + next LINES unless -d $dir; + $sudo_conf_testing = "$dir/fwknop_testing"; + last LINES; } } close SR; + last SCONF; } } From dd1528c829ea97faa04157e030270b27ae8d8246 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 21 Aug 2015 22:24:45 -0400 Subject: [PATCH 207/219] [test suite] set sudo path on the fwknopd command line --- server/config_init.c | 6 ++++-- test/test-fwknop.pl | 5 +++++ test/tests/basic_operations.pl | 16 ++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/server/config_init.c b/server/config_init.c index fcf5d197..d7b50440 100644 --- a/server/config_init.c +++ b/server/config_init.c @@ -1262,7 +1262,7 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) else { log_msg(LOG_ERR, - "[*] gpg path '%s' could not stat()/does not exist?", + "[*] gpg path '%s' could not stat()/not executable?", optarg); clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } @@ -1330,7 +1330,7 @@ config_init(fko_srv_options_t *opts, int argc, char **argv) else { log_msg(LOG_ERR, - "[*] gpg path '%s' could not stat()/does not exist?", + "[*] sudo path '%s' could not stat()/not executable?", optarg); clean_exit(opts, NO_FW_CLEANUP, EXIT_FAILURE); } @@ -1448,6 +1448,8 @@ usage(void) " done in the access.conf file).\n" " --gpg-exe - Specify the path to GPG (this is normally done in\n" " the access.conf file).\n" + " --sudo-exe - Specify the path to sudo (the default path is\n" + " /usr/bin/sudo).\n" " --no-firewd-check-support\n" " - Disable test for 'firewall-cmd ... -C' support.\n" " --no-ipt-check-support - Disable test for 'iptables -C' support.\n" diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 1c8402e7..a3252c24 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -4735,6 +4735,11 @@ sub spa_cmd_exec_cycle() { ### we need to write the access.conf file based on sudo ### requirements &write_sudo_access_conf($test_hr); + + ### make sure the path to sudo is set properly + if ($test_hr->{'fwknopd_cmdline'}) { + $test_hr->{'fwknopd_cmdline'} .= " --sudo-exe $sudo_path"; + } } if (-e $cmd_exec_test_file) { diff --git a/test/tests/basic_operations.pl b/test/tests/basic_operations.pl index 0a1f8415..2cad54df 100644 --- a/test/tests/basic_operations.pl +++ b/test/tests/basic_operations.pl @@ -435,6 +435,22 @@ 'exec_err' => $YES, 'cmdline' => "$fwknopdCmd $default_server_conf_args --gpg-exe /invalid/path" }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => 'sudo invalid binary path (1)', + 'function' => \&generic_exec, + 'exec_err' => $YES, + 'cmdline' => "$fwknopdCmd $default_server_conf_args --sudo-exe /invalid/path" + }, + { + 'category' => 'basic operations', + 'subcategory' => 'server', + 'detail' => 'sudo invalid binary path (2)', + 'function' => \&generic_exec, + 'exec_err' => $YES, + 'cmdline' => "$fwknopdCmd $default_server_conf_args --sudo-exe /etc/hosts" + }, { 'category' => 'basic operations', From fe9e42f2121aac76d1d939b38aef3b5cc6773c70 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 21 Aug 2015 22:29:35 -0400 Subject: [PATCH 208/219] [test suite] minor sudo error code searching update --- test/tests/rijndael_hmac_cmd_exec.pl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/tests/rijndael_hmac_cmd_exec.pl b/test/tests/rijndael_hmac_cmd_exec.pl index 3248ba35..1febb9ed 100644 --- a/test/tests/rijndael_hmac_cmd_exec.pl +++ b/test/tests/rijndael_hmac_cmd_exec.pl @@ -156,7 +156,7 @@ 'sudo_exec_user' => $YES, 'cmd_exec_file_not_created' => $YES, 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, - 'server_positive_output_matches' => [qr/is not allowed to execute/] + 'server_positive_output_matches' => [qr/is not allowed to/] }, { 'category' => 'Rijndael+HMAC', @@ -191,7 +191,7 @@ 'sudo_exec_user' => $YES, 'cmd_exec_file_not_created' => $YES, 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, - 'server_positive_output_matches' => [qr/is not allowed to execute/] + 'server_positive_output_matches' => [qr/is not allowed to/] }, { 'category' => 'Rijndael+HMAC', @@ -209,7 +209,7 @@ 'sudo_exec_user' => $YES, 'cmd_exec_file_not_created' => $YES, 'fw_rule_created' => $REQUIRE_NO_NEW_RULE, - 'server_positive_output_matches' => [qr/is not allowed to execute/] + 'server_positive_output_matches' => [qr/is not allowed to/] }, { 'category' => 'Rijndael+HMAC', From d1d59778e95b2ff7737a731698e7b98fc96e6d1d Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Fri, 21 Aug 2015 23:06:07 -0400 Subject: [PATCH 209/219] [server] handle trailing quote for PF firewalls on OpenBSD --- server/fw_util_pf.c | 3 +++ server/utils.c | 11 +++++++++-- server/utils.h | 1 + 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/server/fw_util_pf.c b/server/fw_util_pf.c index d25e278c..dcfa632f 100644 --- a/server/fw_util_pf.c +++ b/server/fw_util_pf.c @@ -370,6 +370,8 @@ check_firewall_rules(const fko_srv_options_t * const opts, res = run_extcmd(cmd_buf, cmd_out, STANDARD_CMD_OUT_BUFSIZE, WANT_STDERR, NO_TIMEOUT, &pid_status, opts); + chop_newline(cmd_out); + if(!EXTCMD_IS_SUCCESS(res)) { log_msg(LOG_ERR, "Error %i from cmd:'%s': %s", res, cmd_buf, cmd_out); @@ -407,6 +409,7 @@ check_firewall_rules(const fko_srv_options_t * const opts, strlcpy(exp_str, ndx, sizeof(exp_str)); chop_spaces(exp_str); + chop_char(exp_str, 0x22); /* there is a trailing quote */ if(!is_digits(exp_str)) { /* go to the next rule if it exists diff --git a/server/utils.c b/server/utils.c index a5091291..8905f248 100644 --- a/server/utils.c +++ b/server/utils.c @@ -186,11 +186,18 @@ verify_file_perms_ownership(const char *file) return 1; } +void +chop_char(char *str, const char chop) +{ + if(str != NULL && str[0] != 0x0 && str[strlen(str)-1] == chop) + str[strlen(str)-1] = 0x0; + return; +} + void chop_newline(char *str) { - if(str != NULL && str[0] != 0x0 && str[strlen(str)-1] == 0x0a) - str[strlen(str)-1] = 0x0; + chop_char(str, 0x0a); return; } diff --git a/server/utils.h b/server/utils.h index fff0bb83..04959f46 100644 --- a/server/utils.h +++ b/server/utils.h @@ -65,6 +65,7 @@ int is_valid_dir(const char *path); int is_valid_exe(const char *path); int verify_file_perms_ownership(const char *file); void chop_newline(char *str); +void chop_char(char *str, const char chop); void chop_spaces(char *str); void truncate_partial_line(char *str); int is_digits(const char * const str); From fab2f8e591f4617b14b8c514f5513d7b292de40c Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 22 Aug 2015 23:18:12 -0400 Subject: [PATCH 210/219] minor README update --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 19dea162..418594bc 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ The following is a complete list of features supported by the fwknop project: interfere with any existing iptables policy that may already be loaded on the system. * Supports inbound NAT connections for authenticated SPA communications (iptables - firewalls only for now).This means that fwknop can be configured to create DNAT + firewalls only for now). This means fwknop can be configured to create DNAT rules so that you can reach a service (such as SSH) running on an internal system on an RFC 1918 IP address from the open Internet. SNAT rules are also supported which essentially turns fwknopd into a [SPA-authenticating gateway](https://www.cipherdyne.org/blog/2015/04/nat-and-single-packet-authorization.html) @@ -180,10 +180,15 @@ and there are python bindings as well in the `python` directory). ## Upgrading If you are upgrading from an older version of fwknop (and this includes the original perl implementation as well), then you will want to read the -following link to ensure a smooth transition to fwknop-2.5: +following link to ensure a smooth transition to fwknop-2.5 or later: [http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility](http://www.cipherdyne.org/fwknop/docs/fwknop-tutorial.html#backwards-compatibility) +## Misc + * Questions or comments about fwknop will be fielded on the +[http://lists.sourceforge.net/lists/listinfo/fwknop-discuss](fwknop mailing list). + * For static analysis, fwknop uses the CLANG static analyzer and also the powerful +Coverity Scan tool: ![](https://scan.coverity.com/projects/403/badge.svg) ## Building fwknop This distribution uses GNU autoconf for setting up the build. Please see @@ -239,7 +244,7 @@ migrate to this version, there are some things to be aware of: those files. -## For fwknop developers +### For fwknop developers If you are pulling this distribution from git, you should run the `autogen.sh` script to generate the autoconf files. If you get errors about missing directories or files, try running `autogen.sh` again. After that From b88d1854ed311f8a60e325f57d22ea3056fbafb8 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sat, 22 Aug 2015 23:20:59 -0400 Subject: [PATCH 211/219] minor link comment fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 418594bc..65db199d 100644 --- a/README.md +++ b/README.md @@ -186,7 +186,7 @@ following link to ensure a smooth transition to fwknop-2.5 or later: ## Misc * Questions or comments about fwknop will be fielded on the -[http://lists.sourceforge.net/lists/listinfo/fwknop-discuss](fwknop mailing list). +[fwknop mailing list](http://lists.sourceforge.net/lists/listinfo/fwknop-discuss]). * For static analysis, fwknop uses the CLANG static analyzer and also the powerful Coverity Scan tool: ![](https://scan.coverity.com/projects/403/badge.svg) From 9531099a1fba4b30ff3a6b5b7db98ab0cf6a69c5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 23 Aug 2015 20:08:17 -0700 Subject: [PATCH 212/219] [test suite] use pkill when available --- test/test-fwknop.pl | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index a3252c24..b701c6a9 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -275,6 +275,7 @@ my $coverage_diff_path = 'coverage_diff.py'; my $genhtml_path = ''; our $killall_path = ''; our $pgrep_path = ''; +our $pkill_path = ''; our $openssl_path = ''; our $base64_path = ''; our $pinentry_fail = 0; @@ -1173,12 +1174,16 @@ sub run_test() { } if ($enable_valgrind and &is_valgrind_running()) { - if ($killall_path and $pgrep_path) { + if ($pkill_path) { for my $cmd ('memcheck', 'valgrind') { - system "$pgrep_path -f $cmd > /dev/null " . - "&& $killall_path -g -r $cmd > /dev/null 2>&1"; + system "$pkill_path -f $cmd"; + } + } elsif ($killall_path) { + for my $cmd ('memcheck', 'valgrind') { + system "$killall_path -g -r $cmd > /dev/null 2>&1"; } } + } if ($enable_perl_module_fuzzing_spa_pkt_generation) { @@ -6497,8 +6502,8 @@ sub specs() { } sub is_valgrind_running() { - return &run_cmd("ps axuww | grep LD_LIBRARY_PATH | " . - "grep valgrind |grep -v perl | grep -v grep", + return &run_cmd("ps axuww | grep valgrind " . + "| grep -v perl | grep -v grep", $cmd_out_tmp, $curr_test_file); } @@ -7029,6 +7034,7 @@ sub init() { $sudo_path = &find_command('sudo') unless $sudo_path; $killall_path = &find_command('killall') unless $killall_path; $pgrep_path = &find_command('pgrep') unless $pgrep_path; + $pkill_path = &find_command('pkill') unless $pkill_path; $lib_view_cmd = &find_command('ldd') unless $lib_view_cmd; $git_path = &find_command('git') unless $git_path; $perl_path = &find_command('perl') unless $perl_path; From b060495bb4a21fafa7544739a42eefd488e887f3 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 23 Aug 2015 20:32:59 -0700 Subject: [PATCH 213/219] [test suite] rm previous coverage files in coverage mode when --include criteria is not used --- Makefile.am | 1 + test/init-lcov.sh | 3 +++ test/rm-coverage-files.sh | 12 ++++++++++++ test/test-fwknop.pl | 8 ++++++++ 4 files changed, 24 insertions(+) create mode 100755 test/rm-coverage-files.sh diff --git a/Makefile.am b/Makefile.am index 6ed2e9b1..fe14ee66 100644 --- a/Makefile.am +++ b/Makefile.am @@ -455,6 +455,7 @@ EXTRA_DIST = \ test/configure_max_coverage.sh \ test/gen-coverage-report.sh \ test/init-lcov.sh \ + test/rm-coverage-files.sh \ test/lcov.env \ test/configure_max_coverage.sh \ test/README \ diff --git a/test/init-lcov.sh b/test/init-lcov.sh index 8d454ff5..3cb15659 100755 --- a/test/init-lcov.sh +++ b/test/init-lcov.sh @@ -4,6 +4,9 @@ cd .. [ ! -d $TOP_DIR ] && mkdir $TOP_DIR +[ -f $LCOV_BASE ] && rm -f $LCOV_BASE +[ -f $LCOV_INFO ] && rm -f $LCOV_INFO +[ -f $LCOV_INFO_FINAL ] && rm -f $LCOV_INFO_FINAL [ -d $LCOV_RESULTS_DIR ] && rm -rf $LCOV_RESULTS_DIR [ ! -d $LCOV_RESULTS_DIR ] && mkdir $LCOV_RESULTS_DIR diff --git a/test/rm-coverage-files.sh b/test/rm-coverage-files.sh new file mode 100755 index 00000000..9bb474dc --- /dev/null +++ b/test/rm-coverage-files.sh @@ -0,0 +1,12 @@ +#!/bin/sh -x + +cd .. +for d in client server lib +do + for s in *.gcda *.gcno *.gcov + do + find $d -name $s | xargs rm -f + done +done +cd test +exit diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index b701c6a9..2d5c368c 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -247,6 +247,8 @@ my $enable_profile_coverage_check = 0; my $enable_profile_coverage_init = 0; my $profile_gen_report_sh = './gen-coverage-report.sh'; my $profile_init_sh = './init-lcov.sh'; +my $profile_rm_files_sh = './rm-coverage-files.sh'; +my $do_rm_coverage_files = 0; my $enable_make_distcheck = 0; my $enable_perl_module_checks = 0; my $enable_perl_module_fuzzing_spa_pkt_generation = 0; @@ -6888,6 +6890,8 @@ sub init() { unlink $init_file if -e $init_file; unlink $logfile if -e $logfile; + $do_rm_coverage_files = 1 unless @tests_to_include; + ### always restore the gpg directories before tests are ### executed &restore_gpg_dirs(); @@ -7115,6 +7119,10 @@ sub init() { print "[-] Warning: --enable-profile-coverage not ", "found, use ./configure --enable-profile-coverage?\n"; } + if ($do_rm_coverage_files) { + &run_cmd($profile_rm_files_sh, $cmd_out_tmp, + $curr_test_file); + } &run_cmd($profile_init_sh, $cmd_out_tmp, $curr_test_file); } push @tests_to_exclude, qr/distcheck/; From c04feff5ef6c9e69e6f22bee9b2cfb75e5fb04e5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Sun, 23 Aug 2015 20:50:24 -0700 Subject: [PATCH 214/219] [test suite] initialize coverage files in non --include mode --- test/test-fwknop.pl | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/test/test-fwknop.pl b/test/test-fwknop.pl index 2d5c368c..78224d76 100755 --- a/test/test-fwknop.pl +++ b/test/test-fwknop.pl @@ -248,7 +248,7 @@ my $enable_profile_coverage_init = 0; my $profile_gen_report_sh = './gen-coverage-report.sh'; my $profile_init_sh = './init-lcov.sh'; my $profile_rm_files_sh = './rm-coverage-files.sh'; -my $do_rm_coverage_files = 0; +my $do_profile_init = 0; my $enable_make_distcheck = 0; my $enable_perl_module_checks = 0; my $enable_perl_module_fuzzing_spa_pkt_generation = 0; @@ -6890,7 +6890,7 @@ sub init() { unlink $init_file if -e $init_file; unlink $logfile if -e $logfile; - $do_rm_coverage_files = 1 unless @tests_to_include; + $do_profile_init = 1 unless $test_include; ### always restore the gpg directories before tests are ### executed @@ -6988,6 +6988,8 @@ sub init() { push @tests_to_exclude, qr/IP resolve/; } + $perl_path = &find_command('perl') unless $perl_path; + if ($enable_perl_module_checks) { open F, "< $fuzzing_pkts_file" or die $!; while (<F>) { @@ -7041,7 +7043,6 @@ sub init() { $pkill_path = &find_command('pkill') unless $pkill_path; $lib_view_cmd = &find_command('ldd') unless $lib_view_cmd; $git_path = &find_command('git') unless $git_path; - $perl_path = &find_command('perl') unless $perl_path; $prove_path = &find_command('prove') unless $prove_path; $touch_path = &find_command('touch') unless $touch_path; @@ -7111,7 +7112,7 @@ sub init() { if ($gcov_path) { if ($enable_profile_coverage_check and not $list_mode) { - if ($enable_profile_coverage_init) { + if ($enable_profile_coverage_init or $do_profile_init) { if (&file_find_regex([qr/\-enable\-profile\-coverage/], $MATCH_ALL, $NO_APPEND_RESULTS, $config_log)) { print "[+] Found --enable-profile-coverage\n"; @@ -7119,10 +7120,7 @@ sub init() { print "[-] Warning: --enable-profile-coverage not ", "found, use ./configure --enable-profile-coverage?\n"; } - if ($do_rm_coverage_files) { - &run_cmd($profile_rm_files_sh, $cmd_out_tmp, - $curr_test_file); - } + &run_cmd($profile_rm_files_sh, $cmd_out_tmp, $curr_test_file); &run_cmd($profile_init_sh, $cmd_out_tmp, $curr_test_file); } push @tests_to_exclude, qr/distcheck/; From 71ded8caf1770b067d3425f5a5f87ed7984c99c5 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 24 Aug 2015 17:23:40 -0700 Subject: [PATCH 215/219] ChangeLog update for 2.6.7 --- ChangeLog | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2b668bb2..aba3b79f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ -fwknop-2.6.7 (07//2015): - - [server] Added sudo support for command execution mode. This was +fwknop-2.6.7 (08/24/2015): + - [server] When command execution is enabled with ENABLE_CMD_EXEC for an + access.conf stanza, added support for running commands via sudo. This was suggested by Github user 'freegigi' (issue #159) as a means to provide command filtering using the powerful sudoers syntax. This feature is implemented by prefixing any incoming command from a valid SPA packet From ecfa8021e58447db656043915e131d6798ee8651 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 24 Aug 2015 17:25:06 -0700 Subject: [PATCH 216/219] doc updates to include sudo information --- client/fwknop.8.in | 4 ++-- doc/fwknopd.man.asciidoc | 38 ++++++++++++++++++++----------- server/fwknopd.8.in | 49 +++++++++++++++++++++++++++++++++++++--- 3 files changed, 73 insertions(+), 18 deletions(-) diff --git a/client/fwknop.8.in b/client/fwknop.8.in index 4e7b5fbc..c0bc4d93 100644 --- a/client/fwknop.8.in +++ b/client/fwknop.8.in @@ -2,12 +2,12 @@ .\" Title: fwknop .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> -.\" Date: 05/22/2015 +.\" Date: 08/24/2015 .\" Manual: Fwknop Client .\" Source: Fwknop Client .\" Language: English .\" -.TH "FWKNOP" "8" "05/22/2015" "Fwknop Client" "Fwknop Client" +.TH "FWKNOP" "8" "08/24/2015" "Fwknop Client" "Fwknop Client" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- diff --git a/doc/fwknopd.man.asciidoc b/doc/fwknopd.man.asciidoc index 167eda54..7b21d432 100644 --- a/doc/fwknopd.man.asciidoc +++ b/doc/fwknopd.man.asciidoc @@ -547,23 +547,35 @@ directive starts a new stanza. *sudo* provides a powerful means of restricting the sets of commands that users can execute via the ``sudoers'' file. By enabling this feature (and in ``ENABLE_CMD_EXEC'' mode), all incoming commands from valid SPA packets - will be prefixed by ``/path/to/sudo -u <user>'' where the path to sudo is - set by the ``SUDO_EXE'' variable, and ``<user>'' is set by the - ``CMD_EXEC_USER'' variable (default is ``root'' if not set). + will be prefixed by ``/path/to/sudo -u <user> -g <group>'' where the path + to sudo is set by the ``SUDO_EXE'' variable, ``<user>'' is set by the + ``CMD_SUDO_EXEC_USER'' variable (default is ``root'' if not set), and + ``<group>'' is set by ``CMD_SUDO_EXEC_GROUP'' (default is also ``root'' if + not set). *CMD_EXEC_USER* '<username>':: - This specifies the user (via setuid) that will execute commands contained - within a SPA packet. If not specified, fwknopd will execute it as the user - it is running as (most likely root). Setting this to a non-root user such - as ``nobody'' is highly recommended if elevated permissions are not - needed. + Specify the user (via setuid) that will execute a command contained within + a SPA packet. If this variable is not given, fwknopd will execute the + command as the user it is running as (most likely root). Setting this to a + non-root user such as ``nobody'' is highly recommended if elevated + permissions are not needed. + +*CMD_SUDO_EXEC_USER* '<username>':: + Specify the user (via ``sudo -u <user>'') that will execute a command + contained within a SPA packet. If this variable is not given, fwknopd will + assume the command should be executed as root. *CMD_EXEC_GROUP* '<groupname>':: - This specifies the group (via setgid) that will execute commands contained - within a SPA packet. If not specified, fwknopd will execute it as the user - it is running as (most likely root). Setting this to a non-root user such - as ``nobody'' is highly recommended if elevated permissions are not - needed. + Specify the group (via setgid) that will execute a command contained within + a SPA packet. If this variable is not given, fwknopd will execute the + command as the user it is running as (most likely root). Setting this to a + non-root user such as ``nobody'' is highly recommended if elevated + permissions are not needed. + +*CMD_SUDO_EXEC_GROUP* '<groupname>':: + Specify the group (via ``sudo -gu <group>'') that will execute a command + contained within a SPA packet. If this variable is not given, fwknopd will + assume the command should be executed as root. *SUDO_EXE* '<path>':: Define the path to the sudo binary. Default is ``/usr/bin/sudo''. diff --git a/server/fwknopd.8.in b/server/fwknopd.8.in index 807df7e9..66131ed4 100644 --- a/server/fwknopd.8.in +++ b/server/fwknopd.8.in @@ -2,12 +2,12 @@ .\" Title: fwknopd .\" Author: [see the "AUTHORS" section] .\" Generator: DocBook XSL Stylesheets v1.78.1 <http://docbook.sf.net/> -.\" Date: 05/22/2015 +.\" Date: 08/24/2015 .\" Manual: Fwknop Server .\" Source: Fwknop Server .\" Language: English .\" -.TH "FWKNOPD" "8" "05/22/2015" "Fwknop Server" "Fwknop Server" +.TH "FWKNOPD" "8" "08/24/2015" "Fwknop Server" "Fwknop Server" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -387,6 +387,16 @@ Track digest sums associated with previous SPA packets processed by will not check incoming SPA packet data against any previously save digests\&. It is a good idea to leave this feature on to reduce the possibility of being vulnerable to a replay attack\&. .RE .PP +\fBRULES_CHECK_THRESHOLD\fR \fI<count>\fR +.RS 4 +Defines the number of times firewall rule expiration times must be checked before a "deep" check is run\&. This allows +\fBfwknopd\fR +to remove rules that contain a proper +\fI\fIexp\fR\fR\fI<time>\fR +even if a third party program added them instead of +\fBfwknopd\fR\&. The default value for this variable is 20, and this typically results in this check being run every two seconds or so\&. To disable this type of checking altogether, set this variable to zero\&. +.RE +.PP \fBENABLE_IPT_FORWARDING\fR \fI<Y/N>\fR .RS 4 Allow SPA clients to request access to services through an iptables firewall instead of just to it (i\&.e\&. access through the FWKNOP_FORWARD chain instead of the INPUT chain)\&. @@ -447,6 +457,13 @@ Flush all existing rules in the fwknop chains when is stopped or otherwise exits cleanly\&. The default is \(lqY\(rq\&. .RE .PP +\fBEXIT_AT_INTF_DOWN\fR \fI<Y/N>\fR +.RS 4 +When +\fBfwknopd\fR +is sniffing an interface, if the interface is administratively downed or unplugged, fwknopd will cleanly exit and an assumption is made that any process monitoring infrastructure like systemd or upstart will restart it\&. However, if fwknopd is not being monitored by systemd, upstart, or anything else, this behavior can be disabled with the \(lqEXIT_AT_INTF_DOWN\(rq variable\&. If disabled, fwknopd will try to recover when a downed interface comes back up\&. +.RE +.PP \fBGPG_HOME_DIR\fR \fI<path>\fR .RS 4 If GPG keys are used instead of a Rijndael symmetric key, this is the default GPG keys directory\&. Note that each access stanza in @@ -667,9 +684,35 @@ server as the user specified by the \(lqCMD_EXEC_USER\(rq or as the user that st if that is not set\&. .RE .PP +\fBENABLE_CMD_SUDO_EXEC\fR \fI<Y/N>\fR +.RS 4 +\fBsudo\fR +provides a powerful means of restricting the sets of commands that users can execute via the \(lqsudoers\(rq file\&. By enabling this feature (and in \(lqENABLE_CMD_EXEC\(rq mode), all incoming commands from valid SPA packets will be prefixed by \(lq/path/to/sudo \-u <user> \-g <group>\(rq where the path to sudo is set by the \(lqSUDO_EXE\(rq variable, \(lq<user>\(rq is set by the \(lqCMD_SUDO_EXEC_USER\(rq variable (default is \(lqroot\(rq if not set), and \(lq<group>\(rq is set by \(lqCMD_SUDO_EXEC_GROUP\(rq (default is also \(lqroot\(rq if not set)\&. +.RE +.PP \fBCMD_EXEC_USER\fR \fI<username>\fR .RS 4 -This specifies the user that will execute commands contained within a SPA packet\&. If not specified, fwknopd will execute it as the user it is running as (most likely root)\&. Setting this to a non\-root user is highly recommended\&. +Specify the user (via setuid) that will execute a command contained within a SPA packet\&. If this variable is not given, fwknopd will execute the command as the user it is running as (most likely root)\&. Setting this to a non\-root user such as \(lqnobody\(rq is highly recommended if elevated permissions are not needed\&. +.RE +.PP +\fBCMD_SUDO_EXEC_USER\fR \fI<username>\fR +.RS 4 +Specify the user (via \(lqsudo \-u <user>\(rq) that will execute a command contained within a SPA packet\&. If this variable is not given, fwknopd will assume the command should be executed as root\&. +.RE +.PP +\fBCMD_EXEC_GROUP\fR \fI<groupname>\fR +.RS 4 +Specify the group (via setgid) that will execute a command contained within a SPA packet\&. If this variable is not given, fwknopd will execute the command as the user it is running as (most likely root)\&. Setting this to a non\-root user such as \(lqnobody\(rq is highly recommended if elevated permissions are not needed\&. +.RE +.PP +\fBCMD_SUDO_EXEC_GROUP\fR \fI<groupname>\fR +.RS 4 +Specify the group (via \(lqsudo \-gu <group>\(rq) that will execute a command contained within a SPA packet\&. If this variable is not given, fwknopd will assume the command should be executed as root\&. +.RE +.PP +\fBSUDO_EXE\fR \fI<path>\fR +.RS 4 +Define the path to the sudo binary\&. Default is \(lq/usr/bin/sudo\(rq\&. .RE .PP \fBREQUIRE_USERNAME\fR \fI<username>\fR From 88c82af1955fb56ade5c6d6e98e80ed28df21ea2 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 24 Aug 2015 17:33:44 -0700 Subject: [PATCH 217/219] rpm 2.6.7 release note --- fwknop.spec | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fwknop.spec b/fwknop.spec index d9581b1c..ddc3bdac 100644 --- a/fwknop.spec +++ b/fwknop.spec @@ -142,6 +142,9 @@ fi %config(noreplace) %attr(0600,root,root) %{_sysconfdir}/fwknop/access.conf %changelog +* Mon Aug 24 2015 <mbr@cipherdyne.org> - 2.6.7 +- fwknop-2.6.7 release. + * Tue Apr 23 2015 <mbr@cipherdyne.org> - 2.6.6 - fwknop-2.6.6 release. From 32bb9f804893e8497b9229717765216dd97eac45 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Mon, 24 Aug 2015 17:35:54 -0700 Subject: [PATCH 218/219] changes since 2.6.6 --- ChangeLog.git | 2941 ++++++++++++++++++++++++++----------------------- 1 file changed, 1532 insertions(+), 1409 deletions(-) diff --git a/ChangeLog.git b/ChangeLog.git index 0c70b5bc..9866963e 100644 --- a/ChangeLog.git +++ b/ChangeLog.git @@ -1,1627 +1,1750 @@ -commit 707c59d12793fbf7805767ef868f4166c831c90b (HEAD, refs/heads/master) +commit 88c82af1955fb56ade5c6d6e98e80ed28df21ea2 (HEAD, refs/heads/master) Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 22 19:09:46 2015 -0700 +Date: Mon Aug 24 17:33:44 2015 -0700 - minor 2.6.6 release date update + rpm 2.6.7 release note - fwknop.spec | 2 +- + fwknop.spec | 3 +++ + 1 file changed, 3 insertions(+) + +commit ecfa8021e58447db656043915e131d6798ee8651 (refs/remotes/origin/master, refs/remotes/origin/HEAD) +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Aug 24 17:25:06 2015 -0700 + + doc updates to include sudo information + + client/fwknop.8.in | 4 ++-- + doc/fwknopd.man.asciidoc | 38 ++++++++++++++++++++++++------------- + server/fwknopd.8.in | 49 +++++++++++++++++++++++++++++++++++++++++++++--- + 3 files changed, 73 insertions(+), 18 deletions(-) + +commit 71ded8caf1770b067d3425f5a5f87ed7984c99c5 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Aug 24 17:23:40 2015 -0700 + + ChangeLog update for 2.6.7 + + ChangeLog | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +commit c04feff5ef6c9e69e6f22bee9b2cfb75e5fb04e5 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Aug 23 20:50:24 2015 -0700 + + [test suite] initialize coverage files in non --include mode + + test/test-fwknop.pl | 14 ++++++-------- + 1 file changed, 6 insertions(+), 8 deletions(-) + +commit b060495bb4a21fafa7544739a42eefd488e887f3 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Aug 23 20:32:59 2015 -0700 + + [test suite] rm previous coverage files in coverage mode when --include criteria is not used + + Makefile.am | 1 + + test/init-lcov.sh | 3 +++ + test/rm-coverage-files.sh | 12 ++++++++++++ + test/test-fwknop.pl | 8 ++++++++ + 4 files changed, 24 insertions(+) + +commit 9531099a1fba4b30ff3a6b5b7db98ab0cf6a69c5 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Aug 23 20:08:17 2015 -0700 + + [test suite] use pkill when available + + test/test-fwknop.pl | 16 +++++++++++----- + 1 file changed, 11 insertions(+), 5 deletions(-) + +commit b88d1854ed311f8a60e325f57d22ea3056fbafb8 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Aug 22 23:20:59 2015 -0400 + + minor link comment fix + + README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit e209acc196fa673037642512d9571485b592face +commit fab2f8e591f4617b14b8c514f5513d7b292de40c Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 22 01:10:00 2015 -0700 +Date: Sat Aug 22 23:18:12 2015 -0400 - minor ChangeLog update + minor README update - ChangeLog | 11 ++++++----- - 1 file changed, 6 insertions(+), 5 deletions(-) + README.md | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) -commit 17d1071aa8265030c7944ce932bf984b9920ec2b +commit d1d59778e95b2ff7737a731698e7b98fc96e6d1d Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 22 01:00:57 2015 -0700 +Date: Fri Aug 21 23:06:07 2015 -0400 - [server / test suite] cleaner SNAT MASQUERADE support + [server] handle trailing quote for PF firewalls on OpenBSD - Makefile.am | 1 + - server/fw_util_firewalld.c | 27 +++++++++++---------------- - server/fw_util_iptables.c | 27 +++++++++++---------------- - test/test-fwknop.pl | 3 +++ - test/tests/rijndael_hmac.pl | 21 ++++++++++++++++++++- - 5 files changed, 46 insertions(+), 33 deletions(-) + server/fw_util_pf.c | 3 +++ + server/utils.c | 11 +++++++++-- + server/utils.h | 1 + + 3 files changed, 13 insertions(+), 2 deletions(-) -commit 6bdfa95067d3f9e1374273edfa5db857e10ca47c +commit fe9e42f2121aac76d1d939b38aef3b5cc6773c70 Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 22 00:58:35 2015 -0700 +Date: Fri Aug 21 22:29:35 2015 -0400 - [server / test suite] cleaner SNAT MASQUERADE support + [test suite] minor sudo error code searching update - test/conf/hmac_forward_all_masq_access.conf | 6 ++++++ - 1 file changed, 6 insertions(+) + test/tests/rijndael_hmac_cmd_exec.pl | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) -commit 176afecd9fd325a0479826d877887997ece97fc0 (refs/remotes/origin/master, refs/remotes/origin/HEAD) +commit dd1528c829ea97faa04157e030270b27ae8d8246 Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 21 21:09:20 2015 -0400 +Date: Fri Aug 21 22:24:45 2015 -0400 - [server] minor spacing fix + [test suite] set sudo path on the fwknopd command line - server/fw_util_firewalld.c | 2 -- - server/fw_util_iptables.c | 2 -- - 2 files changed, 4 deletions(-) + server/config_init.c | 6 ++++-- + test/test-fwknop.pl | 5 +++++ + test/tests/basic_operations.pl | 16 ++++++++++++++++ + 3 files changed, 25 insertions(+), 2 deletions(-) -commit d961165a5ba38261fbdba275c45820c261455bd2 -Merge: 3512f7f 6467b92 +commit e999f61f82930254ef81f3b06de141e08a6f562a Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 21 19:28:05 2015 -0400 +Date: Fri Aug 21 22:04:58 2015 -0400 - Merge branch 'master' of ssh://fedora21/home/mbr/git/fwknop + [test suite] allow /usr/local/etc/sudoers path -commit 6467b922d53949ffa0cf49af1e0632e0b4b55534 + test/test-fwknop.pl | 13 ++++++++----- + 1 file changed, 8 insertions(+), 5 deletions(-) + +commit f37fd2281607c68463311e06433db52f906c35e6 Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 21 03:30:32 2015 -0700 +Date: Fri Aug 21 21:49:07 2015 -0400 - [test suite] additional FORWARD_ALL tests + [extras] use default configure args before running cov-build - Makefile.am | 6 +++ - test/conf/firewd_snat_translate_ip_fwknopd.conf | 3 ++ - test/conf/firewd_spa_dst_snat_fwknopd.conf | 3 ++ - test/conf/hmac_force_nat_forward_all_access.conf | 6 +++ - test/conf/hmac_forward_all_and_dnat_access.conf | 7 ++++ - test/conf/ipt_snat_translate_ip_fwknopd.conf | 3 ++ - test/conf/ipt_spa_dst_snat_fwknopd.conf | 3 ++ - test/test-fwknop.pl | 6 ++- - test/tests/rijndael_hmac.pl | 49 +++++++++++++++++++++--- - 9 files changed, 80 insertions(+), 6 deletions(-) + extras/coverity/coverity_scan.sh | 1 + + 1 file changed, 1 insertion(+) -commit 3512f7f417d61ccab669ab637038688ba44385a9 +commit 2f94413b2fa4132f50dfca055e9fb15a5e633b85 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 20 21:34:12 2015 -0400 +Date: Fri Aug 21 21:35:10 2015 -0400 - doc updates + [server] bug fix for ipfw firewall rule removal - ChangeLog | 4 +++- - client/fwknop.8.in | 6 +++--- - server/fwknopd.8.in | 40 ++++++++++++++++++++++++++++++---------- - 3 files changed, 36 insertions(+), 14 deletions(-) + server/fw_util_ipfw.c | 1 + + 1 file changed, 1 insertion(+) -commit 95bf4dcb8703ce7637519294df979b94e781f163 -Merge: bdc3751 f757b4e -Author: Michael Rash <michael.rash@gmail.com> -Date: Mon Apr 20 21:28:10 2015 -0400 - - Merge pull request #153 from Coacher/master - - extras: adjust 'localstatedir' value for the AppArmor profile - -commit 75d40049630c9239a17bfb17c01920e5c356a6d9 +commit ec9eef33654b596a3e863176e2b61a4ee32c51d8 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 20 09:19:37 2015 -0700 +Date: Wed Aug 19 23:41:47 2015 -0400 - changes since 2.6.5 + [server] fix a dead code condition spotted by Coverity - ChangeLog.git | 1794 +++++++++++++++++++++++++++++++++++++++------------------ - 1 file changed, 1233 insertions(+), 561 deletions(-) + server/fw_util_firewalld.c | 23 ++++++++++++----------- + server/fw_util_iptables.c | 23 ++++++++++++----------- + 2 files changed, 24 insertions(+), 22 deletions(-) -commit bdc3751a840d7cc0c5944b767cd11d4355d59137 +commit c5507d2c2a49aaac30582d51701e8a74b398a6fc Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 20 08:47:51 2015 -0700 +Date: Wed Aug 19 23:41:17 2015 -0400 - bump version to 2.6.6 - - ChangeLog | 2 +- - VERSION | 2 +- - configure.ac | 2 +- - fwknop.spec | 11 +++++++---- - 4 files changed, 10 insertions(+), 7 deletions(-) - -commit f18827b002e9f878b567bf0b05a1756a698de163 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 20 08:45:09 2015 -0700 - - [test suite] make valgrind results requirements stronger for test passage - - test/test-fwknop.pl | 19 +++++++++---------- - 1 file changed, 9 insertions(+), 10 deletions(-) - -commit 94af6172bb9ad73d3c1fe7f7641c1b52a0c85a91 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 20 08:41:28 2015 -0700 - - [server] minor -h usage update - - server/config_init.c | 2 ++ - 1 file changed, 2 insertions(+) - -commit 85733ded3cfab98fe4c95fc9f64680219334d5cf (refs/remotes/moria/master) -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 20:34:01 2015 -0400 - - [test suite] additional iptables exclusions for non-iptables systems - - test/test-fwknop.pl | 3 +++ - test/tests/rijndael_hmac.pl | 2 +- - 2 files changed, 4 insertions(+), 1 deletion(-) - -commit f757b4ebdad0f304528ad2d7cd26c09e0917988b -Author: Ilya Tumaykin <itumaykin@gmail.com> -Date: Mon Apr 20 14:32:37 2015 +0300 - - extras: adjust 'localstatedir' value for the AppArmor profile - - Comments in the shipped AppArmor profile state that fwknopd is assumed - to be built with 'localstatedir=/var', which is misleading for several - reasons: - - * AppArmor profile assumes that fwknopd's pidfile and digest cache are - under /run/fwknop by the looks of it, i.e. 'localstatedir' is '/run'. - - * By default these files are placed under /var/run/fwknop. Thus this - profile implicitly relies on the existence of '/var/run -> /run' symlink - and won't work otherwise when 'localstatedir' is '/var' - - Since GitHub PR#152 was merged, 'localstatedir' can be simply set to - '/run' for AppArmor users to avoid this confusion. This changeset does - it. - - If anyone had it working before, they should have it working now as the - shipped AppArmor profile required /run existence before as well. - - extras/apparmor/configure_args.sh | 2 +- - extras/apparmor/usr.sbin.fwknopd | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -commit b2109f563011786ab8cc7d8aca79d72db1b74cdf -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 19:44:43 2015 -0700 - - [server] remove unncessary NULL check spotted by Coverity - - server/replay_cache.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -commit f962edda0023a07554342cb7a0aaabd15ad1c8ff -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 19:37:06 2015 -0700 - - [extras] update Coverity installation path - - extras/coverity/coverity_scan.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit a606a9c565df1359c383f7f356b8dfd0203fba9f -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 18:52:08 2015 -0700 - - [test suite] fw prefixes aren't used on non-Linux systems yet - - test/test-fwknop.pl | 4 ---- - 1 file changed, 4 deletions(-) - -commit 48acac160a230baf1d892ef60b796f33d5790121 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 18:49:28 2015 -0700 - - [test suite] pick up pf and ipfw firewalls for prefix designation - - test/test-fwknop.pl | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -commit db80c81f660e0be5ba8229af631b87462fa273e8 -Merge: e39d347 b21c04e -Author: Michael Rash <michael.rash@gmail.com> -Date: Sun Apr 19 21:15:51 2015 -0400 - - Merge pull request #152 from Coacher/master - - server: remove extra '/run' subdir from paths - -commit e39d34750bc9a751c07d4132715ef3d971e0821f -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 17:48:18 2015 -0700 - - [server] switch from abs() to labs() for time difference calculation - - This commit fixes the following warning during compilation on Mac OS X: - - gcc -DHAVE_CONFIG_H -I. -I.. -I ../lib -I ../common -DSYSCONFDIR=\"/etc\" -DSYSRUNDIR=\"/var\" -g -O2 -Wall -Wformat -Wformat-security -fstack-protector-all -fstack-protector -fPIE -D_FORTIFY_SOURCE=2 -MT fwknopd-incoming_spa.o -MD -MP -MF .deps/fwknopd-incoming_spa.Tpo -c -o fwknopd-incoming_spa.o `test -f 'incoming_spa.c' || echo './'`incoming_spa.c - incoming_spa.c:736:23: warning: absolute value function 'abs' given an argument of - type 'long' but has parameter of type 'int' which may cause truncation of - value [-Wabsolute-value] - ts_diff = abs(now_ts - spadat.timestamp); - ^ - incoming_spa.c:736:23: note: use function 'labs' instead - ts_diff = abs(now_ts - spadat.timestamp); - ^~~ - labs - 1 warning generated. + [server] fix ptr vs. val check spotted by Coverity server/incoming_spa.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit b21c04e9d6c49ebbc613080733193698569dd639 -Merge: e333cba 93a3798 -Author: Ilya Tumaykin <itumaykin@gmail.com> -Date: Mon Apr 20 02:46:41 2015 +0300 +commit 82464574a6d07108dce57d2ca5873b8863861381 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Aug 18 22:12:23 2015 -0400 - Merge remote-tracking branch 'upstream/master' + [client] minor update to make chksum() static -commit e333cba945925ae356d83ba0da3a95ee82bc8fb2 -Author: Ilya Tumaykin <itumaykin@gmail.com> -Date: Mon Apr 20 02:43:10 2015 +0300 + client/spa_comm.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) - server: remove extra '/run' subdir from paths +commit 423899f3c47122a1246a335d7abf978f1773abad +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Aug 18 22:02:00 2015 -0400 + + [server] minor fix to remove unnecessary var definition + + server/fw_util_firewalld.c | 1 - + server/fw_util_iptables.c | 1 - + 2 files changed, 2 deletions(-) + +commit 0fdc263a435a7ffe9e805b0ec2f1a9669406c7b5 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Aug 18 21:58:53 2015 -0400 + + options struct should not be global (CLANG -Wshadow warning) + + client/fwknop_common.h | 2 -- + server/fwknopd_common.h | 5 ++--- + 2 files changed, 2 insertions(+), 5 deletions(-) + +commit a9c3e204dcf3714e1a891193a420f299438817f5 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Aug 18 20:40:14 2015 -0400 + + [test suite] pgrep usage bug fix + + test/test-fwknop.pl | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +commit 47ff151dea9ba469a39753943e0aa472c668f5b0 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Aug 18 20:37:56 2015 -0400 + + [build] add convenience script for ASan builds - Having extra '/run' subdirectory hardcoded into paths used for options - 'digest-file', 'pid-file', 'run-dir' is counterintuitive and can lead to - bogus directory layouts when 'localstatedir' differs from the default - value. + Sometimes when ASan support is wanted for fwknop, the following compile + error can be generated. This script provides a means to solve this. - For example, if 'localstatedir' is set to '/run', which is a common and - recommended substitute for /var/run in many distros nowadays, then - fwknop files will be placed under /run/run/fwknop. - - This changeset removes extra '/run' subdirectory from all relevant paths - by changing DEF_RUN_DIR. Default value of 'localstatedir' is changed to - '/var/run' so users who relied on the previous behaviour won't have to - bother changing anything. - - This is tested and works. Gentoo have this patch applied since 2.6.0. + fwknop-spa_comm.o: In function `send_spa_packet_http': + /home/mbr/git/fwknop.git/client/spa_comm.c:516: undefined reference to `rpl_malloc' + ../lib/.libs/libfko.so: undefined reference to `rpl_realloc' - doc/fwknopd.man.asciidoc | 10 +++++----- - fwknop.spec | 2 +- - server/fwknopd.8.in | 10 +++++----- - server/fwknopd_common.h | 2 +- - 4 files changed, 12 insertions(+), 12 deletions(-) + Makefile.am | 1 + + extras/sanitizer/asan-build.sh | 21 +++++++++++++++++++++ + 2 files changed, 22 insertions(+) -commit 93a3798cc10ea1a3eb746d8a2a1fc844410a9c83 +commit 5e0a668a7f61e04eddd4b7dd4ec8273c543b1e0a Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 13:25:11 2015 -0700 +Date: Sun Aug 16 21:31:48 2015 -0400 - [test suite] exclude server restart cycle from valgrind results parsing + [server] minor access.c fix to quiet both Coverity and the CLANG static analyzer - test/test-fwknop.pl | 7 +++++++ - 1 file changed, 7 insertions(+) + server/access.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit cc765a23dba91f7ef4f7bbfe75dba90377cf4e68 +commit 8edad8b5839acaf82f51631d40031f3c39bc619a Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 12:22:55 2015 -0700 +Date: Sun Aug 16 21:27:14 2015 -0400 - [test suite] minor FORCE_NAT config tweak + [extras] update Coverity version to 7.7.0 for interface script - test/conf/require_force_nat_access.conf | 4 +--- - 1 file changed, 1 insertion(+), 3 deletions(-) + extras/coverity/coverity_scan.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -commit b1100cb730a71bafb5bd42184e5981afc305858c +commit f3b25bdc241e6410ef5f99bcb2257911622ec4bd Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 07:16:30 2015 -0700 +Date: Sun Aug 16 21:06:26 2015 -0400 - [server] NAT validation only applies to systems running iptables or firewalld + [test suite] require custom config paths for sudo tests - server/access.c | 2 ++ - 1 file changed, 2 insertions(+) - -commit 68db4b77a5c0c87682160e212a81acb4e682d8ee -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 07:11:10 2015 -0700 - - [server] allow FORWARD_ALL to control whether FORCE_NAT is required - - server/access.c | 4 ++-- - test/conf/open_ports_force_masq_access.conf | 1 + - test/tests/basic_operations.pl | 28 +++++++++++++++++++++++----- - test/tests/rijndael.pl | 5 ++--- - 4 files changed, 28 insertions(+), 10 deletions(-) - -commit 0ecc2d233365234cd0690e19000bfd56d910104e -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 19 07:10:26 2015 -0700 - - minor docs update - - CREDITS | 6 ++++++ - ChangeLog | 5 +++++ - 2 files changed, 11 insertions(+) - -commit bb5aa928d90963bc43ca320d0680b5bcaaa95718 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Apr 18 12:33:11 2015 -0700 - - [server] fix typos from corresponding firewalld changes - - server/fw_util_iptables.c | 4 ++-- + test/test-fwknop.pl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) -commit c9dedd33784581726571a7437dda3ccc7476655a -Merge: 0395965 baf3f70 +commit 743d861c6713e6456e71267f107681c8485a2db5 +Author: Damien Stuart <dstuart@dstuart.org> +Date: Fri Aug 14 16:49:07 2015 -0400 + + Updated version in the spec file. + + fwknop.spec | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit e5c6f96788a57695e3d6c293cd0ebaa69563e167 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Apr 18 05:39:01 2015 -0700 +Date: Sat Jul 25 23:10:06 2015 -0400 + + [server] fix compilation issue for non-iptables firewalls + + server/fw_util_ipf.c | 3 ++- + server/fw_util_ipfw.c | 3 ++- + server/fw_util_pf.c | 3 ++- + 3 files changed, 6 insertions(+), 3 deletions(-) + +commit 47851dffddb25e3eb9a22ec54394adbc79bfe56f +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jul 25 19:17:10 2015 -0700 + + [test suite] use pgrep for fwknopd check at init time + + test/test-fwknop.pl | 28 ++++++++++++++++++++++++---- + 1 file changed, 24 insertions(+), 4 deletions(-) + +commit 8e7dd29280f0078a64acc6030a20e0ac0d3a23eb +Merge: 72555ba db3a8c3 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jul 25 19:00:48 2015 -0700 + + Merge branch 'master' of ssh://192.168.10.1/home/mbr/git/fwknop + +commit 72555ba9fec3af9d734a383ce98050a84bb7b5bd +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jul 25 18:58:39 2015 -0700 + + [server] minor comment fix for group ID determination in access.conf parsing + + server/access.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit fbdc542f48c45d8b7e466e31f1b3c099b75fec1c +Merge: c0330e5 dff7b82 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jul 25 13:28:49 2015 -0700 Merge branch 'master' of https://github.com/mrash/fwknop -commit 03959653ca1dee79337bea76bd2320fe86418569 +commit db3a8c39e4f7930ea59a1acf733d0cad62745f63 +Merge: c0330e5 dff7b82 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Apr 18 05:38:35 2015 -0700 +Date: Sat Jul 25 16:28:23 2015 -0400 - [server] differentiate MASQUERADE from SNAT with a dedicated FWKNOP_MASQUERADE chain + Merge branch 'master' of https://github.com/mrash/fwknop - server/fw_util_firewalld.c | 76 ++++++++++++++++++++-------------------------- - server/fw_util_firewalld.h | 1 + - server/fw_util_iptables.c | 72 +++++++++++++++++++------------------------ - server/fwknopd.conf | 4 +-- - server/fwknopd_common.h | 4 +-- - 5 files changed, 69 insertions(+), 88 deletions(-) - -commit f06c6e3b9c4e4d5a83af4d22f0d5d7592f1a45de +commit c0330e5c8b604fb50330dfbe60fdf305393250c4 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Apr 18 05:37:31 2015 -0700 +Date: Sat Jul 25 13:27:42 2015 -0700 - [test suite] allow default FORCE_NAT 0.0.0.0 0 to apply + [server] additional work on splitting incoming_spa() loop into functions - test/conf/hmac_forward_all_access.conf | 1 - + server/incoming_spa.c | 606 +++++++++++++++++++++++++++++--------------------- + 1 file changed, 354 insertions(+), 252 deletions(-) + +commit 591d400216f40f16b3aa116e938130130fb7929e +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jul 25 13:26:50 2015 -0700 + + [test suite] fix sudo user tests + + test/test-fwknop.pl | 4 ++-- + test/tests/rijndael_hmac_cmd_exec.pl | 8 +------- + 2 files changed, 3 insertions(+), 9 deletions(-) + +commit 3270900a3813a521be6a83a8274baa2101fa6588 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jul 19 21:54:20 2015 -0700 + + [server] continued work on splitting incoming_spa() into functions + + server/incoming_spa.c | 351 ++++++++++++++++++++++++++------------------------ + 1 file changed, 186 insertions(+), 165 deletions(-) + +commit 6116419e212a7f65ca658473e0617f073d303495 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jul 19 20:38:23 2015 -0700 + + [test suite] ensure HMAC key string is equal to SHA512_BLOCK_LEN in length (fixes ASAN warning) + + test/fko-wrapper/fko_wrapper.c | 12 ++++++++++-- + 1 file changed, 10 insertions(+), 2 deletions(-) + +commit dff7b82dafbab8276add503c5011ef6d2ed6dbb0 +Merge: 89b2e8f 0ac52b9 +Author: Michael Rash <michael.rash@gmail.com> +Date: Wed Jul 22 11:06:08 2015 -0400 + + Merge pull request #166 from micha137/patch-1 + +commit 01beb31861a8fdfb4555cce73e4d02139fc946a1 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jul 19 20:35:54 2015 -0700 + + [server] start to split incoming_spa() main loop into functions + + server/incoming_spa.c | 388 +++++++++++++++++++++++++++++--------------------- + 1 file changed, 223 insertions(+), 165 deletions(-) + +commit d681485e2921020fddd4678a2f2bf93dfc15e92d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jul 19 20:23:04 2015 -0700 + + [server] add sudo support, closes #159 + + ChangeLog | 11 ++- + doc/fwknopd.man.asciidoc | 2 +- + server/access.c | 125 +++++++++++++++++++++------ + server/config_init.c | 13 +++ + server/extcmd.c | 4 +- + server/fwknopd_common.h | 4 + + server/incoming_spa.c | 51 ++++++++--- + test/test-fwknop.pl | 124 ++++++++++++++++++++++++--- + test/tests/rijndael_hmac_cmd_exec.pl | 162 ++++++++++++++++++++++++++++++++++- + 9 files changed, 442 insertions(+), 54 deletions(-) + +commit 0ac52b9b4d8a332671c8d1c75e74bd0527442f97 +Author: micha137 <bunk@iat.uni-leipzig.de> +Date: Tue Jul 21 18:39:43 2015 +0200 + + Fix some typos + + server/fwknopd.conf | 30 +++++++++++++++--------------- + 1 file changed, 15 insertions(+), 15 deletions(-) + +commit 89b2e8f477245bf6fdf1d2746c829f9ba26faf15 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jul 18 13:11:25 2015 -0700 + + [server] interface goes down will cause fwknopd to exit + + By default, fwknopd will now exit if the interface that it is + sniffing goes down (patch contributed by Github user 'sgh7'). If this + happens, it is expected that the native process monitoring feature in + things like systemd or upstart will restart fwknopd. However, if fwknopd + is not being monitored by systemd, upstart, or anything else, this + behavior can be disabled with the EXIT_AT_INTF_DOWN variable in the + fwknopd.conf file. If disabled, fwknopd will try to recover when a + downed interface comes back up. + + CREDITS | 6 +++++ + ChangeLog | 8 ++++++ + Makefile.am | 1 + + doc/fwknopd.man.asciidoc | 9 +++++++ + server/cmd_opts.h | 1 + + server/config_init.c | 7 +++++ + server/fwknopd_common.h | 2 ++ + server/pcap_capture.c | 3 ++- + test/conf/no_exit_down_intf_fwknopd.conf | 1 + + test/test-fwknop.pl | 46 +++++++++++++++++++++++++++----- + test/tests/basic_operations.pl | 20 ++++++++++++++ + 11 files changed, 96 insertions(+), 8 deletions(-) + +commit 15c00692b7070eb0807b4f86d43d02b44de40296 +Merge: 795b1de 8647854 +Author: Michael Rash <michael.rash@gmail.com> +Date: Sat Jul 18 23:43:00 2015 -0400 + + Merge pull request #164 from Coacher/master + +commit 8647854efe986d7b8bcab5a3dbe6e7541c46713f +Author: Ilya Tumaykin <itumaykin@gmail.com> +Date: Sun Jul 19 06:18:54 2015 +0300 + + extras: add systemd unit file and tmpfiles.d configuration for fwknopd + + extras/systemd/fwknopd.service | 12 ++++++++++++ + extras/systemd/fwknopd.tmpfiles.conf | 1 + + 2 files changed, 13 insertions(+) + +commit 795b1de4ddeeed3c2331ec69f60f66253e04a055 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jul 18 10:37:17 2015 -0700 + + [server] Added RULES_CHECK_THRESHOLD to define 'deep' rule expiration check frequency + + The RULES_CHECK_THRESHOLD variable defines the number of times firewall rule + expiration times must be checked before a "deep" check is run. This allows + fwknopd to remove rules that contain a proper '_exp_<time>' even if a third party + program added them instead of fwknopd. The default value for this variable is 20, + and this typically results in this check being run every two seconds or so. To + disable this type of checking altogether, set this variable to zero. + + doc/fwknopd.man.asciidoc | 8 ++++++++ + server/cmd_opts.h | 1 + + server/config_init.c | 11 ++++++++++- + server/fwknopd_common.h | 4 +++- + server/pcap_capture.c | 22 +++++++++++++++++----- + server/udp_server.c | 19 +++++++++++++++---- + 6 files changed, 54 insertions(+), 11 deletions(-) + +commit 295a6a0d1489e8f80bd96dbf2488708c557803bf +Author: Michael Rash <mbr@cipherdyne.org> +Date: Fri Jul 17 21:28:02 2015 -0700 + + [server] fix is_digits() logic and add tests + + server/fw_util_firewalld.c | 7 ++++++- + server/fw_util_ipfw.c | 7 ++++++- + server/fw_util_iptables.c | 7 ++++++- + server/fw_util_pf.c | 7 ++++++- + test/tests/rijndael_hmac.pl | 36 ++++++++++++++++++++++++++++++++++++ + 5 files changed, 60 insertions(+), 4 deletions(-) + +commit 76d8ce5158311c6881681bdc8fa8d74f44c61a8a +Author: Michael Rash <mbr@cipherdyne.org> +Date: Fri Jul 17 12:17:48 2015 -0700 + + minor change to remove debugging statement + + server/utils.c | 1 - 1 file changed, 1 deletion(-) -commit 19f00c0dbef4548cb702794a5757301357b2a259 +commit 6e4ad4767fa08d0227547a628ba5c1898e55d78c Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Apr 18 05:33:00 2015 -0700 +Date: Fri Jul 17 12:15:01 2015 -0700 - [test suite] add jump rule validation, include complete fwknopd chain listings + [server] make sure fw _exp_NNN... strings contain only digits after the _exp_ prefix - test/test-fwknop.pl | 46 +++++++++++++++++++++++++++++++++++++++------- - 1 file changed, 39 insertions(+), 7 deletions(-) + server/fw_util_firewalld.c | 4 ++++ + server/fw_util_ipfw.c | 4 ++++ + server/fw_util_iptables.c | 4 ++++ + server/fw_util_pf.c | 4 ++++ + server/utils.c | 34 ++++++++++++++++++++++++++++++++++ + server/utils.h | 2 ++ + 6 files changed, 52 insertions(+) -commit 55cbebe7bbda3540d6113bc6807be5ddebbaf059 +commit b753812cf6a32cf934fa34544ecc426a6d559fa6 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Apr 18 05:30:39 2015 -0700 +Date: Fri Jul 17 11:48:28 2015 -0700 - ChangeLog and doc updates + [server] minor addition of function names to fw command error log messages - ChangeLog | 16 +++++++++++++--- - doc/fwknopd.man.asciidoc | 18 +++++++++++++++++- - 2 files changed, 30 insertions(+), 4 deletions(-) + server/fw_util_firewalld.c | 38 +++++++++++++++++++++++++------------- + server/fw_util_iptables.c | 40 ++++++++++++++++++++++++++-------------- + 2 files changed, 51 insertions(+), 27 deletions(-) -commit baf3f706d8cbce7f0a91e2b394a054f8b590eaf0 -Merge: 1e9f7e9 fba6473 +commit a8ef2922e6ec3127ed0dcb9148010aa4d5faec1c (tag: refs/tags/2.6.7-pre1) +Merge: 4169c6d c25f951 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Fri Jul 17 10:56:28 2015 -0700 + + Merge branch 'master' of https://github.com/mrash/fwknop + +commit c25f951b4279e236d2e6f708e0c26a7bb5479610 +Merge: 042bf2d a212353 Author: Michael Rash <michael.rash@gmail.com> -Date: Thu Apr 16 21:45:59 2015 -0400 +Date: Fri Jul 17 22:37:59 2015 -0400 - Merge pull request #151 from mrdanbrooks/master + Merge pull request #161 from sgh7/master - android: allow definition of custom server udp port + [server] daemon exits if listened-to interface goes down -commit fba6473b1cd5475311c990477dbff05d56d439dc -Author: dan brooks <dan@danbrooks.net> -Date: Wed Apr 15 16:52:34 2015 -0400 - - android: allow definition of custom server udp port - - android/project/jni/fwknop/fwknop_client.c | 10 +++++++++- - android/project/res/layout/main.xml | 21 +++++++++++++++++++++ - .../src/com/max2idea/android/fwknop/Fwknop.java | 13 +++++++++++++ - 3 files changed, 43 insertions(+), 1 deletion(-) - -commit 1e9f7e94f0152e14535ce66de915ee05664d9a3b +commit 4169c6d477021c79cfb02df36dd9fd1e712a2a2e Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 16:05:01 2015 -0700 +Date: Fri Jul 17 10:38:34 2015 -0700 - [server] consolidate chain creation within mk_chain() + [server] switch chain_exists() log message to LOG_DEBUG upon error since FWKNOP_INPUT almost never exists at startup - server/fw_util_firewalld.c | 2 +- - server/fw_util_iptables.c | 30 ++++++++++-------------------- - 2 files changed, 11 insertions(+), 21 deletions(-) + server/fw_util_firewalld.c | 12 ++++++++---- + 1 file changed, 8 insertions(+), 4 deletions(-) -commit c0f3ed38a8f2347e9db5679fa2488ad3cc31c94a +commit e7b48af47c79e7c4f91b67626ff3015ad204561b Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 16:01:29 2015 -0700 +Date: Fri Jul 17 00:05:10 2015 -0700 - [server] further error status simplication for firewalld + [server] Calculate payload length from IP header + + Github user Scotte noticed that in his setup a 'VSS-Monitoring ethernet trailer' + was being added to incoming Ethernet frames that contained SPA packets. This + caused base64 decoding to break because the packet data length was calculated + from what libpcap returned for the frame (so these bytes became included in the + SPA payload itself). This issue was reported as #163 on github. + + This commit has fwknopd calculate the SPA payload length using the length field + in the IP header so that any trailing bytes in the Ethernet frame are not + included. This solution also applies to the Ethernet Frame Check Sequence issue + (#126). - server/fw_util_firewalld.c | 56 ++++++++++++++++++++++------------------------ - server/fw_util_firewalld.h | 4 +++- - 2 files changed, 30 insertions(+), 30 deletions(-) + server/process_packet.c | 24 ++++++++++-------------- + server/process_packet.h | 4 ++-- + 2 files changed, 12 insertions(+), 16 deletions(-) -commit cf8c4df50e20b352897b130fa1abde6bb8a75eeb +commit 042bf2d438738c1c60b9dd6f95784700223e0de6 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 15:57:44 2015 -0700 +Date: Thu Jul 16 11:59:34 2015 -0700 - [server] remove DISABLE_DNAT exception for SPA packets that request a NAT operation - this is reserved for FORCE_NAT scenarios + bump version to 2.6.7 (getting close to 2.6.7-pre1) + + ChangeLog | 23 ++++++++++++++++------- + VERSION | 2 +- + configure.ac | 2 +- + win32/config.h | 2 +- + 4 files changed, 19 insertions(+), 10 deletions(-) + +commit 71d6f01d110ddfc3db631a3cd85dd1559f20410e +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Jul 16 11:49:04 2015 -0700 + + [server] further no_chk_support for issue #162 + + server/fw_util_firewalld.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +commit 3c8e03d062dd3adf36331be7306758b64d0e2e49 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Jul 16 11:39:14 2015 -0700 + + [server] add stronger 'no -C' support for firewalld systems (issue #162) + + server/fw_util_firewalld.c | 511 ++++++++++++++++++++++++++------------------- + server/fw_util_iptables.h | 1 - + 2 files changed, 301 insertions(+), 211 deletions(-) + +commit 72f03ae99cb5eab3c393ecead86eedbafe2aa16d +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jul 14 21:50:11 2015 -0400 + + [test suite] fix 'FORWARD_ALL SNAT translate IP' test + + test/test-fwknop.pl | 1 + + test/tests/rijndael_hmac.pl | 8 +++++--- + 2 files changed, 6 insertions(+), 3 deletions(-) + +commit 43f38551c95a6d1a1a418574277f868079a80def +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jul 14 21:26:44 2015 -0400 + + [test suite] add ASAN mode to fko-wrapper + + test/fko-wrapper/Makefile | 4 ++++ + test/test-fwknop.pl | 7 ++++++- + 2 files changed, 10 insertions(+), 1 deletion(-) + +commit fd07a9588092ee4a2e5caf1e2aef200ebdc661ff +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jul 14 21:14:54 2015 -0400 + + add test/tests/address_sanitizer.pl + + Makefile.am | 1 + + 1 file changed, 1 insertion(+) + +commit f1c3806dca3d7e420e1d9b417ce499e17c9d2794 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jul 14 21:13:46 2015 -0400 + + [test suite] added tests for duplicate rule detection (issue #162) + + server/fw_util_iptables.c | 11 ++-- + test/test-fwknop.pl | 58 ++++++++++++++++--- + test/tests/rijndael_hmac.pl | 136 +++++++++++++++++++++++++++++++++++++------- + 3 files changed, 171 insertions(+), 34 deletions(-) + +commit 3de56f8f89836f9686984d0f4ba4488a5770a8bf +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Jul 13 22:41:21 2015 -0400 + + [test suite] add valgrind string to client command line for garbage collection test + + test/tests/rijndael_hmac.pl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit 588cba6063d106208edb8104a92a6c3fac247ea1 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Jul 13 21:59:58 2015 -0400 + + [test suite] validate iptables rule garbage collection (added in ef9498f7) + + test/tests/rijndael_hmac.pl | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +commit ef9498f7834d0df8e230f3ef9f2640b65fd3248a +Author: Michael Rash <mbr@cipherdyne.org> +Date: Mon Jul 13 21:29:16 2015 -0400 + + [server] Implement garbage cleanup mode for rule deletion + + This is a significant commit that allows fwknopd to delete expired rules + from the firewall policy regardless of whether fwknopd is tracking them. + That is, a third party program could insert rules into the fwknopd + chains (iptables for now, but this will be extended to the other + firewalls) in order to take advantage of fwknopd rule deletion. + + server/fw_util.h | 3 +- + server/fw_util_iptables.c | 289 +++++++++++++++++++++++++--------------------- + server/fwknopd_common.h | 7 ++ + server/pcap_capture.c | 12 +- + server/udp_server.c | 13 ++- + 5 files changed, 188 insertions(+), 136 deletions(-) + +commit 41b137611fa49a81dd7d13aba3c7ae8696fb15e7 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jul 12 22:50:06 2015 -0400 + + [test suite] validate multiple rules removed in a single check_firewall_rules() pass - validates f4f2ada1 + + test/test-fwknop.pl | 10 ++++++++-- + test/tests/rijndael_hmac.pl | 27 +++++++++++++++++++++++++++ + 2 files changed, 35 insertions(+), 2 deletions(-) + +commit bb90a0cb2e6b888b6ba0cc56cce30266b807597b +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jul 12 20:57:09 2015 -0400 + + [server] minor comment addition server/fw_util_iptables.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -commit 912c625e9e71ec186d7c8ee6179e34a2ee00dfd7 +commit f4f2ada1c086a5f8a72845e3001471b8e620198e Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 15:55:20 2015 -0700 +Date: Sun Jul 12 20:36:06 2015 -0400 - [server] remove DISABLE_DNAT exception for SPA packets that request a NAT operation - this is reserved for FORCE_NAT scenarios - - server/fw_util_firewalld.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit 654f455ba685b0272b19e1689d13d0e4849a2751 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 15:49:19 2015 -0700 - - Revert "[server] use 'success' string for firewalld as returned firewall-cmd for command success" + [server] bug fix to not zero the wrong buffer for iptables rule deletion - This reverts commit 1e33119b04a583fbf18b5b562edb14301a2ca7d6. + This commit fixes a bug where zero_cmd_buffers() was being called against the + wrong buffer as SPA rules were supposed to be deleted. Although multiple + iterations of check_firewall_rules() would have compensated, some rules would + not have been deleted as quickly as they should have in multi-rule scenarios. - server/fw_util_firewalld.c | 46 ++++++++++++++++++++-------------------------- - 1 file changed, 20 insertions(+), 26 deletions(-) + server/fw_util_iptables.c | 19 +++++++++++-------- + 1 file changed, 11 insertions(+), 8 deletions(-) -commit ffeb60677d926882063e89896b6c16cc9a82e334 +commit 416023723f011da6e7647a2023695648b8eb0aa8 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 15:49:08 2015 -0700 +Date: Sat Jul 11 21:28:56 2015 -0400 - [test suite] update SNAT MASQ test to use force masq access file + minor #define addition - test/tests/rijndael.pl | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -commit 7dc41e68eff9e19ab4d1e4084978b8127cc45dcf -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 15:48:14 2015 -0700 - - [test suite] add open_ports_force_masq_access.conf file - - Makefile.am | 1 + + common/common.h | 1 + 1 file changed, 1 insertion(+) -commit 86cdc90f4a961017d8e0821ef750cb65e1b79a07 +commit cd18570f717bf671453db9e8afc8302edf4fad6d Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Apr 12 15:47:41 2015 -0700 +Date: Fri Jul 10 22:45:44 2015 -0400 - [test suite] add open_ports_force_masq_access.conf file + [server] default to not returning partial line when collecting the output of an external command - test/conf/open_ports_force_masq_access.conf | 6 ++++++ - test/test-fwknop.pl | 1 + - 2 files changed, 7 insertions(+) + server/extcmd.c | 106 ++++++++++++++++++++++++++++++-------------------------- + server/extcmd.h | 1 + + server/utils.c | 32 +++++++++++++++++ + server/utils.h | 1 + + 4 files changed, 91 insertions(+), 49 deletions(-) -commit 5164378b17a88a6dc008a2ac5495b7885d2b4524 +commit 5460509f8807304aca16de6ea80c02119fd92546 Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Apr 9 22:23:17 2015 -0400 +Date: Tue Jul 7 08:28:16 2015 -0400 - [build] add --enable-32bit-mode for ASAN+AFL fuzzing + [server] add NAT rule existence detection for --no-ipt-check support (issue #162) - configure.ac | 13 +++++++++++++ - 1 file changed, 13 insertions(+) + server/fw_util_iptables.c | 173 ++++++++++++++++++++++++++++++---------------- + server/fw_util_iptables.h | 1 + + server/utils.c | 8 +++ + server/utils.h | 1 + + 4 files changed, 122 insertions(+), 61 deletions(-) -commit 513fb239dfd92287e910240b8ed3b8c29f77c66e -Merge: 87a4acb 1986c9a +commit 4874dc9c83823b216479524fd1fcefd96e99e282 Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Apr 9 21:21:45 2015 -0400 +Date: Sun Jul 5 22:55:23 2015 -0400 - Merge branch 'master' of ssh://github.com/mrash/fwknop + [test suite] add --gpg-exe invalid path test -commit 87a4acb6364070cb2a58888352147e29788770b5 + test/tests/basic_operations.pl | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit 012d1cf8884da137f21620f92045a35203eb819f Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Apr 9 18:04:31 2015 -0700 +Date: Sun Jul 5 20:47:06 2015 -0400 - [test suite] added detection for crashes triggered with AddressSanitizer (requires --enable-asan-support) - - test/test-fwknop.pl | 8 ++++++++ - 1 file changed, 8 insertions(+) - -commit 1986c9aaf94dfc76ebc7c669a61df0c289dbda91 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Apr 9 20:01:59 2015 -0400 - - [test suite] added AFL results for client-rc fuzzing - - test/afl/results/2.6.6/c4ffd4b/client-rc | 25 +++++++++++++++++++++ - .../2.6.6/c4ffd4b/client-rc-plot/exec_speed.png | Bin 0 -> 36489 bytes - .../2.6.6/c4ffd4b/client-rc-plot/high_freq.png | Bin 0 -> 20967 bytes - .../2.6.6/c4ffd4b/client-rc-plot/index.html | 10 +++++++++ - .../2.6.6/c4ffd4b/client-rc-plot/low_freq.png | Bin 0 -> 12932 bytes - 5 files changed, 35 insertions(+) - -commit 2d0b623a9a12e6f75339c94650a84185d017cdcc -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 8 18:50:26 2015 -0700 - - [test suite] more FORCE_NAT tests - - test/tests/basic_operations.pl | 21 ++++++++++++++++++++- - 1 file changed, 20 insertions(+), 1 deletion(-) - -commit ca41ce6e7592de7aed1137014b39a1cd0fac1d5d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 8 18:40:44 2015 -0700 - - [test suite] restore FORCE_SNAT test passing result - - test/tests/basic_operations.pl | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit 547dbb66b3314206b9b1db619e512a687a18a94c -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 8 18:30:03 2015 -0700 - - [server] minor return value handling update for create_chain() and add_jump_rule() - - server/fw_util_iptables.c | 19 ++++++++++++------- - 1 file changed, 12 insertions(+), 7 deletions(-) - -commit 1e33119b04a583fbf18b5b562edb14301a2ca7d6 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 8 18:29:03 2015 -0700 - - [server] use 'success' string for firewalld as returned firewall-cmd for command success - - server/fw_util_firewalld.c | 46 ++++++++++++++++++++++++++-------------------- - 1 file changed, 26 insertions(+), 20 deletions(-) - -commit 429881703f7afbd92a803a16a4afb88a2350ff2d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Apr 8 18:24:26 2015 -0700 - - [test suite] minor uninitialized var bug fix - - test/tests/basic_operations.pl | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit ab2d9c0aec1fbd6bc226181ac5c1bee3ad8f173c -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 7 16:35:07 2015 -0700 - - [test suite] minor path bug fix - - test/test-fwknop.pl | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit 0fa42ae11781c1347c183473c47c3005bf4ca2e9 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 7 16:34:49 2015 -0700 - - [server] allow DISABLE_DNAT to not require FORCE_NAT - - server/access.c | 23 ++++++++----- - server/fw_util_firewalld.c | 57 +++++++++++++++++---------------- - server/fw_util_iptables.c | 57 +++++++++++++++++---------------- - test/conf/require_force_nat_access.conf | 2 +- - test/tests/basic_operations.pl | 10 ++++++ - test/tests/rijndael_hmac.pl | 10 ------ - 6 files changed, 84 insertions(+), 75 deletions(-) - -commit 7a21494f3913142885c0744e18443f8528105d3d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 7 16:32:44 2015 -0700 - - added --enable-asan-support for Google's Address Sanitizer compiler flags - - ChangeLog | 3 +++ - configure.ac | 13 +++++++++++++ - 2 files changed, 16 insertions(+) - -commit 21dc1e8968e69a51cea89f8c5299d4f7b020453c -Merge: 8010690 3d8b524 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 7 08:24:21 2015 -0400 - - Merge branch 'master' of ssh://minastirith/Users/mbr/git/fwknop - -commit 3d8b524019f7bfdfe409196f65877b6975117bb1 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Apr 7 08:23:55 2015 -0400 - - [test suite] FORCE_SNAT requires FORCE_NAT test - - Makefile.am | 3 +++ - test/test-fwknop.pl | 1 + - test/tests/rijndael_hmac.pl | 10 ++++++++++ - 3 files changed, 14 insertions(+) - -commit 37c9f38565c48244fe4606f87b93ba2b3db28f6d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 6 21:20:31 2015 -0400 - - [test suite] FORCE_SNAT requires FORCE_NAT test - - test/conf/require_force_nat_access.conf | 8 ++++++++ - 1 file changed, 8 insertions(+) - -commit 8e6db3a5da1d2624a10929742aa1b58f374b7949 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 6 20:04:33 2015 -0400 - - [server] extend FORWARD_ALL to apply to NAT operations + [server] interim commit towards a fix for --no-ipt-check rule detection - This is a significant commit to allow all ports and protocols to be - NAT'd in conjunction with FORWARD ACCEPT rules. This commit is in - support of 6b7a3bbdae295c29a15a59385e637bd391858bc2 to allow fwknopd to - function as an SPA gateway. + This is a significant commit for issue #162 where fwknopd is not properly + detecting rules (particularly NAT rules) on systems running older versions + of iptables where -C support is not offered. A new capability of searching + the output of an external command and getting the first matching line was + added with the search_extcmd_getline() function. - server/access.c | 6 +- - server/fw_util_iptables.c | 492 ++++++++++++++++---------- - server/fw_util_iptables.h | 2 + - server/fwknopd.conf | 8 +- - server/fwknopd_common.h | 5 +- - test/conf/hmac_force_masq_no_dnat_access.conf | 7 + - test/conf/hmac_forward_all_access.conf | 8 + - test/test-fwknop.pl | 2 + - test/tests/rijndael_hmac.pl | 46 ++- - 9 files changed, 375 insertions(+), 201 deletions(-) + server/extcmd.c | 43 ++++++++++++++++++++++-------- + server/extcmd.h | 8 +++++- + server/fw_util_iptables.c | 29 +++++++++++--------- + test/test-fwknop.pl | 54 +++++++++++++++++++++++++++++-------- + test/tests/rijndael_hmac.pl | 65 ++++++++++++++++++++++++++++++++++++++++++++- + 5 files changed, 163 insertions(+), 36 deletions(-) -commit 80106900394505e6932e7f55a49ddae9b22a3d5c +commit 5a58390ab4172545b59f5f7bd64bf1bd81bb4829 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 6 11:47:07 2015 -0700 +Date: Sat Jul 4 17:12:49 2015 -0400 - [server] add missing #define's for firewalld + [test suite] add dupe rule server output check - server/fw_util_firewalld.h | 2 ++ - 1 file changed, 2 insertions(+) + test/tests/rijndael_hmac.pl | 1 + + 1 file changed, 1 insertion(+) -commit ef6c0549a58aff051ff796b215223b8590aa0078 +commit 86bcf243e6bf675c478b9c8a8eb3812caa0fc7c5 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 6 01:33:18 2015 -0700 +Date: Sat Jul 4 17:03:08 2015 -0400 - [test suite] added --prefer-iptables to exclude firewalld + [test suite] bug fix for iptables vs. firewalld - test/test-fwknop.pl | 12 ++++++++---- - 1 file changed, 8 insertions(+), 4 deletions(-) + test/test-fwknop.pl | 26 ++++++++++---------------- + 1 file changed, 10 insertions(+), 16 deletions(-) -commit c25f34e7a2808c276364532f6e0f8fd98e6c1b61 +commit 4c7679fabd225e27145e5770d6e36931926560f0 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Apr 6 01:24:55 2015 -0700 +Date: Thu Jul 2 23:44:16 2015 -0400 - [server] update firewalld for FORWARD_ALL NAT operations + [server] start on sudo usage for command exec (issue #159) - server/fw_util_firewalld.c | 492 ++++++++++++++++++++++++++++----------------- - server/fwknopd_common.h | 3 - - 2 files changed, 305 insertions(+), 190 deletions(-) + doc/fwknopd.man.asciidoc | 27 +++++++++++++++++++++++---- + server/access.c | 8 ++++++++ + server/cmd_opts.h | 3 +++ + server/config_init.c | 20 +++++++++++++++++++- + server/fwknopd_common.h | 7 +++++++ + server/utils.c | 37 ++++++++++++++++++++++++++++++------- + server/utils.h | 4 ++++ + 7 files changed, 94 insertions(+), 12 deletions(-) -commit ca467b9030705189499001cf53d7068c1a5d4561 +commit a212353765542e369cba342a58c66ea6247713e1 +Author: Steve Harvey <sgh@vex.net> +Date: Thu Jul 2 19:33:03 2015 -0400 + + [server] daemon exits if listened-to interface goes down + + This commit fixes fwknopd becoming non-responsive should the interface + temporarily cycles through a down state. Verified on CentOS 7. + + server/pcap_capture.c | 17 ++++++++++++++--- + 1 file changed, 14 insertions(+), 3 deletions(-) + +commit ff9adc5f5113e913cd7016690c81106e56f2d780 Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Mar 31 19:58:18 2015 -0400 +Date: Wed Jul 1 07:43:24 2015 -0400 - [test suite] added AFL results for spa-pkts and server-digest-cache fuzzing runs - - test/afl/results/2.6.6/a18b3e9/spa-pkts | 26 +++++++++++++++++++++ - .../2.6.6/a18b3e9/spa-pkts-plot/exec_speed.png | Bin 0 -> 15670 bytes - .../2.6.6/a18b3e9/spa-pkts-plot/high_freq.png | Bin 0 -> 23913 bytes - .../results/2.6.6/a18b3e9/spa-pkts-plot/index.html | 10 ++++++++ - .../2.6.6/a18b3e9/spa-pkts-plot/low_freq.png | Bin 0 -> 10437 bytes - test/afl/results/2.6.6/c4ffd4b/server-digest-cache | 26 +++++++++++++++++++++ - .../server-digest-cache-plot/exec_speed.png | Bin 0 -> 14618 bytes - .../c4ffd4b/server-digest-cache-plot/high_freq.png | Bin 0 -> 22748 bytes - .../c4ffd4b/server-digest-cache-plot/index.html | 10 ++++++++ - .../c4ffd4b/server-digest-cache-plot/low_freq.png | Bin 0 -> 8961 bytes - 10 files changed, 72 insertions(+) - -commit c4ffd4b00a86d46ebf3cc3fcd65e6e841d7bb899 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Mar 30 21:38:31 2015 -0400 - - [extras] minor ramdisk creation bug fix - - extras/ramdisk/ramdisk-create.sh | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit a18b3e90272709bf1660b97421dd208e72af0bff -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 29 18:15:11 2015 -0700 - - [server] minor code coverage update for firewalld systems - - server/fw_util_firewalld.c | 11 +++++++++++ - 1 file changed, 11 insertions(+) - -commit 244d2692f284034fa75ea37be4ea21e303abb1eb -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 29 08:04:55 2015 -0400 - - [test suite] added server-access plot data - - .../2.6.6/ea7f22f/server-access-plot/exec_speed.png | Bin 0 -> 22475 bytes - .../2.6.6/ea7f22f/server-access-plot/high_freq.png | Bin 0 -> 22220 bytes - .../results/2.6.6/ea7f22f/server-access-plot/index.html | 10 ++++++++++ - .../2.6.6/ea7f22f/server-access-plot/low_freq.png | Bin 0 -> 10671 bytes - 4 files changed, 10 insertions(+) - -commit cb089c550d994708154b8265027b1afe46efbe92 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 29 08:00:03 2015 -0400 - - [test suite] added server-access AFL results run - - test/afl/results/2.6.6/ea7f22f/server-access | 26 ++++++++++++++++++++++++++ - 1 file changed, 26 insertions(+) - -commit 60d982a1034dd3519fc0d682e6c1050454e0c570 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Mar 28 07:54:30 2015 -0400 - - [test suite] added GPG 4096-bit key combination tests - - Makefile.am | 1 + - test/conf/gpg_dirs.tar.gz | Bin 20585 -> 29331 bytes - test/conf/gpg_server_large_key_access.conf | 6 ++++++ - test/test-fwknop.pl | 14 ++++++++++++++ - test/tests/gpg_no_pw.pl | 22 ++++++++++++++++++++++ - 5 files changed, 43 insertions(+) - -commit 1dc4a47357347cec43590086df0b98dfc5ff0d93 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 26 22:04:20 2015 -0400 - - [libfko] minor update to make process_sigs() static - - lib/gpgme_funcs.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -commit 9de2a61d040f7fce247ef47de36214ac26b919c2 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 26 22:01:52 2015 -0400 - - add subkey gpg access.conf file + add OS X ramdisk wrapper script Makefile.am | 1 + 1 file changed, 1 insertion(+) -commit 0f86406afb37fc571d97d383bb7db5b3fa250419 +commit 788bf543c8b1bc4dc75a0c14486f2aab58a9d7c3 Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 26 22:01:02 2015 -0400 +Date: Tue Jun 30 21:24:00 2015 -0400 - [test suite] added gpg subkey signing test + [extras] added ramdisk-create-osx.sh for Mac OS X systems - test/conf/gpg_dirs.tar.gz | Bin 12472 -> 20585 bytes - test/conf/gpg_subkey_access.conf | 6 ++++++ - test/test-fwknop.pl | 19 +++++++++++++++++++ - test/tests/gpg_no_pw.pl | 12 ++++++++++++ - 4 files changed, 37 insertions(+) - -commit edd57f48de63d4ebd6fcaa8842ced82017b3b664 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Mar 24 22:45:07 2015 -0400 - - add test/conf/gpg_large_signing_key_access.conf - - Makefile.am | 1 + - 1 file changed, 1 insertion(+) - -commit 91a4e82f237a6df4233d1f4830ad2b647aa7759c -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Mar 24 22:38:41 2015 -0400 - - [test suite] added 4096-bit signing key test - - test/conf/gpg_large_signing_key_access.conf | 6 ++++++ - test/test-fwknop.pl | 10 ++++++++++ - test/tests/gpg_no_pw.pl | 12 ++++++++++++ - 3 files changed, 28 insertions(+) - -commit 59d0ef0b17e8fb8c6c05b8de07de0767b76823e1 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Mar 24 22:03:21 2015 -0400 - - [test suite] minor file rename - - Makefile.am | 2 +- - test/conf/gpg_dirs.tar.gz | Bin 0 -> 12472 bytes - test/conf/gpg_dirs_orig.tar.gz | Bin 12472 -> 0 bytes - test/test-fwknop.pl | 6 +++--- - 4 files changed, 4 insertions(+), 4 deletions(-) - -commit 1594194e7335ce660e1b73302711677f0c67762a -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Mar 24 22:01:55 2015 -0400 - - [test suite] added new gpg keyrings for large key tests (4096 bits) - - test/conf/gpg_dirs_orig.tar.gz | Bin 3876 -> 12472 bytes - 1 file changed, 0 insertions(+), 0 deletions(-) - -commit 17382953e86b7f3a5fad1ba4de36a2805f52442e -Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Mar 24 21:44:38 2015 -0400 - - [test suite] minor usage update - - test/test-fwknop.pl | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -commit ce0bb64830dbd782aadd9e932aa117a70b64643d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Mar 23 18:07:13 2015 -0700 - - [test suite] restructured AFL results directory to results/version/commit/ - - test/afl/results/2.6.5/67f969f/server-access | 25 + - .../67f969f/server-access-plot/exec_speed.png | Bin 0 -> 20466 bytes - .../2.6.5/67f969f/server-access-plot/high_freq.png | Bin 0 -> 22305 bytes - .../2.6.5/67f969f/server-access-plot/index.html | 10 + - .../67f969f/server-access-plot/index.html.orig | 10 + - .../2.6.5/67f969f/server-access-plot/low_freq.png | Bin 0 -> 11027 bytes - .../2.6.5/67f969f/server-access-plot/plot_data | 7337 ++++++++++++++++++++ - test/afl/results/2.6.5/7a2763a/spa-pkts | 25 + - test/afl/results/2.6.5/aeac6a4/server-conf | 25 + - test/afl/results/2.6.5/aeac6a4/server-digest-cache | 25 + - test/afl/results/2.6.5/aeac6a4/server-enc-pkts | 25 + - test/afl/results/2.6.5/db8b5e4/server-access | 25 + - .../db8b5e4/server-access-plot/exec_speed.png | Bin 0 -> 27214 bytes - .../2.6.5/db8b5e4/server-access-plot/high_freq.png | Bin 0 -> 22590 bytes - .../2.6.5/db8b5e4/server-access-plot/index.html | 10 + - .../db8b5e4/server-access-plot/index.html.orig | 10 + - .../2.6.5/db8b5e4/server-access-plot/low_freq.png | Bin 0 -> 10548 bytes - test/afl/results/2.6.6/59edf64/spa-pkts | 27 + - test/afl/results/plot-2.6.5.67f969f/exec_speed.png | Bin 20466 -> 0 bytes - test/afl/results/plot-2.6.5.67f969f/high_freq.png | Bin 22305 -> 0 bytes - test/afl/results/plot-2.6.5.67f969f/index.html | 10 - - .../afl/results/plot-2.6.5.67f969f/index.html.orig | 10 - - test/afl/results/plot-2.6.5.67f969f/low_freq.png | Bin 11027 -> 0 bytes - test/afl/results/plot-2.6.5.67f969f/plot_data | 7337 -------------------- - test/afl/results/plot-2.6.5.db8b5e4/exec_speed.png | Bin 27214 -> 0 bytes - test/afl/results/plot-2.6.5.db8b5e4/high_freq.png | Bin 22590 -> 0 bytes - test/afl/results/plot-2.6.5.db8b5e4/index.html | 10 - - .../afl/results/plot-2.6.5.db8b5e4/index.html.orig | 10 - - test/afl/results/plot-2.6.5.db8b5e4/low_freq.png | Bin 10548 -> 0 bytes - test/afl/results/server-access-2.6.5.67f969f | 25 - - test/afl/results/server-access-2.6.5.db8b5e4 | 25 - - test/afl/results/server-conf-2.6.5.aeac6a4 | 25 - - test/afl/results/server-digest-cache-2.6.5.aeac6a4 | 25 - - test/afl/results/server-enc-pkts-2.6.5.aeac6a4 | 25 - - test/afl/results/spa-pkts-2.6.5.59edf64 | 27 - - test/afl/results/spa-pkts-2.6.5.7a2763a | 25 - - 36 files changed, 7554 insertions(+), 7554 deletions(-) - -commit 08bc2aa60301912716acc882b918d73fcbfbdafb -Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Mar 23 17:55:59 2015 -0700 - - [test suite] rely exclusively on tarball for gpg keyrings - - Makefile.am | 12 ------------ - test/conf/client-gpg-no-pw/pubring.gpg | Bin 2480 -> 0 bytes - test/conf/client-gpg-no-pw/secring.gpg | Bin 1274 -> 0 bytes - test/conf/client-gpg-no-pw/trustdb.gpg | Bin 1360 -> 0 bytes - test/conf/client-gpg/pubring.gpg | Bin 2480 -> 0 bytes - test/conf/client-gpg/secring.gpg | Bin 1350 -> 0 bytes - test/conf/client-gpg/trustdb.gpg | Bin 1360 -> 0 bytes - test/conf/server-gpg-no-pw/pubring.gpg | Bin 2480 -> 0 bytes - test/conf/server-gpg-no-pw/secring.gpg | Bin 1276 -> 0 bytes - test/conf/server-gpg-no-pw/trustdb.gpg | Bin 1360 -> 0 bytes - test/conf/server-gpg/pubring.gpg | Bin 2480 -> 0 bytes - test/conf/server-gpg/secring.gpg | Bin 1352 -> 0 bytes - test/conf/server-gpg/trustdb.gpg | Bin 1360 -> 0 bytes - test/test-fwknop.pl | 4 ++++ - 14 files changed, 4 insertions(+), 12 deletions(-) - -commit 90fb4c9aca0e10b75394a5cf5fa60e03df3e293e -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 22:26:29 2015 -0400 - - minor comment addition - - test/afl/fuzzing-wrappers/helpers/afl-cmin/README | 1 + - 1 file changed, 1 insertion(+) - -commit 5aacd6ae213d3a7ece43e51b732b28b55933f7ea -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 22:18:04 2015 -0400 - - added convenience script to create a ramdisk for AFL fuzzing runs - - extras/ramdisk/ramdisk-create.sh | 8 ++++++++ - 1 file changed, 8 insertions(+) - -commit ea7f22f8421420205d4ff759ca51b3ecb2c571b5 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 22:12:37 2015 -0400 - - fix line separators - - Makefile.am | 44 ++++++++++++++++++++++---------------------- - 1 file changed, 22 insertions(+), 22 deletions(-) - -commit f87e18635c9c37f13f864939cc6830fcf266201a -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 22:06:19 2015 -0400 - - update Makefile.am for latest AFL scripts and test cases - - Makefile.am | 63 ++++++++++++++++++++++++++++++++++++++++--------------------- - 1 file changed, 41 insertions(+), 22 deletions(-) - -commit 2414393c94a75661949fd76ebd5f0bc0618a22f7 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 22:02:12 2015 -0400 - - added the extras/patches/ directory (initial patch to link against pthreads for libfiu support) - - extras/patches/libfiu_add_pthreads.patch | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -commit 211f1fb5a2b3597cbdfd5016b2d22de9d891f3ed -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 22:00:21 2015 -0400 - - [test suite] update afl-compile-code-coverage.sh to not use afl-gcc - - Makefile.am | 1 - - test/afl/compile/afl-compile-code-coverage.sh | 17 ++++++++++++----- - test/afl/compile/afl-gen-code-coverage.sh | 13 ------------- - 3 files changed, 12 insertions(+), 19 deletions(-) - -commit d058493d3b0e6b8b073f7d4ebe09236dcc4ea109 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 17:41:26 2015 -0700 - - [test suite] handle versions of lcov that don't have the --rc option - - ChangeLog | 8 ++++++-- - Makefile.am | 2 ++ - test/gen-coverage-report.sh | 8 ++++---- - test/init-lcov.sh | 4 ++-- - test/lcov.env | 9 +++++++++ - 5 files changed, 23 insertions(+), 8 deletions(-) - -commit c7be9baf9c22757af3e37c70a8d7d23b37c14c97 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Sun Mar 22 14:46:07 2015 -0700 - - [test suite] better lcov coverage report handling with --initial and --zerocounters - - test/gen-coverage-report.sh | 28 ++++++---------------------- - test/init-lcov.sh | 14 ++++++++++++++ - test/lcov.env | 5 +++++ - test/test-fwknop.pl | 2 ++ - 4 files changed, 27 insertions(+), 22 deletions(-) - -commit 56e2e5ca2fa5e2335b5faff194f4e8c4b0f7898d -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 23:45:22 2015 -0400 - - [test suite] restore digest length calculation for AFL fuzzing, fixes #148 - - lib/fko_decode.c | 6 ------ - 1 file changed, 6 deletions(-) - -commit 67fefd67ae1a470bf8753811bffa5cdf2f3442e4 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 23:39:16 2015 -0400 - - [test suite] added README for afl-cmin helper scripts - - test/afl/fuzzing-wrappers/helpers/afl-cmin/README | 12 ++++++++++++ - .../fuzzing-wrappers/helpers/afl-cmin/server-access-cmin.sh | 1 - - 2 files changed, 12 insertions(+), 1 deletion(-) - -commit c4048573c6d325cd692c1b58159abca2e68c7b19 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 23:37:04 2015 -0400 - - [test suite] removed SPA packet from afl-cmin corpus - - test/afl/test-cases/spa-pkts.cmin/spa3_md5.start | 1 - - 1 file changed, 1 deletion(-) - -commit 8ad434aed5dfa18d9e15ce586e0464ddc6bae10f -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 23:02:40 2015 -0400 - - [test suite] the large afl-cmin directories are not used by default - - test/afl/fuzzing-wrappers/server-conf.sh | 2 +- - .../server-access.cmin/cfb_mode_access.conf | 4 --- - .../test-cases/server-access.cmin/cmd_access.conf | 4 --- - .../server-access.cmin/cmd_giduid_access.conf | 6 ---- - .../server-access.cmin/cmd_setuid_access.conf | 5 --- - .../server-access.cmin/ctr_mode_access.conf | 4 --- - .../server-access.cmin/default_fwknopd.conf | 1 - - .../dual_key_legacy_iv_access.conf | 10 ------ - .../server-access.cmin/ecb_mode_access.conf | 4 --- - .../expired_epoch_stanza_access.conf | 4 --- - .../server-access.cmin/expired_stanza_access.conf | 4 --- - .../server-access.cmin/force_nat_access.conf | 4 --- - .../fuzzing_open_ports_access.conf | 4 --- - .../fuzzing_restrict_ports_access.conf | 5 --- - .../server-access.cmin/fuzzing_source_access.conf | 4 --- - .../server-access.cmin/fwknoprc_with_default_key | 2 -- - .../gpg_no_sig_no_fpr_access.conf | 8 ----- - .../hmac_dual_key_usage_access.conf | 12 ------- - .../server-access.cmin/hmac_equal_keys_access.conf | 17 --------- - .../server-access.cmin/hmac_force_masq_access.conf | 6 ---- - .../server-access.cmin/hmac_force_snat_access.conf | 6 ---- - .../server-access.cmin/hmac_fuzzing_access.conf | 5 --- - .../server-access.cmin/hmac_get_key_access.conf | 4 --- - .../hmac_invalid_type_access.conf | 5 --- - .../hmac_md5_short_key_access.conf | 5 --- - .../hmac_no_b64_cygwin_access.conf | 4 --- - .../hmac_sha1_short_key_access.conf | 5 --- - .../server-access.cmin/hmac_sha384_access.conf | 5 --- - .../hmac_sha512_short_key2_access.conf | 5 --- - .../hmac_simple_keys_access.conf | 4 --- - .../icmp_pcap_filter_fwknopd.conf | 1 - - .../server-access.cmin/invalid_expire_access.conf | 4 --- - .../server-access.cmin/invalid_source_access.conf | 6 ---- - .../server-access.cmin/ip_source_match_access.conf | 3 -- - .../ipt_custom_nat_chain_fwknopd.conf | 5 --- - .../ipt_no_flush_init_or_exit_fwknopd.conf | 2 -- - .../server-access.cmin/ipt_snat_fwknopd.conf | 3 -- - .../legacy_iv_long_key2_access.conf | 4 --- - .../server-access.cmin/multi_stanzas_access.conf | 12 ------- - .../multi_stanzas_with_broken_keys.conf | 15 -------- - .../no_multi_source_match_access.conf | 3 -- - .../server-access.cmin/ofb_mode_access.conf | 4 --- - .../server-conf.cmin/default_fwknopd.conf | 1 - - .../server-conf.cmin/fwknoprc_gpg_invalid_exe | 4 --- - .../server-conf.cmin/fwknoprc_hmac_defaults | 40 --------------------- - .../fwknoprc_hmac_time_offset_days | 18 ---------- - .../server-conf.cmin/fwknoprc_stanza_list | 8 ----- - .../server-conf.cmin/fwknoprc_with_named_key | 3 -- - .../test-cases/server-conf.cmin/gpg_access.conf | 7 ---- - .../server-conf.cmin/gpg_dirs_orig.tar.gz | Bin 3876 -> 0 bytes - .../server-conf.cmin/icmp_pcap_filter_fwknopd.conf | 1 - - .../invalid_ipt_input_chain_3_fwknopd.conf | 1 - - .../invalid_ipt_input_chain_4_fwknopd.conf | 1 - - .../invalid_ipt_input_chain_5_fwknopd.conf | 1 - - .../invalid_ipt_input_chain_fwknopd.conf | 1 - - .../ipt_custom_nat_chain_fwknopd.conf | 5 --- - .../ipt_no_flush_init_fwknopd.conf | 1 - - .../server-conf.cmin/ipt_output_chain_fwknopd.conf | 2 -- - .../server-conf.cmin/ipt_snat_fwknopd.conf | 3 -- - .../ipt_snat_no_translate_ip_fwknopd.conf | 2 -- - .../test-cases/server-conf.cmin/multi_pkts.pcap | Bin 46890 -> 0 bytes - .../server-conf.cmin/override2_fwknopd.conf | 2 -- - .../override_no_digest_tracking_fwknopd.conf | 1 - - .../test-cases/server-conf.cmin/spa_over_http.pcap | Bin 1846 -> 0 bytes - .../server-conf.cmin/spa_over_http_fwknopd.conf | 1 - - .../test-cases/server-conf.cmin/spa_replay.pcap | Bin 910 -> 0 bytes - .../server-conf.cmin/var_expansion_fwknopd.conf | 2 -- - .../var_expansion_invalid_fwknopd.conf | 2 -- - 68 files changed, 1 insertion(+), 326 deletions(-) - -commit ab5c000a32dca8e6584be55d168810f774856b32 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 22:55:50 2015 -0400 - - [test suite] added afl-cmin scripts, and the main test suite configs are referenced - - server/config_init.c | 4 +-- - .../helpers/afl-cmin/server-access-cmin.sh | 19 ++++++++++ - .../helpers/afl-cmin/server-conf-cmin.sh | 18 ++++++++++ - .../helpers/afl-cmin/spa-pkts-cmin.sh | 9 +++-- - test/afl/fuzzing-wrappers/server-access.sh | 5 +-- - test/afl/fuzzing-wrappers/server-conf.sh | 7 ++-- - .../server-access.cmin/cfb_mode_access.conf | 4 +++ - .../test-cases/server-access.cmin/cmd_access.conf | 4 +++ - .../server-access.cmin/cmd_giduid_access.conf | 6 ++++ - .../server-access.cmin/cmd_setuid_access.conf | 5 +++ - .../server-access.cmin/ctr_mode_access.conf | 4 +++ - .../server-access.cmin/default_fwknopd.conf | 1 + - .../dual_key_legacy_iv_access.conf | 10 ++++++ - .../server-access.cmin/ecb_mode_access.conf | 4 +++ - .../expired_epoch_stanza_access.conf | 4 +++ - .../server-access.cmin/expired_stanza_access.conf | 4 +++ - .../server-access.cmin/force_nat_access.conf | 4 +++ - .../fuzzing_open_ports_access.conf | 4 +++ - .../fuzzing_restrict_ports_access.conf | 5 +++ - .../server-access.cmin/fuzzing_source_access.conf | 4 +++ - .../server-access.cmin/fwknoprc_with_default_key | 2 ++ - .../gpg_no_sig_no_fpr_access.conf | 8 +++++ - .../hmac_dual_key_usage_access.conf | 12 +++++++ - .../server-access.cmin/hmac_equal_keys_access.conf | 17 +++++++++ - .../server-access.cmin/hmac_force_masq_access.conf | 6 ++++ - .../server-access.cmin/hmac_force_snat_access.conf | 6 ++++ - .../server-access.cmin/hmac_fuzzing_access.conf | 5 +++ - .../server-access.cmin/hmac_get_key_access.conf | 4 +++ - .../hmac_invalid_type_access.conf | 5 +++ - .../hmac_md5_short_key_access.conf | 5 +++ - .../hmac_no_b64_cygwin_access.conf | 4 +++ - .../hmac_sha1_short_key_access.conf | 5 +++ - .../server-access.cmin/hmac_sha384_access.conf | 5 +++ - .../hmac_sha512_short_key2_access.conf | 5 +++ - .../hmac_simple_keys_access.conf | 4 +++ - .../icmp_pcap_filter_fwknopd.conf | 1 + - .../server-access.cmin/invalid_expire_access.conf | 4 +++ - .../server-access.cmin/invalid_source_access.conf | 6 ++++ - .../server-access.cmin/ip_source_match_access.conf | 3 ++ - .../ipt_custom_nat_chain_fwknopd.conf | 5 +++ - .../ipt_no_flush_init_or_exit_fwknopd.conf | 2 ++ - .../server-access.cmin/ipt_snat_fwknopd.conf | 3 ++ - .../legacy_iv_long_key2_access.conf | 4 +++ - .../server-access.cmin/multi_stanzas_access.conf | 12 +++++++ - .../multi_stanzas_with_broken_keys.conf | 15 ++++++++ - .../no_multi_source_match_access.conf | 3 ++ - .../server-access.cmin/ofb_mode_access.conf | 4 +++ - .../server-conf.cmin/default_fwknopd.conf | 1 + - .../server-conf.cmin/fwknoprc_gpg_invalid_exe | 4 +++ - .../server-conf.cmin/fwknoprc_hmac_defaults | 40 +++++++++++++++++++++ - .../fwknoprc_hmac_time_offset_days | 18 ++++++++++ - .../server-conf.cmin/fwknoprc_stanza_list | 8 +++++ - .../server-conf.cmin/fwknoprc_with_named_key | 3 ++ - .../test-cases/server-conf.cmin/gpg_access.conf | 7 ++++ - .../server-conf.cmin/gpg_dirs_orig.tar.gz | Bin 0 -> 3876 bytes - .../server-conf.cmin/icmp_pcap_filter_fwknopd.conf | 1 + - .../invalid_ipt_input_chain_3_fwknopd.conf | 1 + - .../invalid_ipt_input_chain_4_fwknopd.conf | 1 + - .../invalid_ipt_input_chain_5_fwknopd.conf | 1 + - .../invalid_ipt_input_chain_fwknopd.conf | 1 + - .../ipt_custom_nat_chain_fwknopd.conf | 5 +++ - .../ipt_no_flush_init_fwknopd.conf | 1 + - .../server-conf.cmin/ipt_output_chain_fwknopd.conf | 2 ++ - .../server-conf.cmin/ipt_snat_fwknopd.conf | 3 ++ - .../ipt_snat_no_translate_ip_fwknopd.conf | 2 ++ - .../test-cases/server-conf.cmin/multi_pkts.pcap | Bin 0 -> 46890 bytes - .../server-conf.cmin/override2_fwknopd.conf | 2 ++ - .../override_no_digest_tracking_fwknopd.conf | 1 + - .../test-cases/server-conf.cmin/spa_over_http.pcap | Bin 0 -> 1846 bytes - .../server-conf.cmin/spa_over_http_fwknopd.conf | 1 + - .../test-cases/server-conf.cmin/spa_replay.pcap | Bin 0 -> 910 bytes - .../server-conf.cmin/var_expansion_fwknopd.conf | 2 ++ - .../var_expansion_invalid_fwknopd.conf | 2 ++ - 73 files changed, 378 insertions(+), 9 deletions(-) - -commit 104aeca978d323db3e3a9cfb2c543547b32416cb -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 22:48:11 2015 -0400 - - [test suite] switch SPA packets test to use afl-cmin test cases - - test/afl/fuzzing-wrappers/helpers/afl-cmin/spa-pkts-cmin.sh | 7 +++++++ - test/afl/fuzzing-wrappers/helpers/fwknopd-stdin-test.sh | 9 ++++++--- - test/afl/fuzzing-wrappers/spa-pkts.sh | 2 +- - test/afl/test-cases/spa-pkts.cmin/spa1_md5.start | 1 + - test/afl/test-cases/spa-pkts.cmin/spa1_sha256.start | 1 + - test/afl/test-cases/spa-pkts.cmin/spa1_sha384.start | 1 + - test/afl/test-cases/spa-pkts.cmin/spa2_md5.start | 1 + - test/afl/test-cases/spa-pkts.cmin/spa2_sha384.start | 1 + - test/afl/test-cases/spa-pkts.cmin/spa3_md5.start | 1 + - 9 files changed, 20 insertions(+), 4 deletions(-) - -commit 89d7241a51f102619ec24ac85566730c550e0652 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 22:37:01 2015 -0400 - - [test suite] include all digest lengths for SPA input packets (afl-cmin usage will be next) - - test/afl/test-cases/spa-pkts/spa.start | 1 - - test/afl/test-cases/spa-pkts/spa1_md5.start | 1 + - test/afl/test-cases/spa-pkts/spa1_sha256.start | 1 + - test/afl/test-cases/spa-pkts/spa1_sha384.start | 1 + - test/afl/test-cases/spa-pkts/spa1_sha512.start | 1 + - test/afl/test-cases/spa-pkts/spa2.start | 1 - - test/afl/test-cases/spa-pkts/spa2_md5.start | 1 + - test/afl/test-cases/spa-pkts/spa2_sha256.start | 1 + - test/afl/test-cases/spa-pkts/spa2_sha384.start | 1 + - test/afl/test-cases/spa-pkts/spa2_sha512.start | 1 + - test/afl/test-cases/spa-pkts/spa3.start | 1 - - test/afl/test-cases/spa-pkts/spa3_md5.start | 1 + - test/afl/test-cases/spa-pkts/spa3_sha256.start | 1 + - test/afl/test-cases/spa-pkts/spa3_sha384.start | 1 + - test/afl/test-cases/spa-pkts/spa3_sha512.start | 1 + - 15 files changed, 12 insertions(+), 3 deletions(-) - -commit 3febc74c22a337795eea844d16dcb200842e2243 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 22:34:45 2015 -0400 - - [test suite] extend digest lengths for SPA input packets - - test/afl/test-cases/spa-pkts/spa.start | 2 +- - test/afl/test-cases/spa-pkts/spa2.start | 2 +- - test/afl/test-cases/spa-pkts/spa3.start | 2 +- - 3 files changed, 3 insertions(+), 3 deletions(-) - -commit 95ae8dd1fe494b9f68eb05bb2648ba58ff81f9f1 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 22:20:26 2015 -0400 - - minor ChangeLog update - - ChangeLog | 2 ++ - 1 file changed, 2 insertions(+) - -commit 40c695097ed73d566861ba69c7e812c702aeac7a -Author: Michael Rash <mbr@cipherdyne.org> -Date: Thu Mar 19 22:05:10 2015 -0400 - - added spa-pkts-2.6.5.59edf64 AFL test results file - - test/afl/results/spa-pkts-2.6.5.59edf64 | 27 +++++++++++++++++++++++++++ + extras/ramdisk/ramdisk-create-osx.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) -commit 59edf64d9cc507047d429ad02b71fc5ad3767878 +commit 814d9e10500b515a22edafa5676f6039ea966e20 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Mar 7 20:09:31 2015 -0800 +Date: Tue Jun 30 17:47:01 2015 -0700 - [server] consolidate fw creation, add FORWARD_ALL functionality + [test suite] minor comment update - server/fw_util_firewalld.c | 271 ++++++++++++++++----------------------------- - server/fw_util_firewalld.h | 1 + - server/fw_util_iptables.c | 1 - - 3 files changed, 97 insertions(+), 176 deletions(-) + test/afl/fuzzing-wrappers/client-rc.sh | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) -commit cfd1cbf2bfc023e92c92928aafd10ce074b3affa +commit 464a680f137653444ae9031274d94cf26282ffbb Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Mar 7 19:45:50 2015 -0800 +Date: Tue Jun 30 17:44:07 2015 -0700 - [server] minor macro usage update for 127.0.0.2 + [server] minor --udp-server option handling update for completeness - server/fw_util.h | 1 + - server/fw_util_firewalld.h | 6 +++--- - server/fw_util_iptables.h | 6 +++--- - 3 files changed, 7 insertions(+), 6 deletions(-) + server/fwknopd.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) -commit 745a442f1830f9b4b36cf9657f518d67395530c4 +commit ca2a73e3334bd15b2cdfd797e86a10e8cfac743c Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Mar 7 19:36:23 2015 -0800 +Date: Mon Jun 29 19:48:02 2015 -0700 - [test suite] add AFL_HARDEN=1 to AFL compilation scripts + add --with-firewalld autoconf argument as a synonym for --with-firewall-cmd - test/afl/compile/afl-compile-no-enable-arg.sh | 2 +- - test/afl/compile/afl-compile.sh | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) + ChangeLog | 3 +++ + configure.ac | 54 +++++++++++++++++++++++++++++++++++------------------- + 2 files changed, 38 insertions(+), 19 deletions(-) -commit 26aceb9db6d4872960c37cf8d4e11e6bc912660e +commit ca54ec7a9b445fa15ed798a1052c250c15ba9941 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Mar 7 19:12:39 2015 -0800 +Date: Mon Jun 29 19:06:50 2015 -0700 - [test suite] add more rigorous multi-port tests with per-rule regex search criteria - - test/tests/rijndael.pl | 27 +++++++++++++++++++++++++++ - test/tests/rijndael_hmac.pl | 16 ++++++++++++++++ - 2 files changed, 43 insertions(+) - -commit 322ae853888b17f250125acd91942b0ed1ed9eea -Author: Damien Stuart <dstuart@dstuart.org> -Date: Wed Feb 18 22:44:53 2015 -0500 - - Fixed a bug in configure.ac that did not allow specifying alternate firewall exe if firewall-cmd was found by configure. - - configure.ac | 80 +++++++++++++++++++++++++++++++----------------------------- - 1 file changed, 42 insertions(+), 38 deletions(-) - -commit bf251034e3ac16a92fa2df59ce05c9cde2c13cc8 -Author: Michael Rash <mbr@cipherdyne.org> -Date: Wed Feb 18 19:37:37 2015 -0500 - - [server] bug fix to exclude pcap.h only in --enable-udp-server mode + [test suite] integrate afl-cov with afl-fuzz wrapper scripts - This commit fixes issue #143 on github reported by Coacher. The previous - commit introduced a build time error for non UDP server mode as seen - here: + Here is an example for the client-rc.sh wrapper script to have it also + generate code coverage results for afl-fuzz (afl-cov is enabled via two + environmental variables AFL_COV and CODE_DIR). - https://paste.kde.org/pkaxwobwr + $ cd /tmp/afl-ramdisk/fwknop.git/test/afl/ + $ AFL_COV=1 CODE_DIR=/home/mbr/git/fwknop.git ./fuzzing-wrappers/client-rc.sh - server/pcap_capture.c | 6 ++++-- - server/process_packet.c | 6 ++++-- - 2 files changed, 8 insertions(+), 4 deletions(-) + test/afl/fuzzing-wrappers/client-rc.sh | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) -commit 1ce800446da6f22a802159dff7879bec52ce0ade +commit 5ba88e7b83f6ee5d822da3bb5c51fc329bd66d8c Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Feb 17 23:21:05 2015 -0800 +Date: Thu Jun 25 22:01:20 2015 -0700 - [server] Bug fix to not include pcap.h in --enable-udp-server mode + [test suite] support afl-fuzz on Mac OS X which uses afl-clang - CREDITS | 4 ++++ - ChangeLog | 5 +++++ - server/pcap_capture.c | 3 +-- - server/process_packet.c | 5 +++++ - 4 files changed, 15 insertions(+), 2 deletions(-) + Makefile.am | 1 + + test/afl/compile/afl-asan-compile.sh | 7 ++++++- + test/afl/compile/afl-compile.sh | 7 ++++++- + test/afl/compile/fcns | 11 +++++++++++ + 4 files changed, 24 insertions(+), 2 deletions(-) -commit 987455b902aef54090837ac1001c93ba094b84fe -Author: Damien Stuart <dstuart@dstuart.org> -Date: Sat Feb 14 12:40:58 2015 -0500 - - Remove commented out entries from the client and server Makefile.am. - - client/Makefile.am | 5 ----- - server/Makefile.am | 4 ---- - 2 files changed, 9 deletions(-) - -commit b152d15970316f16272877c5c98b984c440acad8 -Author: Damien Stuart <dstuart@dstuart.org> -Date: Sat Feb 14 12:29:30 2015 -0500 - - Refactored how the cunit tests are processed so "make dist" does not fail and builds with c-unit-tests enabled work on systems with firewalld (added fw_util_firewalld.c for server tests). - - client/Makefile.am | 4 ++ - client/config_init.c | 3 +- - common/Makefile.am | 10 +++- - common/cunit_common.c | 50 +++++++++++++++++++ - common/cunit_common.h | 52 ++++++++++---------- - lib/Makefile.am | 8 +++- - lib/cunit_common.c | 51 -------------------- - server/Makefile.am | 7 ++- - server/access.c | 4 +- - test/c-unit-tests/Makefile.am | 108 ++++++++++++++++++++---------------------- - 10 files changed, 156 insertions(+), 141 deletions(-) - -commit e8cfeaf77209e017c715963e07a49373e2db317a -Merge: 6b7a3bb 1c81aef -Author: Michael Rash <michael.rash@gmail.com> -Date: Sat Jan 17 09:11:29 2015 -0500 - - Merge pull request #142 from fjoncourt/c_unit_testing - - C unit testing - excellent, thank you Franck. I'll work on the relative path issue you mentioned as well. - -commit 6b7a3bbdae295c29a15a59385e637bd391858bc2 +commit 2b5c38dc2befd6d88babc03617604d95d042a9f7 Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Jan 17 08:38:32 2015 -0500 +Date: Tue Jun 23 16:56:25 2015 -0700 - [server] Add FORWARD_ALL access.conf wildcard + [test suite] default to not zeroing profile coverage counters - This is a significant commit that allows iptables firewalls to be used - as an "SPA gateway" for all ports/protocols upon providing a valid SPA - packet. Additional commits will be made to extend this capability, but - this commit adds two new access.conf keywords: FORWARD_ALL and - DISABLE_DNAT. These are used in conjunction to add ACCEPT rules for all - ports/protocols in the FORWARD chain, and also disable DNAT rules at the - same time. Then, by buildling the SNAT chain to provide translation for - an internal network (where an SPA cliet is located), but DROP all - forwarded traffic by default at the same time, SPA can be used to gain - access to the internet. So, this would allow, say, an RFC 1918 internal - network to have IP's assigned via DHCP but they wouldn't be able to - access the internet before sending a SPA packet to the gateway. This - scenario was suggested by spartan1833 to the fwknop list and tracked via - github issue 131. + The typical work flow when generating gcov coverage results is: - Additional commits will be made to fully support this feature. + - compile fwknop with coverage support + - run the test suite + - hack on fwknop + - re-run the test suite to see what coverage has been added + + This work flow is much more common than collecting coverage results + for a complete test suite run. Therefore, this commit switches the + default behavior in --enable-complete mode (which enables coverage + support) to not zero-out coverage counters. A new argument + --enable-profile-coverage-init zeros the counters in preparation + for a global coverage run. - common/common.h | 2 ++ - server/access.c | 17 +++++++++++-- - server/fw_util_iptables.c | 64 ++++++++++++++++++++++++++++++++++------------- - server/fw_util_iptables.h | 1 + - server/fwknopd_common.h | 7 +++--- - 5 files changed, 67 insertions(+), 24 deletions(-) + Makefile.am | 1 - + test/rm-coverage-files.sh | 12 ------------ + test/test-fwknop.pl | 48 ++++++++++++++++++----------------------------- + 3 files changed, 18 insertions(+), 43 deletions(-) -commit d148fb091a14d0cbbe5a5d61fc0b16d7e78364d5 -Merge: 08bc935 4f94a05 +commit bc6118e19fd4c21ec1eb4b5f1e8d5155929a1a1a Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Jan 17 08:33:22 2015 -0500 +Date: Tue Jun 16 20:59:57 2015 -0700 + + [test suite] added missing test/asan/Makefile + + test/asan/Makefile | 6 ++++++ + 1 file changed, 6 insertions(+) + +commit 5c4f7dac9be5f7f994697b2edc1df4a1b092f892 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 16 19:16:36 2015 -0700 + + [test suite] add fwknoprc2 file to AFL client rc test cases + + Makefile.am | 1 + + test/afl/test-cases/client-rc/fwknoprc2 | 52 +++++++++++++++++++++++++++++++++ + 2 files changed, 53 insertions(+) + +commit df51dacf17bf79ac50bf5ada4975a6f898fe4b27 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 16 19:06:36 2015 -0700 + + add test/asan/ files + + Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit e2520754bf2d743524c55a0d74ec75f43cea5759 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 16 18:35:05 2015 -0700 + + update CREDITS file to include Fwknop2 + + CREDITS | 2 ++ + 1 file changed, 2 insertions(+) + +commit 4d3c4721169685e6aa1b8772ca4e0b458eb22249 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 16 18:32:19 2015 -0700 + + [test suite] add Rijndael+HMAC test for F-Droid Fwknop2 client written by Jonathan Bennett + + Makefile.am | 1 + + test/conf/hmac_android_fdroid_access.conf | 4 ++++ + test/test-fwknop.pl | 1 + + test/tests/os_compatibility.pl | 29 ++++++++++++++++++++++++++++- + 4 files changed, 34 insertions(+), 1 deletion(-) + +commit e0778a2d37a1a5f067367be826a6807f4ed0ac48 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jun 14 19:58:54 2015 -0800 + + [test suite] disable fault injection 'tag' tests with the fko wrapper does not compile against libfiu + + test/test-fwknop.pl | 5 +++++ + 1 file changed, 5 insertions(+) + +commit 7da6b9e78771a18f1d4547bb9d6f3c2fe3cf4389 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jun 14 19:43:55 2015 -0800 + + [test suite] produce include/exclude stats + + test/test-fwknop.pl | 27 +++++++++++++++++++++++++++ + 1 file changed, 27 insertions(+) + +commit 7e6ec092f6eadb2c0ee670ad884a77626e304809 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jun 14 19:23:18 2015 -0800 + + [test suite] consolidate crash detection into a single function + + test/test-fwknop.pl | 42 ++++++++++++++++++++++-------------------- + 1 file changed, 22 insertions(+), 20 deletions(-) + +commit e20c09d572b192c880a74246e17889eb7aa07248 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jun 14 19:15:34 2015 -0700 + + [test suite] add ASAN verification if fwknop is compiled with ASAN support + + test/asan/use-after-free.c | 10 ++++++++ + test/test-fwknop.pl | 57 ++++++++++++++++++++++++++++++++++++++++- + test/tests/address_sanitizer.pl | 10 ++++++++ + 3 files changed, 76 insertions(+), 1 deletion(-) + +commit e8cc2845fa761269f7e40fa0c85b808c92df6d7b +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jun 14 05:59:30 2015 -0700 + + [test suite] minor formatting update + + test/tests/afl_fuzzing.pl | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit 70fd1c990f9ecbd7084d7683eb29d58c38d1a3a3 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun Jun 14 08:41:06 2015 -0400 + + include link to DefCon 14 presentation on fwknop + Tor + + README.md | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +commit 9ce5ad47c055c4930ad59e457ef2253ac3ce23de +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jun 13 06:31:11 2015 -0700 + + [test suite] disable python tests if Python.h is missing + + test/test-fwknop.pl | 9 +++++++++ + 1 file changed, 9 insertions(+) + +commit c8cdc91974f44b8807d09bbb004e40c762d34980 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Fri Jun 12 17:46:22 2015 -0700 + + [test suite] added test for Rijndael-only SPA packet from the Android Fwknop2-v1.0-RC.2 binary + + test/tests/os_compatibility.pl | 26 ++++++++++++++++++++++++++ + 1 file changed, 26 insertions(+) + +commit 404c34a0db97b3b8476365c4ecc65c2348629c1a +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Jun 11 19:03:01 2015 -0700 + + [test suite] allow for missing makeinfo binary in recompliation tests + + test/test-fwknop.pl | 16 +++++++++++++--- + 1 file changed, 13 insertions(+), 3 deletions(-) + +commit b11217dc0789a36689e4f5e52710f182a9777bfb +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Jun 11 18:28:41 2015 -0700 + + [test suite] better integration with Google's Address Sanitizer and AFL + + test/afl/compile/afl-asan-compile.sh | 16 ++++++++++++++++ + test/afl/fuzzing-wrappers/client-rc.sh | 10 ++++++++-- + test/afl/fuzzing-wrappers/fcns | 3 +++ + test/afl/fuzzing-wrappers/helpers/fwknop-rc-test.sh | 4 ++-- + test/afl/fuzzing-wrappers/server-access.sh | 6 +++--- + test/afl/fuzzing-wrappers/server-conf.sh | 3 ++- + test/afl/fuzzing-wrappers/server-digest-cache.sh | 2 +- + test/afl/fuzzing-wrappers/server-enc-pkts.sh | 2 +- + test/afl/fuzzing-wrappers/spa-pkts.sh | 3 ++- + 9 files changed, 38 insertions(+), 11 deletions(-) + +commit f96e60f479c8c9d61749cb2e1a46451d0a5968fc +Merge: 5616c7b 6742423 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu Jun 11 06:09:55 2015 -0700 Merge branch 'master' of https://github.com/mrash/fwknop -commit 4f94a0584e84708c48502961392b1472bc92d827 +commit 674242388922d33f9e549be7f4d2eab98a3e906e Author: Michael Rash <mbr@cipherdyne.org> -Date: Sat Jan 17 08:11:37 2015 -0500 +Date: Wed Jun 10 20:22:11 2015 -0400 - [test suite] minor candidate big fix for readline on closed filehandle errors seen in GPG tests + this Android client has been deprecated in favor of Jonathan Bennett's new client: https://github.com/oneru/Fwknop2/releases - test/test-fwknop.pl | 6 +++--- + android/README | 8 ++++++++ + android/README.DEPRECATED | 5 +++++ + 2 files changed, 13 insertions(+) + +commit 5616c7ba6d067f9628af1082e91eddaa0631000f +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 9 17:01:16 2015 -0700 + + [test suite] removed deprecated AFL compile script + + test/afl/README.md | 7 ------- + test/afl/fuzzing-wrappers/client-rc.sh | 4 ---- + 2 files changed, 11 deletions(-) + +commit e4106d1ee5e844b36068b5cd45ed0e0864f732a7 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 9 16:59:47 2015 -0700 + + [test suite] removed deprecated AFL compile script + + Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +commit e3bf862238a9ca6a8a13b6ecec50c0078fde9301 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 9 16:59:20 2015 -0700 + + [test suite] removed deprecated AFL compile script + + test/afl/compile/afl-compile-no-enable-arg.sh | 10 ---------- + 1 file changed, 10 deletions(-) + +commit 090bda3326bd17857a8132e0fcf465caa4448266 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue Jun 9 09:29:05 2015 -0700 + + [test suite] proper path for AFL server-conf test case config files (iptables vs. firewalld) + + Makefile.am | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +commit f99e7831d89e9cfa9ed8062b5cba7ab602925973 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jun 6 21:30:57 2015 -0400 + + update README.md to include use cases and features + + README.md | 96 ++++++++++++++++++++++++++++++++++- + doc/images/SPA_AWS_network_setup.png | Bin 0 -> 77719 bytes + doc/images/SPA_basic.png | Bin 0 -> 20691 bytes + 3 files changed, 95 insertions(+), 1 deletion(-) + +commit 0d83c967c0a17ce8bf15e3da87a40ace9b02dc06 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat Jun 6 20:45:01 2015 -0400 + + [client] minor typo fixes + + client/spa_comm.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) -commit 08bc93579675b702c6a5ac56c227850298ee7735 +commit 1fb9747b2b2cd14e83f02e88de24ea541073dfe0 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Jan 5 21:55:38 2015 -0500 +Date: Sun Jun 7 13:44:00 2015 -0400 - [server] remove redundant mk_chain() calls + [test suite] added Rijndael+HMAC test for Fwknop2 Beta1 - server/fw_util_iptables.c | 11 +---------- - 1 file changed, 1 insertion(+), 10 deletions(-) + test/tests/os_compatibility.pl | 30 +++++++++++++++++++++++++++++- + 1 file changed, 29 insertions(+), 1 deletion(-) -commit 1f9e939c950ee14653947140a0465fcb61ff7dd7 +commit cff4dcc1e7fa4575e10b83e90a85223c9fbe4beb Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Jan 5 21:37:09 2015 -0500 +Date: Thu Jun 4 23:02:21 2015 -0400 - [server] consolidate iptables rule additions into a single ipt_rule() function + [test suite] Added Rijndael+HMAC test for Jonathan Bennett's Fwknop2 Android app - server/fw_util_iptables.c | 255 ++++++++++++++-------------------------------- - 1 file changed, 79 insertions(+), 176 deletions(-) + test/tests/os_compatibility.pl | 31 +++++++++++++++++++++++++++++++ + 1 file changed, 31 insertions(+) -commit 1c81aef39d426d7426ef07a692fb243e61e254b1 -Author: Franck Joncourt <franck@debian.org> -Date: Wed Dec 31 09:51:08 2014 +0100 - - Fixed file permissions - - client/config_init.c | 0 - client/config_init.h | 0 - client/getpasswd.c | 0 - client/getpasswd.h | 0 - common/Makefile.am | 0 - common/common.h | 0 - configure.ac | 0 - lib/Makefile.am | 0 - lib/cunit_common.c | 0 - server/Makefile.am | 0 - server/access.c | 0 - server/access.h | 0 - server/fwknopd.c | 0 - server/utils.c | 0 - 14 files changed, 0 insertions(+), 0 deletions(-) - -commit 29a5a9804d68395c10a176bd9baec1ecbe1a701a -Author: Franck Joncourt <franck@debian.org> -Date: Tue Dec 30 20:49:14 2014 +0100 - - * Added libfko unit tests - - lib/fko_decode.c | 49 ++++++++++++++++- - test/c-unit-tests/Makefile.am | 7 +-- - test/c-unit-tests/README.md | 123 +++++++++++++++++++++++++++--------------- - 3 files changed, 130 insertions(+), 49 deletions(-) - -commit 1ece9d022b0e4d13b03f879b74f54a7e3fdad231 +commit ff052bf74fa5fabdb95393633c138855872b20fa Author: Michael Rash <mbr@cipherdyne.org> -Date: Tue Dec 30 10:42:31 2014 -0500 +Date: Mon Jun 1 19:57:49 2015 -0700 - [server] consolidate create_chain() and add_jump_rule() into a single function + [server] disable external command execution in AFL fuzzing mode - server/fw_util_firewalld.c | 52 ++++++++++++++++++---------------------------- - server/fw_util_iptables.c | 52 ++++++++++++++++++---------------------------- - 2 files changed, 40 insertions(+), 64 deletions(-) + server/extcmd.c | 8 ++++++++ + 1 file changed, 8 insertions(+) -commit 620d31364e6984eb25ad2279fb4fd71fc33870ef -Author: Franck Joncourt <franck@debian.org> -Date: Mon Dec 29 18:47:17 2014 +0100 - - * Removed duplicated entry in Makefile.am for libfko - * Added c unit tests for fko (draft) - * Updated c unit test README file. - - lib/Makefile.am | 2 +- - lib/fko.h | 4 + - lib/fko_decode.c | 23 +++ - test/c-unit-tests/Makefile.am | 39 ++++- - test/c-unit-tests/README.md | 341 +++++++++++++++++++++++------------------ - test/c-unit-tests/fko_utests.c | 34 ++++ - 6 files changed, 291 insertions(+), 152 deletions(-) - -commit cb13d84d489b2f9a43ec47e7ba2b72bd03789bca -Author: Franck Joncourt <franck@debian.org> -Date: Mon Dec 29 13:25:01 2014 +0100 - - Use of subdir-objects libtool option. - - configure.ac | 2 +- - test/c-unit-tests/Makefile.am | 52 ++++++++++++++++++++++++------------------- - 2 files changed, 30 insertions(+), 24 deletions(-) - -commit 750fd97bda3a5f482ff2a41f6a534d40eed47b24 -Author: Franck Joncourt <franck@debian.org> -Date: Mon Dec 29 11:45:30 2014 +0100 - - Allow to build without c unit test - - lib/cunit_common.c | 4 ++++ - 1 file changed, 4 insertions(+) - -commit fdb3da0769be166ff73b4b7c8c4db710aec7356e -Author: Franck Joncourt <franck@debian.org> -Date: Mon Dec 29 11:45:23 2014 +0100 - - Added README for c unit test - - test/c-unit-tests/README.md | 150 ++++++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 150 insertions(+) - -commit 526cae6464633696bc9241412b0bdb975bcabbd2 -Author: Franck Joncourt <franck@debian.org> -Date: Sun Dec 28 23:55:52 2014 +0100 - - Fixed upper case - - test/c-unit-tests/fwknop_utests.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -commit 5c3a7090148f824f1495594de6d789de6d60072b -Merge: b7ecb33 bd0035a -Author: Franck Joncourt <franck@debian.org> -Date: Sun Dec 28 23:24:15 2014 +0100 - - Merge branch 'c_unit_testing' of https://github.com/fjoncourt/fwknop into c_unit_testing - - Conflicts: - client/config_init.c - common/cunit_common.h - lib/cunit_common.c - server/access.c - -commit b7ecb3334ae7397b8ee73cb5e56666d326c16d63 -Merge: 260cd54 2430f3a -Author: Franck Joncourt <franck@debian.org> -Date: Sun Dec 28 15:00:24 2014 +0100 - - Merge upstream changes to our changes - -commit 2430f3ae80f90a2d9758beaab00620b42588d59f +commit 7c23cb72f17059d2247543434523608334a075c5 Author: Michael Rash <mbr@cipherdyne.org> -Date: Mon Dec 22 09:22:39 2014 -0500 +Date: Mon Jun 1 19:36:25 2015 -0700 - [test suite] added long running server-access AFL fuzzing results + [test suite] differentiate firewalld vs. iptables for fwknopd.conf file fuzzing - test/afl/results/plot-2.6.5.db8b5e4/exec_speed.png | Bin 0 -> 27214 bytes - test/afl/results/plot-2.6.5.db8b5e4/high_freq.png | Bin 0 -> 22590 bytes - test/afl/results/plot-2.6.5.db8b5e4/index.html | 10 +++++++++ - .../afl/results/plot-2.6.5.db8b5e4/index.html.orig | 10 +++++++++ - test/afl/results/plot-2.6.5.db8b5e4/low_freq.png | Bin 0 -> 10548 bytes - test/afl/results/server-access-2.6.5.db8b5e4 | 25 +++++++++++++++++++++ - 6 files changed, 45 insertions(+) + test/afl/fuzzing-wrappers/fcns | 11 +++++ + .../fuzzing-wrappers/helpers/fwknopd-parse-conf.sh | 9 ++++- + test/afl/fuzzing-wrappers/server-conf.sh | 6 ++- + .../test-cases/server-conf/firewalld/fwknopd.conf | 47 ++++++++++++++++++++++ + test/afl/test-cases/server-conf/fwknopd.conf | 47 ---------------------- + .../test-cases/server-conf/iptables/fwknopd.conf | 47 ++++++++++++++++++++++ + 6 files changed, 118 insertions(+), 49 deletions(-) -commit 260cd5481b41384f802eaa4bd1a33824d751cf8f -Author: Franck Joncourt <franck@debian.org> -Date: Sun Sep 7 20:33:39 2014 +0200 +commit 7bbc30f34cfbea25349727a36958a93611e65a01 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat May 30 19:20:23 2015 -0700 - Use of init and cleanup functions for the test suite. + [server] bug fix for --key-gen being called inappropriately, add fw compiled string to -V - client/config_init.c | 66 +++++++++++++++++++++++++++------------------------ - common/cunit_common.h | 54 ++++++++++++++++++++++------------------- - lib/cunit_common.c | 22 +++++++++-------- - server/access.c | 36 ++++++++++++++-------------- - 4 files changed, 95 insertions(+), 83 deletions(-) + server/config_init.c | 70 ++++++++++++++++++++++++++++++++-------------------- + 1 file changed, 43 insertions(+), 27 deletions(-) -commit bd0035af1e1efa2d6b82f9be27bac075c69d9f52 -Author: Franck Joncourt <franck@debian.org> -Date: Sun Sep 7 15:40:03 2014 +0200 +commit 9b189fe76289ded69ddfcb4aa69857a6cfa2638b +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat May 30 19:01:34 2015 -0700 - Fixed tab vs spaces + [client] ensure that encryption and HMAC keys are not read from stdin in AFL fuzzing mode - client/config_init.c | 58 ++++++++++++++++++------------------ - common/common.h | 2 +- - common/cunit_common.h | 44 ++++++++++++++-------------- - lib/cunit_common.c | 60 +++++++++++++++++++------------------- - server/access.c | 36 +++++++++++------------ - test/c-unit-tests/fwknop_utests.c | 16 +++++----- - test/c-unit-tests/fwknopd_utests.c | 18 ++++++------ - 7 files changed, 117 insertions(+), 117 deletions(-) + client/fwknop.c | 25 ++++++++++++++++++++++--- + 1 file changed, 22 insertions(+), 3 deletions(-) -commit 32c5afae83ef38f34eae6ba1257a9043c0518487 -Merge: 688f08c aae72a9 -Author: Franck Joncourt <franck@debian.org> -Date: Sun Sep 7 15:24:59 2014 +0200 +commit eed3dc8ad220d7430f57dbf35a89ae9cabcbf31c +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sat May 30 18:35:10 2015 -0700 - Merge remote-tracking branch 'upstream/master' into c_unit_testing + [test suite] minor comment update to mention afl-cov -commit 688f08c2a0378fb9afc9b9015a454ffdde6e969e -Author: Franck Joncourt <franck@debian.org> -Date: Sun Aug 31 20:48:44 2014 +0200 + test/afl/compile/afl-compile-code-coverage.sh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) - Both the fwknop client and server have their own test suites tied to fwknop_utests - and fwknopd_utests binaries. - - When profil coverage is enbaled, lcov filee are parsed by test-fwknop.pl and added - to the main profil coverage report in the output directory. - - Running make from the main directory build the c-unit test suites if enabled. +commit 0388baa6653ff41bb37eb8eab768d5758a7010f8 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu May 28 18:50:33 2015 -0700 - Makefile.am | 5 +++ - client/config_init.c | 63 ++++++++++++++++++++------------------ - client/getpasswd.c | 52 ------------------------------- - client/getpasswd.h | 4 --- - common/Makefile.am | 2 +- - common/common.h | 11 +------ - common/cunit_common.h | 31 +++++++++++++++++++ - configure.ac | 4 ++- - lib/Makefile.am | 3 +- - lib/cunit_common.c | 45 +++++++++++++++++++++++++++ - server/Makefile.am | 3 +- - server/access.c | 35 +++++++++++++++++++++ - server/access.h | 4 +++ - server/fwknopd.c | 22 ------------- - server/utils.c | 26 ++++++++++++++++ - test/c-unit-tests/Makefile.am | 30 ++++++++++++++---- - test/c-unit-tests/fko_utests.c | 37 ---------------------- - test/c-unit-tests/fko_utests.h | 4 --- - test/c-unit-tests/fwknop_utests.c | 35 +++++++++++++++++++++ - test/c-unit-tests/fwknopd_utests.c | 35 +++++++++++++++++++++ - test/test-fwknop.pl | 2 +- - 21 files changed, 283 insertions(+), 170 deletions(-) + replaced raw lcov results with a link -commit 934d764159293ef93a3a5c382e94655922a0c658 -Author: Franck Joncourt <franck@debian.org> -Date: Sun Aug 24 21:14:45 2014 +0200 + .../2.6.7/136d017/cumulative-afl-cov-web/amber.png | Bin 141 -> 0 bytes + .../client/config_init.c.func-sort-c.html | 185 -- + .../client/config_init.c.func.html | 185 -- + .../client/config_init.c.gcov.html | 2757 -------------------- + .../client/fwknop.c.func-sort-c.html | 153 -- + .../client/fwknop.c.func.html | 153 -- + .../client/fwknop.c.gcov.html | 1440 ---------- + .../client/getpasswd.c.func-sort-c.html | 93 - + .../client/getpasswd.c.func.html | 93 - + .../client/getpasswd.c.gcov.html | 382 --- + .../client/http_resolve_host.c.func-sort-c.html | 97 - + .../client/http_resolve_host.c.func.html | 97 - + .../client/http_resolve_host.c.gcov.html | 649 ----- + .../client/index-sort-b.html | 179 -- + .../client/index-sort-f.html | 179 -- + .../client/index-sort-l.html | 179 -- + .../cumulative-afl-cov-web/client/index.html | 179 -- + .../client/log_msg.c.func-sort-c.html | 93 - + .../client/log_msg.c.func.html | 93 - + .../client/log_msg.c.gcov.html | 201 -- + .../client/spa_comm.c.func-sort-c.html | 117 - + .../client/spa_comm.c.func.html | 117 - + .../client/spa_comm.c.gcov.html | 869 ------ + .../client/utils.c.func-sort-c.html | 113 - + .../client/utils.c.func.html | 113 - + .../client/utils.c.gcov.html | 456 ---- + .../136d017/cumulative-afl-cov-web/emerald.png | Bin 141 -> 0 bytes + .../2.6.7/136d017/cumulative-afl-cov-web/gcov.css | 519 ---- + .../2.6.7/136d017/cumulative-afl-cov-web/glass.png | Bin 167 -> 0 bytes + .../cumulative-afl-cov-web/index-sort-b.html | 131 - + .../cumulative-afl-cov-web/index-sort-f.html | 131 - + .../cumulative-afl-cov-web/index-sort-l.html | 131 - + .../136d017/cumulative-afl-cov-web/index.html | 131 - + .../lib/base64.c.func-sort-c.html | 93 - + .../cumulative-afl-cov-web/lib/base64.c.func.html | 93 - + .../cumulative-afl-cov-web/lib/base64.c.gcov.html | 224 -- + .../lib/cipher_funcs.c.func-sort-c.html | 109 - + .../lib/cipher_funcs.c.func.html | 109 - + .../lib/cipher_funcs.c.gcov.html | 502 ---- + .../lib/digest.c.func-sort-c.html | 121 - + .../cumulative-afl-cov-web/lib/digest.c.func.html | 121 - + .../cumulative-afl-cov-web/lib/digest.c.gcov.html | 242 -- + .../lib/fko_client_timeout.c.func-sort-c.html | 89 - + .../lib/fko_client_timeout.c.func.html | 89 - + .../lib/fko_client_timeout.c.gcov.html | 215 -- + .../lib/fko_decode.c.func-sort-c.html | 137 - + .../lib/fko_decode.c.func.html | 137 - + .../lib/fko_decode.c.gcov.html | 743 ------ + .../lib/fko_digest.c.func-sort-c.html | 121 - + .../lib/fko_digest.c.func.html | 121 - + .../lib/fko_digest.c.gcov.html | 383 --- + .../lib/fko_encode.c.func-sort-c.html | 93 - + .../lib/fko_encode.c.func.html | 93 - + .../lib/fko_encode.c.gcov.html | 411 --- + .../lib/fko_encryption.c.func-sort-c.html | 197 -- + .../lib/fko_encryption.c.func.html | 197 -- + .../lib/fko_encryption.c.gcov.html | 1280 --------- + .../lib/fko_error.c.func-sort-c.html | 89 - + .../lib/fko_error.c.func.html | 89 - + .../lib/fko_error.c.gcov.html | 606 ----- + .../lib/fko_funcs.c.func-sort-c.html | 121 - + .../lib/fko_funcs.c.func.html | 121 - + .../lib/fko_funcs.c.gcov.html | 720 ----- + .../lib/fko_hmac.c.func-sort-c.html | 101 - + .../lib/fko_hmac.c.func.html | 101 - + .../lib/fko_hmac.c.gcov.html | 416 --- + .../lib/fko_message.c.func-sort-c.html | 121 - + .../lib/fko_message.c.func.html | 121 - + .../lib/fko_message.c.gcov.html | 449 ---- + .../lib/fko_nat_access.c.func-sort-c.html | 89 - + .../lib/fko_nat_access.c.func.html | 89 - + .../lib/fko_nat_access.c.gcov.html | 214 -- + .../lib/fko_rand_value.c.func-sort-c.html | 89 - + .../lib/fko_rand_value.c.func.html | 89 - + .../lib/fko_rand_value.c.gcov.html | 266 -- + .../lib/fko_server_auth.c.func-sort-c.html | 89 - + .../lib/fko_server_auth.c.func.html | 89 - + .../lib/fko_server_auth.c.gcov.html | 200 -- + .../lib/fko_timestamp.c.func-sort-c.html | 89 - + .../lib/fko_timestamp.c.func.html | 89 - + .../lib/fko_timestamp.c.gcov.html | 179 -- + .../lib/fko_user.c.func-sort-c.html | 93 - + .../lib/fko_user.c.func.html | 93 - + .../lib/fko_user.c.gcov.html | 295 --- + .../lib/fko_util.c.func-sort-c.html | 153 -- + .../lib/fko_util.c.func.html | 153 -- + .../lib/fko_util.c.gcov.html | 872 ------- + .../lib/gpgme_funcs.c.func-sort-c.html | 105 - + .../lib/gpgme_funcs.c.func.html | 105 - + .../lib/gpgme_funcs.c.gcov.html | 627 ----- + .../lib/hmac.c.func-sort-c.html | 165 -- + .../cumulative-afl-cov-web/lib/hmac.c.func.html | 165 -- + .../cumulative-afl-cov-web/lib/hmac.c.gcov.html | 517 ---- + .../cumulative-afl-cov-web/lib/index-sort-b.html | 407 --- + .../cumulative-afl-cov-web/lib/index-sort-f.html | 407 --- + .../cumulative-afl-cov-web/lib/index-sort-l.html | 407 --- + .../136d017/cumulative-afl-cov-web/lib/index.html | 407 --- + .../lib/md5.c.func-sort-c.html | 97 - + .../cumulative-afl-cov-web/lib/md5.c.func.html | 97 - + .../cumulative-afl-cov-web/lib/md5.c.gcov.html | 363 --- + .../lib/rijndael.c.func-sort-c.html | 125 - + .../lib/rijndael.c.func.html | 125 - + .../lib/rijndael.c.gcov.html | 702 ----- + .../lib/sha1.c.func-sort-c.html | 101 - + .../cumulative-afl-cov-web/lib/sha1.c.func.html | 101 - + .../cumulative-afl-cov-web/lib/sha1.c.gcov.html | 376 --- + .../lib/sha2.c.func-sort-c.html | 129 - + .../cumulative-afl-cov-web/lib/sha2.c.func.html | 129 - + .../cumulative-afl-cov-web/lib/sha2.c.gcov.html | 1069 -------- + .../lib/strlcat.c.func-sort-c.html | 85 - + .../cumulative-afl-cov-web/lib/strlcat.c.func.html | 85 - + .../cumulative-afl-cov-web/lib/strlcat.c.gcov.html | 159 -- + .../lib/strlcpy.c.func-sort-c.html | 85 - + .../cumulative-afl-cov-web/lib/strlcpy.c.func.html | 85 - + .../cumulative-afl-cov-web/lib/strlcpy.c.gcov.html | 155 -- + .../2.6.7/136d017/cumulative-afl-cov-web/ruby.png | Bin 141 -> 0 bytes + .../server/access.c.func-sort-c.html | 201 -- + .../server/access.c.func.html | 201 -- + .../server/access.c.gcov.html | 2153 --------------- + .../server/config_init.c.func-sort-c.html | 125 - + .../server/config_init.c.func.html | 125 - + .../server/config_init.c.gcov.html | 1384 ---------- + .../server/extcmd.c.func-sort-c.html | 105 - + .../server/extcmd.c.func.html | 105 - + .../server/extcmd.c.gcov.html | 779 ------ + .../server/fw_util_firewalld.c.func-sort-c.html | 197 -- + .../server/fw_util_firewalld.c.func.html | 197 -- + .../server/fw_util_firewalld.c.gcov.html | 1702 ------------ + .../server/fwknopd.c.func-sort-c.html | 133 - + .../server/fwknopd.c.func.html | 133 - + .../server/fwknopd.c.gcov.html | 1102 -------- + .../server/fwknopd_errors.c.func-sort-c.html | 93 - + .../server/fwknopd_errors.c.func.html | 93 - + .../server/fwknopd_errors.c.gcov.html | 217 -- + .../server/incoming_spa.c.func-sort-c.html | 101 - + .../server/incoming_spa.c.func.html | 101 - + .../server/incoming_spa.c.gcov.html | 1063 -------- + .../server/index-sort-b.html | 275 -- + .../server/index-sort-f.html | 275 -- + .../server/index-sort-l.html | 275 -- + .../cumulative-afl-cov-web/server/index.html | 275 -- + .../server/log_msg.c.func-sort-c.html | 97 - + .../server/log_msg.c.func.html | 97 - + .../server/log_msg.c.gcov.html | 303 --- + .../server/pcap_capture.c.func-sort-c.html | 85 - + .../server/pcap_capture.c.func.html | 85 - + .../server/pcap_capture.c.gcov.html | 427 --- + .../server/process_packet.c.func-sort-c.html | 85 - + .../server/process_packet.c.func.html | 85 - + .../server/process_packet.c.gcov.html | 323 --- + .../server/replay_cache.c.func-sort-c.html | 117 - + .../server/replay_cache.c.func.html | 117 - + .../server/replay_cache.c.gcov.html | 857 ------ + .../server/sig_handler.c.func-sort-c.html | 93 - + .../server/sig_handler.c.func.html | 93 - + .../server/sig_handler.c.gcov.html | 262 -- + .../server/tcp_server.c.func-sort-c.html | 85 - + .../server/tcp_server.c.func.html | 85 - + .../server/tcp_server.c.gcov.html | 342 --- + .../server/udp_server.c.func-sort-c.html | 85 - + .../server/udp_server.c.func.html | 85 - + .../server/udp_server.c.gcov.html | 330 --- + .../server/utils.c.func-sort-c.html | 109 - + .../server/utils.c.func.html | 109 - + .../server/utils.c.gcov.html | 366 --- + .../2.6.7/136d017/cumulative-afl-cov-web/snow.png | Bin 141 -> 0 bytes + .../136d017/cumulative-afl-cov-web/updown.png | Bin 117 -> 0 bytes + test/afl/results/2.6.7/136d017/web-results | 1 + + 168 files changed, 1 insertion(+), 45932 deletions(-) - Minor update. +commit 73f22bab16516d58f61fd6fb1c631edc4c6ab587 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu May 28 16:03:54 2015 -0400 - test/c-unit-tests/Makefile.am | 16 ++++++++-------- - test/c-unit-tests/fko_utests.c | 9 ++++++--- - test/c-unit-tests/fko_utests.h | 4 +--- - 3 files changed, 15 insertions(+), 14 deletions(-) + added cumulative afl-cov web coverage report for 136d017 -commit 306dd0f6852a383d0c4ba2ef17f73c411b75c6b9 -Author: Franck Joncourt <franck@debian.org> -Date: Sun Aug 24 21:05:44 2014 +0200 + .../2.6.7/136d017/cumulative-afl-cov-web/amber.png | Bin 0 -> 141 bytes + .../client/config_init.c.func-sort-c.html | 185 ++ + .../client/config_init.c.func.html | 185 ++ + .../client/config_init.c.gcov.html | 2757 ++++++++++++++++++++ + .../client/fwknop.c.func-sort-c.html | 153 ++ + .../client/fwknop.c.func.html | 153 ++ + .../client/fwknop.c.gcov.html | 1440 ++++++++++ + .../client/getpasswd.c.func-sort-c.html | 93 + + .../client/getpasswd.c.func.html | 93 + + .../client/getpasswd.c.gcov.html | 382 +++ + .../client/http_resolve_host.c.func-sort-c.html | 97 + + .../client/http_resolve_host.c.func.html | 97 + + .../client/http_resolve_host.c.gcov.html | 649 +++++ + .../client/index-sort-b.html | 179 ++ + .../client/index-sort-f.html | 179 ++ + .../client/index-sort-l.html | 179 ++ + .../cumulative-afl-cov-web/client/index.html | 179 ++ + .../client/log_msg.c.func-sort-c.html | 93 + + .../client/log_msg.c.func.html | 93 + + .../client/log_msg.c.gcov.html | 201 ++ + .../client/spa_comm.c.func-sort-c.html | 117 + + .../client/spa_comm.c.func.html | 117 + + .../client/spa_comm.c.gcov.html | 869 ++++++ + .../client/utils.c.func-sort-c.html | 113 + + .../client/utils.c.func.html | 113 + + .../client/utils.c.gcov.html | 456 ++++ + .../136d017/cumulative-afl-cov-web/emerald.png | Bin 0 -> 141 bytes + .../2.6.7/136d017/cumulative-afl-cov-web/gcov.css | 519 ++++ + .../2.6.7/136d017/cumulative-afl-cov-web/glass.png | Bin 0 -> 167 bytes + .../cumulative-afl-cov-web/index-sort-b.html | 131 + + .../cumulative-afl-cov-web/index-sort-f.html | 131 + + .../cumulative-afl-cov-web/index-sort-l.html | 131 + + .../136d017/cumulative-afl-cov-web/index.html | 131 + + .../lib/base64.c.func-sort-c.html | 93 + + .../cumulative-afl-cov-web/lib/base64.c.func.html | 93 + + .../cumulative-afl-cov-web/lib/base64.c.gcov.html | 224 ++ + .../lib/cipher_funcs.c.func-sort-c.html | 109 + + .../lib/cipher_funcs.c.func.html | 109 + + .../lib/cipher_funcs.c.gcov.html | 502 ++++ + .../lib/digest.c.func-sort-c.html | 121 + + .../cumulative-afl-cov-web/lib/digest.c.func.html | 121 + + .../cumulative-afl-cov-web/lib/digest.c.gcov.html | 242 ++ + .../lib/fko_client_timeout.c.func-sort-c.html | 89 + + .../lib/fko_client_timeout.c.func.html | 89 + + .../lib/fko_client_timeout.c.gcov.html | 215 ++ + .../lib/fko_decode.c.func-sort-c.html | 137 + + .../lib/fko_decode.c.func.html | 137 + + .../lib/fko_decode.c.gcov.html | 743 ++++++ + .../lib/fko_digest.c.func-sort-c.html | 121 + + .../lib/fko_digest.c.func.html | 121 + + .../lib/fko_digest.c.gcov.html | 383 +++ + .../lib/fko_encode.c.func-sort-c.html | 93 + + .../lib/fko_encode.c.func.html | 93 + + .../lib/fko_encode.c.gcov.html | 411 +++ + .../lib/fko_encryption.c.func-sort-c.html | 197 ++ + .../lib/fko_encryption.c.func.html | 197 ++ + .../lib/fko_encryption.c.gcov.html | 1280 +++++++++ + .../lib/fko_error.c.func-sort-c.html | 89 + + .../lib/fko_error.c.func.html | 89 + + .../lib/fko_error.c.gcov.html | 606 +++++ + .../lib/fko_funcs.c.func-sort-c.html | 121 + + .../lib/fko_funcs.c.func.html | 121 + + .../lib/fko_funcs.c.gcov.html | 720 +++++ + .../lib/fko_hmac.c.func-sort-c.html | 101 + + .../lib/fko_hmac.c.func.html | 101 + + .../lib/fko_hmac.c.gcov.html | 416 +++ + .../lib/fko_message.c.func-sort-c.html | 121 + + .../lib/fko_message.c.func.html | 121 + + .../lib/fko_message.c.gcov.html | 449 ++++ + .../lib/fko_nat_access.c.func-sort-c.html | 89 + + .../lib/fko_nat_access.c.func.html | 89 + + .../lib/fko_nat_access.c.gcov.html | 214 ++ + .../lib/fko_rand_value.c.func-sort-c.html | 89 + + .../lib/fko_rand_value.c.func.html | 89 + + .../lib/fko_rand_value.c.gcov.html | 266 ++ + .../lib/fko_server_auth.c.func-sort-c.html | 89 + + .../lib/fko_server_auth.c.func.html | 89 + + .../lib/fko_server_auth.c.gcov.html | 200 ++ + .../lib/fko_timestamp.c.func-sort-c.html | 89 + + .../lib/fko_timestamp.c.func.html | 89 + + .../lib/fko_timestamp.c.gcov.html | 179 ++ + .../lib/fko_user.c.func-sort-c.html | 93 + + .../lib/fko_user.c.func.html | 93 + + .../lib/fko_user.c.gcov.html | 295 +++ + .../lib/fko_util.c.func-sort-c.html | 153 ++ + .../lib/fko_util.c.func.html | 153 ++ + .../lib/fko_util.c.gcov.html | 872 +++++++ + .../lib/gpgme_funcs.c.func-sort-c.html | 105 + + .../lib/gpgme_funcs.c.func.html | 105 + + .../lib/gpgme_funcs.c.gcov.html | 627 +++++ + .../lib/hmac.c.func-sort-c.html | 165 ++ + .../cumulative-afl-cov-web/lib/hmac.c.func.html | 165 ++ + .../cumulative-afl-cov-web/lib/hmac.c.gcov.html | 517 ++++ + .../cumulative-afl-cov-web/lib/index-sort-b.html | 407 +++ + .../cumulative-afl-cov-web/lib/index-sort-f.html | 407 +++ + .../cumulative-afl-cov-web/lib/index-sort-l.html | 407 +++ + .../136d017/cumulative-afl-cov-web/lib/index.html | 407 +++ + .../lib/md5.c.func-sort-c.html | 97 + + .../cumulative-afl-cov-web/lib/md5.c.func.html | 97 + + .../cumulative-afl-cov-web/lib/md5.c.gcov.html | 363 +++ + .../lib/rijndael.c.func-sort-c.html | 125 + + .../lib/rijndael.c.func.html | 125 + + .../lib/rijndael.c.gcov.html | 702 +++++ + .../lib/sha1.c.func-sort-c.html | 101 + + .../cumulative-afl-cov-web/lib/sha1.c.func.html | 101 + + .../cumulative-afl-cov-web/lib/sha1.c.gcov.html | 376 +++ + .../lib/sha2.c.func-sort-c.html | 129 + + .../cumulative-afl-cov-web/lib/sha2.c.func.html | 129 + + .../cumulative-afl-cov-web/lib/sha2.c.gcov.html | 1069 ++++++++ + .../lib/strlcat.c.func-sort-c.html | 85 + + .../cumulative-afl-cov-web/lib/strlcat.c.func.html | 85 + + .../cumulative-afl-cov-web/lib/strlcat.c.gcov.html | 159 ++ + .../lib/strlcpy.c.func-sort-c.html | 85 + + .../cumulative-afl-cov-web/lib/strlcpy.c.func.html | 85 + + .../cumulative-afl-cov-web/lib/strlcpy.c.gcov.html | 155 ++ + .../2.6.7/136d017/cumulative-afl-cov-web/ruby.png | Bin 0 -> 141 bytes + .../server/access.c.func-sort-c.html | 201 ++ + .../server/access.c.func.html | 201 ++ + .../server/access.c.gcov.html | 2153 +++++++++++++++ + .../server/config_init.c.func-sort-c.html | 125 + + .../server/config_init.c.func.html | 125 + + .../server/config_init.c.gcov.html | 1384 ++++++++++ + .../server/extcmd.c.func-sort-c.html | 105 + + .../server/extcmd.c.func.html | 105 + + .../server/extcmd.c.gcov.html | 779 ++++++ + .../server/fw_util_firewalld.c.func-sort-c.html | 197 ++ + .../server/fw_util_firewalld.c.func.html | 197 ++ + .../server/fw_util_firewalld.c.gcov.html | 1702 ++++++++++++ + .../server/fwknopd.c.func-sort-c.html | 133 + + .../server/fwknopd.c.func.html | 133 + + .../server/fwknopd.c.gcov.html | 1102 ++++++++ + .../server/fwknopd_errors.c.func-sort-c.html | 93 + + .../server/fwknopd_errors.c.func.html | 93 + + .../server/fwknopd_errors.c.gcov.html | 217 ++ + .../server/incoming_spa.c.func-sort-c.html | 101 + + .../server/incoming_spa.c.func.html | 101 + + .../server/incoming_spa.c.gcov.html | 1063 ++++++++ + .../server/index-sort-b.html | 275 ++ + .../server/index-sort-f.html | 275 ++ + .../server/index-sort-l.html | 275 ++ + .../cumulative-afl-cov-web/server/index.html | 275 ++ + .../server/log_msg.c.func-sort-c.html | 97 + + .../server/log_msg.c.func.html | 97 + + .../server/log_msg.c.gcov.html | 303 +++ + .../server/pcap_capture.c.func-sort-c.html | 85 + + .../server/pcap_capture.c.func.html | 85 + + .../server/pcap_capture.c.gcov.html | 427 +++ + .../server/process_packet.c.func-sort-c.html | 85 + + .../server/process_packet.c.func.html | 85 + + .../server/process_packet.c.gcov.html | 323 +++ + .../server/replay_cache.c.func-sort-c.html | 117 + + .../server/replay_cache.c.func.html | 117 + + .../server/replay_cache.c.gcov.html | 857 ++++++ + .../server/sig_handler.c.func-sort-c.html | 93 + + .../server/sig_handler.c.func.html | 93 + + .../server/sig_handler.c.gcov.html | 262 ++ + .../server/tcp_server.c.func-sort-c.html | 85 + + .../server/tcp_server.c.func.html | 85 + + .../server/tcp_server.c.gcov.html | 342 +++ + .../server/udp_server.c.func-sort-c.html | 85 + + .../server/udp_server.c.func.html | 85 + + .../server/udp_server.c.gcov.html | 330 +++ + .../server/utils.c.func-sort-c.html | 109 + + .../server/utils.c.func.html | 109 + + .../server/utils.c.gcov.html | 366 +++ + .../2.6.7/136d017/cumulative-afl-cov-web/snow.png | Bin 0 -> 141 bytes + .../136d017/cumulative-afl-cov-web/updown.png | Bin 0 -> 117 bytes + 167 files changed, 45932 insertions(+) - First layout to add c unit testing support to fwknop. +commit 98f852b5af1084561a9a01337724d63168130c94 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun May 24 11:00:52 2015 -0700 - client/config_init.c | 57 ++++++++++++++++++++++++++++++++++++++++++ - client/config_init.h | 4 +++ - client/getpasswd.c | 52 ++++++++++++++++++++++++++++++++++++++ - client/getpasswd.h | 4 +++ - common/common.h | 15 +++++++++++ - configure.ac | 16 ++++++++++++ - test/c-unit-tests/Makefile.am | 16 ++++++++++++ - test/c-unit-tests/fko_utests.c | 34 +++++++++++++++++++++++++ - test/c-unit-tests/fko_utests.h | 6 +++++ - 9 files changed, 204 insertions(+) + added server-conf fuzzing results + + test/afl/results/2.6.7/136d017/server-conf | 26 +++++++++++++++++++++ + .../2.6.7/136d017/server-conf-plot/exec_speed.png | Bin 0 -> 18121 bytes + .../2.6.7/136d017/server-conf-plot/high_freq.png | Bin 0 -> 20550 bytes + .../2.6.7/136d017/server-conf-plot/index.html | 10 ++++++++ + .../2.6.7/136d017/server-conf-plot/low_freq.png | Bin 0 -> 9785 bytes + 5 files changed, 36 insertions(+) + +commit 833dc7e4f6e8f19eb6eebc086cb204a217c36be0 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun May 24 10:16:20 2015 -0700 + + added client-rc results + + test/afl/results/2.6.7/136d017/client-rc | 26 +++++++++++++++++++++ + .../2.6.7/136d017/client-rc-plot/exec_speed.png | Bin 0 -> 36845 bytes + .../2.6.7/136d017/client-rc-plot/high_freq.png | Bin 0 -> 21086 bytes + .../2.6.7/136d017/client-rc-plot/index.html | 10 ++++++++ + .../2.6.7/136d017/client-rc-plot/low_freq.png | Bin 0 -> 11143 bytes + 5 files changed, 36 insertions(+) + +commit 85e07f99c47adf3153722a271204f54ce7ed2ff7 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Fri May 22 15:31:18 2015 -0400 + + man page updates + + client/fwknop.8.in | 13 ++++++++++--- + server/fwknopd.8.in | 33 ++++++++++++++++++++++++++++++--- + 2 files changed, 40 insertions(+), 6 deletions(-) + +commit 85f42012ca5697f8bc9f7d1620de6e51a5b601d6 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu May 21 09:35:31 2015 -0700 + + add --key-gen and associated options to the fwknopd man page + + doc/fwknop.man.asciidoc | 10 +++++----- + doc/fwknopd.man.asciidoc | 28 +++++++++++++++++++++++++--- + 2 files changed, 30 insertions(+), 8 deletions(-) + +commit 2e377985dac06f54202ca5cdaa6ee511a439ae64 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed May 20 19:01:24 2015 -0700 + + add ramdisk-create.sh and console-rq.sh + + Makefile.am | 2 ++ + 1 file changed, 2 insertions(+) + +commit 29defca4d5d4c701a6faa350a16ebab8361e0a84 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed May 20 18:52:30 2015 -0700 + + (Jonathan Bennett) added console-qr.sh script to create QR codes from fwknopd access.conf keys + + CREDITS | 2 ++ + ChangeLog | 2 ++ + extras/console-qr/console-qr.sh | 24 ++++++++++++++++++++++++ + 3 files changed, 28 insertions(+) + +commit ce76a063e1afdd8181e4d7ea12908402c3cc2645 +Merge: 81cdb05 1f45462 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed May 20 18:25:33 2015 -0700 + + Merge branch 'master' of https://github.com/mrash/fwknop + +commit 1f454622064da8db625f4e1833c83a63c403a80f +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu May 21 22:18:14 2015 -0400 + + [extras] run ramdisk creation script from top level sources directory + + extras/ramdisk/ramdisk-create.sh | 24 +++++++++++++++++++++--- + 1 file changed, 21 insertions(+), 3 deletions(-) + +commit 81cdb0506f614641d3285689b5c927934ec6ad16 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed May 20 16:57:43 2015 -0700 + + added spa-pkts fuzzing cycle + + test/afl/results/2.6.7/136d017/spa-pkts | 26 +++++++++++++++++++++ + .../2.6.7/136d017/spa-pkts-plot/exec_speed.png | Bin 0 -> 13015 bytes + .../2.6.7/136d017/spa-pkts-plot/high_freq.png | Bin 0 -> 23547 bytes + .../results/2.6.7/136d017/spa-pkts-plot/index.html | 10 ++++++++ + .../2.6.7/136d017/spa-pkts-plot/low_freq.png | Bin 0 -> 10333 bytes + 5 files changed, 36 insertions(+) + +commit de3bca2f9ebf6977f9f1e083637d6ec1bf89cf43 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed May 20 09:47:51 2015 -0700 + + handle key generation before config parsing + + server/config_init.c | 127 +++++++++++++++++++++++++-------------------------- + 1 file changed, 62 insertions(+), 65 deletions(-) + +commit ceb1713976902677a7c0e817f7a0ecfc1a485eed +Author: Michael Rash <mbr@cipherdyne.org> +Date: Wed May 20 08:55:17 2015 -0700 + + add --key-gen option to fwknopd (suggested by Jonathan Bennett) + + CREDITS | 1 + + ChangeLog | 5 ++ + client/config_init.c | 2 +- + client/fwknop_common.h | 4 +- + common/common.h | 3 ++ + doc/fwknop.man.asciidoc | 5 ++ + server/cmd_opts.h | 11 +++- + server/config_init.c | 111 ++++++++++++++++++++++++++++++++++++++++- + server/fwknopd_common.h | 13 ++++- + test/tests/basic_operations.pl | 8 +++ + test/tests/rijndael.pl | 27 ---------- + test/tests/rijndael_hmac.pl | 53 ++++++++++++++++++++ + 12 files changed, 209 insertions(+), 34 deletions(-) + +commit 3e2e73ff99a1886d233af275a9407e219d43cd8e +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue May 19 19:07:52 2015 -0700 + + moved 136d017 AFL results to 2.6.7 directory + + test/afl/results/2.6.6/136d017/server-access | 26 --------------------- + .../136d017/server-access-plot/exec_speed.png | Bin 16861 -> 0 bytes + .../2.6.6/136d017/server-access-plot/high_freq.png | Bin 21647 -> 0 bytes + .../2.6.6/136d017/server-access-plot/index.html | 10 -------- + .../2.6.6/136d017/server-access-plot/low_freq.png | Bin 11180 -> 0 bytes + test/afl/results/2.6.6/136d017/server-digest-cache | 26 --------------------- + .../server-digest-cache-plot/plot/exec_speed.png | Bin 16520 -> 0 bytes + .../server-digest-cache-plot/plot/high_freq.png | Bin 21945 -> 0 bytes + .../server-digest-cache-plot/plot/index.html | 10 -------- + .../server-digest-cache-plot/plot/low_freq.png | Bin 10238 -> 0 bytes + test/afl/results/2.6.7/136d017/server-access | 26 +++++++++++++++++++++ + .../136d017/server-access-plot/exec_speed.png | Bin 0 -> 16861 bytes + .../2.6.7/136d017/server-access-plot/high_freq.png | Bin 0 -> 21647 bytes + .../2.6.7/136d017/server-access-plot/index.html | 10 ++++++++ + .../2.6.7/136d017/server-access-plot/low_freq.png | Bin 0 -> 11180 bytes + test/afl/results/2.6.7/136d017/server-digest-cache | 26 +++++++++++++++++++++ + .../server-digest-cache-plot/plot/exec_speed.png | Bin 0 -> 16520 bytes + .../server-digest-cache-plot/plot/high_freq.png | Bin 0 -> 21945 bytes + .../server-digest-cache-plot/plot/index.html | 10 ++++++++ + .../server-digest-cache-plot/plot/low_freq.png | Bin 0 -> 10238 bytes + 20 files changed, 72 insertions(+), 72 deletions(-) + +commit f659fe849f78032bf47503b406fe1284f311ab8c +Author: Michael Rash <mbr@cipherdyne.org> +Date: Tue May 19 19:06:16 2015 -0700 + + added server digest and access AFL runs + + test/afl/results/2.6.6/136d017/server-access | 26 +++++++++++++++++++++ + .../136d017/server-access-plot/exec_speed.png | Bin 0 -> 16861 bytes + .../2.6.6/136d017/server-access-plot/high_freq.png | Bin 0 -> 21647 bytes + .../2.6.6/136d017/server-access-plot/index.html | 10 ++++++++ + .../2.6.6/136d017/server-access-plot/low_freq.png | Bin 0 -> 11180 bytes + test/afl/results/2.6.6/136d017/server-digest-cache | 26 +++++++++++++++++++++ + .../server-digest-cache-plot/plot/exec_speed.png | Bin 0 -> 16520 bytes + .../server-digest-cache-plot/plot/high_freq.png | Bin 0 -> 21945 bytes + .../server-digest-cache-plot/plot/index.html | 10 ++++++++ + .../server-digest-cache-plot/plot/low_freq.png | Bin 0 -> 10238 bytes + 10 files changed, 72 insertions(+) + +commit 136d017afb5c7021251db2be741d30cc1e13ed91 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu May 14 17:51:25 2015 -0700 + + [client] ensure no dns, http, or other network comms in AFL fuzzing mode + + client/config_init.c | 6 ------ + client/http_resolve_host.c | 30 ++++++++++++++++++++++++++++++ + client/spa_comm.c | 19 +++++++++++++++++++ + 3 files changed, 49 insertions(+), 6 deletions(-) + +commit 7817d28a2d486433e4706b7b20aefdc183c1b23a +Author: Michael Rash <mbr@cipherdyne.org> +Date: Thu May 14 17:49:55 2015 -0700 + + [test suite] minor check for AFL compile configure success + + test/afl/compile/afl-compile-code-coverage.sh | 9 +++++++++ + test/afl/compile/afl-compile.sh | 8 ++++++++ + 2 files changed, 17 insertions(+) + +commit 28dc60f9bd41555fc24c7f08bc153ae6e04d8e5c +Author: Michael Rash <mbr@cipherdyne.org> +Date: Sun May 10 21:20:10 2015 -0700 + + added server-conf AFL fuzzing cycle results + + test/afl/results/2.6.6/93383c8/server-conf | 26 +++++++++++++++++++++ + .../93383c8/server-conf-plot/plot/exec_speed.png | Bin 0 -> 19144 bytes + .../93383c8/server-conf-plot/plot/high_freq.png | Bin 0 -> 21399 bytes + .../2.6.6/93383c8/server-conf-plot/plot/index.html | 10 ++++++++ + .../93383c8/server-conf-plot/plot/low_freq.png | Bin 0 -> 11242 bytes + 5 files changed, 36 insertions(+) + +commit 378b54748c1d8e1d6acdff7dc7653fbfeaadc130 +Author: Damien Stuart <dstuart@dstuart.org> +Date: Mon May 4 16:33:41 2015 -0400 + + Updated error code descriptions and fixed function description formats in the libfko docs. + + doc/libfko.texi | 299 +++++++++++++++++++++++++++++++++++++++++++++----------- + 1 file changed, 240 insertions(+), 59 deletions(-) + +commit 87a2fbda0c8aa06dfa54205bc5302195185ff582 +Author: Damien Stuart <dstuart@dstuart.org> +Date: Sat Apr 25 09:35:24 2015 -0400 + + Bump version in config.h for the Windows build. + + win32/config.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +commit bcfc313e36d1236b73401fa32c1dce978ffeab15 +Author: Michael Rash <mbr@cipherdyne.org> +Date: Fri Apr 24 17:55:43 2015 -0700 + + [test suite] minor bug fix for rm previous coverage script path + + test/test-fwknop.pl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) From 995f5417664e96cdaf913f9e877f8463fb50aa87 Mon Sep 17 00:00:00 2001 From: Michael Rash <mbr@cipherdyne.org> Date: Thu, 27 Aug 2015 20:56:42 -0400 Subject: [PATCH 219/219] add .DS_Store files to .gitignore --- .gitignore | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 44778bc3..45f5711d 100644 --- a/.gitignore +++ b/.gitignore @@ -39,7 +39,7 @@ install_manifest.txt *.o *.lo -#project generated files +# project generated files autom4te.cache/ *.m4 client/.deps/ @@ -70,6 +70,9 @@ server/fwknopd.8 server/Makefile.in stamp-h1 +# For anyone running on a Mac +.DS_Store + android/project/libs android/project/obj android/project/jni/fwknop/fko.h